Snort IDS ile Ağ Saldırı Tespiti: Derinlemesine Bir Bakış

 · 

Snort IDS ile Ağ Saldırı Tespiti: Derinlemesine Bir Bakış

Snort IDS ile Ağ Saldırı Tespiti: Derinlemesine Bir Bakış

Ağ trafiğini analiz ederek kötü amaçlı aktiviteyi belirlemek, modern siber güvenlik stratejilerinin temelidir. Bu bağlamda, Snort, açık kaynak kodlu bir Ağ Saldırı Tespit Sistemi (IDS) ve Ağ Saldırı Önleme Sistemi (IPS) olarak, paket analizi ve kural tabanlı tespit mekanizmalarıyla kritik bir rol oynar. Snort, hem pasif dinleme (IDS modu) hem de aktif engelleme (IPS modu) yeteneğine sahiptir ve bu esneklik, onu geniş bir kullanım yelpazesi için uygun kılar.

Snort'un Temelleri: Mimarisi ve Çalışma Prensibi

Snort'un çekirdek mimarisi üç ana bileşenden oluşur: Paket Sniffer, Ön İşlemciler (Preprocessors) ve Tespit Motoru (Detection Engine).

  • Paket Sniffer: Ağ arayüzünden geçen tüm paketleri yakalar ve yorumlar. Libpcap kütüphanesini kullanarak bu işlemi gerçekleştirir.
  • Ön İşlemciler: Yakalanan paketleri tespit motoruna göndermeden önce normalleştirir ve potansiyel saldırıları kolayca tespit etmek için belirli protokoller üzerinde derinlemesine analiz yapar. Örneğin, HTTP ön işlemcisi HTTP trafiğini ayrıştırır, port tarama ön işlemcisi olası tarama faaliyetlerini izler.
  • Tespit Motoru: Ön işlemcilerden gelen verileri Snort kurallarına göre değerlendirir. Eğer bir paket veya paket akışı tanımlı bir kural ile eşleşirse, belirlenen eylemi tetikler (uyarı, loglama veya engelleme).

Snort'un çalışma mantığı, bir ağ arayüzüne bağlı olarak tüm trafiği dinlemesi ve bu trafiği yapılandırılmış kurallar dizisine göre incelemesidir. Her bir kural, belirli bir desen, imzaya veya davranışa göre bir saldırıyı tanımlar.

Snort Kural Yazımı: Detaylı Bir Analiz

Snort'un gücü, esnek ve kapsamlı kural yazım 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 başlığı, kuralın hangi protokolü, kaynak ve hedef IP adreslerini/portlarını hedeflediğini tanımlar.

action protocol source_ip source_port -> destination_ip destination_port
  • Action (Eylem): Kural tetiklendiğinde Snort'un ne yapacağını belirtir. En yaygın olanları şunlardır:
    • alert: Bir uyarı oluştur ve logla.
    • log: Paketi logla.
    • pass: Paketi yok say.
    • drop: Paketi engelle ve logla (IPS modunda).
    • reject: Paketi engelle ve gönderene bir TCP RST veya ICMP hatası gönder (IPS modunda).
  • Protocol (Protokol): Kuralın uygulanacağı protokol (tcp, udp, icmp, ip).
  • Source/Destination IP/Port: Kaynak ve hedef IP adresleri ve portları. any anahtar kelimesi herhangi bir IP veya portu ifade eder. Değişkenler (örn. $HOME_NET, $EXTERNAL_NET) kullanılarak esneklik sağlanır. Bir dizi IP adresi veya CIDR bloğu belirtilebilir (örn. 192.168.1.0/24).
  • Yön Operatörü (->): Trafik akış yönünü belirtir.

Kural Seçenekleri

Kural seçenekleri, kural başlığı tarafından filtrelenen trafiği daha derinlemesine incelemek için kullanılır. Seçenekler, parantez içinde ve noktalı virgülle ayrılmış olarak belirtilir.

