Teknik RehberMalware & Reverse Engineering

Zararlı Yazılımlar Nasıl Tespit Ediliyor? YARA Rules Mantığını Anlamak

Malware analizi, tehdit avcılığı ve tespit mühendisliğinde YARA kurallarının gücü

Didem Kış
Didem KışSiber Güvenlik Analisti
21 Haziran 2026
6 dakika okuma
Özet

Bir dosyanın zararlı olup olmadığını anlamak her zaman antivirüs veya hash kontrolü yapmak kadar basit değil. Dosya üzerinde yapılan küçük değişiklikler bile klasik imza tabanlı tespit mekanizmalarını etkisiz hale getirebiliyor. Bu yazıda, YARA'nın ne olduğunu, neden ihtiyaç duyulduğunu ve temel olarak nasıl çalıştığını inceliyoruz.

Giriş

Bir dosyanın zararlı olup olmadığını tespit etmek çoğu zaman dışarıdan göründüğü kadar kolay olmuyor. Normalde düşündüğümüzde mantık basit gibi geliyor: Dosya sisteme gelir, antivirüs tarar ve eğer zararlıysa bunu tespit eder. Fakat malware tarafında işler çoğu zaman bu kadar düz ilerlemiyor.

Çünkü geleneksel güvenlik çözümlerinin büyük bir kısmı dosyaları belirli imzalar veya hash değerleri üzerinden tanımlıyor. Eğer dosya daha önce analiz edilmişse ve sistem o dosyayı tanıyorsa tespit etmek oldukça kolay.

Peki, saldırgan aynı dosya üzerinde küçük bir değişiklik yaparsa ne olur?

Aslında bazen dosyanın içerisine birkaç byte eklemek, dosyayı yeniden paketlemek veya farklı şekilde derlemek bile hash değerinin tamamen değişmesine neden oluyor. Dosya hala aynı işi yapıyor olabilir ama güvenlik ürünü artık onu farklı bir dosya gibi görüyor. Bu durumda klasik hash tabanlı tespit (detection) yöntemleri çoğu zaman yeterli kalmıyor.

İşte burada güvenlik araştırmacılarının kullandığı başka bir yaklaşım devreye giriyor: Dosyanın kendisini değil, dosya içerisindeki belirli karakteristik yapıları, kod parçalarını veya davranışsal izleri aramak.

Bu yaklaşımın en yaygın araçlarından biri ise YARA. Özellikle malware analizi, tehdit avcılığı (threat hunting) ve tespit mühendisliği (detection engineering) tarafında oldukça sık kullanılan bir araç. Bu yazıda YARA’nın ne olduğunu, neden ihtiyaç duyulduğunu ve temel olarak nasıl çalıştığını anlatmaya çalışacağım.


Önce Problemi Anlayalım: Hash Tabanlı Detection Neden Her Zaman Yeterli Değil?

Birçok güvenlik ürünü dosyaları hash değerleri üzerinden tanımlar. Mantık aslında oldukça basit: Sistem dosyanın hash değerini çıkarır ve bunu bilinen zararlı dosyalar listesi ile karşılaştırır. Örneğin şöyle bir SHA256 değeri düşünelim:

SHA256: A4D8E1B7F2C9...

Eğer bu hash daha önce malware olarak işaretlendiyse sistem dosyayı engelleyebilir. İlk bakışta oldukça mantıklı duruyor. Ama burada önemli bir problem var: Bir dosyanın içerisine yalnızca tek bir karakter eklenmesi bile hash değerini tamamen değiştirebilir.

Original file                  → Hash A
Same file + small modification → Hash B

Aslında dosya hala aynı zararlı davranışı sergiliyor olabilir. Arka planda yine aynı komutları çalıştırıyor, aynı veri sızdırma işlemlerini yapıyor veya aynı C2 sunucusuna bağlanıyor olabilir. Ama hash artık tamamen farklı.

Yani saldırgan bazen oldukça küçük değişiklikler yaparak klasik detection mekanizmalarını kolayca atlatabiliyor. Özellikle polimorfik (polymorphic) malware örneklerinde bunu daha sık görüyoruz. Dolayısıyla, YARA mantığını anlamadan önce neden hash detection’ın bazı durumlarda yetersiz kaldığını anlamak gerekiyor.


Peki YARA Tam Olarak Nedir?

