gokdogan · mimari
Statik PE malware triyaj motoru

Bir örneği çalıştırmadan, saniyeler içinde önceliklendirir.

gökdoğan (avcı şahin — peregrine falcon) bir Windows çalıştırılabilirini alır; statik özelliklerini çıkarır — hiç çalıştırmadan — ve şeffaf, ağırlıklı bir verdikt üretir. Bir malware lab'ının günlük triyaj akışı için tasarlanmış, kendi kendine yeten bir motor. (paket & komut: gokdogan)

// örnek asla çalıştırılmaz · çekirdek tamamen çevrimdışı · verdikt bir önceliklendirme sinyalidir

skor 0≥ 30≥ 60100+
~4.900
satır Python · 31 modül
207
test · gerçek binary entegrasyonu
0
config-blob yanlış-pozitifi · 150 temiz binary
133ms
kodlu string taraması (800 KB)
Tasarım ilkeleri

Beş karar

Motorun tamamı, onu bir analist için doğru, hızlı ve güvenilir kılan beş karar etrafında düzenlendi.

Ayrışım

Saf fonksiyonlar → dataclass'lar

Her analizci bytes/PE üzerinde çalışıp dataclass döndüren saf bir fonksiyondur. Analizciler ne birbirini ne de çıktı formatını tanır. Yeni aşama = bir modül + bir satır.

Güvenlik

Varsayılan çevrimdışı

triage() çekirdeği asla ağa dokunmaz, örneği asla çalıştırmaz. Tek çevrimiçi özellik opt-in, yalnızca-hash ve CLI katmanındadır — air-gapped bir iş istasyonunda güvenli.

Şeffaflık

Denetlenebilir verdikt

Skorun kendisi rapordur: her puan okunur bir gerekçe taşır. Analistin itiraz edemeyeceği gizli bir model yoktur; YARA kuralları kendi ağırlığını ekleyebilir.

Kalibrasyon

Yanlış-pozitife karşı ölçüm

Eşikler tahminle değil, stok imzalı Windows binary'lerine karşı ampirik ayarlandı. Capability kuralları minimum farklı API isabeti ister; entropi adaları yalnızca yazılabilir bölümlerde tetiklenir.

Dayanıklılık

Zarif düşüş

Eksik YARA, eksik kural, bozuk kaynak ağacı, çözümlenemeyen import tablosu — her biri çökme değil, raporda bir nota dönüşür. Malware sık sık dosya yapısını bozar; araç ayakta kalmalıdır.

Boru hattı

engine.triage()

Her aşama bir TriageReport'un tek dilimini yazar; raporlayıcılar ve verdikt motoru yalnızca bu yapıyı okur. Analiz ve sunum ayrıktır.

loader
hashler, imphash, section, yapısal anomali, import + delay-import
rich · fuzzy
araç zinciri hash + checksum · ssdeep / TLSH kümeleme
packers · blobs
bilinen isim + sezgisel · şifreli-config entropi adaları
resources
gömülü PE, yüksek-entropi blob, dropper tespiti
strings · decoded
sınıflandırılmış IOC · XOR/ADD/ROL/base64/hex kurtarma
capabilities
API + kanıt → davranış etiketleri (capa tarzı)
attack · yara
MITRE ATT&CK eşlemesi · ağırlıklı kural eşleşmeleri
verdict
şeffaf ağırlıklı skor → konsol · JSON · HTML · CSV/JSONL · ATT&CK Navigator
Modül haritası

31 modül, altı katman

Odaklı, tek sorumluluklu modüller. Her biri paylaşılan dataclass'lara yazar; hiçbiri diğerinin iç işleyişine bağlı değildir.

Çekirdek
engine.py

orkestratör; tüm triage() boru hattı

models.py

her aşamanın paylaştığı dataclass'lar

loader.py

PE parse, hashler, imphash, anomali, import

Kimlik & kümeleme
fuzzy.py

ssdeep + opsiyonel TLSH; --compare benzerlik

rich.py

Rich header hash, @comp.id, checksum-kurcalama

hashes.py

authentihash (imza-bağımsız) + impfuzzy

cluster.py

--cluster: dropzone'u aileye göre grupla

baseline.py

--baseline: bilinen-iyi ile diff

Yapı
entropy.py

Shannon entropi + eşikler

packers.py

bilinen packer bölümleri + sezgiseller

blobs.py

şifreli-config entropi adaları

resources.py

.rsrc gezici: gömülü PE, yüksek-entropi

overlay.py

overlay içeriği: tip, entropi, gömülü PE

signature.py

Authenticode doğrulama + sertifika

dotnet.py

.NET CLR tespiti + obfuscator izleri

İçerik
strings_ext.py

ASCII/UTF-16LE çıkarma + IOC sınıflandırma

decoded.py

FLOSS-lite: XOR/ADD/ROL/base64/hex kurtarma

stackstrings.py

desen-tabanlı x86 stack-string kurtarma

extractors.py

aile config: Discord/Telegram/stager URL

Davranış & istihbarat
exports.py

export tablosu + fırlatma mekanizması

capabilities.py

API/kanıt → davranış etiketi

attack.py

ATT&CK eşleme + Navigator layer

