Explicação da estrutura interna do iMessage
- Fornece uma visão geral da estrutura interna do iMessage
- Explica de forma simplificada os detalhes técnicos com base no que foi descoberto por meio do projeto
pypush
pypush é um projeto open source que reimplementa o iMessage, e a implementação detalhada pode ser consultada nesse repositório
Camada fundamental (Foundational Layer)
- O Apple Push Notification Service (APNs) é um componente central do iMessage, usado para receber notificações e atualizações em tempo real mesmo quando o app está fechado
- O APNs é um serviço bidirecional, usado tanto para enviar quanto para receber notificações push
- Quando um dispositivo se conecta ao APNs, ele recebe um "token push", usado para rotear notificações para aquele dispositivo específico
- Ao enviar uma notificação, é preciso especificar o tópico da mensagem; no caso do iMessage, é
com.apple.madrid
- Além da transmissão de mensagens, o APNs também é usado para enviar consultas via IDS e receber respostas pelo APNs
- Para se conectar ao APNs, é necessário um certificado de cliente emitido pelo servidor de ativação Albert
Servidor de chaves (Keyserver)
- O IDS (presumivelmente IDentity Services) é usado como servidor de chaves para serviços como iMessage e FaceTime
- O iMessage usa criptografia E2E, então é necessário trocar chaves públicas entre os participantes de forma segura
- O primeiro passo para se registrar no IDS é obter um token de autenticação, o que exige nome de usuário e senha do Apple ID
- Depois de obter o token de autenticação, ele deve ser imediatamente trocado por um certificado de duração maior, que permite registrar-se no IDS
- No processo de registro no IDS, as chaves públicas de criptografia e assinatura, além de vários "dados do cliente", são enviadas ao servidor de chaves
- Ao fazer a solicitação de registro no IDS, é necessário um blob binário chamado "dados de validação", que funciona como um mecanismo de verificação para impedir que dispositivos que não sejam da Apple usem o iMessage
- Ao se registrar no IDS, você recebe um "par de chaves de identidade", que permite realizar consultas de chaves públicas
- Ao consultar, você fornece a conta desejada e recebe uma lista de "identidades" correspondente a cada dispositivo, contendo detalhes importantes
Criptografia de mensagens
- A configuração básica do iMessage é concluída, permitindo consultar as chaves públicas de outros usuários e publicar suas próprias chaves
- Para receber mensagens, é preciso filtrar a conexão com o APNs por
com.apple.madrid e enviar um pacote de keepalive
- Dependendo dos recursos anunciados no registro do IDS e da versão do iOS do dispositivo remetente, a mensagem pode ser recebida no formato de criptografia
pair ou no formato mais novo pair-ec
- Ao enviar uma mensagem, é possível enviá-la individualmente para cada destinatário ou agrupar todos os destinatários e payloads criptografados em um único grande pacote que o APNs pode distribuir
- As mensagens são entregues a todos os participantes da conversa, incluindo outros dispositivos da própria conta
- Um detalhe que costuma passar despercebido no envio de mensagens é que a chave AES não é totalmente aleatória, mas marcada com HMAC
Materiais e fontes
- Há muitas pessoas e trabalhos anteriores que ajudam a compreender o iMessage
- Entre as referências estão IMFreedom Knowledge Base,
pushproxy, apns-dissector, QuarkSlab, Garman et al., NowSecure, Elcomsoft, open-imcore, The Apple Wiki e pesquisas de Mihir Bellare e Igors Stepanovs
1 comentários
Comentários do Hacker News
Há previsões de que a Apple usará verificação (atestado) de dispositivo para bloquear o iMessage. Isso exigirá atualizações de software para aparelhos antigos.
Há curiosidade sobre se essa atitude da Apple pode violar as leis DSA e DMA da União Europeia.
Compartilhar experiências sobre como entrar na área de tecnologia seria útil para estudantes que querem aprender coisas técnicas.
Há curiosidade sobre se alguém pretende criar um plugin para o libpurple.
Demonstra entusiasmo por esse tema e recomenda entrar no Hack Club.
Esperava uma explicação sobre por que o iMessage permite mensagens e anexos invisíveis, mas ficou em dúvida ao ver esse recurso sendo usado para infectar dispositivos.
O pypush, projeto open source que impulsionou os avanços de hoje nas notícias sobre engenharia reversa do iMessage, segue a Server Side Public License do MongoDB e pertence à Beeper. A biblioteca é excelente, mas uma licença de copyright forte pode afetar o escopo em que ela pode ser usada.
Há uma pergunta séria sobre se a palavra 'opertunistic' é realmente usada ou se é um erro de digitação, como 'referer', que acabou se fixando ao longo das gerações.
Há palavras de incentivo dizendo que é impressionante um estudante do ensino médio conseguir realizar esse tipo de feito.