Kullanıcı alanı paket yakalamanın darboğazı

tcpdump, dsniff ve eski nesil driftnet gibi geleneksel ağ dinleme araçları, 100 Mbps veya 1 Gbps ağların tavan olduğu bir dönem için tasarlanmıştı. Günümüzün 10 Gbps ve 40 Gbps kurumsal omurgalarında bu geleneksel paket yakalama mimarisi yetersiz kalmaktadır.

Temel problem, bir paketin Linux ağ yığınından geçerken katettiği yolda yatar:

  1. Ağ Kartı Kesmesi (IRQ): Ağ kartı (NIC) gelen ethernet çerçevesini alır ve donanımsal bir kesme üretir.
  2. SKB Bellek Ayırma: Çekirdek, gelen her paket için bellekte bir struct sk_buff (socket buffer) tahsis eder. Bu işlem kilit çekişmesi, işlemci önbellek ıskalamaları ve ciddi bellek ek yükü doğurur.
  3. Ağ Yığını Geçişi: Paket IP tabloları, güvenlik duvarı kancaları, yönlendirme tabloları ve taşıma katmanları boyunca ilerler.
  4. Kullanıcı Alanına Kopyalama: Paket en son ham sokete veya libpcap tamponuna ulaştığında, çekirdek alanından kullanıcı alanına (userspace) bir bellek kopyalaması ve bağlam değişimi (context switch) gerçekleşir.

Yüksek hat trafiği altında işlemci çekirdekleri, zamanının büyük bölümünü sk_buff tahsis etmek ve serbest bırakmakla harcar. Paket geliş hızı kullanıcı alanındaki dinleyicinin tüketim kapasitesini aştığında, soket alma tamponları taşar ve paketler sessizce düşürülür (packet drop). Ofansif ekipler için düşen paketler yakalanamayan kimlik el sıkışmaları; savunma ekipleri içinse ağ görünürlüğünde kör noktalar anlamına gelir.

İşte bu noktada eBPF (Extended Berkeley Packet Filter) ve XDP (eXpress Data Path) paket işleme mimarisini kökten değiştirir.

driftnet2’nin çift hatlı mimarisi

Paket düşmelerini önlemek ve kimlik bilgilerini hat hızında (line-rate) yakalamak amacıyla driftnet2 aracını geliştirdik. Araç, XDP aracılığıyla doğrudan ağ aygıtı sürücüsü katmanına bir eBPF programı iliştirir:

KERNEL-LEVEL EBPF/XDP SNIFFING · ZERO-COPY DUAL-PATH INGESTION 1 · Ingress Frame NIC Driver Layer Raw Ethernet Ingress 2 · eBPF / XDP Hook In-Kernel L4 Filter Drops Non-Target Traffic 3 · Userspace Engine 9 Protocol Parsers NTLMv2 & Audit Report
driftnet2 capture pipeline: in-kernel eBPF/XDP filtering drops irrelevant packets at line rate, feeding bounded records to userspace protocol parsers.

1. Çekirdek içi XDP filtrelemesi (xdp_sniff.c)

XDP, doğrulanmış bayt kodunu mümkün olan en alt katmanda — yani çekirdek henüz bir sk_buff oluşturmadan, doğrudan ağ sürücüsünün alma halkasında (RX ring) — çalıştırır.

eBPF programı Layer 3 ve Layer 4 başlıklarını doğrudan tampon üzerinde inceler. Paket hedef kimlik doğrulama portlarıyla (TCP 80, 445, 389, 21, 23, 110, 143, 587 veya UDP 53 gibi) eşleşmiyorsa, kanca derhal XDP_PASS döndürür. Yalnızca hedef paketler yüksek performanslı bir BPF Ring Buffer (BPF_MAP_TYPE_RINGBUF) üzerinden kullanıcı alanına aktarılır:

