Mirai, o della bellezza delle cose che non muoiono mai

Nel 2016 tre studenti universitari americani pubblicarono su Hackforums il codice sorgente di una botnet scritta in C e Go, con sessantaquattro credenziali hardcoded e uno scanner che girava su tutta l'IPv4.
Si chiamava Mirai. In pochi mesi aveva seicentomila dispositivi. In ottobre abbatté Twitter, Netflix, Reddit e mezzo internet statunitense.
Il codice è ancora su GitHub. I dispositivi vulnerabili sono aumentati.
Ne parliamo al bancone di Gigi, con Paolo, Francesco e Rita, aka PiGreco, che spiega i fork, scanner.c, la query Shodan giusta, e perché Mirai non è un pezzo da museo.

Published on 2026-04-13 07:45

Cronache del Sottosopra, Bar di Gigi, aperitivo del giovedì sera


Paolo aveva già finito la prima birra piccola quando disse, senza preambolo, che se doveva spiegare Mirai a qualcuno che non capiva niente di niente avrebbe detto che era come aprire una porta con una chiave universale. Purtroppo o per fortuna, da Gigi c’era anche PiGreco, che ci aveva onorato della sua splendente presenza. Rita, questo il suo vero nome, alzò gli occhi dal taccuino, dove stava annotando qualcosa in una grafia minuscola e densa come codice compilato, e fissò Paolo negli occhi. Sbatté una sola volta le ciglia nere, tanto lunghe che potevano far vento, e disse sottovoce, Paolo questa è la spiegazione più imprecisa che abbia mai sentito, non sei in Parlamento usa le parole giuste per favore, e il per favore era accompagnato dal mezzo sorriso con cui PiGreco gratificava i soggetti che rispettava. Paolo incassò senza rispondere perché quando PiGreco sorrideva così, te stedeva e le parole diventavano del tutto secondarie.

Hai ragione Pi, intervenne Francesco, usiamo le parole giuste.

PiGreco si era guadagnata il soprannome per due ragioni che i colleghi citavano sempre in quest’ordine, prima la crittografia, poi tutto il resto, anche se chiunque la vedesse per la prima volta invertiva immediatamente le priorità, perché Rita era il tipo di persona che in una stanza piena di monitor e caffè sembrava fuori posto nel senso sbagliato, nel senso che era troppo, e il paradosso era che era anche la più brava di tutti, bellissima, infinita e irrazionale. Impossibile da approssimare davvero. Pi era una esperta Hacker Etica, un’esperta crittografa che leggeva paper sull’analisi differenziale delle curve ellittiche sul treno e che tre anni prima aveva trovato una vulnerabilità in un’implementazione di ChaCha20¹ che nessuno aveva visto, e l’aveva trovata a mano e questo i colleghi lo raccontavano sempre con un misto di ammirazione e disagio che è il sentimento tipico di chi lavora accanto a qualcuno più bravo.

Pi accavallò le gambe sullo sgabello somigliando molto di più alla Velina di turno piuttosto che ad un’analista esperta di CyberSecurity, aprì il taccuino a una pagina e disse, allora, vediamo la struttura di Mirai.

il codice sorgente, disse PiGreco, è stato pubblicato il 30 settembre 2016 su Hackforums, subforum Botnet, titolo del thread Anna-senpai’s Mirai Source Code, tre cartelle nel repo, bot/, cnc/, loader/, C per la parte embedded che girava sui dispositivi, Go per il command and control, e se guardate il codice del bot la prima cosa che notate è lo scanner, un loop che genera indirizzi IPv4 random escludendo i blocchi riservati, IANA, DoD, loopback, e per ogni indirizzo apre una connessione TCP sulla 23 o sulla 2323 e prova sessantaquattro combinazioni di credenziali di default.

Paolo sghignazzando sottolineò sessantaquattro mentre gettava, esattamente come Gigi, Francesco e tutti i Romani o Stranieri che passavano davanti al BAR, occhiate verso le gambe di PiGreco, cosa che PiGreco sapeva benissimo e che usava per valutare il QI di chi aveva di fronte.

Il solo che ci guadagnava era Gigi. Quando c’era lei vendeva più birre.

Si sessantaquattro, continuò lei, hardcoded nel sorgente in scanner.c, admin/admin, root/root, root/vizxv, guest/12345, roba che i produttori di DVR e IP camera incidevano nel firmware di fabbrica e non cambiavano mai, XiongMai Technologies, Dahua, Hikvision, dispositivi che giravano su MIPS o ARM con un BusyBox minimale e una telnet aperta sul mondo. Ricordo che il messaggio di apertura del thread diceva più o meno, con il tono di chi lascia le chiavi di casa sul bancone del bar prima di partire, che siccome stava uscendo dal business del DDoS-as-a-service rilasciava il codice perché altri ci potessero lavorare.

