GN⁺: iMessage 설명
(jjtech.dev)iMessage의 내부 구조 설명
- iMessage의 내부 구조에 대한 개괄적인 개요 제공
-
pypush
프로젝트를 통해 발견한 내용을 바탕으로 기술적 세부사항은 간략화하여 설명 -
pypush
는 iMessage를 재구현하는 오픈 소스 프로젝트로, 자세한 구현은 해당 저장소에서 확인 가능
기본 계층 (Foundational Layer)
- Apple Push Notification Service(APNs)는 iMessage의 핵심 구성 요소로, 앱이 닫혀 있을 때도 실시간 알림과 업데이트를 받는 데 사용됨
- APNs는 양방향 서비스로, 푸시 알림을 보내고 받는 데 모두 사용됨
- 장치가 APNs에 연결되면 특정 장치로 알림을 라우팅하는 데 사용되는 "푸시 토큰"을 받음
- 알림을 보낼 때는 메시지의 주제 를 명시해야 하며, iMessage의 경우
com.apple.madrid
임 - APNs는 메시지 전송 외에도 IDS를 통해 쿼리를 보내고 APNs를 통해 응답을 받는 데 사용됨
- APNs에 연결하려면 Albert 활성화 서버에서 발급한 클라이언트 인증서가 필요함
키 서버 (Keyserver)
- IDS(IDentity Services로 추정)는 iMessage와 FaceTime 등의 서비스를 위한 키 서버로 사용됨
- iMessage는 E2E 암호화되므로 참가자 간에 공개 키를 안전하게 교환해야 함
- IDS에 등록하는 첫 단계는 인증 토큰을 받는 것으로, Apple ID 사용자 이름과 비밀번호가 필요함
- 인증 토큰을 받은 후에는 더 오래 지속되는 인증서로 즉시 교환해야 하며, 이 인증서를 통해 IDS에 등록할 수 있음
- IDS 등록 과정에서는 공개 암호화 및 서명 키와 다양한 "클라이언트 데이터"를 키 서버에 업로드함
- IDS 등록 요청 시 "검증 데이터"라는 이진 블롭이 필요하며, 이는 Apple 기기가 아닌 장치가 iMessage를 사용하지 못하도록 하는 검증 메커니즘임
- IDS에 등록하면 "아이덴티티 키 페어"를 받게 되며, 이를 통해 공개 키 조회를 수행할 수 있음
- 조회 시 원하는 계정을 제공하고, 각 장치에 해당하는 "아이덴티티" 목록을 받게 되며, 중요한 세부 정보를 포함함
메시지 암호화
- iMessage의 기본 설정이 완료되어 다른 사용자의 공개 키를 조회하고 자신의 키를 게시할 수 있음
- 메시지를 받으려면 APNs 연결을
com.apple.madrid
로 필터링하고 활성 상태 패킷을 보냄 - IDS 등록에서 광고한 기능과 발신 장치의 iOS 버전에 따라, 메시지를
pair
암호화 형식 또는 새로운pair-ec
형식으로 받을 수 있음 - 메시지를 보낼 때는 각 수신자에게 개별적으로 메시지를 보내거나, APNs가 나눠줄 수 있는 하나의 큰 번들로 모든 수신자와 암호화된 페이로드를 묶을 수 있음
- 메시지는 대화에 참여하는 모든 참가자에게 전달되며, 자신 계정의 다른 장치를 포함함
- 메시지 전송 시 종종 간과되는 사항은 AES 키가 완전히 무작위가 아니라 HMAC으로 태그되어 있다는 점임
자료 및 출처
- iMessage에 대한 이해를 돕는 많은 사람들과 이전 작업들이 있음
- IMFreedom Knowledge Base,
pushproxy
,apns-dissector
, QuarkSlab, Garman et al., NowSecure, Elcomsoft,open-imcore
, The Apple Wiki, Mihir Bellare와 Igors Stepanovs의 연구 등이 참고됨
Hacker News 의견
-
애플이 iMessage를 잠그기 위해 기기 검증(증명)을 사용할 것이라는 예측이 있음. 이는 구형 기기에 대한 소프트웨어 업데이트가 필요할 것임.
iMessage 사용을 위해 IDS 등록 요청 시 '검증 데이터'라는 이진 블롭이 필요함. 이는 애플 기기가 아닌 것들이 iMessage를 사용하지 못하도록 하는 애플의 검증 메커니즘임.
-
애플의 이러한 행위가 유럽연합의 DSA 및 DMA 법안에 위배될 수 있는지 궁금함.
-
기술 분야에 어떻게 진입했는지에 대한 경험을 공유하면, 기술적인 것을 배우고자 하는 학생들에게 도움이 될 것임.
-
libpurple 플러그인을 누군가 만들 계획이 있는지 궁금함.
-
이 주제에 대한 열정을 보여주며, Hack Club에 가입할 것을 추천함.
-
iMessage가 보이지 않는 메시지와 첨부 파일을 허용하는 이유에 대한 설명을 기대했으나, 이 기능이 기기 감염에 사용되는 것을 보고 의문을 가짐.
-
iMessage 역공학 뉴스에 대한 오늘의 발전을 이끈 오픈소스 프로젝트인 pypush는 MongoDB의 Server Side Public License를 따르고 Beeper가 소유함. 이 라이브러리는 훌륭하지만, 강력한 저작권 라이선스가 사용될 수 있는 범위에 영향을 미칠 수 있음.
-
'opertunistic'이라는 단어가 실제로 사용되는 것인지, 아니면 'referer'와 같은 오타가 세대를 거쳐 고착화된 것인지에 대한 진지한 질문이 있음.
-
고등학생이 이런 일을 해내는 것이 놀랍다는 격려의 말이 있음.