// bpf/xdp_sniff.c: Line-rate L4 port filtering
SEC("xdp")
int xdp_credential_filter(struct xdp_md *ctx) {
    void *data = (void *)(long)ctx->data;
    void *data_end = (void *)(long)ctx->data_end;

    struct ethhdr *eth = data;
    if ((void *)(eth + 1) > data_end)
        return XDP_PASS;

    if (eth->h_proto != bpf_htons(ETH_P_IP))
        return XDP_PASS;

    struct iphdr *ip = (void *)(eth + 1);
    if ((void *)(ip + 1) > data_end)
        return XDP_PASS;

    if (ip->protocol == IPPROTO_TCP) {
        struct tcphdr *tcp = (void *)ip + (ip->ihl * 4);
        if ((void *)(tcp + 1) > data_end)
            return XDP_PASS;

        __u16 dport = bpf_ntohs(tcp->dest);
        __u16 sport = bpf_ntohs(tcp->source);

        // Filter: HTTP(80), SMB(445), LDAP(389), FTP(21), Telnet(23), Mail(110,143,587)
        if (is_target_port(dport) || is_target_port(sport)) {
            submit_to_ringbuf(ctx, ip, tcp);
        }
    }
    return XDP_PASS;
}

Doğrudan sürücü katmanında filtreleme yapılması sayesinde kullanıcı alanı motoru yalnızca kimlik bilgisi barındırma ihtimali olan paketleri inceler; bu da yoğun ağ trafiğinde işlemci tüketimini %90’a varan oranda düşürür.

2. Çift hatlı veri alımı ve taşınabilirlik

Hedef makine yerel XDP desteğine sahip değilse (veya macOS üzerinde çalıştırıldığında), driftnet2 otomatik olarak optimize edilmiş bir libpcap yakalama döngüsüne geçer. Her iki yakalama hattı da aynı protokol ayrıştırma akışını besler.

9 protokol motorunda kimlik bilgisi ayrıştırma

driftnet2, harici paket ayrıştırıcılara (Wireshark gibi) ihtiyaç duymadan doğrudan kimlik bilgisi ve hash yakalamaya odaklanan hafif motorlar içerir:

ProtokolVarsayılan PortlarKimlik Türü ve TeknikHashcat ModuÇıktı Formatı
SMB / CIFS445, 139NTLMv2 Challenge/Response el sıkışması birleştirme5600username::domain:server_challenge:ntproof:blob
LDAP389Simple Bind isteklerinin ASN.1 BER ayrıştırması—bind_dn:password
HTTP80, 8080Basic Auth, POST gövde parametreleri, Bearer token, çerezler—user:password veya Bearer <jwt>
FTP21Düz metin USER / PASS komut dizisi—user:password
Telnet23Etkileşimli oturum ve tuş vuruşu yeniden birleştirme—login:password
POP3 / IMAP110, 143USER/PASS, AUTH PLAIN ve LOGIN komutları—user:password
SMTP25, 587AUTH LOGIN (Base64) ve AUTH PLAIN trafiği—user:password
DNS53Gizli tünel tespiti için Shannon entropi analizi—subdomain.c2.example.com

Relay vekiline ihtiyaç duymadan NetNTLMv2 yakalama

Bir SMB kimlik doğrulama el sıkışmasında istemci ve sunucu üç mesaj paylaşır:

  1. Tip 1 (Negotiate): İstemci NTLM yeteneklerini bildirir.
  2. Tip 2 (Challenge): Sunucu 8 baytlık bir meydan okuma (challenge) döndürür.
  3. Tip 3 (Authenticate): İstemci etki alanı, kullanıcı adı, NTProofStr HMAC özeti ve zaman damgaları içeren değişken uzunluklu hedef blob’unu iletir.

