Składnia reguł YARA
Ciągi znaków, warunki i metadane
Składnia reguł YARA to bezpłatna lekcja Cyber Security Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cyber Security Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.
Trzy sekcje
Reguła YARA ma nazwę i maksymalnie trzy sekcje: meta, strings oraz condition. Sekcja condition jest jedyną obowiązkową sekcją, ale rzeczywiste reguły korzystają ze wszystkich trzech.
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
}Sekcja meta
Sekcja meta zawiera opisowe metadane, które nie wpływają na dopasowywanie, ale mają kluczowe znaczenie dla wstępnej analizy i utrzymania reguły.
author,date,descriptionreference— odnośnik do raportu lub komunikatuhash— próbka lub próbki, na podstawie których utworzono regułętlp— klasyfikacja udostępniania
Wartości mogą być ciągami znaków, liczbami całkowitymi lub wartościami logicznymi. Sekcję meta należy traktować jak dokumentację: kolejna osoba reagująca na incydent będzie na niej polegać.
Ciągi tekstowe
Sekcja strings definiuje identyfikatory (zaczynające się od $) powiązane ze wzorcami. Najprostszym z nich jest tekstowy ciąg znaków w cudzysłowie.
Modyfikatory doprecyzowują dopasowywanie:
nocase— bez rozróżniania wielkości literwide— UTF-16 (dwa bajty na znak, często używane w systemie Windows)ascii— ASCII (domyślnie; należy połączyć z wide, aby dopasować oba warianty)fullword— dopasowanie tylko całego słowa
strings:
$s1 = "cmd.exe /c" nocase
$s2 = "InjectDll" wide ascii
$s3 = "admin" fullwordCiągi szesnastkowe
W przypadku wzorców binarnych należy użyć ciągu szesnastkowego w nawiasach klamrowych. Dopasowują one surowe bajty, dzięki czemu idealnie nadają się do opkodów, liczb magicznych i struktur.
Ciągi szesnastkowe obsługują elastyczne dopasowywanie:
??— symbol wieloznaczny dla półbajtu lub bajtu[n-m]— przeskok obejmujący od n do m dowolnych bajtów( A | B )— alternatywy
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 }Wyrażenia regularne
YARA obsługuje wzorce regex ujęte w ukośniki, z tymi samymi modyfikatorami co ciągi tekstowe. Z regex warto korzystać, gdy wzorzec może się różnić, ale zachowuje określoną strukturę, na przykład w przypadku znacznika konfiguracji lub generowanej nazwy mutexu.
Regex jest potężnym narzędziem, ale kosztownym obliczeniowo; jeśli to możliwe, należy preferować stałe ciągi lub zapis szesnastkowy, a wyrażenia regex silnie zakotwiczać, aby uniknąć skanowania całego pliku.
strings:
$re1 = /mutex_[a-f0-9]{8}/ nocase
$re2 = /https?:\/\/[a-z0-9]{12,20}\.top\// asciiSekcja condition
condition jest wyrażeniem logicznym, które decyduje o dopasowaniu. Do identyfikatorów ciągów należy odwoływać się bezpośrednio; samodzielny $a ma wartość true, jeśli ciąg został znaleziony.
Wyrażenia można łączyć za pomocą and, or, not oraz nawiasów. To tutaj koduje się logikę odróżniającą rzeczywiste trafienie rodziny od przypadkowej zbieżności.
condition:
$a and ($b or $c) and not $benignZliczanie i zbiory
YARA oferuje elastyczne kwantyfikatory dla zbiorów ciągów znaków:
any of them/all of them2 of ($s*)— co najmniej dwa elementy z grupy#a > 3— liczba dopasowań $a przekracza 3
Dzięki nim można wymagać na przykład trzech z pięciu znaczników rodziny, równoważąc czułość i liczbę fałszywych alarmów.
condition:
3 of ($str*) and #marker >= 2Przesunięcia i rozmiar pliku
Warunki mogą odwoływać się do miejsca, w którym występuje dopasowanie, oraz do rozmiaru pliku:
$a at 0— dopasowanie musi znajdować się pod przesunięciem 0$a in (0..1024)— w określonym zakresie bajtówfilesize— całkowity rozmiar, na przykładfilesize < 200KBuint16(0) == 0x5A4D— odczyt liczby całkowitej pod danym przesunięciem (tutaj nagłówka MZ)
Zakotwiczenie dopasowań w konkretnym miejscu znacznie ogranicza liczbę fałszywych alarmów i przyspiesza skanowanie.
condition:
uint16(0) == 0x5A4D and filesize < 500KB and $payloadModuły
YARA moduły udostępniają ustrukturyzowane dane uwzględniające format pliku, dzięki czemu warunki mogą operować na sparsowanych polach zamiast na surowych bajtach.
pe— importy PE, sekcje, punkt wejścia, sygnatury, imphashhash— obliczanie md5/sha256 dla regionówmath— entropia i statystykielf,dotnet,magic
Import modułu pe pozwala na przykład dopasowywać importowane funkcje lub konkretny imphash, co jest znacznie bardziej niezawodne niż dopasowanie dosłownego ciągu.
import "pe"
condition:
pe.imphash() == "a1b2c3d4e5f6..." and
pe.imports("kernel32.dll", "VirtualAllocEx")Iterowanie po zbiorach
W przypadku bardziej rozbudowanej logiki YARA obsługuje za pomocą for iterowanie po kolekcjach. Można wyrazić warunki takie jak „co najmniej dwa z tych przesunięć spełniają określony warunek” albo „dowolna nazwa sekcji pasuje do wzorca”.
Jest to niezbędne podczas pracy z danymi modułów, takimi jak sekcje PE lub importy, gdy trzeba przeanalizować listę o zmiennej długości zamiast pojedynczej wartości.
import "pe"
condition:
for any i in (0..pe.number_of_sections - 1) : (
pe.sections[i].name == ".evil"
)global, private i tagi
Słowa kluczowe na poziomie reguł porządkują zestaw reguł:
global rule— jej warunek kontroluje wszystkie pozostałe reguły w pliku (na przykład pozwala skanować wyłącznie pliki PE)private rule— wielokrotnie używany element składowy, który nie jest raportowany samodzielnie, ale do którego mogą odwoływać się inne reguły- tagi umieszczone za nazwą reguły klasyfikują trafienia (na przykład na potrzeby filtrowania wyników)
global private rule IsPE { condition: uint16(0) == 0x5A4D }
rule Dropper : trojan dropper {
strings: $a = "drop_payload"
condition: $a
}Szybki test
Przeanalizuj odporność warunku na zmiany.
Podsumowanie
Składnia reguł YARA w jednym ujęciu:
- Reguła =
meta+strings+condition - Ciągi tekstowe z modyfikatorami nocase/wide/ascii/fullword
- Ciągi szesnastkowe z symbolami wieloznacznymi
??, skokami[n-m]i alternatywami - Wyrażenia regex dla zmiennych wzorców o określonej strukturze (należy używać ich oszczędnie)
conditionłączy ciągi za pomocą and/or/not- Kwantyfikatory: any/all/N of oraz licznik
#a - Zakotwiczanie: at, in, filesize i odczyty uint
- Moduły (pe, hash, math) dopasowują dane strukturalne i imphash
global,privatei tagi porządkują zestawy reguł
Następnie: praktyczne wyszukiwanie za pomocą ciągów i zapisu szesnastkowego.
Często zadawane pytania
Czy lekcja „Składnia reguł YARA” jest bezpłatna?
Tak — pełny tekst „Składnia reguł YARA” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cyber Security Academy, przejdź na CoddyKit PRO. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Składnia reguł YARA”?
Ciągi znaków, warunki i metadane Ćwiczysz Cyber Security Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cyber Security Academy?
Nie wymagamy żadnego doświadczenia. Cyber Security Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Składnia reguł YARA”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cyber Security Academy?
Tak. Każda lekcja Cyber Security Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Do czego służy YARA
- Składnia reguł YARA
- Wyszukiwanie zagrożeń za pomocą ciągów znaków i zapisu szesnastkowego
- Skalowanie i automatyzacja skanowania