19 Agosto 2020 - Tempo di lettura: 24 minuti
Una sofisticata campagna botnet chiamata FritzFrog è stata scoperta mentre violava i server SSH in tutto il mondo, almeno da gennaio 2020.
Scritto in Golang, FritzFrog è sia un worm che una botnet che prende di mira i settori del governo, dell'istruzione e della finanza.
L'attacco è già riuscito a infiltrarsi in oltre 500 server negli Stati Uniti e in Europa, di università e di una compagnia ferroviaria.
La natura avanzata di FritzFrog risiede nella sua implementazione P2P proprietaria e senza file scritta da zero.
Il malware assembla ed esegue il payload dannoso interamente in memoria, rendendolo volatile.
Inoltre, la sua implementazione P2P personalizzata significa che non esiste un singolo server Command & Control (C&C) che invia istruzioni a FritzFrog. È decentralizzato e autosufficiente.
Nonostante le tattiche di forza bruta aggressive utilizzate da FritzFrog per violare i server SSH, è stranamente efficiente prendendo di mira una rete in modo uniforme.
Guardicore Labs ha tenuto sotto controllo FritzFrog negli ultimi mesi utilizzando la loro rete di honeypot.
"Abbiamo iniziato a monitorare l'attività della campagna, che è aumentata costantemente e in modo significativo nel tempo, raggiungendo un totale di 13.000 attacchi a Guardicore Global Sensors Network (GGSN). Dalla sua prima apparizione, abbiamo identificato 20 diverse versioni del binario di Fritzfrog", afferma la società in un rapporto pubblicato di recente dal ricercatore di sicurezza Ophir Harpaz.
Nella loro ricerca per identificare un'architettura C&C centralizzata che alimentasse la botnet, l'azienda si rese presto conto che non ce n'era.
Per comprendere meglio FritzFrog e le sue capacità, Guardicore Labs ha progettato un intercettore scritto in Golang chiamato frogger che potrebbe partecipare al processo di scambio delle chiavi del malware e ricevere e inviare comandi.
"Questo programma, che abbiamo chiamato frogger, ci ha permesso di indagare sulla natura e la portata della rete. Utilizzando frogger , siamo stati anche in grado di unirci alla rete" iniettando "i nostri nodi e partecipando al traffico P2P in corso", afferma il rapporto.
È così che Guardicore Labs ha dedotto che la campagna di malware aveva accesso forzato a milioni di indirizzi IP SSH appartenenti a istituzioni come centri medici, banche, società di telecomunicazioni, organizzazioni educative e governative.
Poiché la maggior parte dei firewall aziendali e dei prodotti per la sicurezza degli endpoint possono diventare prontamente sospettosi di porte irregolari, FritzFrog non utilizza completamente una porta non standard.
Guardicore Labs aveva già spiegato in precedenza, il malware tenta prima di connettersi a un server di destinazione tramite le porte SSH 22 o 2222. Inoltre, aggiunge le chiavi SSH pubbliche dell'aggressore a authorized_keys su questa macchina compromessa.
Dopo aver avuto successo, FritzFrog avvia quindi un client netcat sulla porta 1234 del server compromesso che si connette ulteriormente al server del malware.
"Da questo momento in poi, qualsiasi comando inviato tramite SSH verrà utilizzato come input di netcat, quindi trasmesso al malware", afferma il rapporto pubblicato da Guardicore Labs.
FritzFrog comunica anche su un canale crittografato con oltre 30 comandi (mostrati sotto).
Il malware utilizza l'algoritmo Diffie-Hellman per la sua funzionalità di scambio di chiavi segrete.
I comandi e le risposte sono semt come oggetti JSON serializzati. Considerando che, prima che i dati possano essere trasferiti tra i nodi, vengono crittografati simmetricamente utilizzando AES e ulteriormente codificati con base64.
I nodi della botnet FritzFrog eseguono regolarmente il ping tra di loro per garantire la connettività e rimanere sincronizzati. Un processo all'avanguardia di "votazione" impiegato dai nodi distribuisce in modo efficiente il carico di lavoro in modo che nessun nodo possa forzare brutemente la stessa macchina di destinazione in un dato momento.
Una volta nella memoria volatile di una macchina di destinazione, il malware genera più thread che a loro volta facilitano la replica, la distribuzione e la crescita del malware.
Ad esempio, uno dei thread generati ("Cracker") ha il compito di forzare brute altre destinazioni, un altro chiamato "DeployMgmt" distribuisce il malware sui sistemi violati con successo, mentre un altro ancora ("Posseduto") aggiunge il nodo infetto al Rete P2P.
Inoltre, FritzFrog elimina la concorrenza con il suo thread "Antivir" cercando di uccidere i processi ad alta intensità di CPU che hanno riferimenti a "XMR" (Monero).
Questo perché ha un programma tutto suo: distribuire un thread "libexec" sul sistema, che è un cryptominer Monero .
"Il minatore è basato sul popolare minatore XMRig e si collega al pool pubblico web.xmrpool.eu tramite la porta 5555 ", afferma il rapporto di Guardicore Labs.
Con capacità così avanzate e autonome, FritzFrog è quindi sia un worm che una botnet.
Per garantire la persistenza dopo l'avvio, il malware ha già una backdoor: la chiave pubblica SSH che aveva precedentemente aggiunto al file authorized_keys .
L'intero esercito di botnet utilizza la stessa chiave SSH pubblica mostrata di seguito, che è uno degli indicatori di compromesso (IOC)
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDJYZIsncBTFc iCRHXkeGfFA67j + + kUVf7h / IL + sh0RXJn 7yDN0vEXz7ig73hC // 2 / 71sND + x + Wu0zytQhZxrCPzimSyC8FJCRtcqDATSjvWsIoI4j / AJyKk5 k3fCzjPex3moc48TEYiSbAgXYVQ62uNhx7ylug50nTcUH1BNKDiknXjnZfueiqAO1vcgNLH4qfq Ij7WWXu8YgFJ9qwYmwbMm + S7jYYgCtD107bpSR7 / WoXSr1 / SJLGX6Hg1sTet2USiNevGbfqNzci NxOp08hHQIYp2W9sMuo02pXj9nEoiximR4gSKrNoVesqNZMcVA0Kku01uOuOBAOReN7KJQBt
Quando sorge la necessità di condividere file tra i nodi, il malware utilizza un approccio "senza file". Divide accuratamente i file in BLOB binari con checksum in atto per garantirne l'integrità e li trasmette invece, come spiega il rapporto:
"Per condividere e scambiare file tra i nodi, Fritzfrog utilizza un approccio furtivo 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 memorizzandoli in una mappa insieme a valore hash di ogni blob."
Ogni nodo P2P può esaminarne un altro per un elenco di blob che contiene (che rappresentano file) utilizzando il comando getblobstats .
Alla ricezione della risposta con un elenco di hash BLOB, un nodo può quindi recuperare ogni BLOB dall'altro nodo effettuando una richiesta a http: // [IP del nodo con il BLOB]: 1234 / [hash BLOB]
Uno per uno, tutti i BLOB vengono ricevuti in questo modo dal nodo richiedente e uniti per produrre un file. Questo viene fatto dal thread "Assemble".
Quando analizzato dai ricercatori di Guardicore Labs, il malware è unico data la sua natura distribuita.
Mentre altre botnet come IRCflu hanno utilizzato IRC o DDG, hanno operato utilizzando file, FritzFrog non mostra nessuno di questi comportamenti.
Il rapporto riconosce, tuttavia, che "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."
Guardicore Labs ha fornito un semplice script che può essere utilizzato per rilevare le infezioni da FritzFrog. Sia lo script che un elenco di IoC FritzFrog sono stati pubblicati su GitHub.
"FritzFrog sfrutta il fatto che molte soluzioni di sicurezza di rete impongono il traffico solo tramite la porta e il protocollo. Per superare questa tecnica invisibile, le regole di segmentazione basate sui processi possono facilmente prevenire tali minacce", conclude il rapporto.