yara_scan.py

opsiyonel yara-python entegrasyonu

reputation.py

opt-in VirusTotal / MalwareBazaar

Verdikt & raporlama
verdict.py

şeffaf ağırlıklı skorlama

report.py

ANSI konsol + JSON

html_report.py

tek dosya, escape'li, tema-duyarlı HTML

summary.py

batch CSV/JSONL için düz satırlar

misp.py

MISP event export (threat-intel)

web.py

opsiyonel FastAPI upload-and-triage

cli.py

argparse CLI, çıkış kodları, yönlendirme

Analiz yüzeyi

Beş eksende sinyal

EksenSinyaller
KimlikMD5 · SHA1 · SHA256 · imphash · Rich-header hash · ssdeep · TLSH
Yapıbölüm + genel entropi, entropi adaları, packer, W+X bölüm, TLS callback, aşırı overlay, silinmiş/gelecek timestamp, checksum uyuşmazlığı
İçeriksınıflandırılmış IOC string, XOR/ADD/ROL/base64/hex-kurtarılmış string, gömülü PE, şifreli-config blob
Davranışimport + delay-import + export capability'leri (injection, keylogging, persistence, anti-debug, anti-recovery, reflective-loading, dropper …)
İstihbaratMITRE ATT&CK teknik eşlemesi (taktik bazlı) · YARA · opt-in reputation
Mühendislik öne çıkanları

Kütüphane bağlamanın ötesi

Bir mülakatta anlatmaya değer kararlar — performans, ölçüm ve aracın kendi güvenliği.

Anahtar-bağımsız komşuluk araması 2.440ms 133ms

255 tek-bayt anahtarı tüm binary'de brute-force etmek yavaştı. İçgörü: herhangi bir tek-bayt XOR/ADD altında encoded[i] ⊕ encoded[i-1] anahtardan bağımsızdır. Tamponu bir kez dönüştürmek (XOR için bigint kaydırma, C hızında) anahtar tespitini anchor başına tek aramaya indirger — tam kapsam korunarak 18× hızlanma.

Entropi varsayılmadı, ölçüldü

256 baytlık pencere rastgeleliği ölçmek için çok küçüktür: gerçek rastgele veri orada ortalama yalnızca ~7.17 bit verir (küçük-örneklem yanlılığı), eşik sessizce ulaşılamaz hale gelir. Dağılımı ölçmek 512 baytlık pencereye (rastgele ≈ 7.5+) ve 7.4 eşiğine götürdü.

Yanlış-pozitifler kalibrasyonla giderildi

Config-blob tespiti 150 stok imzalı sistem binary'sinde tarandı; salt-okunur .rdata meşru olarak yüksek-entropili sertifika verisi taşır, bu yüzden tarama yazılabilir bölümlerle sınırlandı → 0 yanlış-pozitif. Aynı disiplin sıkıştırılmış PNG ikonları beyaz listeler.

Aracın kendisinin güvenliği

Malware string'leri markup içerebilir; HTML raporu her sample-türevli değeri html.escape'ten geçirir, böylece bir rapor açıldığında gömülü bir <script> asla çalışmaz — testle doğrulandı.

Verdikt modeli

Toplamsal ve şeffaf

Her puanın gerekçesi rapora basılır. Analist bir örneğin neden o skoru aldığını tam olarak görür; temsili ağırlıklar:

SinyalPuan
Packer tespit edildi+15
Yüksek genel entropi (≥ 7.0)+10
Her yapısal anomali+6
Capability (şiddet 1 / 2 / 3)+2 / +8 / +18
YARA eşleşmesi (kural meta.weight)+15
Kurtarılmış kodlu IOC / payload+24'e kadar
Geçerli Authenticode imzası (sertifika tablosunda doğrulanmamış veri varsa 0)−15
İmza var ama geçerli değil (self-signed, süresi dolmuş)0
Paketleme sinyalleri birlikte (packer, entropi, packer YARA, stub)en fazla 30

Eşikler: SUSPICIOUS ≥ 30, HIGH_RISK ≥ 60. Boru hattı dostu çıkış kodları: 0 temiz · 2 şüpheli · 3 yüksek risk.

Test & teknoloji

Doğrulama ve yığın

207 test · ~2.400 satır

Gerçek binary'lere karşı

Birim testleri her analizciyi sentetik girdilerle izole eder (elle üretilmiş XOR/base64 payload'ları, sahte PE tamponları, ekilmiş entropi adaları). Entegrasyon paketi tüm boru hattını notepad.exe ve kernel32.dll'e karşı çalıştırır ve HIGH_RISK almadıklarını doğrular. Bilinen iki yanlış pozitif (mmc.exe, imzalı chrome.exe HIGH_RISK çıkıyor) xfail testleri olarak görünür tutulur. Ağ kodu enjekte HTTP mock'larıyla test edilir — gerçek dış çağrı yok.

Yığın

Ağır bağımlılık yok

Python 3.10+ · pefile — PE parse
ppdeep — saf-Python ssdeep
opsiyonel yara-python, py-tlsh
reputation için standart kütüphane urllib
Web framework yok — malware-lab akışına giren kendi kendine yeten bir CLI.