HydraDragonSig
İmza Formatı Rehberi
HydraDragonSig YAML kuralları • Multron imza odası • HydraDragon Antivirus • OpenEDR
01 Ne zaman HydraDragonSig?
| Format | En iyi olduğu yer |
|---|---|
| HydraDragonSig | Bir ailenin birkaç benzersiz stringi + importları / bayt deseni / bölüm adları; kuralları birleştirme; PE'ye özel koşullar. |
| YARA | Karmaşık bayt mantığı, sayaçlar (#a), modüller (pe., math.). |
| ClamAV .ndb / .ldb | Tek bayt imzası ya da birkaç alt imzalı mantık; ClamAV ile paylaşılacak imzalar. |
02 Dosya yapısı
Bir dosya rules: altında kural listesi taşır. Her kuralın bir id, title, severity ve en az bir koşulu olur. !include diger.yaml satırı başka bir dosyayı önce yükler.
rules:
- id: TROJAN-REMCOS-A-001
title: "Remcos RAT"
severity: high
verdict: malware
family: "Trojan.Win32.Remcos.A"
logic: all
conditions:
- type: string_set
min: 2
nocase: true
wide: true
values:
- "Remcos_Mutex_Inj"
- "licence_code.txt"
- "Breaking-Security.Net"
- type: import_any
names: ["!SetWindowsHookExA", "!GetAsyncKeyState"]Bu kural, üç benzersiz stringden en az ikisi (ASCII veya UTF-16, büyük/küçük harf duyarsız) ve iki klavye/kanca API'sinden biri birlikte görüldüğünde dosyayı Trojan.Win32.Remcos.A olarak işaretler.
03 Kural alanları
| Anahtar | Anlamı |
|---|---|
id | Benzersiz kimlik. rule_match bununla başvurur. |
title, description, tags | Yalnızca çıktı. |
severity | info … critical. Kararı değiştirmez. |
verdict | malware, pua, suspicious (varsayılan), clean, trusted. |
family | Dosya için bildirilen tehdit adı (Category.Platform.Family[.Variant]). |
score, confidence | Skor toplanır (en çok 100); en yüksek skorlu bulgu tehdit adını verir. |
logic, threshold | any (varsayılan), all, threshold. |
private | Eşleşir ama bulgu üretmez; rule_match için yapı taşı. |
file_path | Kuralı yalnızca bu tam yol için çalıştırır (%SystemRoot%\…). |
mitre | {id, name, tactic} listesi. |
04 Mantık ve karar
any: tek bir koşul yeter.all: bütün koşullar tutmalı.threshold: en azthresholdkoşul tutmalı.- Dosya kararı:
malwarebulgusu varsa zararlı, yoksapua, sonrasuspicious; tek birverdict: malwarekuralı yeter.
threshold her koşulu sayar; file_type: pe ve file_size_lte gibi neredeyse her PE'de tutan koşullar da dahil. threshold: 3 ile bu ikisi varken tek bir yaygın import (ör. VirtualAlloc) kuralı tetikler ve temiz dosyalar zararlı görünür. Bu tür kapıları logic: all ile ya da ayrı bir private kural + rule_match ile kurun.05 Koşul türleri
| Grup | Türler | Notlar |
|---|---|---|
| Stringler | string_contains, string_set, string_regex, env_reference | string_contains ve string_set dosyanın ham baytlarında aranır (ascii, wide = UTF-16LE, utf16 = UTF-16BE). string_set için min yazılmazsa bütün değerler gerekir. Regex'ler 5+ karakterlik çıkarılmış stringlerde çalışır. decoded: true base64 / hex stringleri çözüp onlarda da arar. |
| PE | import_any/all/set/regex, export_*, dll_any, dll_regex, suspicious_import_count, section_entropy, section_name_regex, packed_pe | Import adları dll!fonksiyon sonuna göre eşleşir: !VirtualAlloc tam fonksiyon adını ister. import_set için min varsayılanı 1'dir. |
| Dosya | file_type, file_size_gte/lte, file_entropy, hash_sha256/md5, path_regex, feature_gte | Tür, boyut, entropi, hash, yol, sayısal özellikler. |
| Baytlar | byte_pattern, byte_set, unpacker_any | Bölüm 6'daki sözdizimi; scope arama aralığını sınırlar, excludes bilinen temiz blobları dışarıda bırakır. byte_set için min varsayılanı tüm desenlerdir. |
| Birleştirme | rule_match | Bölüm 8. |
| İkon / görsel | pe_icon_any, image_fuzzy_hash_any | dHash / pHash / ClamAV .idb. İkonlar paylaşılır: tek başına karar değildir. |
06 Bayt desenleri
| Sözdizimi | Anlamı |
|---|---|
4D 5A / 4D5A | Sabit baytlar |
??, 4? | Herhangi bir bayt / yarım bayt joker |
~00 | Bu bayt dışında herhangi biri |
[4], [2-8], [4-] | Atlama: tam 4 / 2–8 arası / 4 ve fazlası (en çok 4096) |
( 90 | E8 ?? ) | Alternatifler |
{ 4D 5A [2-4] ( 90 | 91 ) ~00 }07 native_signature
YARA'ya benzer atomlar (text, regex, bytes) ve bir mantıksal ifade. Text atomları ascii, wide, nocase, fullword, xor, base64 değiştiricilerini destekler.
- type: native_signature
expression: "$cmd and (2 of ($url*) or $key at 0x40)"
atoms:
- id: cmd
value: "powershell -enc"
nocase: true
ascii: true
wide: true
- id: url1
value: "/gate.php"
- id: url2
kind: regex
value: "https?://[0-9]{1,3}(\\.[0-9]{1,3}){3}/"
- id: key
kind: bytes
value: "{ 6A 40 68 00 30 00 00 }"| İfade | Anlamı |
|---|---|
$a, any/all/2 of them, 2 of ($s*) | Atom eşleşmeleri |
$a at 0x40, $a in (0..1024), $a at $b + 16 | Konumlar (her geçiş dikkate alınır) |
@a < @b, @a[8] == @b | Konum karşılaştırma; [n] konuma n bayt ekler (YARA'daki sıra numarası değildir) |
filesize < 500KB, uint16(0) == 0x5A4D | Boyut ve sabit değerler |
PE, DotNet, ELF, Script … | Dosya türü |
and, or, not, ( ) | Mantık |
Desteklenmeyenler yüklemede reddedilir: #a, !a, for, uint8, pe. gibi modüller.
08 Kuralları birleştirme
rule_match, aynı taramada daha önce eşleşmiş kurallara bakar. private: true yardımcı kurallar kendi başlarına bulgu üretmez; bunları birleştiren kural karar verir.
rules:
- id: HELPER-INJECT
title: "Helper: injection imports"
severity: info
private: true
conditions:
- type: import_all
names: ["!VirtualAllocEx", "!WriteProcessMemory", "!CreateRemoteThread"]
- id: TROJAN-INJECTOR-001
title: "Small PE with injection imports"
severity: high
verdict: malware
family: "Trojan.Win32.Injector.A"
logic: all
conditions:
- type: file_size_lte
bytes: 307200
- type: rule_match
ids: [HELPER-INJECT]09 Yükleme kontrolleri
Motor kural dosyasını yüklerken şunları bildirir: bilinmeyen anahtarlar (yazım hataları), geçersiz regex / bayt deseni / ifade, hiç eşleşemeyecek koşullar, bilinmeyen dosya türleri, tekrar eden kimlikler. Taramadan kontrol etmek için:
hydradragonsig --rules my_rules.yaml --check-rules
: veya # geçen, ya da özel karakterle başlayan değerleri tırnak içine alın. Tek tırnak içinde ' karakteri '' diye yazılır. Bir YAML hatası bütün dosyanın yüklenmesini durdurur.10 İyi imza yazmak
- Tek bir sinyal yerine birkaç özgül sinyal kullanın: aileye özgü stringlerden
min: 2+ bir import veya bayt koşulu,logic: all. - Derleyici, çalışma zamanı, kurulum aracı ve ortak kütüphane stringlerinden kaçının (
Rich,.text,kernel32.dll,This program cannot be run in DOS mode). VirtualAlloc,LoadLibraryAgibi yaygın importlar tek başına bir şey kanıtlamaz.- Deseniniz bazı temiz dosyalarda da varsa
excludes, yalnızca belli bir yerde anlamlıysascopekullanın. - Yayımlamadan önce temiz yazılımlarda (sistem dosyaları, yaygın kurulum dosyaları) ve ailenin birkaç örneğinde deneyin.
11 İmza odası ve retrohunt
- Multron panelindeki imza odasında adı
Category.Platform.Family[.Variant]olarak kurun ve HydraDragonSig rule şablonunu açın. - Her kuralın kanonik biçimde bir
familydeğeri vemalware,puaveyasuspiciouskararı olmalı. - Kaydetme katı modda yapılır: yükleme kontrollerindeki her sorun kaydı reddeder ve hatayı gösterir.
- Kaydettikten sonra retrohunt, imzayı saklanan bütün dosyalarda arar; eşleşmeleri tam motorla yeniden tarar. Sonuçlarda temiz bir dosya varsa imzayı daraltın.
12 Tam referans
Her anahtarın varsayılanı, eşleşme ayrıntıları, dosya türü ve özellik listeleri: hydradragonsig/FORMAT.md.