Alla luce dell'interesse riscontrato nei confronti del precedente articolo nel quale spiegavo la procedura per modificare il CallerID di una telefonata (procedura usata da Alessandro Marzini nell'ormai famosa intervista a SkyTg24), ritorno sull'argomento spiegando come sia tecnicamente possibile modificare il mittente di un SMS.


Prima di tutto, un po' di storia...:-)



gsm_network.pngNel 1990 l'European Telecommunication Standards Institute pubblico' le specifiche dell'allora nuovo sistema GSM. In queste specifiche venne introdotto un sotto-protocollo, inizialmente poco conosciuto in quanto poco pubblicizzato.
Nessuno degli addetti ai lavori, nei primi anni '90, avrebbe mai immaginato che un servizio per l'invio di brevi messaggi di testo (Short Message Service, appunto SMS) avrebbe avuto tanto successo in futuro.
Ideato inizialmente come servizio per la diffusione di broadcast delle informazioni, aveva infatti anche la possibilità di inviare brevi messaggi tra i terminali: nessuno ci credeva, in quanto sembrava troppo complicato (e snervante!) scrivere un messaggio utilizzando esclusivamente i tasti di un cellulare (e il T9 non era ancora nemmeno all'orizzonte!).

Cos'è quindi un SMS? Si tratta di un semplice messaggio di testo di massimo 160 caratteri, in formato 7 bit.
Vengono scambiati tra cellulare e SMSC (Short Message Service Center) e fra SMSC; vengono spediti utilizzando il canale di segnalazione, permettendone quindi la ricezione anche quando i canali voce/dati sono già impegnati.

Vengono ricevuti dal terminale corredati da una serie di dati 'accessori': oltre (ovviamente) al testo del messaggio, il SMSC invia al cellulare tra le altre cose anche il numero del mittente e il numero del gateway utilizzato.
Nel protocollo tuttavia non è inserito alcun sistema di autenticazione, per cui non è possibile avere la certezza che il numero del mittente sia davvero quello ricevuto: il mittente infatti viene inviato dal terminale stesso all'SMSC, e c'e' effettivamente modo di modificarlo.

Attingo quindi a piene mani da un'articolo pubblicato da Jack McKrak sul numero 8 del 30/04/2000 della storica e-zine Butchered From Inside, nel quale si tratta proprio di SMS Spoofing e delle tecniche per l' implementazione dello stesso.

Iniziamo con una premessa
Spesso gli operatori
di telefonia mobile offrono il servizio di invio sms tramite appositi
SMS-Gateway raggiungibili via modem. Sono la stessa cosa dei vari servizi
presenti su internet, solo che in questo caso non devi compilare una form web,
ma ti colleghi via telefono e ottieni il servizio attraverso un protocollo di
comunicazione. [di protocolli] se ne usano principalmente due: il TAP e l'UCP.

E l'UCP e' quello vulnerabile a tecniche di spoofing. Tuttavia i gateway disponibili che utilizzano l'UCP sono sempre meno. :-P

Nel protocollo UCP
si
invia una trama formattata in questo modo:

<STX> HDR DATA CRC <ETX>

dove <STX> e <ETX> sono i caratteri di start-stop rispettivamente 02h e 03h.

L'header (HDR) contiene alcuni sottocampi separati dal carattere '/'

TRN/LNG/OR/OPN

TRN [2 NUMERIC CHAR] e' il numero della transizione (casuale) e varia
fra 0 e 99
LNG [5 NUMERIC CHAR] la lunghezza della trama ovvero quanti caratteri ci sono
fra <ETX> e <STX>
OR [1 CHAR] puo' essere il carattere 'O' che indica la richiesta di
servizio o il carattere 'R' che indica risposta a una
richiesta
OT [2 NUMERIC CHAR] e' il codice dell'operazione richiesta ed e' il parametro
piu' interessante.

La lista dei servizi e' elencata (come del resto tutti gli altri parametri
tecnici) nel doc di definizione del protocollo UCP che e' compreso nel
documento "ETS 133-3" prodotto dall'ETSI, ovvero l'ente che in europa si
occupa di gran parte degli standard in materia di telecomunicazioni.

I servizi piu' interessanti alla fine pero' sono due: lo 01 e lo 02.

01 Invio di un singolo SMS
02 Invio di un SMS multiplo

Esempio di header 01/00020/O/01

Il campo DATA varia da servizio a servizio. Per lo 01 e' composto da questi
sottocampi:

AdC/OAdC/OAC/MT/AMsg

