FRITZFROG: Una nuova generazione di Botnet PEER-TO-PEER

Sintesi

  • Guardicore ha scoperto FritzFrog, una sofisticata botnet peer-to-peer (P2P) che sta violando attivamente i server SSH da gennaio 2020.
  • Il Malware basato su Golang: FritzFrog esegue un malware worm che è scritto in Golang, ed è modulare, multi-thread e senza file, senza lasciare traccia sul disco della macchina infetta.
  • Punta attivamente a governi, istruzione, finanza e altro: FritzFrog tenta di utilizzare la forza bruta e di propagarsi a decine di milioni di indirizzi IP di uffici governativi, scuole e università, centri medici, banche e numerose società di telecomunicazioni. Tra questi, ha violato con successo più di 500 server, infettando famose università negli Stati Uniti e in Europa anche una compagnia ferroviaria.
  • Complessità: FritzFrog è completamente proprietario; la sua implementazione P2P è stata scritta da zero, quindi gli aggressori sono sviluppatori di software altamente professisti.
  • Intercettazione: Guardicore Labs ha sviluppato un programma client in Golang che è in grado di intercettare la comunicazione P2P di FritzFrog, oltre a unirsi come peer di rete.
  • Attribuzione: sebbene non sia possibile attribuire la botnet FritzFrog a un gruppo specifico, sono state riscontrate alcune somiglianze con la botnet P2P conosciuta come Rakos.

Introduzione

FritzFrog è una botnet peer-to-peer (P2P) altamente sofisticata che ha attivamente violato i server SSH in tutto il mondo. Con la sua infrastruttura decentralizzata, distribuisce il controllo tra tutti i suoi nodi. In questa rete senza nessun punto debole o di controllo, i peer comunicano costantemente tra loro per mantenere la rete attiva, resiliente e aggiornata. La comunicazione P2P avviene su un canale crittografato, utilizzando AES per la crittografia simmetrica e il protocollo Diffie-Hellman per lo scambio di chiavi.

A differenza di altre botnet P2P, FritzFrog combina una serie di proprietà che la rendono unica: è senza file, poiché assembla ed esegue payload in memoria. È più aggressivo nei suoi tentativi di forza bruta, ma rimane efficiente distribuendo i bersagli in modo uniforme all’interno della rete. Infine, il protocollo P2P di FritzFrog è proprietario e non si basa su alcuna implementazione esistente.

Il malware, scritto in Golang, è completamente volatile e non lascia tracce sul disco. Crea una backdoor sotto forma di chiave pubblica SSH, consentendo agli aggressori l’accesso continuo alle macchine delle vittime. Dall’inizio della campagna, sono state identificate 20 diverse varianti dell’eseguibile del malware.

In questo rapporto, descriveremo come è stata scoperta la campagna FritzFrog, la natura della sua rete P2P e il funzionamento interno del malware, inclusi il processo di infezione, la crittografia dei comandi e il comportamento volatile.

Guardicore Labs fornisce un repository Github contenente uno script di rilevamento e un elenco di indicatori di compromissione (IOC) per questa botnet.

mappa diffusione FritzFrog

Scopriamo FritzFrog

Guardicore Labs ha notato per la prima volta questa campagna di botnet durante la sua ricerca in corso sull’Enciclopedia Botnet. Il 9 gennaio sono comparse le prime tracce di attacco durante l’esecuzione di processi risultati poi essere compromessi quali ifconfig e nginx. “Abbiamo iniziato a monitorare l’attività della campagna, che è aumentata costantemente e in modo significativo nel tempo, raggiungendo un totale di 13.000 attacchi sulla nostra Guardicore Global Sensors Network (GGSN). Dalla sua prima comparsa, abbiamo identificato 20 varianti diverse del binario Fritzfrog.”

numeri della rete fritzfrog

La cosa interessante di questa botnet è, a prima vista, l’inesistenza di alcun apparente server di comando e controllo (CNC) a cui fosse connessa. In seguito approfondendo l’analisi e le ricerche è stato confermato che non esiste alcun CNC, come si è abituati a vederli nelle classiche botnet.