Ah, uscire dal business, disse Paolo, esattamente come un consulente che cambia settore.

Si mi ricordo, continuò Francesco, Anna-senpai su Hackforums aveva una buona reputazione, aveva venduto booter prima di Mirai, e l’aver pubblicato il sorgente lì, con quel tono, era un gesto doppio secondo me. Stava dicendo alla community guardate cosa ho costruito e all’FBI che da quel momento il codice era pubblico, di tutti.

Francy, disse PiGreco, se l’intento era quello di passarla liscia non funzionò. Li hanno presi lo stesso, tutti e tre, Paras Jha, Josiah White, Dalton Norman. Nel 2017 si sono dichiarati colpevoli e invece di prendere anni se ne sono andati a collaborare con l’FBI su casi di cybercrime, il che è uno schema così consolidato che quasi annoia, e mentre diceva quasi annoia girò il taccuino verso Francesco e Paolo e loro videro che sulla pagina c’era uno schema a blocchi del flusso di infezione disegnato a penna con una precisione che sembrava stampata, con le frecce e le porte e i nomi dei moduli scritti nel codice originale.

Gigi passò e posò una birra davanti a Paolo senza che nessuno l’avesse chiesta perché Gigi sapeva quando finivano le birre anche senza guardare.

Ricordate il codice com’era ? Continuò Francesco, anche se letto adesso dopo quasi 10 anni lo trovo sorprendente. Tipicamente il codice degli hacker è prototipale, brutto incasinato, con parti che non vengono mai toccate perché messe li apposta a far casino o dimenticate.

PiGreco girò una pagina del taccuino, hai ragione era pulito, sorprendentemente pulito per roba scritta da ventenni che volevano distruggersi su Minecraft. Il loop principale del bot fa tre cose in sequenza, prima uccide i processi concorrenti, c’è una lista di stringhe in killer.c che cerca in /proc i nomi di altri malware noti e li termina, Mirai non voleva condividere il dispositivo, poi disabilita il watchdog per evitare i reboot automatici, poi avvia lo scanner, e lo scanner è la parte elegante, genera indirizzi a caso con una funzione custom più veloce di rand(), salta i blocchi inutili o pericolosi, e per ogni indirizzo che risponde sulla 23 fork-a un processo figlio che tenta il bruteforce.

Paolo intervenne e, si, non era esattamente un bruteforce, era più una, come dire, tentata vendita.

Vero Paolo, continuò PiGreco, non era un bruteforce nel senso classico, non iterava password arbitrarie, era più simile a un dizionario chirurgico, sessantaquattro entry selezionate empiricamente, le credenziali più diffuse sui firmware embedded dell’epoca, e quando trovava accesso via telnet eseguiva un one-liner per determinare l’architettura del dispositivo,


cat /proc/cpuinfo | grep -i model
uname -m


poi scaricava il binario corretto dal loader, c’erano binari precompilati per MIPS big e little endian, ARM, x86, PowerPC, SH-4, anche M68K per dispositivi vecchissimi, e una volta caricato il binario il dispositivo entrava nella botnet e ricominciava a scansionare. Ogni bot era anche uno scanner, una crescita esponenziale.

Con un gesto incomprensibile ma che denotava eccitazione Francesco disse, ricordate l’eleganza del C2 ?

Si Francy, il C2l era in Go, girava su server affittati con carte prepagate o bucati, il bot si connetteva sulla porta 23 con un handshake custom, e da li riceveva i comandi di attacco, UDP flood, TCP SYN flood, HTTP GET flood, DNS water torture, e c’era anche una modalità chiamata attack_app per attacchi applicativi specifici, tutto definito in attack.h con costanti che leggevi come una lista della spesa.


#define ATK_VEC_UDP       0
#define ATK_VEC_VSE       1
#define ATK_VEC_DNS       2
#define ATK_VEC_SYN       3
#define ATK_VEC_ACK      
4
#define ATK_VEC_STOMP     5
#define ATK_VEC_GREIP     6
#define ATK_VEC_PLAIN_UDP 9


Dyn è caduto con una combinazione di DNS water torture e UDP flood, traffico stimato tra settanta e centoventi gigabit al secondo a seconda della fonte, per un’infrastruttura DNS non progettata ad assorbire quel tipo di carico non c’è stato scampo.

