Algoritmi di Generazione Domini: Domain Generation Algorithms (T1568.002)

I Domain Generation Algorithms — comunemente abbreviati in DGA — rappresentano una delle tecniche più insidiose per garantire la resilienza dei canali di comando e controllo. Invece di affidarsi a una lista statica di domini o indirizzi IP, il malware genera programmaticamente centinaia o migliaia di nomi di dominio seguendo un algoritmo deterministico. L'attaccante registra solo pochi di quei domini in un dato periodo, ma il difensore è costretto a prevedere — o bloccare — l'intero spazio generato.

Questa tecnica si colloca nella fase di Command and Control (TA0011), il momento in cui l'avversario necessita di un canale affidabile per impartire istruzioni ai sistemi compromessi. I DGA esistono in due varianti principali: quelli basati su singoli caratteri, che producono stringhe dall'aspetto casuale come istgmxdejdnxuyla.ru, e quelli basati su parole intere, che concatenano termini del dizionario producendo risultati come cityjulydish.net. Molti algoritmi utilizzano la data corrente come seed, generando domini diversi su base oraria, giornaliera o mensile. Alcuni incorporano seed aggiuntivi unici per istanza, rendendo la previsione ancora più ardua.

I numeri del framework confermano la diffusione trasversale della tecnica: 2 gruppi APT documentati, ben 20 famiglie software che la implementano e 2 strategie di mitigazione raccomandate. La varietà di malware che adottano DGA — dal banking trojan al RAT modulare — dimostra quanto questa tecnica sia diventata un mattone fondamentale dell'arsenale offensivo moderno.


Simulare un DGA in laboratorio è un esercizio fondamentale per comprendere cosa il SOC dovrà rilevare. L'obiettivo non è costruire malware, ma generare traffico DNS realistico che attivi — o non attivi — le regole di detection del blue team.

Il punto di partenza più naturale è Python. Un DGA time-based elementare basato su hash si scrive in poche righe: si concatena la data corrente con un seed, si calcola l'hash MD5 e si estraggono i primi N caratteri come nome di dominio. In laboratorio, lo script può lanciare risoluzioni DNS verso quei domini inesistenti usando la libreria socket, generando il pattern di NXDOMAIN che i sistemi di detection devono intercettare.

Per un DGA word-based più realistico — analogo a quello usato da POSHSPY o CHOPSTICK — si utilizza una wordlist da cui pescare parole in posizioni determinate dal seed temporale. Questo tipo di DGA è più difficile da rilevare perché i domini risultanti hanno un'entropia lessicale inferiore.

Il repository DGA di Johannes Bader (open source) raccoglie reimplementazioni Python di algoritmi DGA reali di decine di famiglie malware, tra cui Conficker, QakBot e Bazar. È il riferimento ideale per generare traffico fedele a campioni reali:

python dga.py -d 2024-01-15 -n 100

dove -d specifica la data seed e -n il numero di domini da generare (la sintassi specifica varia per famiglia).

Per iniettare il traffico nella rete lab, dnscat2 (open source) consente di stabilire un canale C2 su DNS. Il server si avvia con:

ruby dnscat2.rb --no-cache

mentre il client genera query DNS che simulano traffico DGA. Un approccio più semplice sfrutta nslookup in loop su Windows:

for /L %i in (1,1,500) do nslookup randomdomain%i.xyz

Questo genera una raffica di query con NXDOMAIN che testa la soglia di alerting del SOC.

Per chi opera con framework strutturati, Cobalt Strike (a pagamento) supporta malleable C2 profiles che possono essere configurati per ruotare i domini di callback simulando un comportamento DGA-like. In alternativa, Sliver (open source) offre capacità analoghe senza costi di licenza, con la possibilità di configurare domini multipli tramite il suo sistema di listener.

Sul fronte macOS, lo stesso approccio Python funziona nativamente. Su ambienti ESXi, la simulazione più efficace è generare traffico DNS dalla management network usando nslookup o dig verso domini pseudo-casuali, osservando come i syslog dell'hypervisor registrano le query.


Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Scarica la guida gratuita e segui il percorso corretto fin dal primo passo