Maltrail Saldiri Tespit ve Kurulumu
Ağınızda bir cihazın malware C2 sunucusuyla konuştuğunu, ama bunu haftalar sonra fark ettiğinizi düşünün. IDS kuralları güncel değil, firewall logları kimse bakmıyor, SIEM ise henüz hayal. Maltrail tam bu boşluğa oturuyor: pasif olarak SPAN portundan akan trafiği dinliyor, bilinen kötücül domainler, IP adresleri ve URL'lere karşı eşleştiriyor, şüpheli aktiviteyi web arayüzünde görünür kılıyor.
Maltrail açık kaynaklı, Python ve Rust ile yazılmış bir malicious traffic detection sistemi. Miroslav Stampar ve Mikhail Kasimov tarafından geliştiriliyor, MIT lisanslı. 8.600'den fazla GitHub yıldızı var ve OPNsense, pfSense gibi güvenlik duvarlarına da plugin olarak entegre edilebiliyor.
Sensor ve Server Ayrımı
Maltrail iki bağımsız process olarak çalışır. Sensor trafiği yakalar, trail denen göstergelerle eşleştirir, heuristic analiz yapar. Server ise olayları saklar, web arayüzünü sunar, API sağlar. Varsayılan kurulumda ikisi aynı makinede çalışır ama dağıtık mimaride sensorler farklı network segmentlerinde, server merkezi bir noktada olabilir.
Sensor libpcap üzerinden çalışır. SPAN/mirror portuna bağlı bir interface, transparent bridge veya honeypot makinesi üzerinde pasif dinleme yapar. Root yetkisi gerekir çünkü raw packet capture yapar. Server ise root olmadan çalışabilir.
┌──────────┐ events (UDP or file) ┌──────────┐
│ sensor │ ───────────────────────► │ server │ ◄── browser
└──────────┘ └──────────┘
Rust Python
libpcap + PACKET_FANOUT reporting UI + API
trail matching + heuristicsYeni sürümlerde sensor Python yerine Rust ile yazılmış. Performans farkı belirgin: eski Python sensörüne göre 14-37 kat daha düşük per-packet maliyet ölçülmüş. Tek worker varsayılan, gerekirse CAPTURE_FANOUT ile çoğaltılabilir ama her worker eklendiğinde bazı heuristiclerin hassasiyeti düşer.
Trail Nedir
Maltrail'in temel kavramı trail. Bir trail; domain (örn. zvpprsensinaix.com), URL, IP adresi, IP:port çifti, User-Agent stringi, JA3/JA4 TLS fingerprint veya sertifika hash olabilir. Her trail bir classification ve kaynak ile birlikte gelir.
Trail seti dört kaynaktan birleştirilir:
Feeds: abuseipdb, alienvault, emergingthreats, greensnow gibi 42+ public threat intelligence feed'i
Custom: kendi belirlediğiniz göstergeler, CUSTOM_TRAILS_DIR altında
Static: stamparm/trails reposunda toplanmış, antivirus raporlarından derlenmiş büyük liste
Engine lists: mass_scanner.txt gibi nadiren değişen dahili listeler
Static trail seti ayrı bir repository'de tutulur ve detection içeriği günde onlarca kez güncellenir. STATIC_TRAILS_URL ile belirli bir release'e sabitleyebilirsiniz, böylece kötü bir yayın anında tüm deployment'ları etkilemez.
Kurulum
En temiz yol installer script'i kullanmak. 12 Linux dağıtımı, FreeBSD, NetBSD, OpenBSD ve macOS'ta test edilmiş.
curl -fsSL https://raw.githubusercontent.com/stamparm/maltrail/master/install.sh | sudo shInstaller bağımlılıkları kurar, /opt/maltrail altında managed checkout oluşturur, checksum doğrular, maltrail adında ayrıcalıksız bir kullanıcı açar, systemd unit'lerini kurar, log ve state dizinlerini hazırlar, sensor ve server'ı başlatır. Tekrar çalıştırıldığında upgrade yapar.
Kaynak koddan derlemek isterseniz sensor için Rust 1.74+, libpcap-dev ve capability tools gerekir:
sudo apt-get install cargo libpcap-dev libcap2-bin python3
git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail
cargo build --release --manifest-path sensor/Cargo.toml
sudo setcap cap_net_raw,cap_net_admin=eip sensor/target/release/maltrail-sensor
sensor/target/release/maltrail-sensor -T-T flag'i deployment validation yapar. Config, trails, whitelist, capture filter, ayrıcalıklar, log storage hepsini kontrol eder. Systemd unit'leri bunu ExecStartPre olarak çalıştırır, böylece eksik ayrıcalık veya yazılamaz log dizini gibi sorunlar sessizce başarısız olmaz.
Docker ile de kurulabilir:
docker run -d --name maltrail --restart=unless-stopped \
-p 8338:8338/tcp -p 8337:8337/udp \
-v /etc/maltrail.conf:/opt/maltrail/maltrail.conf:ro \
ghcr.io/stamparm/maltrail:latestYapılandırma
maltrail.conf tek dosyada hem Sensor hem Server ayarlarını tutar. Format whitespace-separated KEY VALUE, INI tarzı değil. # [Sensor] ve # [Server] satırları sadece yorum, gruplama için.
Önemli sensor ayarları:
MONITOR_INTERFACE any
CAPTURE_FILTER udp or icmp or (tcp and (tcp[tcpflags] == tcp-syn or port 80 or port 1080 or port 3128 or port 8000 or port 8080 or port 8118))
CAPTURE_FANOUT 1
USE_HEURISTICS true
UPDATE_PERIOD 86400
DISABLED_FEEDS turris, ciarmy, policeman, myip, alienvault
IP_MINIMUM_FEEDS 3
USER_WHITELIST /etc/maltrail/user_whitelist.txt
CUSTOM_TRAILS_DIR /etc/maltrail/custom_trailsIP_MINIMUM_FEEDS 3, bir IP'nin en az 3 bağımsız feed'de görünmesi gerektiği anlamına gelir. Tek feed'de olan IP'leri elemek false positive'leri ciddi azaltır.
Server ayarları:
HTTP_ADDRESS 0.0.0.0
HTTP_PORT 8338
USE_SSL false
USERS
admin:9ab3cd9d67bf49d01f6a2e33d0bd9bc804ddbe6ce1ff5d219c42624851db5dbc:0:Varsayılan şifre changeme!. Hemen değiştirin:
echo -n 'YourSecurePassword' | sha256sum | cut -d " " -f 1Çıkan hash'i USERS satırına yapıştırın. UID 0 admin, 1000 ve üzeri read-only kullanıcı. Ayrıca filtre network maskesi ekleyerek kullanıcının sadece kendi ağından gelen event'leri görmesini sağlayabilirsiniz.
Dağıtık kurulumda sensor tarafında LOG_SERVER, server tarafında UDP_ADDRESS ve UDP_PORT aktif edilir:
# Sensor tarafında
LOG_SERVER 192.168.1.10:8337
# Server tarafında
UDP_ADDRESS 0.0.0.0
UDP_PORT 8337Web Arayüzü ve API
Dashboard http://sunucu-ip:8338 adresinde çalışır. Tek günün event'lerini gösterir, date picker ile geçmiş günlere gidilebilir. Event'ler /events endpoint'inden stream edilir, tarayıcıda threats adı verilen (source, trail) çiftlerine göre gruplanır.
Önemli özellikler:
Live mode: yeni event'ler Server-Sent Events ile anlık push edilir
Retro hunt: tüm saklanan loglarda tek bir gösterge arar
World map: event'lerin coğrafi dağılımı
Triage: new/investigating/resolved/false positive durumları, notlar, etiketler
Export: CSV, JSON veya defanged indicator olarak dışa aktarım
API üzerinden indicator lookup yapılabilir:
curl 'http://127.0.0.1:8338/check?q=www.sub.evil.example'{
"query": "www.sub.evil.example",
"found": true,
"trail": "evil.example",
"info": "asyncrat (malware)",
"reference": "(static)",
"confidence": 100
}Confidence skoru 0-100 arası. Tek feed'de 40, her ek bağımsız feed +15, custom ve static entry'ler tam puan. Firewall kuralı yazmadan önce confidence'ı kontrol etmek faydalı.
Detection Test
Kurulumun gerçekten çalıştığını doğrulamak için:
python3 server.py --detect-testBu komut crafted pcap içindeki emulated malicious traffic'ı replay eder. DNS query, IP, IP:port, URL path, Host header eşleşmeleri ile SQL injection, traversal, RCE, XSS, proxy-probe, sinkhole, missing-Host ve port/web/infection-scanning heuristic'lerinin hepsinin tetiklenmesini bekler. Sağlıklı kurulum 20/20 detection(s) fired çıktısı verir.
Syslog ve Logstash Entegrasyonu
Maltrail event'leri dış SIEM'e gönderebilir. Syslog için:
SYSLOG_SERVER 192.168.1.20:514Logstash/JSON için:
LOGSTASH_SERVER 192.168.1.20:5000REMOTE_SEVERITY_REGEX ile hangi event'lerin gönderileceği kontrol edilir. Varsayılan regex high, medium, low severity kategorilerine ayırır.
Fail2ban entegrasyonu da var. /fail2ban endpoint'i attacker IP'lerini fail2ban formatında döner, böylece Maltrail'in flag'lediği kaynak IP'ler otomatik banlanabilir.
Prometheus Metrikleri
STATS_ADDRESS aktif edilirse sensor Prometheus metrikleri yayar. İzlenmesi gerekenler:
maltrail_up == 0: capture worker çalışmıyor
maltrail_capture_dropped_total artıyor: capture ring packet drop ediyor
maltrail_local_log_errors_total artıyor: event üretiliyor ama yazılamıyor
maltrail_trail_generation ilerlemiyor: trail set güncellenmiyor
maltrail_log_dir_free_bytes: kalan disk kapasitesi
Event Saklama
Maltrail log rotate veya silme yapmaz. Günlük log dosyaları /var/log/maltrail altında birikir. Retention politikasını operatör belirlemeli. Öneri: kalıcı kopyayı LOG_SERVER, SYSLOG_SERVER veya LOGSTASH_SERVER ile merkezi sisteme gönderin, local log'ları external tooling ile rotate edin.
Tipik Senaryolar
Maltrail'in güçlü olduğu alanlar:
Mass scanner tespiti: Shodan, ZoomEye gibi servislerin port taramaları
C2 bağlantıları: malware enfekte cihazların command-and-control sunucularıyla konuşması
DGA domainleri: necurs gibi domain generation algorithm kullanan malware'ler
SQL injection denemeleri: sqlmap User-Agent'ı gibi bilinen imzalar
Tor exit node kullanımı: şüpheli trafik için Tor kaynaklı bağlantılar
Heuristic analiz de var. Port scanning, DNS exhaustion, DGA-like lookups, suspicious downloads, proxy probes gibi pattern'leri bilinen listede olmayan tehditler için de yakalayabilir.
Sınırları
Maltrail endpoint telemetry veya genel amaçlı IPS değildir. Indicator-based monitoring yapar, deep packet inspection yapmaz. Suricata gibi bir IDS ile birlikte kullanılması ideal: Suricata protokol anomaly ve exploit denemelerini yakalar, Maltrail bilinen kötücül altyapıyla iletişimi tespit eder.
Ayrıca trail seti 1.5 milyon satıra ulaşabildiği için sensor başlangıçta birkaç dakika trail yükleyebilir. Trail seti hazır olana kadar detection çalışmaz, sabır gerekir.
Küçük bir network için Maltrail neredeyse sıfır konfigürasyonla anlamlı görünürlük sağlar. Büyük network'te distributed sensorlerle merkezi server mimarisi kurulabilir. Her iki durumda da SPAN portu ayarlamayı ve default şifreyi değiştirmeyi unutmayın.