3P by neo 6달전 | favorite | 댓글 1개

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'와 같은 오타가 세대를 거쳐 고착화된 것인지에 대한 진지한 질문이 있음.

  • 고등학생이 이런 일을 해내는 것이 놀랍다는 격려의 말이 있음.