Per intercettare la rete FritzFrog, Guardicore Labs ha sviluppato un programma client in Golang che esegue il processo di scambio di chiavi con il malware ed è in grado di inviare comandi e ricevere i suoi output. Questo programma, che è stato soprannominato frogger, ha permesso di indagare sulla natura e sulla portata della rete. Usando frogger, i ricercatori sono stati anche in grado di unirsi alla rete “iniettando” i loro nodi e partecipando al traffico P2P in corso.

FritzFrog viene utillizato per forzare milioni di indirizzi IP, tra cui uffici governativi, istruzioni, centri medici, banche e numerose società di telecomunicazioni. Ha violato con successo oltre 500 server SSH, compresi quelli di noti istituti di istruzione superiore negli Stati Uniti e in Europa compresa una compagnia ferroviaria.

P2P di nuova generazione


Perché “di nuova generazione”?
FritzFrog ha una speciale combinazione di proprietà, che lo rende unico nel panorama delle minacce:

Senza file: FritzFrog funziona senza directory di lavoro e i trasferimenti di file vengono eseguiti in memoria utilizzando i BLOB.
Aggiornamento costante: i database delle destinazioni e delle macchine violate vengono scambiati senza problemi.
Aggressivo: la forza bruta si basa su un ampio dizionario. In confronto, DDG, una botnet P2P scoperta di recente, utilizzava solo il nome utente “root”.
Efficiente: i target sono distribuiti uniformemente tra i nodi.
Proprietario: il protocollo P2P è completamente proprietario e non si basa su protocolli P2P noti come μTP.


Una volta che una vittima è stata violata con successo, inizia a eseguire il “malware UPX”, che si cancella immediatamente. Il processo del malware viene eseguito con i nomi ifconfig e nginx, per ridurre al minimo i sospetti. Come parte del processo di avvio, il malware inizia ad ascoltare sulla porta 1234, in attesa di comandi. I primi comandi che una nuova vittima riceve sono quelli relativi alla sincronizzazione della vittima con il database dei peer di rete e degli altri target di brute-force.

traffico di rete fritzfrog

Il traffico su una porta non standard, come la 1234, può essere facilmente rilevato e bloccato da firewall e altri sistemi di sicurezza. Pertanto, l’autore di FritzFrog ha utilizzato una tecnica creativa per eludere il rilevamento e rimanere “sotto i radar”. Invece di inviare comandi direttamente sulla porta 1234, i comandi vengono inviati alla vittima nel seguente modo: l’attaccante si connette alla vittima tramite SSH ed esegue un client netcat sulla macchina della vittima, che a sua volta si connette al server del malware. Da questo punto in poi, qualsiasi comando inviato tramite SSH verrà utilizzato come input di netcat, quindi trasmesso al malware.

schema di attacco fritzfrog

Gli sviluppatori di Fritzfrog hanno implementato un canale di comando crittografato con oltre 30 comandi diversi. I parametri e le risposte dei comandi vengono trasferiti in strutture dati designate e serializzati (“sottoposti a marshalling”) in formato JSON. Prima dell’invio, i dati vengono crittografati utilizzando la crittografia simmetrica AES e codificati in Base64. Per concordare la chiave di crittografia, i nodi coinvolti utilizzano il protocollo di scambio di chiavi Diffie-Hellman.

Comandi P2P di FritzFrog
Operazione su DatabaseOperazioni su PayloadOperazioni Amministrative
getdb
pushdb
pushdbzip
getdbzip
getdbnotargetsgettargets
pushtargets
forcetargets
puttargetpoolputblentry
resetowned
pushowned
putowned
getownedgetdeploy
putdeploying
deploystatus
runscript
pushbin
getbin
sharefiles
getstatus
getstats
getblobstats
getpeerstats
getvotestats
mapblobs
getlog
pushlog
getargs
proxy
ping
comm
exit

