In crescita la diffusione di spyware per Android: il caso di SpyNote
android spynote
E’ in crescita rispetto agli anni precedenti il trend di attacchi spyware con funzionalità di RAT verso dispositivi Android. Questi attacchi sono finalizzati a prendere il controllo completo dei dispositivi Android, al furto delle informazioni personali e allo spionaggio.
Solo nel 2023, relativamente al panorama nazionale, il CERT-AGID ha individuato e contrastato 15 campagne volte a diffondere 6 diverse famiglie di malware tramite attività di smishing.
Tutti i campioni osservati risultano essere delle varianti di malware inizialmente pensati come banking trojan, ovvero finalizzati al furto di denaro tramite l’abuso delle operazioni di home banking. Come mostra il grafico dei “Temi“, ancora oggi la maggior parte degli attori diffonde le proprie campagne cercando di impersonare uno dei tanti istituti bancari, proponendo alle vittime di installare un finto aggiornamento o una nuova app. L’applicazione malevola è raggiunta attraverso un link che punta ad un file APK ospitato su un dominio registrato ad-hoc.
La funzionalità più utilizzata di queste applicazioni malevole è la lettura degli SMS con il fine di catturare i codici inviati dalla banca come secondo fattore di autenticazione.
SpyNote
La famiglia di spyware che per ricchezza di funzionalità si distingue rispetto a tutte le altre è SpyNote.
Oltre ad intercettare gli SMS e a rubare password e numeri di carte di credito (grazie alle attività di keylogging) questo spyware ha la capacità di controllare le funzionalità del dispositivo compromesso, di catturare schermate, registrare chiamate ed inviarle al C2 insieme alle altre informazioni raccolte. È importante precisare che non tutte le funzionalità, anche se presenti nel codice, sono realmente utilizzate.
Questa settimana sono state osservate due campagne SpyNote italiane, una segnalata da D3lab che ha sfruttato il tema “IT-Alert” ed un dominio di recente registrazione che riporta nomi e loghi della Presidenza del Consiglio, mentre la seconda, come da copione, fa riferimento ad un noto istituto bancario italiano.
Analizziamo di seguito solo alcune funzionalità interessanti di questa variante di SpyNote.
Autorizzazioni
Come tante altre applicazioni della stessa natura, SpyNote abusa del servizio di accessibilità per concedersi ulteriori autorizzazioni simulando autonomamente un tocco per abilitarle:
public void mouseDraw(Point[] segments, int time) {
try {
if (Build.VERSION.SDK_INT >= 24) {
Path path = new Path();
path.moveTo((float) segments[0].x, (float) segments[0].y);
.........
dispatchGesture(new GestureDescription.Builder().addStroke(new GestureDescription.StrokeDescription(path, 0, (long) time)).build(), new mhemywrtkxwwathbmfhzccvmetrqherfwfqbncczwhvggqmkyz6aYoFs2(this), null);
}
} catch (Exception e3) {
e3.printStackTrace();
}
A tal proposito, la funzione invoca il metodo dispachGesture
per inviare gesti come se fossero eseguiti direttamente sullo schermo da un utente.
Rilevamento degli emulatori
SpyNote predispone una funzione per verificare che l’ambiente in cui è eseguito non sia un ambiente di test (o una sandbox):
La funzione isEmu_DIV_ID_lator() presenta alcuni nomi di emulatori in chiaro ed altri offuscati. Per riportarle in chiaro viene utilizzata una ulteriore funzione che si occupa di comparare le due stringhe passate e rimuovere la seconda sulla prima.
Di seguito, la lista in chiaro delle keyword che vengono controllate prima che l’app metta in azione la componente malevola:
private boolean isEmu_DIV_ID_lator() {
Build.BRAND.startsWith("generic");
Build.DEVICE.startsWith("generic");
Build.FINGERPRINT.startsWith("genric");
Build.FINGERPRINT.startsWith(EnvironmentCompat.MEDIA_UNKNOWN);
Build.HARDWARE.contains("goldfish");
Build.HARDWARE.contains("ranchu");
Build.MODEL.contains("google_sdk");
Build.MODEL.contains("Emulator");
Build.MODEL.contains("Android SDK built for x86");
Build.MANUFACTURER.contains("Genymotion");
Build.PRODUCT.contains("sdk_google");
Build.PRODUCT.contains("google_sdk");
Build.PRODUCT.contains("sdk");
Build.PRODUCT.contains("sdk_x86");
Build.PRODUCT.contains("sdk_gphone64_arm64");
Build.PRODUCT.contains("vbox86p");
Build.PRODUCT.contains("emulator");
Build.PRODUCT.contains("simulator");
}
La presenza di una di queste keyword mette in standby le attività malevole.
Esclusione dalle app recenti
Una delle particolarità di questa variante riguarda la capacità di non apparire tra le app recenti: questo obiettivo viene raggiunto impostando su True i valori di android:excludeFromRecents all’interno del file AndroidManifest.txt.
Localizzazione del dispositivo
SpyNote raccoglie informazioni sulla posizione esatta del dispositivo, compresa la velocità con cui eventualmente si sta muovendo:
La posizione del dispositivo viene quindi costantemente monitorata e aggiornata.
Keylogging
Come già anticipato, una delle attività che rende SpyNote attraente per i criminali è la capacità di fare keylogging:
Le informazioni raccolte vengono conservate, una volta codificate in base64, all’interno del file “/Config/sys/apps/log/log-yyyy–MM–dd.txt“, nello storage esterno, pronte per essere inviate al C2.
Il Command and Control (C2)
L’indirizzo del C2 e la relativa porta sono codificati in base64 ed in alcuni casi associati a nomi di variabili che aiutano a riconoscerli rapidamente:
Comunicazioni con il C2
I dati raccolti nei file di log vengono compressi in formato GZIP prima di essere inviati al C2. Di seguito le funzioni incaricate di comprimere i dati:
Allo stesso modo il dispositivo compromesso da SpyNote riceve istruzioni dal C2 e, nello specifico, si tratta di comandi e di ulteriori payload.
Analizzando uno dei pacchetti ricevuti è riconoscibile l’intestazione tipica di GZIP “1F 8B 08”:
Il contenuto può essere quindi decompresso e, per una lettura migliore, ripulito dal valore della variabile ConnectionKey (TxTxT) dichiarata in base64 insieme al C2.
echo "1f8b08000000000004004d8c590a80300c05af92 ... ecd8beec18e02c9948" | xxd -r -p | zcat | sed "s/TxTxT/ /g"
In questo caso, il comando inviato dal C2 al dispositivo è “plugens.angel.plugens.microphone” con, a seguire, il payload (un extra APK) da utilizzare. Probabilmente si tratta di una istruzione per interagire con il microfono del dispositivo.
Le istruzioni osservate sono:
- plugens.angel.plugens.microphone
- plugens.angel.plugens.files
- plugens.angel.plugens.contacts
Conclusioni
Grazie alla modularità delle funzioni fornite attraverso il builder e al suo continuo sviluppo (stando alle indiscrezioni di Palo Alto era già presente nel 2016) SpyNote è uno dei malware per Android che si distingue per l’elevata capacità di raccogliere informazioni e per la flessibilità che offre agli attori malevoli di estendere le funzionalità tramite le costanti interazioni con il C2.
Tali funzionalità, oltre a rappresentare una grande opportunità per le piccole organizzazioni criminali il cui unico obiettivo è quello di svuotare i conti correnti delle vittime, si prestano bene per operazioni ben più complesse che mirano invece alle attività di spionaggio.