YARA temel olarak dosyalar veya processler üzerinde belirli şablonları (pattern) arayarak eşleşme sağlayan kural tabanlı bir analiz aracıdır. Ancak buradaki en kritik nokta şudur: YARA dosyanın hash değerine bakmaz. Onun yerine dosya içerisinde belirli karakteristik yapılar arar.

En basit mantıkla şöyle düşünebiliriz: “Eğer dosya içerisinde benim belirlediğim bazı yapılar bulunuyorsa bu dosya şüpheli olabilir.”

Buradaki yapılar çok çeşitli olabilir:
* Belirli string ifadeleri
* Hexadecimal byte patternleri
* API fonksiyon çağrıları
* Belirli PE header yapıları
* Malware içerisinde tekrar eden sabit kod blokları
* Dosya boyutu veya metadata bilgileri

YARA’yı bir dosyayı kimliğinden tanımak yerine davranışına veya bıraktığı izlere bakarak tanımlamak gibi düşünebiliriz. Bu yüzden özellikle malware varyantlarını yakalamada oldukça faydalı bir yöntem haline geliyor.


Basit Bir YARA Kuralı Yapısı

Bir YARA kuralı temelde oldukça sade bir yapıya sahiptir. İlk baktığımda karmaşık sanmıştım ama mantığını anlayınca yapısı oldukça anlaşılır geliyor.

rule rule_name
{
    strings:
        // Aranacak şablonlar

    condition:
        // Eşleşme koşulları
}

Temelde üç ana bölüm vardır:
1. Rule: Kurala isim verdiğimiz alan.
2. Strings: Dosya içerisinde aranmasını istediğimiz şablonları (pattern) tanımladığımız alan.
3. Condition: Hangi durumda kuralın eşleşme (match) üreteceğini belirlediğimiz alan.


Basit Bir Örnek İnceleyelim

Örneğin aşağıdaki basit kuralı inceleyelim:

rule suspicious_powershell
{
    strings:
        $a = "powershell.exe"
        $b = "DownloadString"
        $c = "Invoke-WebRequest"

    condition:
        all of them
}

Burada sistem dosya içerisinde üç farklı string arıyor:
* powershell.exe
* DownloadString
* Invoke-WebRequest

Condition kısmında ise all of them ifadesi yer alıyor. Yani bu üç string’in tamamı dosya içerisinde bulunursa kural eşleşme üretiyor. Buradaki amaç potansiyel olarak şüpheli PowerShell aktivitelerini tespit etmek olabilir.


Ama Her Kural Güvenli Değildir (False Positive Riski)

İlk bakışta bu kural oldukça mantıklı görünüyor: Dosya içerisinde bu üç ifade varsa sistem eşleşme üretiyor ve dosya şüpheli olarak işaretleniyor. YARA tarafını incelerken ilk düşündüğüm şey “Tamam, string varsa yakala” olmuştu.

Ancak gerçek ortamda işler biraz daha farklı ilerler. Örneğin, bir sistem yöneticisi normal bir PowerShell otomasyon betiği çalıştırıyor olabilir veya kurum içerisinde geliştirilen yasal bir uygulama internet üzerinden dosya indiriyor olabilir. Bu durumda aynı string’ler tamamen zararsız bir dosya içerisinde de bulunacaktır.

Yani sistem aslında tehdit olmayan yasal bir dosyayı tehdit gibi algılayabilir. Bu duruma güvenlik tarafında False Positive (Yanlış Alarm) deniyor.

Tespit mühendisliği (detection engineering) tarafındaki en zor konulardan biri de budur. Çünkü mesele yalnızca kural yazmak değil, doğru ve optimize kural yazmaktır. Bir şeyi yakalamaya çalışırken normal sistem aktivitelerini de alarm olarak üretmeye başlarsanız, bu sefer SOC tarafında ciddi bir alarm yorgunluğu (alert fatigue) oluşur ve gerçekten önemli alarmlar gürültü arasında kaybolabilir.


Daha Güçlü YARA Kuralları Nasıl Yazılır?

Yalnızca string aramak pratik senaryolarda yeterli olmadığından, kuralları daha seçici hale getirmek gerekir. Genellikle iyi yazılmış bir YARA kuralı tek bir parametreye bağlı kalmaz, birden fazla kontrolü birleştirir.

Örneğin:
* Birden fazla string kontrolü
* Hex pattern eşleşmeleri
* Dosya boyutu kontrolü
* Header analizi
* Import table kontrolleri
* PE modülü kullanımı