AdC [STRING OF NUM CHAR] E' il numero del destinatario del messaggio
visto che di solito i gateway sono fuori dall'italia
il numero e' meglio scriverlo ad esempio come:
0039347000000 dove 0039 e' sempre presente
OAdC [STRING OF NUM CHAR] E qui casca l'asino! Questo e' il numero sorgente
del messaggio! Qui potete metterci qualsiasi serie
di caratteri fra 0 e 9. Anche tipo 666 o 123456 o
0000000.
Se pero' notate i messaggi autentici indicano il
numero del mittente come +39ecc. Purtroppo il '+'
non si riesce a mettere e i vostri messaggi al
massimo possono arrivare da un 0039ecc.
OAC [STRING OF CHAR] Codice di autentificazione del mittente. Non so a
che cazzo serva. Va lasciato in bianco.
MT [1 NUM CHAR] Tipo di messaggio. Qui va messo sempre 3 che indica
un messaggio alfanumerico.
AMsg [STRING OF CHAR] Il messaggio vero e proprio.

Per l'AMsg va fatta una piccola digressione. Il testo non e' scritto in
chiaro, ma va codificato in stringhe IA5: si tratta di scrivere i caratteri con la loro codifica ascii
invece che in chiaro. Questo perche' gli ingegneri che hanno
redatto il protocollo volevano inserire un controllo di errore in piu' visto
che per inviare un carattere cosi' bisogna mandarne due.

Cosa forse inutile, visto che l'ultimo campo CRC e' un controllo di errore.
Questo paramentro sono due caratteri che costituiscono un numero in
esadecimale. Il numero si ottiene prendendo le ultime due cifre significative
(esadecimali) o della somma di tutti i caratteri che compongono header e data.

Fatta questa premessa, utilizzando un software che appoggiandosi a uno di questi gateway possa inviare messaggi, e modificandolo opportunamente in modo da inviare un OAdC modificato, possiamo inviare SMS con un mittente a nostra scelta.

Il software preso in esame e' SMSClient, un client per l'invio di sms sviluppato per linux e rilasciato sotto licenza Gpl, quindi con il sorgente disponibile e modificabile.

Una volta scaricato il sorgente si SMSClient 2.0.8, sara' necessario sostituire il file ucp.c presente nella directory /src/driver con questa versione. Un bel make e make install e salvo imprevisti il programma e' pronto per essere utilizzato.

Piccolo appunto sulla configurazione:
C'e' anche una sottodir 'services', dentro questa
ci sono i file che corrispondono ai gateway sms sparsi per il mondo.
Ovviamente ce ne sono solo alcuni e per giunta quelli piu' conosciuti.
Questo implica che sono quelli piu' usati e che solitamente lasciano meno
possibilita' di smanettare e di divertirsi. Sta a voi recuperare altri numeri
di qualche gateway piu' disponibile.
Spesso per fare andare il prog cambiate il '+' nel numero del gateway
impostato in questi file con '00' da chiamata internazionale (okkio a non
stare collegati troppo, nell 99% dei casi chiamate qualche paese estero).

E ora le direttive sull'utilizzo:
Ora siamo pronti per mandare un messaggio, manca solo da editare il file
'codice' Questo file e' usato dalla mia modifica di ucp.c per poter mandare
comandi qualunque al gateway, senza passare dalle ridotte opzioni di
sms_client.

Create il file 'codice'.

In questo file va messa una parte del campo HEADER e del campo DATA dell'sms
che volete inviare. Dell'header solo il campo OT, del data tutto tranne AMasg.

Ovvero, rifacendosi al messaggio 'Satana ti vede', dentro il file 'codice' va
messa questa riga di testo:

01/0039347123456/666//3

Salva il file. Ora spostalo nella dir dove e' presente l'eseguibile sms_client
e batti

./sms_client d2:0 'Satana ti vede'

In questo caso Il nostro pc telefonera' al gateway di d2 (file definito nella
dir /etc/sms/services) e cerchera' di mandare il messaggio secondo quello che
e' scritto nel file 'codice'. Il programma vi fara' vedere cosa combina passo
per passo e se tutto e' andato a buon fine qualche vostro amico potrebbe
riconsiderare "L'Esorcista".

Per mandare un sms multiplo il nostro file codice dovra' contenere ad esempio
la riga

02/3/0039347123456/0039347543210/0039347234765/666//3

e partiranno 3 sms con un'unica chiamata.

Un sms bombing sara' invece cosi'

02/20/0039347123456/0039347123456/0039347123456/0039347123456/0039347123456/
... eccetera

per i dettagli vi rimanto all'articolo completo di Jack McKrak che, vi faccio notare, risale al lontano anno 2000! (giusto per ribadire il concetto di 'Scoperta dell'acqua calda') :-D