· 7 min de citit
Reguli Sigma și YARA cu AI: de la draft la detecție testată
Scrie reguli Sigma din descrieri de atac și reguli YARA din string-uri extrase cu Odin v1, apoi reduci false pozitivele, le convertești în query-uri SIEM și le testezi.
Scrierea regulilor de detecție e în mare parte muncă de traducere: intră o descriere a unui atac sau o grămadă de string-uri extrase și iese o regulă precisă. Un model de limbaj se descurcă bine la traducerea asta, cu condiția să nu refuze să discute comportamentul atacatorului pe care încerci să-l detectezi. Ghidul ăsta îți arată cum să folosești Odin v1 ca să scrii drafturi de reguli Sigma și YARA, să le reglezi, să le convertești în query-uri SIEM și să le testezi înainte de producție.
Unde te ajută un model și unde nu
Odin v1 grăbește părțile lente, dar nu grele: transformă un paragraf dintr-un raport de threat intelligence într-o primă regulă Sigma, alege string-uri candidate dintr-un dump lung de strings, sugerează filtre pentru alertele zgomotoase și explică de ce o regulă s-a declanșat sau nu.
Nu înlocuiește testarea. Un model n-a văzut niciodată mediul tău sau pipeline-ul tău de loguri. Tratează fiecare regulă generată ca pe un draft: validează sintaxa cu instrumente reale, rulează regula pe date benigne, apoi pe un sample malițios cunoscut, într-un laborator.
Reguli Sigma dintr-o descriere de atac
Pornește de la o descriere scurtă și concretă a comportamentului. Un input vag („detectează PowerShell malițios”) produce reguli vagi. Un prompt bun numește sursa de loguri, comportamentul și zgomotul pe care îl știi deja:
Scrie o regulă Sigma pentru logurile Windows de creare a proceselor (Sysmon Event ID 1 sau Security 4688 cu auditarea liniei de comandă activată). Detectează powershell.exe sau pwsh.exe pornit cu -EncodedCommand sau cu oricare dintre formele lui scurte (-e, -ec, -en, -enc). Potrivește pe Image și pe OriginalFileName, ca să prinzi și binarele redenumite. Clientul nostru SCCM (C:\Windows\CCM\CcmExec.exe) lansează legitim comenzi codate, așa că filtrează-l. Include tag-uri ATT&CK, false pozitive și un level.
Te poți aștepta la o regulă YAML completă plus note despre compromisuri: -e cu spații în jur evită potrivirea pe -ExecutionPolicy, PowerShell acceptă orice prefix neambiguu al unui parametru, iar un filtru bazat pe procesul părinte poate fi abuzat de un atacator care controlează acel părinte. După revizuire, regula arată așa:
Aceeași abordare funcționează și pentru binarele living-off-the-land (LOLBins). Descrie un singur tipar de abuz per regulă, de exemplu „certutil.exe cu urlcache sau verifyctl care descarcă un fișier prin HTTP”:
Generează singur un UUID nou pentru fiecare regulă; nu refolosi niciodată un id dintr-un exemplu.
Reguli YARA din string-uri extrase
La YARA, input-ul este rezultatul analizei statice: output de la strings sau FLOSS, metadate PE, secvențe de bytes notabile dintr-un disassembler. Odin v1 acceptă doar text, așa că le lipești ca text. Fereastra de context de 1.000.000 de tokeni îți permite să incluzi deodată string-uri din mai mulți membri ai aceleiași familii, exact ce îți trebuie: o regulă bună de familie se construiește din string-uri comune mai multor sample-uri și rare în software-ul curat.
Mai jos sunt dump-uri de string-uri FLOSS din patru sample-uri ale aceleiași familii de loader, colectate în laboratorul nostru de malware. Alege string-uri care apar în cel puțin trei sample-uri și care sunt puțin probabile în software benign. Evită numele de API-uri, artefactele de compilator și string-urile comune din biblioteci. Scrie o regulă YARA pentru fișiere PE sub 2 MB și explică de ce ai ales fiecare string.
Te poți aștepta la o regulă, la motivul pentru fiecare string ales și la string-urile respinse (cum ar fi kernel32.dll sau un user agent standard de browser). Pentru familia fictivă din ghidul nostru de triaj malware, rezultatul arată așa:
Un singur string de încredere ridicată (calea PDB sau header-ul de config) ajunge de unul singur, în timp ce string-urile mai slabe trebuie să apară împreună. Cere modelului să justifice fiecare string; dacă nu poate, renunță la el.
Reducerea false pozitivelor
O regulă care se declanșează de 400 de ori pe zi ajunge dezactivată. La tuning economisește modelul cel mai mult timp: munca înseamnă să citești multe alerte zgomotoase și să observi tipare. Exportă alertele agregate după imaginea procesului părinte, utilizator și linia de comandă, scoate hostname-urile și numele de utilizator de care nu ai nevoie și întreabă:
Acestea sunt alertele din ultimele 7 zile pentru regula de PowerShell codat, grupate după ParentImage și prefixul CommandLine. Care grupuri arată a software legitim? Propune filtre Sigma cât mai înguste și spune-mi ce ar trebui să controleze un atacator ca să abuzeze fiecare filtru.
Obiceiuri bune de tuning, de impus în prompt și la revizuire:
- Filtrează pe căi complete plus procesul părinte, nu pe un substring din linia de comandă pe care un atacator îl poate copia.
- Folosește convenția Sigma
filter_main_*pentru filtrele valabile peste tot șifilter_optional_*pentru cele specifice mediului. - Coboară
level-ul în loc să adaugi un filtru atunci când nu poți face filtrul suficient de îngust. - Pentru YARA, scanează un set mare de goodware (o instalare curată de Windows, repository-ul tău de software) și elimină orice string care se potrivește acolo.
Conversia Sigma într-un query SIEM
Regulile Sigma se convertesc cu sigma-cli, care folosește backend-uri și pipeline-uri de procesare pySigma ca să mapeze câmpurile generice pe schema ta de loguri:
Pentru regula de PowerShell codat, output-ul pentru Splunk este:
Pentru Elastic, instalează plugin-ul elasticsearch și folosește -t lucene -p ecs_windows. Preferă instrumentul în locul conversiei manuale cerute modelului: backend-urile tratează consecvent escaping-ul și maparea câmpurilor.
Testarea pe loguri benigne și pe sample-uri de laborator
Fiecare regulă are nevoie de două teste înainte de deployment.
Un test negativ. Rulează regula pe un baseline despre care știi că e curat, de exemplu o săptămână de loguri de creare a proceselor de pe mașinile din laborator și de pe câteva stații de lucru reprezentative. Instrumente precum Chainsaw și Zircolite rulează reguli Sigma direct pe exporturi EVTX, sau poți rula query-ul convertit în SIEM pe o fereastră de timp liniștită. Orice potrivire e un fals pozitiv pe care trebuie să-l explici sau să-l filtrezi.
Un test pozitiv. Declanșează comportamentul într-un VM de laborator izolat și confirmă că regula se declanșează. Pentru regula de PowerShell codat ajunge o comandă inofensivă:
Pentru YARA, echivalentul este:
Ține sample-urile reale în VM-ul de analiză, niciodată pe o stație de lucru.
Automatizarea buclei de draft și verificare
Scriptul de mai jos trimite o descriere de comportament către Odin v1, extrage YAML-ul, îl parsează cu pySigma (care aruncă o eroare la regulile invalide) și afișează query-ul Splunk. Instalează dependențele cu pip install openai sigma-cli pysigma-backend-splunk pysigma-pipeline-sysmon.
Rulează-l cu python draft_sigma.py < behavior.txt. Dacă parsarea eșuează, lipește eroarea înapoi la model și cere o corectură. Pentru un harness care rulează reguli YARA pe folderele de sample-uri și de goodware, vezi tooling de securitate construit cu Claude Code pe Odin. Ghidul pentru OpenAI SDK explică configurarea clientului.
Primii pași
Creează o cheie API în consolă, urmează quickstart-ul și rulează scriptul de mai sus pe un comportament din cel mai recent raport de threat intelligence. Ține manipularea sample-urilor în laboratorul tău și munca în limitele Politicii de utilizare acceptabile.