🦠 YARA: Tehdit Avcılarının İmza Kalemi

Bir zararlıyı tanımak, onu durdurmanın ilk adımıdır.

Malware analizi, threat hunting ve incident response süreçlerinde bazen tek bir hash değeri yeterli olmaz. Çünkü saldırganlar dosyayı küçük değişikliklerle yeniden paketleyebilir, hash’i değiştirebilir veya aynı malware ailesinin farklı varyantlarını kullanabilir.

Bu noktada YARA, zararlı yazılımları ve şüpheli dosyaları karakteristik izlerine göre tanımlamak için kullanılan güçlü bir açık kaynak kural motoru olarak devreye girer.

Kısa tanım:

YARA = Dosya / bellek / binary pattern eşleştirme için kural tabanlı tespit dili

🔍 YARA Nedir?

YARA, malware araştırmacılarının zararlı yazılım örneklerini tanımlamasına, sınıflandırmasına ve benzer örnekleri yakalamasına yardımcı olan açık kaynaklı bir pattern matching aracıdır.

YARA ile bir dosya veya bellek içeriğinde şu tür izler aranabilir:

  • Metinsel string’ler
  • Hex byte pattern’leri
  • Regex ifadeleri
  • PE dosya özellikleri
  • Dosya boyutu
  • Section bilgileri
  • Import/export yapıları
  • Hash değerleri
  • Malware ailesine özgü karakteristik göstergeler

YARA’nın mantığı basittir:

Belirli izleri tanımla.
Bu izlerin hangi koşullarda eşleşeceğini yaz.
Dosya veya bellek üzerinde tara.
Eşleşme varsa alarm üret veya sınıflandır.

YARA Neden Önemlidir?

Klasik hash tabanlı tespitler çok kırılgandır.

Örneğin bir dosyanın tek bir byte’ı değişse bile MD5/SHA256 hash’i tamamen değişir. Bu durumda hash tabanlı IOC artık eşleşmeyebilir.

YARA ise daha esnek bir yaklaşım sunar.

Örnek:

Aynı malware ailesinde değişmeyen string’ler
Benzer PE import yapıları
Ortak mutex isimleri
Tekrarlayan byte pattern’leri
Benzer packer izleri
Ortak C2 konfigürasyon kalıpları

Bu göstergeler dosya hash’i değişse bile malware ailesini yakalamaya yardımcı olabilir.


🔬 YARA’nın Temel Özellikleri

1️⃣ String ve Pattern Eşleştirme

YARA ile ASCII, wide string, hex pattern ve regex tabanlı eşleşmeler yapılabilir.

Örnek:

strings:
  $s1 = "powershell.exe" ascii wide
  $s2 = "cmd.exe /c" ascii
  $h1 = { 4D 5A }

Bu yapı dosya içinde belirli string veya byte dizilerini aramak için kullanılır.


2️⃣ PE Dosya Analizi

YARA, PE modülü ile Windows executable dosyalarının yapısal özelliklerini analiz edebilir.

Örnek kontrol alanları:

  • PE header
  • Section isimleri
  • Import edilen DLL ve API’ler
  • Entry point
  • Timestamp
  • İmzalama bilgileri
  • Resource bilgileri

Örnek kullanım:

import "pe"

condition:
  uint16(0) == 0x5A4D and pe.number_of_sections > 3

Bu örnek dosyanın PE formatında olup olmadığını ve section sayısını kontrol eder.


3️⃣ Okunabilir Kural Dili

YARA kuralları okunabilir ve anlaşılır bir yapıya sahiptir.

Temel yapı:

rule Rule_Name
{
  meta:
    description = "Kural açıklaması"

  strings:
    $a = "aranacak_string"

  condition:
    $a
}

Her kural üç ana bölümden oluşabilir:

meta      → Açıklama, yazar, tarih, referans gibi bilgiler
strings   → Aranacak pattern/string tanımları
condition → Eşleşme mantığı

4️⃣ Statik ve Dinamik Analiz Süreçlerine Entegrasyon

YARA yalnızca manuel tarama aracı değildir. Malware analiz pipeline’larına entegre edilebilir.

Kullanım alanları:

  • Statik malware analizi
  • Sandbox çıktı analizi
  • Memory dump tarama
  • EDR telemetry doğrulama
  • Dosya sistemi taraması
  • Threat intelligence zenginleştirme
  • Malware family classification

5️⃣ Otomasyon ve Güvenlik Ekosistemi Entegrasyonu

YARA birçok güvenlik aracına entegre edilebilir.

