YARA, VirusTotal tarafından geliştirilen ve dosyaları metin, bayt dizisi, düzenli ifade, dosya yapısı ve mantıksal koşullarla sınıflandırmaya yarayan bir eşleştirme dilidir. YARA-X ise aynı ekosistemin Rust tabanlı, güvenlik, performans ve kullanım kolaylığına odaklanan yeni uygulamasıdır. VirusTotal, YARA-X'in mevcut YARA kurallarının büyük bölümünü uyumlu biçimde çalıştırmayı hedeflediğini; bazı dil ayrıntılarında ise daha sıkı kontroller uyguladığını belirtiyor.
Bu rehber YARA ve YARA-X ile kural anatomisini, string ve hex pattern kullanımını, PE modülünü, koşul tasarımını, false positive azaltmayı, performans kontrolünü, test/CI sürecini ve avcılık ortamına güvenli dağıtımı uygulamalı biçimde açıklar.
YARA ne işe yarar, ne işe yaramaz?
YARA; kötü amaçlı yazılım ailesini sınıflandırma, olay müdahalesinde disk imajı tarama, EDR'den dışa aktarılan dosyaları inceleme, e-posta eklerinde belirli örüntüleri bulma, tehdit istihbaratı araştırması ve VirusTotal Livehunt gibi akışlarda yeni örnekleri avlama için kullanılır.
YARA tek başına davranışsal EDR, sandbox, ağ IDS veya antivirüs motorunun yerini almaz. Kural yalnızca taranan veri içinde tanımlanan özellikleri görür. Dosya şifreliyse, çalışma anında açılıyorsa, kuralın bilmediği biçimde paketlenmişse veya göstergeler tamamen değiştirilmişse eşleşme olmayabilir. Tersi durumda, fazla genel string veya koşul temiz yazılımı yanlış işaretleyebilir.
| Kullanım | YARA'nın güçlü olduğu alan | Ek kontrol ihtiyacı |
|---|---|---|
| Dosya sınıflandırma | Metin, hex, regex ve dosya formatı özelliklerini birleştirir | İmza doğrulama ve itibar bilgisi |
| Olay müdahalesi | Büyük dizin veya imajlarda aile izi arar | Zaman çizelgesi, süreç ve ağ analizi |
| Tehdit avcılığı | Yeni yüklenen dosyalarda belirli örüntüleri bulur | False positive eleme ve analist doğrulaması |
| CI/CD kontrolü | Kural setini derleme ve örnek korpusla test etme | Güvenli örnek yönetimi ve erişim kontrolü |
| Bellek tarama | Süreç belleğinde açılmış string veya kod izi bulabilir | Yetkili erişim, platforma özgü toplama ve performans sınırı |
YARA kuralının anatomisi
Bir kural genellikle meta, strings ve condition bölümlerinden oluşur. Condition zorunludur; strings kullanmayan, yalnızca modül veya dış değişkenlerle karar veren kurallar da yazılabilir.
CODE TERMINAL
rule TRS_Generic_Suspicious_Config : training config
{
meta:
author = "TRSiber"
description = "Eğitim amaçlı örnek yapılandırma tespiti"
date = "2026-09-02"
version = "1.0"
reference = "internal-training"
hash = "replace-with-validated-sample-sha256"
strings:
$marker = "example-control-marker" ascii wide
$path = "\\ProgramData\\ExampleCache\\" ascii wide nocase
$hex = { 45 58 41 4D 50 4C 45 ?? 43 46 47 }
condition:
2 of ($marker, $path, $hex)
}Kural adı yalnızca harf, rakam ve alt çizgi içerecek biçimde standartlaştırılmalıdır; sayı ile başlamamalıdır. Kurum, platform, aile, amaç ve sürüm gibi alanları adlandırma politikasına bağlamak yüzlerce kural içinde yönetimi kolaylaştırır.
Etiketler kural adından sonra gelir ve sonuçları aile, kampanya, platform veya güven düzeyiyle filtrelemeyi sağlar. Meta bölümü eşleşme mantığını değiştirmez; sahiplik, tarih, açıklama, örnek hash'i, kaynak ve sürüm gibi yönetişim verilerini taşır.
Meta alanları nasıl tasarlanmalı?
Kuralların teknik doğruluğu kadar yaşam döngüsü de önemlidir. En azından aşağıdaki alanları standartlaştırın:
- author / owner: Kuraldan sorumlu kişi veya ekip
- description: Kuralın neyi ve hangi güven düzeyinde tespit ettiği
- date / modified: İlk oluşturma ve son anlamlı değişiklik tarihi
- version: Sürüm veya revizyon numarası
- reference: Kamuya açık rapor, olay kaydı veya dahili vaka bağlantısı
- sample hash: Kural geliştirilirken kullanılan doğrulanmış örneklerin SHA-256 değeri
- scope: file, memory, email, document veya belirli platform
- confidence / severity: Kurumun tanımladığı değer kümesinden seçilen güven ve önem düzeyi
- license: Paylaşılan kural setlerinde kullanım koşulu
YARA-X'in check yapılandırması; kural adı, zorunlu meta alanları, hash biçimi ve izin verilen etiketler için politika tanımlayabilir. Böylece eksik author, hatalı hash veya standart dışı etiket CI sırasında uyarı ya da hata olur.
Text pattern ve string değiştiricileri
Metin pattern'leri varsayılan olarak büyük-küçük harfe duyarlı ASCII dizileridir. Dosyanın nasıl üretildiğine göre değiştiriciler eklenebilir:
- nocase: Büyük-küçük harf farkını yok sayar; gereksiz kullanılırsa eşleşme yüzeyini büyütür.
- wide: Karakterler arasına sıfır baytı eklenen iki baytlı biçimi arar; gerçek anlamda bütün UTF-16 varyasyonlarını çözmez.
- ascii wide: Aynı string'in hem ASCII hem wide biçimini arar.
- fullword: Metni daha uzun alfasayısal kelimenin parçası olarak eşleştirmeyi engeller.
- xor: Tek bayt XOR uygulanmış biçimleri arar; aralık verilmezse çok geniş tarama maliyeti ve false positive oluşturabilir.
- base64 / base64wide: Belirli metnin Base64 kodlanmış biçimlerini arar; kısa pattern ve sürüm uyumluluğu dikkatle test edilmelidir.
CODE TERMINAL
strings:
$service = "java-jre-update" ascii wide fullword
$config_path = "\\AppData\\Local\\TempCache\\" ascii wide nocase
$encoded_marker = "example-campaign-marker" base64Tek başına “powershell”, “cmd.exe”, “User-Agent” veya “This program cannot be run” gibi yaygın string'ler güçlü gösterge değildir. Kuralı belirli aileye özgü URI parçası, mutex biçimi, sıra dışı hata metni, yapılandırma anahtarı, PDB yolu, sertifika alanı veya kod parçası gibi daha seçici özelliklerle destekleyin.
Hex pattern nasıl yazılır?
Hex pattern, ham bayt dizilerini arar. Derleme çıktısı, dosya başlığı, opcode dizisi veya serileştirilmiş yapı gibi metin olmayan özelliklerde kullanışlıdır.
CODE TERMINAL
$header = { 4D 5A }
$sequence = { 48 8B ?? ?? 48 85 C0 74 ?? }
$jump = { 68 74 74 70 [2-12] 3A 2F 2F }
$choice = { ( 8B | 89 ) 45 ?? 83 ( C0 | E8 ) ?? }`??` bir bayt wildcard'ıdır; nibble düzeyinde `A?` veya `?F` kullanılabilir. Köşeli parantez içindeki atlama, arada değişken sayıda bayta izin verir. Parantez ve `|` alternatif dizileri tanımlar.
Wildcard ve jump miktarı arttıkça pattern daha genel hâle gelir. Çok kısa sabit parça, sınırsıza yakın jump veya düşük entropili bayt dizisi taramayı yavaşlatabilir ve çok sayıda yanlış eşleşme üretebilir. En az birkaç seçici sabit bayt adasını birlikte kullanın; pattern'i yalnızca tek örneğe ezberletmek yerine aynı ailenin farklı sürümlerinde değişmeyen bölgelere bağlayın.
Düzenli ifadeler ne zaman kullanılmalı?
Regex; yapılandırma anahtarı, değişken alt alan, sürüm numarası veya belirli sözdizimine sahip metinlerde yararlıdır. Fakat her regex gerekli değildir. Basit sabit string daha hızlı, daha okunabilir ve daha kolay test edilir.
CODE TERMINAL
$uri = /\/api\/[a-z0-9]{6,12}\/checkin/ ascii nocase
$mutex = /Global\\[A-F0-9]{8}-[A-F0-9]{4}/ ascii
$version = /client_version=[0-9]+\.[0-9]+\.[0-9]+/ asciiGeniş `.*`, çok sayıda alternatif, başında seçici literal bulunmayan ifade ve aşırı büyük tekrar aralıklarından kaçının. Regex'i önce temiz ve zararlı korpusta test edin; kural motorunun yavaş pattern uyarılarını bastırmak yerine düzeltin.
Condition bölümü: sinyalleri nasıl birleştirmelisiniz?
Condition, kuralın gerçek karar mekanizmasıdır. String varlığına ek olarak dosya boyutu, offset, eşleşme sayısı, dosya başlığı, modül alanı ve diğer kurallar kullanılabilir.
CODE TERMINAL
condition:
uint16(0) == 0x5A4D and
filesize < 5MB and
2 of ($family_*) and
1 of ($config_*)Bu koşul dosyanın MZ başlığıyla başlamasını, 5 MB'tan küçük olmasını, aile grubundan en az iki ve yapılandırma grubundan en az bir pattern içermesini ister. Tek bir genel string yerine bağımsız sinyal kümelerini birleştirmek false positive oranını düşürür.
YARA/YARA-X aşağıdaki yapıları da destekler:
- `#a` ile bir pattern'in eşleşme sayısı
- `@a[1]` ile ilk eşleşmenin offset'i
- `!a[1]` ile eşleşme uzunluğu
- `$a at 0` ile belirli offset
- `$a in (0..1024)` ile offset aralığı
- `2 of ($family_*)` ile pattern kümesinden eşik
- `for any of ($x*) : ( $ in (0..pe.entry_point) )` ile küme üzerinde yineleme
- `private` yardımcı kurallar ve başka kurallara referans
`any of them` kolaydır fakat kuraldaki en zayıf string kadar genel sonuç üretebilir. Pattern'leri anlamlı gruplara ayırıp eşik belirlemek, her grubun hangi hipotezi doğruladığını açık hâle getirir.
PE modülüyle Windows yürütülebilir dosya analizi
YARA'nın PE modülü Windows Portable Executable yapısını ayrıştırır. `uint16(0) == 0x5A4D` yalnızca MZ başlığını kontrol ederken `pe.is_pe`, bölüm sayısı, import/export, imza ve derleme alanları gibi yapısal özellikler sunar.
CODE TERMINAL
import "pe"
rule TRS_Suspicious_PE_Training
{
meta:
author = "TRSiber"
description = "PE yapı ve string sinyallerini birleştiren eğitim kuralı"
date = "2026-09-02"
version = "1.0"
strings:
$cfg1 = "example-control-marker" ascii wide
$cfg2 = "example-update-channel" ascii wide
$api1 = "VirtualAlloc" ascii fullword
$api2 = "WriteProcessMemory" ascii fullword
$api3 = "CreateRemoteThread" ascii fullword
condition:
pe.is_pe and
filesize < 10MB and
1 of ($cfg*) and
2 of ($api*) and
pe.number_of_sections >= 3
}Bu örnek eğitim içindir; VirtualAlloc veya WriteProcessMemory gibi API'ler meşru yazılımlarda da bulunur. Üretim kuralı bunları aileye özgü config, bölüm adı, import kombinasyonu, kaynak yapısı veya imza durumu gibi daha seçici sinyallerle bağlamalıdır.
Dosya imzalı diye otomatik olarak temiz kabul etmeyin; imza çalınmış, kötüye kullanılmış veya dosya sonradan değiştirilmiş olabilir. Benzer şekilde imzasız dosya tek başına zararlı değildir. PE alanları bağlam sağlar, nihai hüküm değil.
ELF, Mach-O, .NET ve diğer modüller
YARA ve YARA-X ekosistemi hedef biçime göre PE, ELF, Mach-O, .NET, DEX, LNK, hash, math, string ve time gibi modüller sunar. Her ortamda aynı kural setini körlemesine çalıştırmak yerine platforma göre ayırın:
- Windows native dosyaları için PE özellikleri
- Linux yürütülebilirleri için ELF segment, section ve dinamik bağlama alanları
- macOS/iOS dosyaları için Mach-O load command ve mimari bilgisi
- .NET örnekleri için assembly, type ve metadata özellikleri
- Android için DEX class, method ve string alanları
- Hash modülüyle belirli aralık veya bölüm hash'i
Modül kullanılabilirliği ve alan adları YARA ile YARA-X sürümlerinde farklılaşabilir. Kuralları hedef motorun belgelerine ve CI matrisine göre derleyin.
İyi gösterge nasıl seçilir?
Kural geliştirme örnek toplamakla başlar, string çıkarmakla değil. Önce hipotezi tanımlayın: Belirli aileyi mi, kampanyayı mı, packer'ı mı, yapılandırma biçimini mi yoksa genel tekniği mi tespit etmek istiyorsunuz?
Ardından en az şu veri kümelerini oluşturun:
- Pozitif korpus: Aynı aile veya davranışın farklı sürüm, derleme, mimari ve packer varyantları
- Yakın negatif korpus: Aynı derleyici, kitaplık, packer veya meşru ürün ailesini kullanan temiz dosyalar
- Geniş temiz korpus: İşletim sistemi, geliştirici aracı, tarayıcı, kurumsal uygulama ve yaygın paketler
- Zor örnekler: Bozuk, çok büyük, sıkıştırılmış, imzalı, overlay içeren ve farklı karakter kodlamalı dosyalar
Yüksek kaliteli gösterge saldırgan için değiştirmesi maliyetli, aile için görece kararlı ve temiz yazılımda nadirdir. Tek bir alan adı veya hash hızla değişebilir; özel config yapısı, protokol çerçevesi, benzersiz hata metni ve kod dizisi daha dayanıklı olabilir. Buna rağmen dayanıklılık iddiasını farklı örneklerle ölçmeden varsaymayın.
False positive nasıl azaltılır?
- Genel string'leri tek başına kullanmayın; en az iki bağımsız sinyalle doğrulayın.
- Dosya biçimini modülle veya güvenilir magic kontrolüyle sınırlandırın.
- Makul filesize sınırı koyun; aşırı dar sınırın yeni sürümleri kaçırabileceğini test edin.
- Pattern'leri semantic gruplara ayırın: aile, config, davranış, yapı.
- Offset ve section bağlamını kullanın; string'in dosyanın herhangi yerinde bulunmasıyla yetinmeyin.
- Meşru çakışmaları yalnızca hash allowlist ile örtmek yerine kural mantığını iyileştirin.
- Kuralı farklı temiz yazılım koleksiyonlarında tarayın ve her eşleşmeyi etiketleyin.
- Üretimde “yüksek güven” ile “araştırma” kurallarını farklı aksiyonlara bağlayın.
Bir kuralın hiç false positive üretmemesi de yeterli kanıt değildir; temiz korpus küçük veya tekdüze olabilir. Test kapsamını sayısal olarak kaydedin: kaç dosya, hangi platformlar, hangi tarihler ve hangi yazılım türleri tarandı?
Performans tuzakları
YARA motoru çok sayıda dosyayı tararken kötü pattern seçimi CPU ve bellek tüketimini büyütebilir. VirusTotal Livehunt, performans uyarısı üreten kuralları kabul etmez. YARA-X de yavaş pattern ve tatmin edilemeyen koşullar için derleme uyarıları sunar.
Özellikle aşağıdakilere dikkat edin:
- Çok kısa ve düşük entropili string'ler
- Başında seçici sabit bölüm bulunmayan regex
- Geniş `.*` ve büyük tekrar aralıkları
- Çok uzun wildcard/jump alanlı hex pattern
- Gereksiz `nocase`, `wide`, `xor` ve `base64` kombinasyonları
- Her dosyada pahalı modül fonksiyonunu koşulsuz çağırmak
- Dosya türü ve boyutu filtrelemeden bütün kuralları bütün korpusa uygulamak
Ucuz ve seçici kontrolleri condition içinde önce yazmak okunabilirliği artırır; ancak motorun gerçek değerlendirme optimizasyonu sürüme göre değişebilir. Performansı varsaymak yerine hedef motor, kural seti ve gerçek korpus üzerinde süre/bellek ölçümü yapın.
YARA ve YARA-X komut satırı akışı
Klasik YARA'da yaygın akış rule dosyasını derlemek ve hedefi taramaktır:
CODE TERMINAL
# Kuralı derleme kontrolü
yarac rules/example.yar build/example.compiled
# Tek dosya tarama
yara rules/example.yar samples/suspicious.bin
# Dizin tarama
yara -r rules/example.yar corpus/
# Eşleşen string'leri gösterme
yara -s rules/example.yar samples/suspicious.binYARA-X komut satırı aracı `yr`; scan, compile, check ve fmt gibi alt komutlarla çalışır. Tam seçenekler sürüme göre değişebileceği için kurulu sürümde `yr --help` ve ilgili alt komut yardımını kontrol edin.
CODE TERMINAL
yr --help
yr scan --help
yr check --help
yr fmt --helpKuralları üretime almadan önce hem kullandığınız YARA 4.x sürümünde hem YARA-X hedef sürümünde derlemek, uyumluluk farklarını erken yakalar. Tek motor kullanacaksanız bile sürüm yükseltmelerini CI matrisinde ayrı iş olarak deneyin.
YARA-X check ve fmt ile politika uygulama
YARA-X `.yara-x.toml` dosyasında biçim ve doğrulama politikaları tanımlayabilir. Aşağıdaki örnek, kural adı ve meta alanlarını kurumsal standarda bağlayan bir başlangıçtır:
CODE TERMINAL
[fmt]
rule.indent_spaces = 2
rule.indent_section_headers = true
rule.indent_section_contents = true
meta.align_values = true
patterns.align_values = true
[check.rule_name]
regexp = "^TRS_[A-Za-z0-9_]+$"
error = true
[check.metadata]
author = { type = "string", required = true, error = true }
description = { type = "string", required = true, error = true }
version = { type = "string", required = true, error = true }
hash = { type = "hash", required = false, error = true }
[check.tags]
regexp = "^[a-z0-9_]+$"
error = trueUyarıları topluca kapatmayın. Önce pattern'in neden yavaş veya koşulun neden şüpheli olduğunu inceleyin. Gerçekten kabul edilmesi gereken istisnalar kural sahibinin onayı ve açıklamayla yönetilmelidir.
Test matrisi ve CI/CD
Kurallar kod gibi sürümlenmeli, gözden geçirilmeli ve otomatik test edilmelidir. Asgari pipeline:
- Dosya biçimi ve UTF-8 kontrolü
- YARA ve/veya YARA-X derleme testi
- Kural adı, meta ve etiket politikası
- Pozitif korpusta beklenen eşleşme sayısı
- Temiz korpusta izin verilen false positive eşiği
- Yakın negatif korpusta sıfır veya belgelenmiş eşleşme
- Tarama süresi ve bellek regresyon sınırı
- Değişen kurallar için en az bir başka analistin incelemesi
- İmzalı veya bütünlüğü doğrulanmış release paketi
Test örneklerini doğrudan genel Git deposuna koymayın. Zararlı örnekler erişim kontrollü, şifreli ve denetlenen depoda tutulmalı; pipeline izole runner'da, ağ çıkışı sınırlı biçimde çalışmalıdır. Test sırasında dosyanın yürütülmesi gerekmez; yalnızca güvenilir tarama aracı tarafından okunur.
Üretime dağıtım ve aksiyon seviyeleri
Her YARA eşleşmesini otomatik karantina veya silme aksiyonuna bağlamak risklidir. Güven düzeyine göre katmanlandırın:
| Kural sınıfı | Örnek aksiyon | Gerekçe |
|---|---|---|
| Yüksek güven / aileye özgü | Karantina + olay kaydı + analist doğrulaması | Çoklu güçlü sinyal ve geniş negatif test |
| Orta güven / kampanya avı | Telemetri zenginleştirme + öncelikli inceleme | Yeni varyant yakalama, false positive ihtimali |
| Düşük güven / araştırma | Yalnızca avcılık deposuna kayıt | Hipotez geliştirme, otomatik engelleme için yetersiz |
| Politika / dosya türü | Envanter veya uyumluluk alarmı | Zararlılık değil, kurumsal kural ihlali |
Kural paketine sürüm numarası, hash ve geri dönüş planı ekleyin. Dağıtım başarısız olduğunda hangi uçların eski kurala döndüğü görülebilmelidir. Eşleşme telemetrisinde dosyanın tamamını merkezi sisteme göndermek yerine gizlilik, lisans ve kişisel veri gereksinimlerini değerlendirin.
VirusTotal Livehunt için ek kurallar
VirusTotal Livehunt, analiz edilen dosya akışını YARA kurallarıyla eşleştirip bildirim üretir. Platform, performans uyarısı veren kuralları kabul etmez ve include ifadeleri gibi bazı özelliklere kısıt uygular. Desteklenen modüller ve dış değişkenler platform belgesinden kontrol edilmelidir.
Livehunt kuralını yerel EDR kuralıyla aynı dosya olarak yönetmek her zaman uygun değildir. Platforma özgü dış değişkenler, modüller, boyut limitleri ve veri paylaşım modeli için ayrı hedef oluşturun. Kamuya açık avcılık hizmetine kurum içi gizli gösterge, müşteri adı veya hassas dosya yolu yüklemeyin.
YARA-X'e geçiş stratejisi
YARA-X yüksek uyumluluk hedeflese de “kuralların yüzde 99'u çalışır” ifadesi test gereksinimini ortadan kaldırmaz. Geçişi şu sırayla yapın:
- Mevcut kural setini YARA-X ile yalnızca derleyin ve bütün hata/uyarıları sınıflandırın.
- Üretimde kullanılan pozitif ve negatif korpusu iki motorla tarayın.
- Eşleşme, offset, string ve performans sonuçlarını karşılaştırın.
- Regex, base64, global/private rule ve modül farklarını ayrı test edin.
- Python, Go, C/C++ veya Rust entegrasyonunda timeout ve eşleşme sınırlarını tanımlayın.
- Önce gözlem modunda çift çalıştırın; farklar kapanınca kontrollü geçiş yapın.
YARA-X Python API'si derleme ve taramayı ayrı nesneler olarak sunar; Scanner üzerinden timeout ve pattern başına azami eşleşme sayısı gibi sınırlar verilebilir. Kullanıcıdan gelen kuralları veya güvenilmeyen büyük dosyaları tarayan servislerde bu kaynak sınırları özellikle önemlidir.
Kural inceleme kontrol listesi
- Kuralın tespit hipotezi tek cümleyle açıklanabiliyor mu?
- Her string hangi özelliği kanıtlıyor; gereksiz string var mı?
- En az iki bağımsız sinyal birleştiriliyor mu?
- Dosya türü ve boyut bağlamı doğru mu?
- Wildcard, regex ve değiştiriciler gereğinden geniş mi?
- Pozitif korpus aile varyasyonlarını kapsıyor mu?
- Yakın negatif ve geniş temiz korpus sonuçları kaydedildi mi?
- YARA/YARA-X derleme uyarıları çözüldü mü?
- Tarama süresi ve bellek tüketimi sınırlar içinde mi?
- Meta alanları, kaynak ve sürüm bilgisi tamam mı?
- Dağıtım aksiyonu kuralın güven düzeyiyle uyumlu mu?
- Geri dönüş ve kuralı hızla devre dışı bırakma yolu hazır mı?
Sonuç
Başarılı bir YARA kuralı, çok sayıda IOC'yi aynı dosyaya doldurmak değil; seçici sinyalleri doğrulanabilir bir hipotez etrafında birleştirmektir. Text, hex ve regex pattern'leri dosya yapısı ve modül verisiyle desteklenmeli; kural pozitif, yakın negatif ve geniş temiz korpusta ölçülmelidir.
YARA-X, biçimlendirme, politika kontrolü, güvenli API'ler ve performans uyarılarıyla modern bir geliştirme akışı sunar. Yine de YARA 4.x ile uyumluluk ve motor farkları otomatik test edilmelidir. Kuralları kod gibi sürümlemek, CI'da derlemek, false positive/performance regresyonunu ölçmek ve güven düzeyine göre dağıtmak uzun ömürlü bir tespit mühendisliği programının temelidir.
Kaynaklar
- YARA – Resmî dokümantasyon
- YARA-X – Resmî dokümantasyon
- YARA-X – Anatomy of a Rule
- YARA-X – Text Patterns
- YARA-X – Hex Patterns
- YARA-X – Rule Conditions
- YARA-X – PE Module
- YARA-X – Config File, check ve fmt politikaları
- YARA-X – Python API
- VirusTotal – Livehunt dokümantasyonu
TR Siber Ekibi