iMessage: scoperti i segreti del suo funzionamento

Un ricercatore indipendente, un giovane delle scuole superiori, ha condiviso tutti i segreti di iMessage spiegando com'è possibile trasferire i messaggi da Android a iOS sotto forma di "bolle blu".
iMessage: scoperti i segreti del suo funzionamento

Ieri vi abbiamo parlato di Beeper Mini, un’applicazione che porta iMessage sui dispositivi Android permettendo lo scambio di messaggi con gli utenti iOS così come se provenissero, ad esempio, da un Apple iPhone. Ad aver capito i segreti dell’app di messaggistica della Mela è uno studente delle scuole superiori che è riuscito a inviare messaggi verso iOS, da terminali Android, facendo in modo che iMessage li inserisse in una “bolla blu”, senza colpo ferire.

Come funziona Apple iMessage dietro le quinte

Si scopre adesso che il giovane capace di realizzare ciò che fino a qualche tempo fa sembrava impossibile, ha pubblicato in un repository GitHub il frutto del suo lavoro, precedentemente condiviso anche con gli sviluppatori di Beeper. Il progetto pypush è una dimostrazione (PoC, proof-of-concept) messa a punto a valle del reverse engineering di iMessage. Ne è di fatto una “re-implementazione”.

Utilizzando il codice alla base dell’applicazione, chiunque può registrare sui server Apple un nuovo dispositivo, configurare le chiavi crittografiche, inviare/ricevere iMessage. E ciò indipendentemente dalla piattaforma: non è richiesto l’utilizzo di un sistema Mac o di qualunque altro dispositivo Apple. Il software pypush consente di inviare e ricevere messaggi tramite iMessage utilizzando l’ID Apple registrato in precedenza.

APN, Apple Push Notification Service

Per l’invio e la ricezione di messaggi iMessage, Apple ha sviluppato e utilizza il servizio APN (Apple Push Notification Service): consente di instradare i messaggi attraverso i server della Mela nonché inviare notifiche push ai dispositivi Apple quando ricevono un nuovo messaggio. I messaggi sono conservati sui server Apple e possono essere recapitati ai dispositivi offline non appena si connettono alla rete.

Dopo la connessione al servizio APN, il dispositivo riceve un “push token“: funge da chiave per instradare le notifiche dirette nello specifico a quello stesso device. Un aspetto interessante è il concetto di “topic“, utilizzato per filtrare i messaggi.

Il servizio di identità (IDS) di iMessage è un keyserver, coinvolto nello scambio sicuro delle chiavi pubbliche dei partecipanti, essenziali per garantire la crittografia end-to-end (E2E). La registrazione sull’IDS prevede l’ottenimento di un token di autenticazione tramite le credenziali Apple ID. Una volta ottenuto un token autorizzativo, il certificato di autenticazione a lunga durata successivamente scambiato semplifica le operazioni.

Dopo la registrazione, ogni utente Apple riceve un “identity keypair” che consente di effettuare ricerche sulle chiavi pubbliche di altri utenti. Queste ricerche consentono di ottenere informazioni cruciali su altri dispositivi, compresi push token e session token. Questi ultimi sono necessari per inviare messaggi e scadono dopo un certo periodo, garantendo la sicurezza del processo di invio.

Il funzionamento di pypush, applicazione open source che reimplementa Apple iMessage

pypush fa uso di Unicorn, emulatore CPU, e di un loader MachO personalizzato durante la fase di registrazione iniziale. L’obiettivo è quello di chiamare alcune funzioni oscurate da parte della Mela.

Lo sviluppatore sottolinea che queste “dipendenze” sono in ogni caso limitate alla sola inizializzazione: di fatto è quindi possibile registrare un dispositivo quindi copiare il file config.json, prodotto a seguito dell’operazione, su un altro device che non supporta l’emulatore Unicorn. Il repository contiene anche un file data.plist con informazioni tratte da un vero Mac, utile nel caso si verifichino problemi di rate-limiting o di consegna dei messaggi.

Clonando il repository GitHub, installando le dipendenze ed eseguendo lo script dimostrativo in Python, è possibile rendersi conto del funzionamento di iMessage sui dispositivi non-Apple:

git clone https://github.com/JJTech0130/pypush
pip3 install -r requirements.txt
python3 ./demo.py

Per approfondire, suggeriamo la consultazione di questo post, pubblicato dall’autore di pypush, oltre che prezioso consulente di Beeper.

Credit immagine in apertura: iStock.com/picturejohn

Ti consigliamo anche

Link copiato negli appunti