I nodi della rete FritzFrog sono in stretto contatto tra loro. Si pingano costantemente a vicenda per verificare la connettività, scambiare peer e target e mantenersi sincronizzati. I nodi partecipano a un intelligente processo di voto, che sembra influenzare la distribuzione degli obiettivi di brute-force attraverso la rete. Guardicore Labs ha osservato che i target sono distribuiti uniformemente, in modo tale che nessun nodo della rete tenti di “attacare” la stessa macchina target.

Approfondimento sul malware

Il binario di FritzFrog è un malware avanzato scritto in Golang. Funziona esclusivamente utilizzando la memoria; ogni nodo che esegue il malware archivia nella sua memoria l’intero database di target e peer. Il malware genera più thread per eseguire varie attività contemporaneamente, come descritto in dettaglio nella tabella seguente.

FritzFrog definisce i seguenti stati per quanto riguarda la gestione della vittima e delle macchine bersaglio.

  1. Target: una macchina trovata nella coda del target verrà successivamente inviata al modulo Cracker, che a sua volta eseguirà la scansione e proverà a forzarla;
  2. Deploy: una macchina che è stata violata correttamente viene messa in coda per l’infezione da malware dal modulo DeployMgmt;
  3. Owned: una macchina infettata con successo verrà aggiunta alla rete P2P dal modulo di proprietà.
NOME MODULOFUNZIONALITA’
CrackerObbiettivi di Brute force
CryptoComm + ParserComunicazione P2P crittografata
CastVotesMeccanismo di voto per la distribuzione degli obiettivi
TargetFeedInserimento di obiettivi dai peers 
DeployMgmtWorm, che distribuisce malware su macchine violate 
Ownedonnessione alle vittime dopo la distribuzione del malware
AssembleCompilazione in memoria dei file partendo dai blobs
AntivirEliminazione Concorrenti. Elimina i processi che richiedono CPU con la stringa “xmr”
LibexecMonero Cryptominer

Ogni nodo che esegue il malware ha un thread di lavoro responsabile della ricezione dei comandi, dell’analisi e dell’invio alla funzione appropriata nel codice.

La funzione worker mostrata in un disassembler; Ogni ramo corrisponde a una funzionalità P2P supportata

Il malware è transitorio: tenta di sopravvivere ai riavvii del sistema. Tuttavia, viene lasciata una backdoor per consentire l’accesso futuro alla macchina violata, le cui credenziali di accesso vengono salvate dai peer della rete. Il malware aggiunge una chiave SSH-RSA pubblica al file authorized_keys. Questa semplice backdoor consente agli attaccanti, che possiedono la chiave privata segreta, l’autenticazione senza password, nel caso in cui la password originale sia stata modificata. FritzFrog ha utilizzato solo una singola chiave pubblica che è indicata nella casella sottostante.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJYZIsncBTFc+iCRHXkeGfFA67j+kUVf7h/IL+sh0RXJn7yDN0vEXz7ig73hC//2/71sND+x+Wu0zytQhZxrCPzimSyC8FJCRtcqDATSjvWsIoI4j/AJyKk5k3fCzjPex3moc48TEYiSbAgXYVQ62uNhx7ylug50nTcUH1BNKDiknXjnZfueiqAO1vcgNLH4qfqIj7WWXu8YgFJ9qwYmwbMm+S7jYYgCtD107bpSR7/WoXSr1/SJLGX6Hg1sTet2USiNevGbfqNzciNxOp08hHQIYp2W9sMuo02pXj9nEoiximR4gSKrNoVesqNZMcVA0Kku01uOuOBAOReN7KJQBt

Il file malware esegue vari comandi della shell sulla macchina locale, alcuni dei quali periodicamente, per monitorare lo stato del sistema. Ad esempio, esegue free -m per controllare la RAM disponibile, uptime journalctl -S @ 0 -u sshd per monitorare gli accessi SSH e altri comandi che generano le statistiche sull’utilizzo della CPU. Queste statistiche sono disponibili per essere consultate da altri nodi della rete e vengono utilizzate per determinare, ad esempio, se eseguire o meno un cryptominer.

