BRATA malware per dispositivi Android spacciato per AntiSPAM
apk BRATA Intesa SanPaolo
Nel corso delle attività di monitoraggio il CERT-AGID ha rilevato un dominio di recente registrazione ai danni di clienti di banca Intesa San Paolo.
La pagina di phishing, in lingua italiana e accessibile solo tramite uno user-agent “Android”, è progettata per sottrarre le credenziali di accesso e salvarle in un file di testo all’interno di una cartella sullo stesso server”.
Da ulteriori analisi è emersa la presenza di una pagina denominata AntiSPAM attraverso la quale si invitano i clienti della banca a scaricare una applicazione per dispositivi Android denominata “AntiSPAM.apk“
Come è possibile ipotizzare l’applicazione rilasciata non ha lo scopo di proteggere i clienti dallo spam ma di sottrarre loro ulteriori informazioni. Nello specifico si tratta di una variante del malware denominato BRATA rilevato per la prima volta nel 2020 all’interno di applicazioni presenti nel Play Store e successivamente veicolato tramite attacchi di social engineering.
Risultano invece recenti le evidenze dell’uso di BRATA in attività italiane, il malware (APK) è sempre lo stesso ma viene ricompilato con nuovi indirizzi e pubblicizzato attraverso domini di nuova registrazione.
Funzionalità di BRATA
Gestisce una serie di comandi tramite la funzione switchObjectToInt che utilizza un indice per enumerare il comando ottenuto e quindi saltare alla relativa istruzione.
Nel dettaglio, la lista dei comandi è la seguente:
(C0224BA.switchObjectToInt(this._cmd_receiver.Get("cmd_base"), "send_notify", "get_sms", "sms_get_default", "sms_set_default", "get_screen", "del_application", "del_protections", "check_initial", "intent_protect", "intent_system", "intent_overlay", "open_a11y", "open_over", "touch", "palavra", "go_home", "go_recent", "go_back", "get_application", "get_nodes", "del_overlay", "up_overlay", "up_app", "set_bright", "touch_click", "touch_decision", "text_decision", "puxanodetest", "click", "focus", "tudolog", "swipe_event_pattern", "swipe_event", "get_pattern", "run_tel", "run_pattern"))
I comandi vengono inviati al server tramite chiamate websocket da cui ricava ulteriori istruzioni.
In questo caso viene restituita la lista dei software Antivirus da verificare:
{
"prop": "reader_request",
"etype": "runFunction",
"value": [
{
"list_avs": {
"com.bitdefender.security": "not",
"com.atvcleaner": "not",
"com.pandasecurity.pandaav": "not",
"com.zoner.android.antivirus": "not",
"com.kbs.core.antivirus": "not",
"com.quickheal.platform": "not",
"com.antivirus": "not",
"mans.antivirus.security": "not",
"com.antivirus.mobilesecurity.viruscleaner.applock": "not",
"org.malwarebytes.antimalware": "not",
"com.drweb": "not",
"com.lookout": "not",
"com.avira.android": "not",
"com.eset.ems2.gp": "not",
"com.eset.etvs.gp": "not",
"anywheresoftware.b4a.b4abridge_gg": "testeeee",
"com.wsandroid.suite": "not",
"com.symantec.mobilesecurity": "not",
"com.cleanteam.onesecurity": "not",
"com.avast.android.mobilesecurity": "not",
"com.kaspersky.security.cloud": "not",
"com.mobilesecurity.viruscleaner": "not",
"com.kms.free": "not",
"br.com.clickbit.b4apac": "testeeee",
"com.bitdefender.antivirus": "not"
},
"cmd_base": "del_protections"
}
]
}
Ad esempio, inviando il comando “del_protections” il server remoto risponde con le seguenti istruzioni:
{
"type": "event",
"event": "parse_request",
"params": {
"cmd_base": "protections_removed"
}
} {
"prop": "reader_request",
"etype": "runFunction",
"value": [{
"telegram_host": "https:\/\/www.telegram.org\/Channel Telegrammmmm",
"websocket_host": "ws:\/\/111.90.149.241:2001\/hakon",
"packages_accept": [{
"package": "com.nu.production",
"inject_name": "nu_html_principal.html",
"inject_update": "true",
"inject_down": "http:\/\/192.168.10.106:2001\/injects\/google_html.inject"
}, {
"package": "com.whatsapp",
"inject_name": "nu_html_principal.html",
"inject_update": "true",
"inject_down": "http:\/\/192.168.10.106:2001\/injects\/test_html.inject"
}, {
"package": "com.santander.din",
"inject_name": "nu_html_principal.html",
"inject_update": "true",
"inject_down": "http:\/\/192.168.10.106:2001\/injects\/test_html.inject"
}],
"cmd_base": "check_initial"
}]
Le pagine HTML ospitate nelle URL con IP interno “192.168.10.106” in realtà vengono risolte tramite l’IP pubblico inziale e rappresentano le pagine di phishing (Google, Bendigo Bank, Form generica di pagamenti tramite carta di credito) caricate tramite la funzione webinject.
BRATA dispone di una funzione “_send_vnc_image” utilizzata per inviare screenshot alla cartella “upload” dichiarata nella variabile “_link_upload_vnc” della funzione “_process_globals“.
L’app fa uso del servizio di accessibilità per compiere azioni autonomamente, come ad esempio la possibilità di ottenere i permessi.
Il malware utilizza la presenza e creazione di alcuni file per indicare alcune fasi dell’infezione. Il contenuto di questi file non è importante ma è curioso notare come questo sia “team-ira.com”.
Comandi del malware
send_notify | Mostra una notifica con testo ed icona indicati dal C2 |
get_sms | Invia al C2 gli ultimi N SMS |
sms_get_default | Avvia un’activity relativa agli SMS (lettura, composizione?) Sembra che non sia ben implementato (l’activity è sempre nulla) |
get_screen | Usa il componente MediaProjectionManager per fare uno screenshot. Tramite l’accessibility service abilita i permessi necessari in automatico. L’immagine è salvata tramite l’endpoint /upload?cmd=image_vnc?res=[W]x[H]&android=[botId]. Notare che il parametro [botId] permette di scrivere su file semi-arbitrari sul C2, se X indica il botId, inviando una post all’endpoint upload, si può scrivere il contenuto sul file: /root/FileRccUpdate/www/users/X/vnc.png. |
del_application | Cancella un’applicazione |
del_protections | Cancella una lista di applicazioni (AV) |
check_initial | Genera e salva il botid e lo manda al C2 |
intent_protect | Controlla e disabilita Google Play Protect |
intent_system | Permette all’applicazione di modificare le impostazioni di sistema |
intent_overlay | Permette all’app di mostrare overlay gestendo il caso di UI Xiomi |
open_a11y | Mostra le impostazioni di accessibilità |
open_over | Simile a intent_overlay ma senza gestire UI Xiomi |
touch | Non sembra implementato. Dovrebbe cliccare su un elemento il cui testo contiene una stringa data dal C2 |
palavra | Imposta la clipboard con un test dato dal C2 |
go_home, go_recent, go_back | Comandi per la navigazione tra le activity |
get_application | Invia la lista di applicazioni al C2 |
get_nodes | Invia il testo contenuto nelle view della finestra attiva |
del_overlay, up_overlay | Cancella/mostra una pagina di phishing |
up_app | Avvia un’applicazione |
set_bright | Imposta la luminosità dello schermo come indicato dal C2 |
touch_click | Simula un click ad una posizione (x, y) nello schermo tramite il servizio di accessibilità. |
touch_decision, text_decision | Controlla se un pulsante è premuto o una textview contiene il testo dato |
puxanodetest | Invia al C2 il desto di un elemento con id “debug” |
click, focus | Clicca/Focus su un elemento con id dato |
tudolog | Non è chiaro. Legge il testo dagli elementi di nome “vamover”. |
swipe_event_pattern | Non impleentato |
swipe_event | Simula uno swipe da un punto ad un altro dello schermo |
get_pattern | Ottiene il pattern usato per lo sblocco del cell precedentemente registrato tramite il servizio di accessibilità. |
run_tel | Chiama un numero/codice |
run_pattern | Prova a sbloccare il cell. |
Servizio di accessibilità
Anche Brata fa uso di un servizio di accessibilità. Appena avviato chiede all’utente di abilitarlo:
Il malware si spaccia per un’applicazione di nome “Sicurezza dispositivo”.
Dopo aver attivato il servizio di accessibilità questo sarà usato per azioni automatiche.
Il malware mostrerà una finestra di caricamento con un testo che vuole indurre l’utente a credere che l’app stia effettuando delle verifiche di sicurezza.
Infine, si chiede e mostra un toast con scritto che tutte le verifiche hanno avuto successo.
Da questo momento l’app non è più apribile.
Conclusioni
L’app è sviluppata con anywhere software b4a mentre il C2 con b4j. Nonostante la lingua rilevata nelle stringhe di testo sembra essere porteghese, il target per cui è stata sfruttata è senza ombra di dubbio italiano. È la terza volta nel 2021 che il CERT-AGID individua il file AntiSPAM.apk veicolato tramite campagne di phishing indirizzate a istituti bancari italiani: il 3 giugno, il 6 luglio e il 10 settembre.
Il CERT-AGID ha provveduto ad allertare i diretti interessati e diramato gli indicatori di compromissione attraverso le proprie piattaforme a tutela della propria constituency.
Al fine di rendere pubblici i dettagli di questa campagna si riportano di seguito gli indicatori rilevati:
Link: Download IoC