Paolo disse, e i fork, quanti ne sono venuti fuori !

PiGreco si passò una mano tra i capelli con la noncuranza di chi non sa, o finge di non sapere, l’effetto che fa. Qualche ciocca color fiamma ricadde passando davanti alle labbra di rosso acceso. Quel rosso che stonava con tutto e si abbinava a tutto, esattamente come lei. Sistemò distrattamente la camicetta bianca sbottonata di un bottone di troppo, producendo, nel raggio di tre sgabelli, il silenzio improvviso che producono certi eventi naturali come i terremoti, le eclissi, Pi che sistema la camicetta. Ignorò completamente ogni sguardo perché stava già pensando alla risposta, con quella capacità che aveva di essere contemporaneamente la persona più presente e più altrove della stanza.

disse, i fork rilevanti sono documentati, e prima di continuare alzò gli occhi prima su Francesco, poi su Paolo che la stavano guardando con un’espressione che non richiedeva traduzione. Fissando entrambi disse con il tono piatto di chi risponde a una domanda che non è stata fatta, so cosa state pensando, e no, non c’è un exploit per questo combinando il tutto con un sorriso e un occhiolino, quasi fosse un premio. È quel movimento coordinato che fanno le donne quando apprezzano la compagnia e si sentono bene nel posto giusto, il loro posto.

Paolo e Francesco si guardarono, guardarono Pi e insieme scoppiarono a ridere.

PiGreco tornò al taccuino e ricordando i particolari continuò, come dicevo prima che mi distraeste, i fork rilevanti sono documentati, Satori nel novembre 2017 aggiungeva uno zero-day per i router Huawei, CVE-2017-17215, porta 37215, RCE senza autenticazione, Nexus Zeta lo ha preso dal repo pubblico di Mirai e ci ha aggiunto quel singolo exploit e in quarantotto ore aveva duecentomila dispositivi, Okiru nel 2018 prendeva di mira processori ARC, architettura usata in dispositivi IoT industriali, prima volta che si vedeva malware compilato per ARC, poi c’era Masuta che usava TR-069, il protocollo di gestione remota dei router consumer, poi JenX che invece di fare scanning distribuito usava server di gioco come Valve Source Engine per la ricognizione e poi delegava l’infezione a server centralizzati, architettura ibrida, poi Moobot, poi Enemybot nel 2022 che combinava codice Mirai con codice Gafgyt e aggiungeva exploit per router ASUS e D-Link e Seowon, poi RapperBot che nel 2022 spostava il focus su SSH invece di telnet perché il parco dispositivi era cambiato, e ogni variante adattava il codice originale al panorama del momento, nuove porte, nuovi exploit, nuovi target, ma la struttura rimaneva quella, bot/, cnc/, loader/, tre cartelle.

Francesco si fece dare il taccuino da PiGreco, era uno dei pochi a cui era permesso, e scrisse:


port:23 “busybox” “login” -“ssh”


Ridiede il taccuino a Pi che sorrise dicendo, si, se questa la cerchi su Shodan adesso, in questo momento, ti restituisce decine di migliaia di dispositivi, router, DVR, telecamere, con il banner telnet aperto sul mondo, e una buona percentuale di quelli ha ancora admin/admin nel firmware, e lo sa chiunque abbia letto scanner.c. Centinaia di migliaia di dispositivi con le caratteristiche tipiche di un’infezione Mirai attiva, il banner telnet modificato, certi pattern nel traffico in uscita, e se cerchi le firme delle varianti più recenti nei feed di threat intelligence trovi attività ogni giorno, Mirai non è un pezzo da museo è un ecosistema, il codice sorgente è su GitHub, è su Pastebin, è in dieci corsi universitari di sicurezza come caso di studio, chiunque voglia può leggerlo e compilarlo e modificarlo, e chiunque voglia può trovare su Shodan i dispositivi da infettare perché il numero di telecamere e router con admin/admin o root/xc3511 sul firmware non è diminuito, è aumentato.

Paolo disse, ah si, gesticolando, xc3511.

credenziale di default, continuò Pi, hardcoded in un chipset XiongMai usato in milioni di DVR, è nel sorgente di Mirai alla riga quarantotto di scanner.c, ed è ancora valida su dispositivi venduti adesso, e mentre lo diceva aveva già chiuso il taccuino e appoggiato i gomiti sul bancone e guardava il fondo della sua pinta di birra ormai vuota con l’espressione di qualcuno che ha appena enunciato un fatto talmente ovvio da essere quasi offensivo.

