Explicación de la estructura interna de iMessage
- Presenta un panorama general de la estructura interna de iMessage
- Explica de forma simplificada los detalles técnicos con base en lo descubierto a través del proyecto
pypush
pypush es un proyecto de código abierto que reimplementa iMessage, y la implementación detallada puede consultarse en ese repositorio
Capa fundamental (Foundational Layer)
- Apple Push Notification Service (APNs) es un componente central de iMessage y se usa para recibir notificaciones y actualizaciones en tiempo real incluso cuando la app está cerrada
- APNs es un servicio bidireccional, usado tanto para enviar como para recibir notificaciones push
- Cuando un dispositivo se conecta a APNs, recibe un "push token" que se usa para enrutar notificaciones hacia ese dispositivo específico
- Al enviar una notificación, se debe especificar el tema del mensaje; en el caso de iMessage es
com.apple.madrid
- Además de la entrega de mensajes, APNs también se usa para enviar consultas mediante IDS y recibir respuestas a través de APNs
- Para conectarse a APNs se requiere un certificado de cliente emitido por el servidor de activación Albert
Servidor de claves (Keyserver)
- IDS (presumiblemente IDentity Services) se usa como servidor de claves para servicios como iMessage y FaceTime
- iMessage utiliza cifrado E2E, por lo que las claves públicas deben intercambiarse de forma segura entre los participantes
- El primer paso para registrarse en IDS es obtener un token de autenticación, para lo cual se necesita el nombre de usuario y la contraseña del Apple ID
- Después de obtener el token de autenticación, debe intercambiarse de inmediato por un certificado de mayor duración, con el cual ya es posible registrarse en IDS
- Durante el proceso de registro en IDS se suben al servidor de claves las claves públicas de cifrado y firma, junto con varios "datos del cliente"
- La solicitud de registro en IDS requiere un blob binario llamado "datos de validación", que actúa como un mecanismo para impedir que dispositivos que no sean de Apple usen iMessage
- Al registrarse en IDS se recibe un "par de claves de identidad", con el cual se pueden realizar consultas de claves públicas
- Al hacer una consulta, se proporciona la cuenta deseada y se recibe una lista de "identidades" correspondientes a cada dispositivo, que incluye detalles importantes
Cifrado de mensajes
- La configuración básica de iMessage queda completa y ya se pueden consultar las claves públicas de otros usuarios y publicar las propias
- Para recibir mensajes, la conexión APNs debe filtrarse con
com.apple.madrid y enviar paquetes de mantenimiento de actividad
- Según las capacidades anunciadas en el registro de IDS y la versión de iOS del dispositivo emisor, los mensajes pueden recibirse en el formato de cifrado
pair o en el formato más nuevo pair-ec
- Al enviar mensajes, se puede mandar un mensaje individual a cada destinatario o agrupar a todos los destinatarios y las cargas cifradas en un solo paquete grande que APNs puede distribuir
- Los mensajes se entregan a todos los participantes de la conversación, incluyendo otros dispositivos de la propia cuenta
- Un detalle que a menudo se pasa por alto al enviar mensajes es que la clave AES no es completamente aleatoria, sino que está etiquetada con HMAC
Materiales y fuentes
- Existen muchas personas y trabajos previos que ayudan a comprender iMessage
- Se hace referencia a IMFreedom Knowledge Base,
pushproxy, apns-dissector, QuarkSlab, Garman et al., NowSecure, Elcomsoft, open-imcore, The Apple Wiki y trabajos de Mihir Bellare e Igors Stepanovs
1 comentarios
Comentarios de Hacker News
Se especula que Apple usará verificación del dispositivo (attestation) para bloquear iMessage. Esto requeriría actualizaciones de software para dispositivos antiguos.
Hay curiosidad sobre si este comportamiento de Apple podría violar las leyes DSA y DMA de la Unión Europea.
Compartir experiencias sobre cómo entraron al sector tecnológico sería útil para estudiantes que quieren aprender cosas técnicas.
Hay curiosidad sobre si alguien planea crear un plugin de libpurple.
Se recomienda unirse a Hack Club, mostrando entusiasmo por este tema.
Se esperaba una explicación de por qué iMessage permite mensajes y archivos adjuntos invisibles, pero ver que esta función se usa para infectar dispositivos genera dudas.
pypush, el proyecto open source que impulsó los avances de hoy en las noticias sobre ingeniería inversa de iMessage, sigue la Server Side Public License de MongoDB y es propiedad de Beeper. La librería es excelente, pero una licencia de copyright fuerte podría afectar el alcance en que puede usarse.
Hay una pregunta seria sobre si la palabra "opertunistic" realmente se usa, o si es un error tipográfico como "referer" que se fue fijando a través de generaciones.
Hay palabras de aliento diciendo que es impresionante que un estudiante de secundaria logre algo así.