Il malware esegue un processo separato, chiamato libexec, per minare la moneta Monero. Il miner è basato sul popolare miner XMRig e si collega al pool pubblico web.xmrpool.eu tramite la porta 5555.

Una rete dannosa simile a torrent

Fritzfrog fa affidamento sulla capacità di condividere file in rete, sia per infettare nuove macchine che per eseguire payload dannosi, come il cryptominer Monero.

Per condividere e scambiare file tra i nodi, Fritzfrog utilizza un approccio silente e senza file. I file vengono suddivisi in BLOB – grandi quantità di dati binari – che vengono conservati in memoria. Il malware tiene traccia dei BLOB disponibili archiviandoli in una mappa insieme al valore hash di ogni BLOB.

Quando un nodo A desidera ricevere un file dal suo peer, il nodo B, può interrogare il nodo B su quale blob possiede utilizzando il comando getblobstats. Quindi, il nodo A può ottenere un BLOB specifico tramite il suo hash, tramite il comando P2P getbin o tramite HTTP, con l’URL http: //: 1234 /. Quando il nodo A ha tutti i blob necessari, assembla il file utilizzando un modulo speciale denominato Assemble e lo esegue.

Output del comando "getblobstats". Ogni nodo nella rete segnala i BLOB di file di cui è proprietario, dall'elenco di file supportati.

Chi è l’ideatore? 

Monitorare gli operatori di una botnet P2P è un compito complicato; a causa della sua natura distribuita, i comandi possono essere inviati a e da qualsiasi nodo della rete. Tuttavia, è stato tentato di confrontarlo con le precedenti botnet P2P viste nel panorama delle minacce.

Anche se confrontato con le precedenti botnet P2P, FritzFrog appare unico; non utilizza IRC come IRCflu, funziona in memoria a differenza di DDG e gira su macchine basate su Unix, al contrario della botnet InterPlanetary Storm. Se esiste, ha qualche somiglianza, soprattutto per quanto riguarda la denominazione delle funzioni e i numeri di versione, con Rakos, una botnet P2P scritta a Golang e analizzata da ESET nel 2016.

Rilevamento e mitigazione

Guardicore Labs fornisce uno script di rilevamento FritzFrog da eseguire sui server SSH. Cerca i seguenti indicatori FritzFrog:

  • Processi in esecuzione nginx, ifconfig o libexec il cui file eseguibile non esiste più sul file system (come mostrato di seguito)
  • Porta di ascolto 1234

 Inoltre, il traffico TCP sulla porta 5555 può indicare il traffico di rete al pool Monero.

ubuntu@ip-111-11-11-11:~$ ./detect_fritzfrog.sh
FritzFrog Detection Script by Guardicore Labs
=============================================
 
[*] Fileless process nginx is running on the server.
[*] Listening on port 1234
[*] There is evidence of FritzFrog's malicious activity on this machine.

FritzFrog sfrutta il fatto che molte soluzioni di sicurezza di rete impongono il traffico solo dalla porta e dal protocollo. Per superare questa tecnica invisibile, le regole di segmentazione basate sui processi possono facilmente prevenire tali minacce.

Le password deboli sono il fattore abilitante immediato degli attacchi di FritzFrog. Consigliamo di scegliere password complesse e di utilizzare l’autenticazione con chiave pubblica, che è molto più sicura. Inoltre, è fondamentale rimuovere la chiave pubblica di FritzFrog dal file authorized_keys, impedendo agli aggressori di accedere alla macchina. Router e dispositivi IoT spesso espongono SSH e sono quindi vulnerabili a FritzFrog; prendere in considerazione la possibilità di modificare la porta SSH o disabilitare completamente l’accesso SSH se il servizio non è in uso.


Potete seguire alert e notizie in tempo reale su Vulnerabilità, Exploits, Attacchi, Codici Malevoli e Cyber-Crime sul nostro profilo Twitter https://twitter.com/euroinformatica o su quello della nostra Security Unit “CyberTeam” su https://twitter.com/CyberTeamClub