Geleneksel araçlar (Responder gibi) sahte sunucu rolü üstlenerek bu el sıkışmayı zorla tetikler. driftnet2 ise bu el sıkışmayı meşru ağ trafiğinden pasif olarak yakalar. Ayrıştırıcı, aktif TCP oturumlarındaki Tip 2 meydan okumalarını Tip 3 yanıtlarıyla ilişkilendirerek kırma işlemi için gereken formatı anında üretir:

# Hashcat Mod 5600 NetNTLMv2 hash formatı:
CORP\jsmith::CORP-DC:1122334455667788:AABBCCDDEEFF00112233445566778899:0101000000000000...

Elde edilen hash, hiçbir ek düzenleme gerektirmeden doğrudan hashcat -m 5600 hashes.txt /path/to/wordlist.txt komutuna verilebilir.

Gizli DNS tünel tespiti

Saldırganlar güvenlik duvarı çıkış kısıtlamalarını aşmak için sıklıkla DNS tünelleme araçlarına (dnscat2, iodine) başvurur. driftnet2, her DNS sorgusunu Shannon entropi formülü üzerinden değerlendirir:

$$H(X) = -\sum_{i=1}^{n} P(x_i) \log_2 P(x_i)$$

Alt alan adları aşırı etiket uzunluğu ($> 50$ karakter) ile birlikte yüksek entropi ($H > 3.8$) sergilediğinde, driftnet2 bu işlemi aktif bir protokol tünelleme göstergesi ([T1071.004]) olarak işaretler.

Canlı yürütme ve çevrimdışı PCAP analizi

driftnet2 hem canlı ağ dinleme hem de çevrimdışı analiz modunda çalışır. Bir paket yakalama dosyasını (.pcap) incelerken araç tamamen root yetkisi olmadan çalıştırılabilir:

# Test yakalamasını analiz et, kimlik bilgilerini çıkar ve maruziyet denetimi yap
./driftnet2 -pcap examples/demo.pcap -output creds.json -audit

Konsol, yakalanan kimlik doğrulama olaylarını anlık olarak ekrana basar:

    ____       _  ______            __   ___  
   / __ \_____(_)/ __/ /_____  ___ / /_ |__ \ 
  / / / / ___/ // /_/ __/ __ \/ _ \ __/ __/ / 
 / /_/ / /  / // __/ /_/ / / /  __/ /_ / __/  
/_____/_/  /_//_/    \__/_/ /_/\___/\__|____/ 

      kernel-level packet sniffer & credential extractor

[*] offline mode: examples/demo.pcap
[FTP] Login 192.0.2.10 → 198.51.100.20:21 — demo:[redacted]
[HTTP] Basic Auth 192.0.2.11 → 198.51.100.21:80 — demo:[redacted]
[POP3] Login 192.0.2.12 → 198.51.100.22:110 — [email protected]:[redacted]
[IMAP] Login 192.0.2.13 → 198.51.100.23:143 — [email protected]:[redacted]
[SMTP] AUTH PLAIN 192.0.2.14 → 198.51.100.24:587 — postmaster:[redacted]
[TELNET] Session 192.0.2.15 → 198.51.100.25:23 — [redacted payload]
[LDAP] Simple Bind 192.0.2.16 → 198.51.100.26:389 — cn=admin,dc=corp:[redacted]
[SMB] NTLMv2 192.0.2.17 → 198.51.100.27:445 — [redacted hash]
[DNS] Tunnel Detection 192.0.2.18 → 8.8.8.8:53 — DNS: TXlDMkV4ZmlsUGF5bG9hZERhdGFHb2VzSGVyZQ.c2.example.test

[*] 9 packets processed, 9 unique credentials found in examples/demo.pcap
[*] saved → creds.json
FTP, HTTP, POP3, IMAP, SMTP, Telnet, LDAP, SMB ve DNS uzerinde calisan driftnet2 coklu protokol terminal ciktisi
driftnet2 Terminal Çıktısı 9 protokol motoru üzerinden eşzamanlı kimlik bilgisi yakalayan ve ardından otomatik maruziyet puanlaması yapan çevrimdışı PCAP analizi.

