Giải thích cấu trúc nội bộ của iMessage
- Cung cấp cái nhìn tổng quan khái quát về cấu trúc nội bộ của iMessage
- Giải thích ngắn gọn các chi tiết kỹ thuật dựa trên những gì được phát hiện thông qua dự án
pypush
pypush là một dự án mã nguồn mở tái triển khai iMessage; có thể xem phần hiện thực chi tiết trong kho lưu trữ tương ứng
Lớp nền tảng (Foundational Layer)
- Apple Push Notification Service (APNs) là thành phần cốt lõi của iMessage, được dùng để nhận thông báo và cập nhật theo thời gian thực ngay cả khi ứng dụng đã đóng
- APNs là một dịch vụ hai chiều, được dùng cho cả việc gửi và nhận thông báo đẩy
- Khi thiết bị kết nối với APNs, nó sẽ nhận được một "push token" dùng để định tuyến thông báo đến thiết bị cụ thể
- Khi gửi thông báo, cần chỉ định chủ đề của tin nhắn; trong trường hợp của iMessage là
com.apple.madrid
- Ngoài việc truyền tin nhắn, APNs còn được dùng để gửi truy vấn qua IDS và nhận phản hồi thông qua APNs
- Để kết nối với APNs, cần có chứng chỉ máy khách do máy chủ kích hoạt Albert cấp
Máy chủ khóa (Keyserver)
- IDS (được cho là IDentity Services) được dùng làm máy chủ khóa cho các dịch vụ như iMessage và FaceTime
- iMessage được mã hóa E2E, vì vậy cần trao đổi khóa công khai giữa các bên tham gia một cách an toàn
- Bước đầu tiên để đăng ký với IDS là nhận token xác thực, yêu cầu tên người dùng và mật khẩu Apple ID
- Sau khi nhận token xác thực, cần lập tức đổi nó lấy một chứng chỉ có thời hạn dài hơn, rồi dùng chứng chỉ này để đăng ký với IDS
- Trong quá trình đăng ký IDS, khóa mã hóa công khai, khóa ký số và nhiều loại "dữ liệu máy khách" sẽ được tải lên máy chủ khóa
- Khi gửi yêu cầu đăng ký IDS, cần có một blob nhị phân gọi là "dữ liệu xác minh"; đây là cơ chế xác minh nhằm ngăn thiết bị không phải của Apple sử dụng iMessage
- Khi đăng ký với IDS, bạn sẽ nhận được một "cặp khóa định danh", nhờ đó có thể thực hiện tra cứu khóa công khai
- Khi tra cứu, bạn cung cấp tài khoản mong muốn và nhận về danh sách các "định danh" tương ứng với từng thiết bị, chứa những chi tiết quan trọng
Mã hóa tin nhắn
- Sau khi hoàn tất thiết lập cơ bản cho iMessage, có thể tra cứu khóa công khai của người dùng khác và công bố khóa của chính mình
- Để nhận tin nhắn, cần lọc kết nối APNs bằng
com.apple.madrid và gửi gói tin trạng thái hoạt động
- Tùy theo các tính năng đã quảng bá trong đăng ký IDS và phiên bản iOS của thiết bị gửi, tin nhắn có thể được nhận dưới định dạng mã hóa
pair hoặc định dạng mới hơn pair-ec
- Khi gửi tin nhắn, có thể gửi riêng từng tin nhắn cho từng người nhận, hoặc gộp tất cả người nhận và payload đã mã hóa vào một gói lớn để APNs phân phối
- Tin nhắn được chuyển đến mọi người tham gia trong cuộc trò chuyện, bao gồm cả các thiết bị khác thuộc chính tài khoản của bạn
- Một điểm thường bị bỏ qua khi truyền tin nhắn là khóa AES không hoàn toàn ngẫu nhiên mà được gắn thẻ bằng HMAC
Tài liệu và nguồn tham khảo
- Có rất nhiều người và các công trình trước đây đã giúp ích cho việc hiểu iMessage
- Các tài liệu được tham khảo gồm IMFreedom Knowledge Base,
pushproxy, apns-dissector, QuarkSlab, Garman et al., NowSecure, Elcomsoft, open-imcore, The Apple Wiki, và nghiên cứu của Mihir Bellare cùng Igors Stepanovs
1 bình luận
Ý kiến trên Hacker News
Có dự đoán rằng Apple sẽ dùng xác minh thiết bị (attestation) để khóa iMessage. Điều này sẽ đòi hỏi các bản cập nhật phần mềm cho thiết bị đời cũ.
Có người thắc mắc liệu hành động này của Apple có thể vi phạm các đạo luật DSA và DMA của Liên minh châu Âu hay không.
Nếu chia sẻ trải nghiệm đã bước vào lĩnh vực công nghệ như thế nào, điều đó sẽ hữu ích cho những sinh viên muốn học các kiến thức kỹ thuật.
Có người thắc mắc liệu ai đó có dự định làm plugin libpurple hay không.
Có người thể hiện sự nhiệt huyết với chủ đề này và khuyên nên tham gia Hack Club.
Có người đã mong chờ lời giải thích vì sao iMessage cho phép tin nhắn và tệp đính kèm vô hình, nhưng lại thấy khó hiểu khi tính năng này được dùng để lây nhiễm thiết bị.
pypush, dự án mã nguồn mở đã thúc đẩy bước tiến hôm nay của tin tức về reverse engineering iMessage, tuân theo Server Side Public License của MongoDB và thuộc sở hữu của Beeper. Thư viện này rất tốt, nhưng giấy phép bản quyền mang tính ràng buộc mạnh có thể ảnh hưởng đến phạm vi sử dụng.
Có một câu hỏi nghiêm túc liệu từ 'opertunistic' có thực sự được dùng hay không, hay đó là một lỗi chính tả đã bị cố định qua nhiều thế hệ như 'referer'.
Có lời động viên rằng thật đáng kinh ngạc khi một học sinh trung học có thể làm được việc như thế này.