Snort IDS: Ağ Saldırı Tespitinde Derinlemesine Bir Bakış
Ağ güvenliği stratejilerinde, trafik akışını pasif olarak izleyerek anormal davranışları veya bilinen tehdit imzalarını tespit eden bir sistem olan Ağ Saldırı Tespit Sistemi (NIDS) kritik bir bileşendir. Snort, bu alanda açık kaynaklı, esnek ve yüksek performanslı bir çözüm olarak öne çıkar. Bir güvenlik duvarının temel amacı trafiği engellemekken, Snort'un odak noktası, ağ üzerinde gerçekleşen kötü amaçlı aktiviteleri gerçek zamanlı olarak belirlemek ve uyarı vermektir.
Snort'un Mimari Temelleri ve İşleyiş Prensibi
Snort, üç ana bileşenden oluşan modüler bir yapıya sahiptir: Paket Çözücü (Packet Decoder), Ön İşlemciler (Preprocessors) ve Tespit Motoru (Detection Engine). Bu yapı, ham ağ paketlerini analiz edilebilir verilere dönüştürür ve ardından tanımlanmış kurallara göre karşılaştırır.
- Paket Çözücü: Ağ arayüzünden yakalanan ham paketleri alır ve bunların başlıklarını (Ethernet, IP, TCP/UDP vb.) ayrıştırarak sonraki katmanlar için anlamlı bir formata dönüştürür.
- Ön İşlemciler: Çözülen paketler üzerinde çeşitli ön analizler yapar. Bu modüller, fragmente edilmiş IP paketlerini yeniden birleştirme, TCP akışlarını yeniden düzenleme, port taramalarını tespit etme veya HTTP trafiğini normalleştirme gibi görevleri üstlenir. Örneğin, bir web saldırısının parçalı paketler halinde gelmesi durumunda, ön işlemciler bu parçaları birleştirerek tespit motorunun tam isteği analiz etmesini sağlar.
- Tespit Motoru: Snort'un kalbidir. Ön işlemcilerden gelen normalize edilmiş veriyi, yüklenmiş Snort kuralları setiyle karşılaştırır. Kurallarda tanımlanmış desenlerle eşleşen paketler tespit edildiğinde, ilgili kuralda belirtilen eylemi (uyarı oluşturma, paketi loglama vb.) tetikler.
Snort, üç ana modda çalıştırılabilir:
- Sniffer Modu: Sadece ağdaki paketleri okur ve konsola basar. Tcpdump benzeri bir fonksiyondur.
- Paket Kaydedici (Packet Logger) Modu: Ağdaki paketleri diske kaydeder. Genellikle tcpdump formatında veya metin tabanlı formatlarda loglama yapar.
- Ağ Saldırı Tespit Sistemi (NIDS) Modu: Snort'un ana kullanım amacıdır. Belirtilen kurallara göre ağ trafiğini analiz eder ve eşleşen bir patern bulduğunda uyarı verir.
Snort Kural Yapısı ve Derinlemesine Analiz
Snort'un gücü, esnek ve kapsamlı kural yazma yeteneğinden gelir. Bir Snort kuralı iki ana bölümden oluşur: Kural Başlığı (Rule Header) ve Kural Seçenekleri (Rule Options).
Kural Başlığı
Kuralın hangi trafiği hedeflediğini tanımlar ve şu bileşenleri içerir:
Action Protocol Source_IP Source_Port Direction Destination_IP Destination_Port- Action (Eylem): Kural tetiklendiğinde Snort'un ne yapacağını belirler. Yaygın eylemler:
alert: Bir uyarı oluştur ve paketi logla.log: Paketi logla, uyarı oluşturma.pass: Paketi yok say.drop: Paketi engelle ve logla (Snort IPS modunda).reject: Paketi engelle ve kaynak/hedef için TCP RST veya ICMP hatası gönder (Snort IPS modunda).
- Protocol (Protokol): Hedeflenen protokol (tcp, udp, icmp, ip).
- Source_IP / Source_Port: Kaynak IP adresi ve portu.
anyile herhangi bir adres veya port belirtilebilir. CIDR blokları da kullanılabilir (örn: 192.168.1.0/24). Negasyon için!kullanılabilir (örn: !192.168.1.0/24). - Direction (Yön): Trafiğin akış yönünü gösterir.
->: Tek yönlü (kaynaktan hedefe).<>: Çift yönlü (kaynak ve hedef arasında her iki yönde).
- Destination_IP / Destination_Port: Hedef IP adresi ve portu.
Kural Seçenekleri
Kuralın başlığında belirtilen trafiği daha detaylı incelemek için kullanılır ve parantez içinde yer alır. Anahtar-değer çiftlerinden oluşur ve noktalı virgülle ayrılır.
(option: value; option: value; ...)Bazı önemli kural seçenekleri:
msg: Uyarı mesajı. Anlaşılır bir metin olmalıdır. (örn:msg:"Potansiyel SQL Enjeksiyonu";)sid: Snort ID. Her kural için benzersiz bir tamsayı. 1'den 1,000,000'a kadar olan SID'ler özel kullanım için ayrılmıştır, 1,000,001 ve üzeri kendi kurallarınız için kullanılabilir.rev: Kuralın revizyon numarası. Kuralda yapılan değişiklikleri izlemek için kullanılır.content: Paket yükünde aranacak belirli bir metin veya ikili kalıp. (örn:content:"/etc/passwd";veyacontent:"|90909090|";)pcre: Perl Compatible Regular Expressions kullanarak daha karmaşık desen eşleştirmesi.flow: TCP akışının durumunu kontrol eder (örn:flow:to_client,established;).classtype: Tespit edilen saldırının kategorisini belirtir (örn: web-application-attack).priority: Uyarının ciddiyetini belirtir.reference: Harici referanslara (CVE, Bugtraq) bağlantı sağlar.
Örnek Snort Kuralları ve Analizi
Örnek 1: Temel Bir Port Tarama Tespiti
alert tcp any any -> 192.168.1.0/24 22 (msg:"SSH Port Taramasi Tespit Edildi"; flags:S,12; flowbits:no_stream; threshold:type limit,track by_src,count 5,seconds 60; classtype:attempted-recon; sid:1000001; rev:1;)Bu kural, 192.168.1.0/24 ağı içindeki herhangi bir ana makinenin 22 numaralı SSH portuna yönelik 60 saniye içinde aynı kaynaktan gelen 5 veya daha fazla SYN paketi (flags:S,12) algılandığında bir uyarı tetikler. flowbits:no_stream, TCP akışı oluşturulmadığını, yani sadece bağlantı denemesi olduğunu belirtir. threshold seçeneği, belirli bir süre içinde belirli bir sayıda olayı kısıtlayarak false positive'leri azaltmaya yardımcı olur.
Örnek 2: Basit Bir Web Uygulaması Saldırısı İmzası
alert tcp any any -> $HOME_NET 80 (msg:"Potansiyel Komut Enjeksiyonu Denemesi"; flow:to_server,established; content:"cmd.exe"; http_uri; nocase; sid:1000002; rev:1;)Bu kural, HTTP sunucusuna (80 portu) giden ve halihazırda kurulmuş bir TCP oturumu (flow:to_server,established) içinde URI kısmında