Sintassi delle regole YARA
Stringhe, condizioni e metadati.
Sintassi delle regole YARA è una lezione Cyber Security Academy gratuita su CoddyKit. Questa è la lezione 2 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.
Le tre sezioni
Una regola YARA ha un nome e fino a tre sezioni: meta, strings e condition. La condizione è l'unica sezione obbligatoria, ma le regole reali le utilizzano tutte e tre.
rule Example_Malware
{
meta:
author = "analyst"
description = "Detects Example family"
strings:
$a = "EvilConfig"
$b = { 6A 40 68 00 30 00 00 }
condition:
$a and $b
}La sezione meta
meta contiene metadati descrittivi che non influiscono sulla corrispondenza, ma sono fondamentali per il triage e la manutenzione.
author,date,descriptionreference— collegamento a un report o a un advisoryhash— campione o campioni da cui è stata ricavata la regolatlp— classificazione per la condivisione
I valori possono essere stringhe, numeri interi o booleani. Considerate la sezione meta come documentazione: chi interverrà dopo di voi farà affidamento su di essa.
Stringhe di testo
La sezione strings definisce identificatori (che iniziano con $) associati a pattern. Il caso più semplice è una stringa di testo racchiusa tra virgolette.
I modificatori consentono di perfezionare la corrispondenza:
nocase— non distingue tra maiuscole e minuscolewide— UTF-16 (due byte per carattere, comune in Windows)ascii— ASCII (impostazione predefinita; combinatelo con wide per trovare entrambe le codifiche)fullword— corrisponde solo a una parola intera
strings:
$s1 = "cmd.exe /c" nocase
$s2 = "InjectDll" wide ascii
$s3 = "admin" fullwordStringhe esadecimali
Per i pattern binari, utilizzate una stringa esadecimale tra parentesi graffe. Queste stringhe corrispondono ai byte grezzi e sono ideali per opcode, magic number e strutture.
Le stringhe esadecimali supportano la flessibilità:
??— nibble/byte jolly[n-m]— un salto da n a m byte arbitrari( A | B )— alternative
strings:
$h1 = { 4D 5A 90 00 }
$h2 = { E8 ?? ?? ?? ?? 83 C4 04 }
$h3 = { 6A 00 [2-6] FF 15 ?? ?? ?? ?? }
$h4 = { ( B8 | B9 ) 00 00 00 00 }Espressioni regolari
YARA supporta pattern regex delimitati da slash, con gli stessi modificatori delle stringhe di testo. Usi le regex quando un pattern varia ma segue una struttura, ad esempio un indicatore di configurazione o il nome di un mutex generato.
Le regex sono potenti ma costose; preferisca stringhe fisse o esadecimali quando possibile e ancori strettamente le regex per evitare di analizzare l'intero file.
strings:
$re1 = /mutex_[a-f0-9]{8}/ nocase
$re2 = /https?:\/\/[a-z0-9]{12,20}\.top\// asciiLa sezione condition
condition è un'espressione booleana che decide se si verifica una corrispondenza. Faccia riferimento direttamente agli identificatori delle stringhe; un $a isolato restituisce true se la stringa è stata trovata.
Combini and, or, not e le parentesi. È qui che codifica la logica che distingue il rilevamento effettivo di una famiglia da una coincidenza.
condition:
$a and ($b or $c) and not $benignConteggi e insiemi
YARA offre quantificatori espressivi sugli insiemi di stringhe:
any of them/all of them2 of ($s*)— almeno due elementi di un gruppo#a > 3— il numero di corrispondenze di $a supera 3
Questi strumenti permettono di richiedere, ad esempio, tre dei cinque indicatori della famiglia, bilanciando sensibilità e falsi positivi.
condition:
3 of ($str*) and #marker >= 2Offset e dimensioni del file
Le condizioni possono fare riferimento a dove si verifica una corrispondenza e alle dimensioni del file:
$a at 0— la corrispondenza deve trovarsi all'offset 0$a in (0..1024)— all'interno di un intervallo di bytefilesize— dimensione totale, ad esempiofilesize < 200KBuint16(0) == 0x5A4D— legge un intero a un determinato offset, in questo caso l'header MZ
Ancorare le corrispondenze a una posizione riduce drasticamente i falsi positivi e velocizza l'analisi.
condition:
uint16(0) == 0x5A4D and filesize < 500KB and $payloadModuli
I moduli di YARA espongono dati strutturati e specifici del formato, consentendo alle condizioni di analizzare campi interpretati invece di byte grezzi.
pe— importazioni PE, sezioni, punto di ingresso, firme, imphashhash— calcola md5/sha256 delle regionimath— entropia e statisticheelf,dotnet,magic
Importare pe, per esempio, consente di verificare funzioni importate o uno specifico imphash, in modo molto più robusto rispetto a una stringa letterale.
import "pe"
condition:
pe.imphash() == "a1b2c3d4e5f6..." and
pe.imports("kernel32.dll", "VirtualAllocEx")Iterazione sugli insiemi
Per la logica più articolata, YARA supporta cicli sulle raccolte con for. Può esprimere condizioni come: almeno due di questi offset soddisfano una proprietà, oppure il nome di una qualsiasi sezione corrisponde a un pattern.
Questo è essenziale quando si lavora con dati dei moduli, ad esempio sezioni o importazioni PE, dove è necessario esaminare un elenco di lunghezza variabile anziché un singolo valore.
import "pe"
condition:
for any i in (0..pe.number_of_sections - 1) : (
pe.sections[i].name == ".evil"
)Global, Private e tag
Le parole chiave a livello di regola organizzano un insieme di regole:
global rule— la sua condizione funge da filtro per tutte le altre regole nel file, ad esempio per analizzare solo file PEprivate rule— blocco riutilizzabile, non segnalato autonomamente ma referenziabile da altre regole- tag dopo il nome della regola classificano i rilevamenti, ad esempio per filtrare l'output
global private rule IsPE { condition: uint16(0) == 0x5A4D }
rule Dropper : trojan dropper {
strings: $a = "drop_payload"
condition: $a
}Verifica rapida
Valuti la robustezza di una condizione.
Riepilogo
La sintassi delle regole YARA in sintesi:
- Una regola =
meta+strings+condition - Stringhe di testo con modificatori nocase/wide/ascii/fullword
- Stringhe esadecimali con caratteri jolly
??, salti[n-m]e alternative - Regex per pattern variabili strutturati, da usare con parsimonia
conditioncombina le stringhe con and/or/not- Quantificatori: any/all/N of e conteggio
#a - Ancoraggio: at, in, filesize e letture con uint
- Moduli (pe, hash, math) per corrispondenze su dati strutturati e imphash
global,privatee tag organizzano gli insiemi di regole
Successivamente: ricerca pratica con stringhe ed esadecimali.
Domande Frequenti
La lezione «Sintassi delle regole YARA» è gratuita?
Sì — il testo completo di «Sintassi delle regole YARA» è 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 «Sintassi delle regole YARA»?
Stringhe, condizioni e metadati. 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 2 di 4.
Quanto tempo richiede la lezione «Sintassi delle regole YARA»?
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
- A cosa serve YARA
- Sintassi delle regole YARA
- Threat hunting con stringhe ed esadecimali
- Scalare e automatizzare le scansioni