0Pricing
Cyber Security Academy · Lekcja

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, description
  • reference — odnośnik do raportu lub komunikatu
  • hash — 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 liter
  • wide — 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" fullword

Cią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\// ascii

Sekcja 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 $benign

Zliczanie i zbiory

YARA oferuje elastyczne kwantyfikatory dla zbiorów ciągów znaków:

  • any of them / all of them
  • 2 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 >= 2

Przesunię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ów
  • filesize — całkowity rozmiar, na przykład filesize < 200KB
  • uint16(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 $payload

Moduł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, imphash
  • hash — obliczanie md5/sha256 dla regionów
  • math — entropia i statystyki
  • elf, 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, private i 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

  1. Do czego służy YARA
  2. Składnia reguł YARA
  3. Wyszukiwanie zagrożeń za pomocą ciągów znaków i zapisu szesnastkowego
  4. Skalowanie i automatyzacja skanowania
← Powrót do Cyber Security Academy