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'와 같은 오타가 세대를 거쳐 고착화된 것인지에 대한 진지한 질문이 있음.
-
고등학생이 이런 일을 해내는 것이 놀랍다는 격려의 말이 있음.