Il CRAM (Centro Ricerche Anti-Malware) della TG Soft ha di recente scoperto e analizzato una nuova minaccia che, tra gli altri, colpisce gli utenti del sistema operativo Android. Si tratta del TrojanSMS.Agent.A che, una volta installato, si nasconde all'utente al fine di rubare dati sensibili (come ad esempio il numero di telefono, l'IMEI, ...) e prendere il controllo degli SMS.
Nome: application.apk |
 |
Package: com.android.system |
MD5: E4941DF174EE0700E004904C7C8C132F |
Dimensione: 20.480 Byte |
Quando si prova ad installare questa app malevola, che si da il nome di "Android", essa richiede i seguenti permessi (dichiarati all'interno del file
AndroidManifest.xml):
- android.permission.INTERNET
- android.permission.WRITE_SMS
- android.permission.READ_SMS
- android.permission.SEND_SMS
- android.permission.RECEIVE_SMS
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.WAKE_LOCK
- android.permission.READ_PHONE_STATE
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.READ_CONTACTS
- android.permission.RECEIVE_BOOT_COMPLETED
- android.permission.CHANGE_COMPONENT_ENABLED_STATE
In particolare, tra i vari permessi riguardanti gli SMS, segnaliamo
SEND_SMS e
RECEIVE_SMS. Il primo di questi due permessi permette all'app di inviare SMS, mentre il secondo indica che l'app intende monitorare gli SMS in arrivo al fine di memorizzarli o di eseguire operazioni su di essi. Inoltre, tra gli altri permessi, segnaliamo anche
RECEIVE_BOOT_COMPLETED e
WAKE_LOCK. Il primo di questi due permessi indica che l'app vuole ricevere un avviso non appena il sistema operativo si avvia, mentre il secondo permette di evitare che il processore vada in "sleep" e/o allo schermo di oscurarsi.
Ricordiamo che è sempre buona norma LEGGERE ATTENTAMENTE i permessi che una app richiede prima di installarla!
Dando un'occhiata all'
AndroidManifest.xml, inoltre, possiamo vedere che la prima Activity che verrà lanciata, una volta avviata l'applicazione, sarà
AppDownloaderActivity e il suo nome sarà quello con ID
app_name dichiarato nel file
res/strings.xml (ossia
fonts). Inoltre, possiamo vedere che l'app è composta, oltre che da questa Activity, anche da un Service chiamato
SystemService e quattro BroadcastReceiver chiamati rispettivamente
SmsReceiver, il quale richiede il massimo della priorità (1000),
OnBootReceiver,
IncomingCallReceiver e
ServiceController.
Tra le stringhe dichiarate in
res/strings.xml, possiamo notarne una particolare con ID
hello, il cui valore è
"rus mod by 13nikita успешно установлен".
Una volta installata, l'app si presenta in un primo momento tra le nostre applicazioni, con il nome di
fonts.