alert tcp any any -> $HOME_NET 80 (msg:"Potansiyel SQL Enjeksiyon Girişimi"; content:"union select"; nocase; http_uri; classtype:web-application-attack; sid:1000001; rev:1;)
  • msg: Uyarı mesajı. Loglarda veya SIEM sistemlerinde görüntülenir.
  • sid: Snort ID. Her kural için benzersiz bir sayısal tanımlayıcı olmalıdır.
  • rev: Revizyon numarası. Kuralda yapılan her değişiklikte artırılır.
  • content: Paketin yükünde aranan ASCII veya ikili desen. |xx yy zz| formatında ikili değerler de belirtilebilir.
  • nocase: content seçeneği ile birlikte kullanılır, büyük/küçük harf duyarlılığını kapatır.
  • http_uri: content seçeneğini sadece HTTP URI kısmında arar.
  • pcre: Perl Compatible Regular Expressions (PCRE) kullanarak karmaşık desen aramaları yapar.
  • flow: TCP oturumunun durumunu kontrol eder (örn. established, to_server, from_client).
  • classtype: Saldırı kategorisini belirtir (örn. web-application-attack, attempted-admin).
  • flowbits: Birden fazla kural arasında durum bilgisini paylaşmayı sağlar. Karmaşık saldırı senaryolarını zincirlemek için kullanılır.

Örnek Snort Kuralı ve Açıklaması:

Web sunucusuna yönelik bir SQL enjeksiyon denemesini tespit eden gelişmiş bir kural:

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"WEB-ATTACK SQL Injection - Union Select Attempt"; flow:to_server,established; content:"union"; http_uri; nocase; content:"select"; http_uri; nocase; distance:0; pcre:"/union\s+select/Ui"; classtype:web-application-attack; sid:2000001; rev:1;)

Bu kural:

  • Dış ağdan ($EXTERNAL_NET) gelen ve iç ağdaki ($HOME_NET) HTTP portlarına ($HTTP_PORTS) giden TCP trafiğini izler.
  • Sadece established (kurulmuş) TCP oturumlarının sunucuya giden (to_server) akışını kontrol eder.
  • HTTP URI içinde büyük/küçük harf duyarsız olarak hem "union" hem de "select" kelimelerini arar (content, http_uri, nocase). distance:0, "select" kelimesinin "union" kelimesinden hemen sonra gelmesini sağlar.
  • Ek olarak, pcre:"/union\\s+select/Ui" ile regex kullanarak "union" ve "select" arasında bir veya daha fazla boşluk olan kalıpları daha esnek bir şekilde yakalar. U (UTF-8) ve i (case-insensitive) bayrakları kullanılmıştır.
  • classtype:web-application-attack ile saldırı sınıfını tanımlar.

Gerçek Dünya Senaryosu: Bir Web Sunucusunu Snort ile Korumak

Bir e-ticaret platformunun web sunucularını (Ubuntu tabanlı Apache/Nginx) Snort ile koruma senaryosunu ele alalım. Snort sensörleri, web sunucularının bulunduğu VLAN'ın SPAN (Switched Port Analyzer) portuna veya bir ağ TAP cihazına bağlanır. Bu sayede tüm gelen ve giden trafik pasif olarak izlenebilir.

Senaryo Hedefleri:

  • Web sunucularına yönelik SQL Enjeksiyonu, XSS ve LFI denemelerini tespit etmek.
  • Potansiyel port taramalarını belirlemek.
  • Yaygın web uygulama zafiyetlerini hedef alan imzaları yakalamak.

Snort Kuralları Örnekleri:

1. SQL Enjeksiyonu (Basic):

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"WEB-ATTACK SQL Injection - Common Payloads"; flow:to_server,established; content:"' or 1=1--"; nocase; http_uri; classtype:web-application-attack; sid:2000002; rev:1;)

Açıklama: Bu kural, yaygın bir SQL enjeksiyon payload'ı olan ' or 1=1-- ifadesini HTTP URI içinde arar. Bu, basit ancak etkili bir tespit yöntemidir.

2. Cross-Site Scripting (XSS) Denemesi:

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"WEB-ATTACK Cross-Site Scripting (XSS) Attempt"; flow:to_server,established; pcre:"/<script\s*[^>]*>|alert\s*\(/Ui"; http_uri; classtype:web-application-attack; sid:2000003; rev:1;)