Örnek entegrasyonlar:

  • Sandbox sistemleri
  • EDR ürünleri
  • SIEM / SOAR süreçleri
  • Malware analysis platformları
  • Antivirüs motorları
  • File scanning servisleri
  • Memory forensic araçları
  • CI/CD supply chain güvenlik kontrolleri

Bu yapı sayesinde YARA kuralları sadece analist bilgisayarında değil, operasyonel güvenlik zincirinin birçok noktasında kullanılabilir.


📌 YARA Nerelerde Kullanılır?

🧪 Malware Reverse Engineering

Reverse engineer, zararlı yazılımı analiz ederken benzersiz string, opcode, import, section veya konfigürasyon izlerini çıkarabilir.

Bu izler daha sonra YARA kuralına dönüştürülerek aynı malware ailesinin diğer örneklerini yakalamak için kullanılabilir.


🔍 APT Kampanyalarının Takibi

APT grupları zaman içinde araçlarını değiştirse bile bazı kod parçaları, string kalıpları, packer izleri veya konfigürasyon yapıları tekrar edebilir.

YARA bu tekrar eden izleri yakalamak için güçlüdür.

Örnek:

Aynı loader ailesi
Benzer C2 config formatı
Tekrarlayan debug string
Ortak encryption routine
Benzer resource yapısı

📁 Sandbox ve Antivirüs Sistemleriyle Entegrasyon

Sandbox sistemlerinde analiz edilen dosyalar YARA kurallarıyla taranabilir.

Bu sayede:

  • Malware ailesi belirlenebilir.
  • Şüpheli dosya sınıflandırılabilir.
  • Analiz raporu zenginleştirilebilir.
  • IOC üretimi desteklenebilir.
  • Benzer örnekler otomatik kümelenebilir.

🕵️ IOC Üretimi ve Paylaşımı

YARA kuralları threat intelligence ekipleri için paylaşılabilir detection mantığı sağlar.

Ancak önemli nokta şudur:

YARA kuralı bir IOC olabilir.
Ama her YARA kuralı kaliteli detection değildir.

İyi bir YARA kuralı hem yeterince spesifik olmalı hem de gereksiz false-positive üretmemelidir.


💾 Binary ve Memory Taramaları

YARA sadece disk üzerindeki dosyalar için değil, bellek dump’ları veya process memory alanları üzerinde de kullanılabilir.

Kullanım senaryoları:

  • Memory forensic
  • Fileless malware izleri
  • Injected payload tespiti
  • Process içi şüpheli string arama
  • Dump edilmiş malware konfigürasyonları

✍️ Basit Bir YARA Kuralı Örneği

Aşağıdaki örnek, Windows PE dosyası içinde şüpheli PowerShell string kullanımını arayan basit bir kuraldır.

rule Suspicious_Powershell_In_PE
{
  meta:
    description = "Detects PE files containing suspicious PowerShell references"
    author = "SOC Team"
    date = "2026-06-18"
    severity = "medium"

  strings:
    $mz = { 4D 5A }
    $ps1 = "powershell.exe" ascii wide nocase
    $ps2 = "-EncodedCommand" ascii wide nocase
    $ps3 = "FromBase64String" ascii wide nocase

  condition:
    $mz at 0 and 2 of ($ps*)
}

Kural Ne Yapıyor?

Dosya MZ header ile başlıyor mu?
Dosyada PowerShell referansı var mı?
EncodedCommand veya Base64 decode izleri var mı?
Bu göstergelerden en az ikisi eşleşiyor mu?

Bu kural tek başına kesin malware tespiti değildir. Ancak şüpheli PE örneklerini sınıflandırmak veya triage etmek için kullanılabilir.


🧠 YARA Kural Kalitesi Nasıl Artırılır?

1️⃣ Çok Genel String Kullanmayın

Aşağıdaki string tek başına çok genel olabilir:

$p = "powershell.exe"

Bunu daha anlamlı koşullarla birleştirmek gerekir:

condition:
  uint16(0) == 0x5A4D and 2 of ($ps*)

2️⃣ Hash Yerine Davranışsal İzlere Odaklanın

Hash kırılgandır. Daha iyi yaklaşım:

Ortak string
Import yapısı
Config formatı
Section pattern
Opcode dizisi
Packer izi
Mutex ismi
C2 URI formatı

3️⃣ False-Positive Testi Yapın

Kuralı sadece malware üzerinde değil, goodware üzerinde de test edin.

Test setleri:

  • Temiz Windows binary’leri
  • Kurumsal uygulamalar
  • Admin tool’lar
  • Script engine’ler
  • Developer tool’lar
  • Backup/monitoring agent’ları

4️⃣ Meta Alanını Doldurun

İyi bir YARA kuralı sadece detection değil, dokümantasyon da içerir.