Se lanciamo l'app, essa ci mostra una schermata nera con un messaggio che dice:
"Android System Update Installed". In background, nel frattempo, l'app si auto-cancella dal menù delle applicazioni (disabilitando l'attività
AppDownloaderActivity) e lancia un servizio, chiamato
SystemService, che si aggancia all'avvio del sistema operativo in modo da avviarsi in automatico ad ogni riavvio del dispositivo.
In particolare, analizzando la classe
AppDownloaderActivity, possiamo notare come questa lanci
SystemService utilizzando
localIntent.setFlags(268435456), ossia lanciando il servizio come un nuovo task (il valore
268435456 infatti corrisponde a
FLAG_ACTIVITY_NEW_TASK). Inoltre, notiamo come venga chiamato il metodo del PacketManager di Android
setComponentEnabledSetting(localComponentName, 2, 1) che serve per abilitare alcuni settaggi di un particolare componente (in questo caso
AppDownloaderActivity stessa). In particolare, questo metodo viene chiamato con 2 (valore corrispondente a
COMPONENT_ENABLED_STATE_DISABLED) come nuovo stato, che sta ad indicare che l'Activity verrà disabilitata a prescindere da ciò che è dichiarato nel
AndroidManifest.xml, e con 1 (valore corrispondente a
DONT_KILL_APP) come flag, che sta ad indicare che questo non deve comunque fermare/uccidere l'app.
Analizzando la classe
SystemService, possiamo notare come questa dichiari due variabili statiche,
mainurl e
url, di cui la prima contiene il domain:
online17.ru. Questo domain risulta essere dislocato in Russia, avere nome
mailkryton.beget.ru e indirizzo
IP 91.106.203.33.
Una volta avviato,
SystemService procede ad avviare un AsyncTask, chiamato
addTask, interno alla stessa classe che si occupa di fare alcune operazioni in background e a settare un AlarmManager che si ripete ogni 3 minuti e che provvede ad avviare
ServiceController.
Nel background,
addTask si occupa di connettersi all'indirizzo
IP 91.106.203.33, all'
URL:
http://online17.ru/dev/reg.php?country=[...]&phone=[...]&op=Android&balance=[...]&imei=[...]. In questo modo, il malware invia alcuni dati sensibili dell'utente, quali: il codice ISO del paese, il numero di telefono, il sistema operativo (da questo possiamo dedurre che esistono versioni del malware che bersagliano altri sistemi operativi oltre Android), l'
IMEI (International Mobile Equipment Identity) e un campo chiamato balance che crediamo possa essere il credito della scheda
SIM. Il server analizza i dati inviati e, se questi dovessero essere quelli standard dell'emulatore di Android (ad esempio
15555215554 come numero di telefono,
000000000000000 come
IMEI e
0 come balance), il server risponderà avvisando il malware che il dispositivo in cui il malware è installato è nella blacklist.
Inoltre, il malware si connette ripetitivamente, ogni 3 minuti circa
ad:
http://online17.ru/dev/getTask.php?imei=[...]&balance=[...]. Questo, probabilmente, per aggiornare il campo balance del dispositivo nel server. Se stiamo utilizzando un dispositivo reale (o, comunque, non siamo stati messi nella blacklist), allora, nella sua risposta, il server indicherà tra gli altri anche la data di infezione, la data di dell'ultima "attivazione", l'operatore telefonico e, in un campo chiamato balance, l'indirizzo
IP del dispositivo.
Analizzando la classe
OnBootReceiver, possiamo notare come questa semplicemente si occupi di agganciarsi all'avvio del sistema operativo e di lanciare SystemService, sempre utilizzando il flag
FLAG_ACTIVITY_NEW_TASK al fine di lanciare il servizio come un nuovo task.
Analizzando la classe
ServiceController, possiamo notare come questa si occupi di fare alcune operazioni in background, come ad esempio: mandare SMS tramite il metodo
sendSMS(), creare un file di log chiamato
log.file all'interno della scheda SD tramite il metodo
appendLog(), e salvare un apposito segnalibro all'interno del browser tramite il metodo
saveBookmark().
Infine, analizzando la classe
SmsReceiver, possiamo notare come questa si occupi di scansionare gli SMS ricevuti attraverso il metodo
onReceive() e, se il numero del mittente contiene le sequenze numeriche
"088011" o
"000100", il malware cerca nel testo degli SMS il pattern dato dall'espressione regolare
"-?\\d+" (ossia zero o un "-" seguito da uno o più numeri). Se questo pattern è trovato, allora viene memorizzato all'interno della variabile statica
secretcode.
Inoltre, all'interno di questa classe è dichiarata anche un'altra classe, chiamata
Scan (Runnable), all'interno del cui metodo
run() si occupa di scansionare gli SMS e, nel caso in cui trovi SMS in arrivo da determinati mittenti, prima segna i messaggi come già letti (probabilmente per far si che il sistema operativo non notifichi il messaggio stesso) e poi gli elimina.
-------------------------
Analisi a cura di:
Paolo Rovelli & Gianfranco Tonello
CRAM (Centro Ricerche Anti-Malware) di TG Soft