Açıklama: Bu kural, URI içinde <script> etiketi veya alert( fonksiyon çağrısı gibi tipik XSS desenlerini regex (PCRE) kullanarak yakalar. Ui bayrakları, UTF-8 ve büyük/küçük harf duyarsız arama yapar.

3. Local File Inclusion (LFI) Denemesi:

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"WEB-ATTACK Local File Inclusion (LFI) Attempt"; flow:to_server,established; content:"../"; http_uri; nocase; depth:100; classtype:web-application-attack; sid:2000004; rev:1;)

Açıklama: LFI saldırılarında sıkça kullanılan ../ (dizin geçişi) kalıbını HTTP URI içinde arar. depth:100 seçeneği, içeriğin sadece ilk 100 baytında aranmasını sağlar, performansı artırır.

4. Port Taraması Tespiti (Syn Scan):

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"SCAN Portscan - Possible SYN Scan"; flow:to_server; flags:S,12; threshold:type limit, track by_src, count 5, seconds 60; classtype:attempted-recon; sid:2000005; rev:1;)

Açıklama: Bu kural, $EXTERNAL_NET'ten gelen ve $HOME_NET'e giden TCP SYN paketlerini (flags:S,12 - sadece SYN bayrağı set edilmiş, diğerleri sıfır) izler. threshold seçeneği, aynı kaynaktan 60 saniye içinde 5'ten fazla SYN paketi geldiğinde bir uyarı tetikler. Bu, basit bir port tarama tespit mekanizmasıdır.

Bu kurallar, /etc/snort/rules/local.rules gibi özel bir kural dosyasına eklenir ve Snort yapılandırma dosyasında (snort.conf) bu dosyanın dahil edildiğinden emin olunur.

# /etc/snort/snort.conf içinde:include $RULE_PATH/local.rules

Üretim ortamında, Snort'tan gelen loglar genellikle bir SIEM (Security Information and Event Management) sistemine (Splunk, ELK Stack, QRadar vb.) gönderilir. Bu sayede, uyarılar merkezi olarak analiz edilir, korelasyonlar kurulur ve güvenlik ekipleri tarafından hızla yanıt verilebilir.

Performans ve Optimizasyon

Snort'un büyük ağlarda verimli çalışması için optimizasyon kritik öneme sahiptir. Yanlış yazılmış veya çok sayıda kural, performansı olumsuz etkileyebilir.

  • Kural Seti Yönetimi: Yalnızca ilgili kuralları etkinleştirin. Gereksiz veya eski kuralları devre dışı bırakın. Kural setlerini sık sık güncelleyin.
  • Donanım: Yüksek trafik hacmi için yeterli CPU, RAM ve hızlı ağ arayüz kartları (NIC) sağlayın. Çok çekirdekli işlemciler ve RSS (Receive Side Scaling) destekli NIC'ler faydalıdır.
  • Hyperscan: Snort, regex tabanlı aramalar için Intel'in Hyperscan kütüphanesini kullanabilir. Bu, PCRE kurallarının işlenmesinde önemli performans artışı sağlar.
  • Fast-Path Kuralları: Trafiğin büyük bir kısmını hızlıca eleyen ve daha az kaynak tüketen kurallar (örn. sadece IP veya port bazlı) kural dosyasının üst kısmında yer almalıdır. Daha karmaşık (content, pcre) kurallar daha sonra işlenmelidir.
  • Snort_inline (IPS): IPS modunda çalışırken, Snort'un performansı daha da kritik hale gelir. Ağ gecikmesini minimize etmek için donanım ivmelendirme ve doğru yapılandırma şarttır.

Sonuç

Snort, ağ güvenliği mimarisinde saldırı tespiti ve önlenmesi için vazgeçilmez bir araçtır. Detaylı kural yazım yeteneği ve geniş topluluk desteği sayesinde, bilinen ve sıfırıncı gün saldırılarına karşı proaktif savunma mekanizmaları sunar. Snort'u bir üretim ortamında başarılı bir şekilde uygulamak, sadece kurulumdan ibaret değildir; sürekli kural optimizasyonu, uyarıların analizi ve güncel tehdit istihbaratıyla entegrasyon gerektirir. Doğru yapılandırıldığında, Snort, bir ağın savunma derinliğinde önemli bir katman oluşturur ve güvenlik olaylarına karşı görünürlüğü artırır.

← Blog Listesine Dön