Savunma tarafı: ağ maruziyet denetim motoru

Kırmızı ekipler driftnet2’yi sızma testlerinde pasif kimlik toplama amacıyla kullanırken, mavi ekipler dahili -audit motorunu şirket ağlarındaki şifresiz protokol risklerini ölçmek için kullanabilir:

# SPAN veya TAP portu yakalamasından doğrudan güvenlik açığı denetim raporu üret
./driftnet2 -pcap network_traffic.pcap -audit -audit-output audit_report.json

Denetim motoru bulguları önem derecesine göre sınıflandırır ve somut sıkılaştırma adımları önerir:

Credential Exposure Audit
=========================
9 findings — 7 High, 1 Medium, 1 Low

[HIGH] SMB — Password hash (1)
  Endpoints: 192.0.2.17 -> 198.51.100.27
  Fix: Require SMB signing/encryption, restrict NTLM (prefer Kerberos), and enable Extended Protection for Authentication.

[HIGH] HTTP — Cleartext password (1)
  Endpoints: 192.0.2.11 -> 198.51.100.21
  Fix: Enforce HTTPS/HSTS; never send Basic auth, form credentials, or tokens over cleartext HTTP.

[HIGH] LDAP — Cleartext password (1)
  Endpoints: 192.0.2.16 -> 198.51.100.26
  Fix: Enforce LDAPS (TCP/636) or StartTLS; reject simple bind authentication over cleartext.

[MEDIUM] DNS — DNS tunnel indicator (1)
  Endpoints: 192.0.2.18 -> 8.8.8.8
  Fix: Investigate for tunneling/exfiltration; apply DNS filtering policy and query rate limiting.
Bulgu KategorisiProtokolTehdit Mekanizmasıİyileştirme (Fix)
HighSMB / NetNTLMv2Çevrimdışı Hashcat sözlük ve kural saldırılarıyla hash kırmaKerberos kimlik doğrulamasını zorunlu kılın, NTLMv1/v2’yi kapatın, SMB imzalamayı açın
HighLDAP Simple Bindİç anahtarlar üzerinden geçen şifresiz dizin kimlik bilgileriLDAPS (TCP 636) zorunlu kılın veya LDAP kanal bağlama (channel binding) uygulayın
HighHTTP Basic / FormYerel ağ hattında açıkta akan kullanıcı adı ve parolalarHSTS ile HTTPS’i zorunlu kılın, eski HTTP port 80 dinleyicilerini kapatın
MediumDNS TünellemeGüvenlik duvarını aşan gizli giden C2 iletişim kanalıDahili DNS çözümleyicileri zorunlu kılın, entropi filtrelemesi uygulayın, harici UDP/53’ü engelleyin

Kanıt ve sınırlar

Tüm testler ve paket ayrıştırma doğrulamaları izole laboratuvar ortamlarında üretilmiş sentetik ve tekrarlanabilir PCAP test dosyalarıyla gerçekleştirilmiştir. Çekirdek içi eBPF/XDP testleri fiziksel ve sanal ağ arayüzlerine sahip Linux 6.x çekirdeklerinde yürütülmüştür. macOS ve Linux dışı sistemlerde paket yakalama standart libpcap arayüzü üzerinden çalışır. Testler sırasında hiçbir canlı üretim ağı veya yetkisiz iletişim izlenmemiştir.

Referanslar

Kaynaklar ve güncellik

Bu teknik not ne kadar güncel?

Kontrol edilen kaynaklar9 Kasım 2026

En son kaynak incelemesi, içerik güncellemesi veya yayın tarihi gösterilmektedir.

İnceleme DurumuYazar incelemesi tamamlandı

Yazar teknik incelemeyi tamamladı. Bu etiket tek başına laboratuvar yeniden üretimi iddiası taşımaz.