Şöyle bir koşul (condition) kullanımı buna iyi bir örnektir:

condition:
    filesize < 500KB and
    2 of ($a,$b,$c)

Burada yalnızca string eşleşmesi yapılmıyor; aynı zamanda dosyanın boyutu denetleniyor ve üç string’den en az ikisinin bulunması yeterli kabul ediliyor. Bu tarz yaklaşımlar yanlış eşleşmeleri (false positive) önemli ölçüde azaltabilir.

Bir detection kuralı yazarken daha fazla koşul koymak daha güvenli sonuç verecektir; çünkü amaç sadece alarm üretmek değil, anlamlı ve aksiyon alınabilir alarm üretmektir.


YARA Hangi Alanlarda Kullanılıyor?

YARA yalnızca malware analizi yapan ekiplerin değil, siber savunmanın birçok farklı alanında aktif olarak kullanılır:

  • Malware Analizi: Analiz edilen dosyanın belirli malware ailelerine (family) ait olup olmadığını anlamak için kullanılır. Özellikle daha önce incelenen malware örneklerinden elde edilen patternler tekrar kullanılabilir.
  • Tehdit Avcılığı (Threat Hunting): YARA kuralları kullanılarak sistem içerisinde bilinen zararlı patternler proaktif olarak aranabilir. Saldırıyı beklemek yerine izlerini aradığımız bu süreç oldukça kritiktir.
  • Olay Müdahale (Incident Response): Bir sistem üzerinde zararlı dosya bulunduğunda, bu dosyanın ağ içerisindeki diğer sistemlerde de bulunup bulunmadığını doğrulamak amacıyla YARA kuralları diğer sistemlerde hızlıca çalıştırılabilir.
  • SOC Tespiti (EDR/SIEM): EDR ve güvenlik çözümleri YARA kurallarıyla entegre çalışabilir. Bu sayede belirli IOC’ler veya şüpheli patternler gerçek zamanlı olarak taranabilir.

YARA Yazarken Yapılan Yaygın Hatalar

Yeni başlayanların en sık yaptığı hata fazla genel kurallar yazmaktır. Örneğin:

rule overly_generic
{
    strings:
        $a = "cmd.exe"
    condition:
        $a
}

Teknik olarak bu kural çalışır. Ancak Windows üzerinde birçok meşru uygulama arka planda cmd.exe kullanabilir. Bu kural sistemde sürekli yanlış alarm üretecektir. Dolayısıyla, YARA yazarken asıl amaç sadece bir şeyi yakalamak değil, gürültüyü azaltmaktır.


Sonuç

Klasik hash tabanlı detection yöntemleri günümüzde hala yaygın olarak kullanılsa da, saldırganların dosyalar üzerinde yaptığı küçük değişiklikler bu mekanizmaları kolayca bypass edebilmektedir. Bu yüzden artık yalnızca dosyanın kimliğine (hash) bakmak yetersizdir. Dosyanın içerdiği yapıları, bıraktığı izleri ve davranışları anlamak gerekir.

YARA’yı güçlü yapan taraf da tam olarak budur: Bir dosyayı yalnızca “bu zararlı mı?” diye incelemek yerine, dosya içerisinde “hangi izler var?” sorusunu sormamızı sağlar.

Unutulmamalıdır ki, YARA tarafında asıl mesele syntax öğrenmek değil, neyi tespit etmeye çalıştığını doğru anlamaktır. Çünkü bazen doğru tasarlanmış tek bir detection kuralı, onlarca farklı malware varyantını tek seferde yakalamayı mümkün kılabilir.

Didem Kış
Siber Güvenlik Analisti
Didem Kış, siber güvenlik, bilgi güvenliği ve güvenlik operasyonları alanlarında çalışan bir Cyber Security Analyst olarak; SOC operasyonları, tehdit tespiti, SIEM, log analizi ve ISO 27001 gibi bilgi güvenliği süreçleri üzerine çalışıyorum. Aynı zamanda siber güvenlik ekosistemi, güncel tehditler ve savunma teknolojileri üzerine teknik içerikler üretiyor, bu alandaki gelişmeleri yakından takip ediyorum.

Sen de yaz, arşivde yerini al

AltaySec Arşiv'e katkı ver — uzmanlığını Türkçe siber güvenlik literatürüne kat.

Yazar Ol