Rita si alzò, rimise il cappotto lentamente, un trench color cammello consumato nei punti giusti, il tipo di capo che sulle altre persone sembrava trascuratezza e su di lei sembrava una scelta estetica deliberata. I movimenti ricordavano le trasformazioni delle protagoniste delle Anime di cui tutti e tre erano Fan, raccolse il taccuino e lo tenne in mano un secondo prima di metterlo nella borsa. Un gesto preciso e conclusivo che aveva per tutto, nessun movimento sprecato, come se anche i gesti quotidiani fossero stati ottimizzati in qualche momento della sua formazione e non fosse rimasto nient’altro che il necessario.

Pi disse, senza guardare nessuno dei due, sapete qual è il vostro problema.

Paolo e Francesco la guardavano con quell’espressione tipica romana, un cenno con la testa e un accenno di spallucce.

Che cercate sempre la backdoor invece di bussare alla porta principale e lo disse mentre scodinsolava verso l’uscita con quell’andatura lenta che ricordava Jessica Rabbit, fermandosi e voltandosi per un attimo verso di loro con quell’espressione che Francesco aveva imparato a riconoscere nel tempo, non arroganza, qualcosa di più preciso, qualcosa che condividevano tutti e tre. La pazienza leggermente affaticata di chi vede le soluzioni prima degli altri e ha smesso da tempo di stupirsi del fatto che gli altri non le vedano, poi uscì e la porta del bar si richiuse dietro di lei con il suono morbido che fanno le porte dei bar vecchi.

Gigi raccolse i bicchieri vuoti e disse, quella ragazza, scuotendo la testa nel modo in cui si scuote la testa davanti alle cose che non si spiegano ma si rispettano, aggiungendo poi, è venuta prima che arrivaste voi. Era seduta lì in fondo con il computer e leggeva delle cose, ho provato a guardare lo schermo ma non capivo niente, sembrava matematica ma con le lettere al posto dei numeri.

Paolo disse, è crittografia Gigi.

Gigi disse, ah, come i codici segreti.

Paolo disse, più o meno.

Gigi disse, bella ragazza, e tornò verso il bancone con il tono di chi ha detto tutto quello che c’era da dire sull’argomento.

Paolo disse sottovoce, ogni volta, e Francesco non rispose perché non c’era niente da aggiungere.

Si narrava nel giro di chi la conosceva, con quella precisione leggendaria che hanno le storie raccontate tante volte, che una volta ad uno che si era proposto con un messaggio dopo aver passato una serata simile a questa avesse ricevuto come risposta, dopo dodici minuti esatti, un link a un paper del 2019 sull’analisi crittografica dei protocolli di autenticazione embedded, Bernstein e Lange, Never trust the messenger. Nessun altro commento solo il link. Il povero cristo aveva impiegato una settimana a capire se fosse un no o una lettura consigliata, e alla fine aveva concluso che era entrambe le cose. In fondo era il rifiuto più elegante che avesse mai ricevuto perché almeno ti lasciava qualcosa da studiare, il che era esattamente il problema con Rita, ti lasciava sempre qualcosa, un’idea, una referenza, un’asimmetria da risolvere, e non era mai abbastanza e non era mai il punto.

In fin dei conti Pi aveva ragione, il problema con lei non era che fosse o sembrasse irraggiungibile, era che ti faceva sembrare ragionevole continuare a provarci. Francesco e Paolo erano convinti che questa era probabilmente la forma più sofisticata di crittografia che esistesse, un cifrario senza chiave pubblica disponibile, nessun algoritmo di scambio, nessun handshake che andasse a buon fine.

Fuori i sampietrini brillavano di pioggia sottile e Rita con i suoi tacchi e il suo taccuino era già sparita nell’angolo della strada come se avesse calcolato esattamente quanti passi servivano per non essere più raggiungibile. Anche adesso, da qualche parte nella rete, c’è uno scanner che continua a girare, paziente e metodico, che cerca qualcosa con la porta 23 aperta.


I personaggi sono di fantasia. Mirai no. Rita … chissà


¹ ChaCha20 è un algoritmo di cifratura a flusso progettato da Daniel J. Bernstein nel 2008, usato in TLS, SSH e WireGuard. È considerato uno degli algoritmi più robusti e veloci disponibili ed è preferito ad AES in contesti dove non è disponibile l’accelerazione hardware.


Fonte primaria: il post originale su Hackforums

Anna-senpai, [FREE] World’s Largest Net: Mirai Botnet, Client, Echo Loader, CNC source code release, Hackforums, thread ID 5420472, 30 settembre 2016, ore 11:50 AM. Testo completo conservato su GitHub: https://github.com/jgamblin/Mirai-Source-Code/blob/master/ForumPost.txt