Örnek meta alanları:

meta:
  description = "..."
  author = "..."
  date = "..."
  reference = "..."
  malware_family = "..."
  confidence = "medium"

5️⃣ Performansı Dikkate Alın

Çok sayıda regex, geniş wildcard veya aşırı karmaşık koşullar tarama performansını düşürebilir.

Özellikle büyük dosya havuzlarında veya EDR/sandbox entegrasyonlarında performans önemlidir.


⚠️ Sık Yapılan Hatalar

1️⃣ “MZ” String’i ile Malware Tespiti Yapmak

MZ, Windows PE dosyalarının genel başlangıç imzasıdır. Tek başına zararlı göstergesi değildir.

Yanlış:

condition:
  $mz at 0

Doğru yaklaşım:

condition:
  $mz at 0 and 2 of ($suspicious*)

2️⃣ Çok Geniş Kural Yazmak

Geniş kurallar false-positive üretir ve analist yorgunluğuna neden olur.

3️⃣ Çok Dar Kural Yazmak

Aşırı spesifik kurallar sadece tek bir örneği yakalar; varyantları kaçırabilir.

4️⃣ Goodware Testi Yapmamak

Kuralı yalnızca malware sample üzerinde test etmek yeterli değildir. Temiz dosyalar üzerinde false-positive ölçümü yapılmalıdır.

5️⃣ Kuralı Versiyonlamamak

YARA kuralları da kod gibi yönetilmelidir.

Önerilen yaklaşım:

Git repo
Pull request
Review
Test
Release note
Versioning

YARA, Sigma ve Suricata Arasındaki Fark

Araç / FormatOdak AlanıKullanım
YARADosya / bellek / binary patternMalware sınıflandırma ve dosya tarama
SigmaLog verileriSIEM bağımsız detection rule
SuricataAğ trafiğiIDS/IPS network traffic detection
ZeekAğ olayları / metadataNetwork security monitoring

Kısa ifade:

YARA → Dosyada ve bellekte iz arar.
Sigma → Loglarda davranış arar.
Suricata → Ağ trafiğinde alarm üretir.
Zeek → Ağ olaylarını anlamlandırır.

48s Mini-PoC Planı

  1. Test için bir benign PE dosyası ve bir malware lab sample hazırlayın.
  2. strings veya reverse engineering aracıyla karakteristik string’leri çıkarın.
  3. Çok genel string’leri eleyin.
  4. PE header, import veya section bilgileriyle kuralı güçlendirin.
  5. Basit bir YARA kuralı yazın.
  6. Kuralı malware sample üzerinde test edin.
  7. Temiz dosya setinde false-positive testi yapın.
  8. Gerekirse condition mantığını daraltın.
  9. Kuralı Git üzerinde versiyonlayın.
  10. Sandbox veya EDR pipeline’a kontrollü şekilde entegre edin.

Operasyonel Kullanım İpuçları

  • Kuralları family, campaign veya capability bazlı kategorize edin.
  • “Suspicious” ve “Malicious” seviyelerini ayırın.
  • Her kural için confidence ve false-positive notu ekleyin.
  • Public rule repository’leri doğrudan üretime almayın; test edin.
  • Büyük taramalarda performans etkisini ölçün.
  • Kural değişikliklerini versiyonlayın.
  • Memory ve disk tarama senaryolarını ayrı tasarlayın.
  • Malware family attribution yaparken tek YARA eşleşmesine güvenmeyin.

Sonuç

YARA, zararlı yazılımları tanımlamak, sınıflandırmak ve benzer örnekleri yakalamak için güvenlik araştırmacılarının en güçlü araçlarından biridir.

Ancak YARA’nın gerçek gücü yalnızca string aramasından gelmez. Doğru yazılmış bir YARA kuralı; malware ailesine özgü karakteristik izleri, binary pattern’leri, PE özelliklerini ve mantıksal koşulları birleştirir.

Bu yüzden YARA, sadece bir araç değil; zararlıyı tanımanın ve kategorize etmenin dili haline gelmiştir.

Kısa özet:

Hash tek örneği yakalar.
YARA aileyi ve davranışsal izleri yakalamaya yardımcı olur.


Cem Kemal Erbaş sitesinden daha fazla şey keşfedin

Subscribe to get the latest posts sent to your email.

About Cem Kemal Erbaş

Check Also

💳 POS’a Kartı Dokunduruyoruz… Peki O Birkaç Saniyenin Arkasında Neler Oluyor?

Bir mağazada 100 TL’lik alışveriş yaptığımızı düşünelim. Kullanıcı açısından süreç son derece basittir: Kartı dokundur …

Bir yanıt yazın