Cyber Security Academy · Lezione

Threat hunting con stringhe ed esadecimali

Individuare artefatti di malware.

Lezione 3 di 413 passaggi

Threat hunting con stringhe ed esadecimali è una lezione Cyber Security Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cyber Security Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cyber Security Academy include 4 lezioni in totale.

Dal campione alla regola

L'attività di hunting inizia con un campione. Estrae gli artefatti distintivi, decide quali siano durevoli e li codifica in una regola che rilevi la famiglia senza segnalare file benigni.

Il flusso di lavoro è il seguente: analizzare rapidamente il campione, estrarre stringhe e caratteristiche strutturali, distinguere i segnali dal rumore, abbozzare la regola e infine testarla sia sulla famiglia sia su un corpus pulito prima della distribuzione.

Estrazione delle stringhe candidate

Inizi con l'utility strings per elencare le sequenze stampabili, includendo sia il testo ASCII sia quello UTF-16 (wide). Il malware per Windows memorizza spesso le stringhe in formato wide.

Esamini l'output alla ricerca di URL C2, nomi di mutex, percorsi del registro, messaggi di errore personalizzati, percorsi PDB e testo insolitamente specifico. Ignori le stringhe generiche di runtime e del compilatore.

strings -a sample.bin > ascii.txt
strings -e l sample.bin > wide.txt   # UTF-16LE
grep -iE 'http|mutex|\\\\pipe\\\\|\.pdb' ascii.txt wide.txt

Scelta delle stringhe durevoli

Non tutte le stringhe appartengono a una regola. Preferisca gli artefatti che l'autore non può modificare senza fare uno sforzo:

  • Nomi hardcoded di mutex/pipe univoci per la famiglia
  • Indicatori di protocolli personalizzati o chiavi di configurazione
  • Messaggi di debug o panic insoliti
  • Percorsi PDB incorporati che rivelano l'ambiente di compilazione

Eviti il boilerplate delle librerie, i nomi di API comuni e le stringhe di versione condivise dal software legittimo, che generano falsi positivi.

strings:
  $mutex = "Global\\Zx7yQ_lock" wide
  $cfgkey = "x0r_cfg_begin" ascii
  $pdb = "C:\\build\\loader\\release\\loader.pdb"

Contrastare la semplice offuscazione

Molte famiglie applicano XOR alle stringhe o le codificano in modo analogo e leggero. Se le stringhe in chiaro sono poche, cerchi la forma codificata o la routine di decodifica.

Può calcolare i byte codificati con XOR di un testo noto in chiaro e cercare una corrispondenza su quelli, oppure usare il modificatore xor di YARA per trovare automaticamente una stringa con qualsiasi chiave XOR a un byte.

strings:
  // matches "http://" under any single-byte XOR key
  $u = "http://" xor
  // or a fixed key range
  $k = "config" xor(0x01-0xff)

Ricerca con pattern esadecimali

Quando le stringhe sono offuscate ma il codice non lo è, cerchi pattern di byte ricavati dalla logica stessa del malware: uno stub di decrittografia, un ciclo di unpacking o una costante univoca.

Disassembli il campione, individui una sequenza distintiva di istruzioni e trasformi gli opcode in una stringa esadecimale. Sostituisca con caratteri jolly i byte variabili, come indirizzi e valori immediati, in modo che il pattern resista alla ricompilazione.

strings:
  // XOR decrypt loop with wildcarded counter/address
  $decrypt = { 8A ?? 34 ?? 88 ?? 4? 4? 75 ?? }

Caratteri jolly e salti nella pratica

L'arte della ricerca con pattern esadecimali consiste nello scegliere cosa sostituire con caratteri jolly. Un pattern troppo rigido non sopravvive a una ricompilazione; uno troppo permissivo corrisponde a qualsiasi cosa.

  • Sostituisca con caratteri jolly gli offset relativi e i valori immediati che il compilatore modifica
  • Mantenga fissi gli opcode, poiché l'algoritmo rimane stabile
  • Utilizzi i salti [n-m] quando la lunghezza delle istruzioni varia

Punti a un pattern abbastanza lungo da essere univoco, spesso almeno 8 byte significativi, ma flessibile dove necessario.

strings:
  $stub = { 55 8B EC 83 EC [1-4] E8 ?? ?? ?? ?? 33 C0 }

Indicatori strutturali e PE

Le caratteristiche statiche oltre i byte grezzi producono condizioni efficaci e con pochi falsi positivi. Utilizzando il modulo pe può verificare:

  • imphash — hash della tabella delle importazioni, spesso stabile tra le build di una famiglia
  • nomi delle sezioni — i packer personalizzati aggiungono sezioni rivelatrici
  • importazioni specifiche — VirtualAllocEx + WriteProcessMemory + CreateRemoteThread segnala un'iniezione
