YARA Kuralı Söz Dizimi
Dizeler, koşullar ve üst veriler.
YARA Kuralı Söz Dizimi, CoddyKit'te ücretsiz bir Cyber Security Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cyber Security Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cyber Security Academy kursu toplamda 4 dersten oluşur.
Üç Bölüm
Bir YARA kuralının bir adı ve en fazla üç bölümü vardır: meta, strings ve condition. Koşul tek zorunlu bölümdür, ancak gerçek kurallar üçünü de kullanır.
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
}meta Bölümü
meta, eşleştirmeyi etkilemeyen ancak önceliklendirme ve bakım için hayati olan açıklayıcı üst verileri barındırır.
author,date,descriptionreference— rapor veya duyuru bağlantısıhash— kuralın oluşturulduğu örnek(ler)tlp— paylaşım sınıflandırması
Değerler dizeler, tam sayılar veya mantıksal değerlerdir. meta bölümünü belge olarak değerlendirin: bir sonraki müdahale uzmanı ona güvenecektir.
Metin Dizeleri
strings bölümü, örüntülere bağlanan ve $ ile başlayan tanımlayıcıları tanımlar. En basit olanı tırnak içine alınmış bir metin dizesidir.
Değiştiriciler eşleştirmeyi daha kesin hâle getirir:
nocase— büyük/küçük harfe duyarsızwide— UTF-16 (karakter başına iki bayt; Windows'ta yaygındır)ascii— ASCII (varsayılan; her ikisini de eşleştirmek için wide ile birleştirin)fullword— yalnızca tam sözcük olarak eşleştir
strings:
$s1 = "cmd.exe /c" nocase
$s2 = "InjectDll" wide ascii
$s3 = "admin" fullwordOnaltılık Dizeler
İkili örüntüler için süslü parantez içinde bir onaltılık dize kullanın. Bunlar ham baytlarla eşleşir ve işlem kodları, sihirli sayılar ve yapılar için idealdir.
Onaltılık dizeler esneklik sağlar:
??— joker yarım bayt/bayt[n-m]— n ile m arasında rastgele bayt atlaması( A | B )— alternatifler
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 }Düzenli İfadeler
YARA, eğik çizgilerle sınırlanmış ve metin dizeleriyle aynı değiştiricileri kullanan düzenli ifade örüntülerini destekler. Bir örüntü değişkenlik gösterse de bir yapı izlediğinde, örneğin bir yapılandırma işareti veya oluşturulmuş bir karşılıklı dışlama nesnesi adı için düzenli ifade kullanın.
Düzenli ifadeler güçlüdür ancak maliyetlidir; mümkün olduğunda sabit dizeleri veya onaltılık değerleri tercih edin ve dosyanın tamamının taranmasını önlemek için düzenli ifadeyi sıkı biçimde sabitleyin.
strings:
$re1 = /mutex_[a-f0-9]{8}/ nocase
$re2 = /https?:\/\/[a-z0-9]{12,20}\.top\// asciicondition Bölümü
condition, eşleşmeye karar veren bir boole ifadesidir. Dize tanımlayıcılarına doğrudan başvurun; tek başına yazılmış $a, dize bulunmuşsa doğru olur.
and, or, not ve parantezlerle birleştirin. Gerçek bir aile eşleşmesini tesadüften ayıran mantığı burada kodlarsınız.
condition:
$a and ($b or $c) and not $benignSayma ve Kümeler
YARA, dize kümeleri üzerinde ifade gücü yüksek niceleyiciler sunar:
any of them/all of them2 of ($s*)— bir grubun en az iki tanesi#a > 3— $a eşleşmelerinin sayısı 3'ü aşar
Bunlar, duyarlılığı yanlış pozitiflerle dengeleyerek örneğin beş aile işaretinden üçünü zorunlu tutmanızı sağlar.
condition:
3 of ($str*) and #marker >= 2Ofsetler ve Dosya Boyutu
Koşullar, bir eşleşmenin nerede gerçekleştiğine ve dosyanın boyutuna başvurabilir:
$a at 0— eşleşme ofset 0'da olmalıdır$a in (0..1024)— bir bayt aralığı içindefilesize— toplam boyut; örneğinfilesize < 200KBuint16(0) == 0x5A4D— bir ofsette tamsayı okur (burada MZ üstbilgisi)
Eşleşmeleri konuma sabitlemek yanlış pozitifleri büyük ölçüde azaltır ve taramayı hızlandırır.
condition:
uint16(0) == 0x5A4D and filesize < 500KB and $payloadModüller
YARA modülleri, koşulların ham baytlar yerine ayrıştırılmış alanlar üzerinde işlem yapabilmesi için yapılandırılmış ve biçime duyarlı veriler sunar.
pe— PE imports, bölümler, giriş noktası, imzalar, imphashhash— bölgelerin md5/sha256 özetlerini hesaplarmath— entropy ve istatistiklerelf,dotnet,magic
Örneğin pe modülünü içe aktarmak, içe aktarılan işlevlere veya belirli bir imphash değerine göre eşleşme yapmanızı sağlar; bu, birebir bir dizeden çok daha sağlamdır.
import "pe"
condition:
pe.imphash() == "a1b2c3d4e5f6..." and
pe.imports("kernel32.dll", "VirtualAllocEx")Kümeler Üzerinde Yineleme
Daha gelişmiş mantık için YARA, for ile koleksiyonlar üzerinde döngüleri destekler. Örneğin, bu ofsetlerden en az ikisinin bir özelliği karşılaması veya herhangi bir bölüm adının bir örüntüyle eşleşmesi gibi koşullar ifade edebilirsiniz.
Tek bir değer yerine değişken uzunluklu bir listeyi incelemeniz gereken PE bölümleri veya imports gibi modül verileriyle çalışırken bu özellik zorunludur.
import "pe"
condition:
for any i in (0..pe.number_of_sections - 1) : (
pe.sections[i].name == ".evil"
)Genel, Özel ve Etiketler
rule düzeyindeki anahtar sözcükler bir rule kümesini düzenler:
global rule— condition'ı dosyadaki diğer tüm kuralların çalışmasını belirler (ör. yalnızca PE dosyalarını tarar)private rule— yeniden kullanılabilir bir yapı taşıdır; tek başına raporlanmaz ancak diğer kurallar tarafından başvurulabilir- rule adından sonra gelen etiketler, eşleşmeleri sınıflandırır (ör. çıktıyı filtrelemek için)
global private rule IsPE { condition: uint16(0) == 0x5A4D }
rule Dropper : trojan dropper {
strings: $a = "drop_payload"
condition: $a
}Hızlı Denetim
Bir condition'ın sağlamlığını değerlendirin.
Özet
YARA rule söz dizimi tek görünümde:
- Bir rule =
meta+strings+condition - Metin dizeleri; büyük-küçük harf duyarsızlığı, geniş, ASCII ve tam sözcük değiştiricileriyle
- Onaltılık dizeler;
??joker karakterleri,[n-m]atlamaları ve alternatiflerle - Yapılandırılmış değişken örüntüler için düzenli ifadeler (ölçülü kullanın)
condition, dizeleri and/or/not ile birleştirir- Niceleyiciler: herhangi/tümü/N tanesi ve
#asayımı - Konuma sabitleme: at, in, filesize ve uint okumaları
- Modüller (pe, hash, math), yapılandırılmış veriler ve imphash ile eşleşir
global,privateve etiketler rule kümelerini düzenler
Sıradaki konu: dizeler ve onaltılık değerlerle uygulamalı avcılık.
Sıkça Sorulan Sorular
“YARA Kuralı Söz Dizimi” dersi ücretsiz mi?
Evet — “YARA Kuralı Söz Dizimi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cyber Security Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cyber Security Academy kursu toplamda 4 dersten oluşur.
“YARA Kuralı Söz Dizimi” dersinde ne öğreneceğim?
Dizeler, koşullar ve üst veriler. Cyber Security Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Cyber Security Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Cyber Security Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“YARA Kuralı Söz Dizimi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Cyber Security Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Cyber Security Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- YARA Ne İçin Kullanılır
- YARA Kuralı Söz Dizimi
- Dizeler ve Onaltılık Değerlerle Avcılık
- Taramaları Ölçeklendirme ve Otomatikleştirme