Codice sorgente

jgamblin, Mirai-Source-Code – Leaked Mirai Source Code for Research/IoC Development Purposes, GitHub. https://github.com/jgamblin/Mirai-Source-Code


Analisi tecniche dellepoca

Brian Krebs, Source Code for IoT Botnet ‘Mirai’ Released, KrebsOnSecurity, 1 ottobre 2016. https://krebsonsecurity.com/2016/10/source-code-for-iot-botnet-mirai-released/

Brian Krebs, Who Is Anna-Senpai, the Mirai Worm Author?, KrebsOnSecurity, 17 gennaio 2017. https://krebsonsecurity.com/2017/01/who-is-anna-senpai-the-mirai-worm-author/

MalwareMustDie!, MMD-0056-2016 — Linux/Mirai, just an old ELF malcode recycled, blog.malwaremustdie.org, 31 agosto 2016. http://blog.malwaremustdie.org/2016/08/mmd-0056-2016-linuxmirai-just.html

Flashpoint / Dyn, Dyn Analysis Summary of Friday October 21 Attack, Dyn Blog, 25 ottobre 2016. https://dyn.com/blog/dyn-analysis-summary-of-friday-october-21-attack/


Attacco a Dyn — ottobre 2016

NJCCIC (New Jersey Cybersecurity and Communications Integration Cell), Mirai Botnet, threat landscape entry. https://www.cyber.nj.gov/threat-landscape/malware/botnets/mirai


Procedimento penale — plea guilty e sentenza

U.S. Department of Justice, Justice Department Announces Charges and Guilty Pleas in Three Computer Crime Cases Involving Significant DDoS Attacks, comunicato stampa, 8 dicembre 2017. https://www.justice.gov/archives/opa/pr/justice-department-announces-charges-and-guilty-pleas-three-computer-crime-cases-involving

U.S. Attorney’s Office, District of Alaska, Hackers’ Cooperation with FBI Leads to Substantial Assistance in Other Complex Cybercrime Investigations, comunicato stampa, 18 settembre 2018. (fonte: DoJ / traduzione via morelaw.com)

TechTarget / SearchSecurity, Mirai botnet creators avoid jail time after helping the FBI, 2018. https://www.techtarget.com/searchsecurity/news/252449109/Mirai-botnet-creators-avoid-jail-time-after-helping-the-FBI


Varianti post-rilascio

Check Point Research, Satori/Okiru — Good Zero Day Skiddie, 22 dicembre 2017 — fonte per CVE-2017-17215, router Huawei HG532, attore Nexus Zeta, 200.000 dispositivi in 12 ore. https://research.checkpoint.com/2017/good-zero-day-skiddie/

The Hacker News, Satori IoT Botnet Exploits Zero-Day to Zombify Huawei Routers, dicembre 2017. https://thehackernews.com/2017/12/satori-mirai-iot-botnet.html

Infosec Institute, Mirai Botnet Evolution Since Its Source Code Is Available Online – panoramica su Masuta, JenX, Wicked, RapperBot. https://resources.infosecinstitute.com/topics/malware-analysis/mirai-botnet-evolution-since-its-source-code-is-available-online/

Radware, JenX – Los Angeles-based Crime Gang Brings You IoT DDoS, 2018 – fonte per JenX e l’uso di server Valve Source Engine. https://www.radware.com/security/ddos-threats-attacks/threat-advisories-attack-reports/jenx/


Analisi comparativa recente

Arxiv.org, Analyzing The Mirai IoT Botnet and Its Recent Variants, 2025 – fonte per Enemybot, RapperBot, varianti 2022-2024. https://arxiv.org/pdf/2508.01909


Nota sul paper citato da PiGreco nel finale

Il paper Never Trust the Messenger di Bernstein e Lange è una licenza narrativa – i due autori esistono (Daniel J. Bernstein e Tanja Lange, massimi esperti mondiali di crittografia a curve ellittiche e coautori di Curve25519 e ChaCha20), ma il titolo specifico è di fantasia. Se vuoi una referenza reale analoga: Bernstein & Lange, SafeCurves: choosing safe curves for elliptic-curve cryptography, https://safecurves.cr.yp.to – stessa aura, stesso peso.


Tutto il resto nell’articolo – struttura del codice, scanner.c, attack.h, credenziali, architetture target, timeline è verificabile direttamente nel sorgente pubblico su GitHub.

Francesco
Francesco
Articoli: 22

Lascia una risposta

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.