import "pe"
condition:
  pe.imphash() == "4e3a9f..." or
  for any s in pe.sections : ( s.name == ".x0rsec" )

L'entropia come indicatore

Le regioni impacchettate o cifrate hanno un'entropia elevata. Il modulo math la misura, consentendo di segnalare i campioni la cui sezione payload sembra cifrata, una caratteristica tipica dei packer.

L'entropia da sola è poco indicativa, poiché anche gli installer compressi hanno un'entropia elevata; la combini quindi con altri indicatori invece di generare un alert basato solo su di essa.

import "math"
condition:
  math.entropy(0, filesize) >= 7.2 and $loader_stub

Combinazione degli indicatori

Le regole più efficaci richiedono più indicatori indipendenti, affinché nessuna singola coincidenza attivi una corrispondenza. Combini una stringa, un pattern di codice e una caratteristica strutturale.

Questa condizione a più livelli resiste sia ai falsi positivi, poiché tutte le parti devono concordare, sia all'elusione, poiché l'autore deve modificare più caratteristiche contemporaneamente.

condition:
  uint16(0) == 0x5A4D and
  filesize < 800KB and
  $mutex and
  $decrypt and
  pe.imports("kernel32.dll", "CreateRemoteThread")

Nomi, metadati e versionamento

Una regola di hunting è utile solo se gli altri possono considerarla affidabile e mantenerla. Le assegni un nome chiaro con namespace e un meta completo.

  • Registri gli hash dei campioni da cui è stata ricavata la regola
  • Indichi la famiglia, l'autore, la data e un riferimento
  • Incrementi il campo version quando perfeziona la logica

Quando la regola si attiva mesi dopo, questi metadati comunicano all'analista che cosa significa e quanto sia affidabile, trasformando una ricerca estemporanea in un rilevamento durevole e condivisibile.

meta:
  family = "X0rLoader"
  author = "ir-team"
  date = "2026-06-04"
  hash = "9f1c...e2"
  version = "2"

Testare prima di fidarsi

Convalidi sempre una nuova regola su due corpora:

  • Veri positivi — ogni campione noto della famiglia deve corrispondere
  • Goodware — un ampio insieme pulito, costituito da binari di sistema e applicazioni comuni, NON deve corrispondere

Un singolo falso positivo su una DLL Windows può mettere in quarantena file critici in tutta l'infrastruttura. Esegua la scansione, conteggi e analizzi le mancate corrispondenze e i rilevamenti, quindi perfezioni la regola prima di distribuirla su larga scala.

yara -r family.yar /malware_corpus/   # expect all to hit
yara -r family.yar /clean_corpus/     # expect zero hits

Verifica rapida

Scelga l'indicatore più resiliente.

Riepilogo

La ricerca pratica con YARA, dall'inizio alla fine:

  • Estragga stringhe ASCII e wide; conservi gli artefatti durevoli, come mutex, chiavi di configurazione e percorsi PDB
  • Contrasti l'offuscazione leggera con il modificatore xor o con pattern codificati
  • Cerchi pattern di byte del codice, come stub di decrittografia o unpacking, quando le stringhe sono nascoste
  • Sostituisca con caratteri jolly i byte volatili, mantenga fissi gli opcode e utilizzi i salti per le lunghezze variabili
  • Utilizzi imphash, sezioni e importazioni PE e l'entropia come indicatori strutturali
  • Combini più indicatori per resistere ai falsi positivi e all'elusione
  • Esegua sempre i test sui corpus della famiglia e del goodware prima della distribuzione

Successivamente: esecuzione di queste regole sull'intera infrastruttura.

Gratis per iniziare

Impara Cyber Security Academy con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
76
Lezioni
303

Domande Frequenti

La lezione «Threat hunting con stringhe ed esadecimali» è gratuita?

Sì — il testo completo di «Threat hunting con stringhe ed esadecimali» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cyber Security Academy, passa a CoddyKit PRO. Il corso Cyber Security Academy include 4 lezioni in totale.

Cosa imparerò in «Threat hunting con stringhe ed esadecimali»?

Individuare artefatti di malware. Eserciti Cyber Security Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Cyber Security Academy?

Non è richiesta alcuna esperienza precedente. Cyber Security Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Threat hunting con stringhe ed esadecimali»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Cyber Security Academy?

Sì. Ogni lezione Cyber Security Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. A cosa serve YARA
  2. Sintassi delle regole YARA
  3. Threat hunting con stringhe ed esadecimali
  4. Scalare e automatizzare le scansioni
← Torna a Cyber Security Academy