IDS Nedir? Suricata/Zeek Nedir?

Ali Umut Soran
12 min readJul 19, 2024

--

Saldırı tespit sistemi (IDS (Intrusion Detecetion System)) ağ ve sistemlere yönelik yetkisiz girişleri ve kötü niyetli aktiviteleri tespit eden bir güvenlik teknolojisidir.

IDS’ler, ağ trafiğini, sistem faaliyetlerini ve diğer güvenlik olaylarını izleyerek anormal davranışları ve potansiyel tehditleri tespit ettiğinde BT ve güvenlik ekiplerine uyarılar gönderir.

Bir IDS, güvenlik tehditlerini tek başına durduramaz. Günümüzde IDS yetenekleri genellikle güvenlik tehditlerini tespit edebilen ve bunları önlemek için otomatik olarak harekete geçebilen saldırı önleme sistemleriyle (IPS) entegre edilir veya bunlara dahil edilir.

IDS Türleri

IDS’ler sistemde nereye yerleştirildiklerine ve ne tür faaliyetleri izlediklerine göre kategorilere ayrılırlar.

  • NIDS
  • HIDS
  • APIDS
  • PIDS
  • AIDS
  • SIDS
  • VMIDS
  • SBIDS

En yaygın iki IDS türü şunlardır:

Ağ saldırı tespit sistemleri (NIDS):

Ağ genelindeki cihazlara gelen ve giden trafiği izler ve analiz eder.NIDS’ler genellikle ağ çevresindeki güvenlik duvarlarının hemen arkasına, ağdaki stratejik noktalara yerleştirilir, böylece herhangi bir kötü amaçlı trafiğin içeri sızdığını işaretleyebilirler.

Ana bilgisayar saldırı tespit sistemleri (HIDS):

Ana bilgisayar tabanlı bir IDS, üzerine kurulduğu bilgisayar altyapısını izler. Başka bir deyişle, onu iç ve dış tehditlere karşı korumak için belirli bir uç noktaya dağıtılır. IDS bunu trafiği analiz ederek, kötü amaçlı aktiviteyi günlüğe kaydederek ve belirlenmiş yetkililere bildirerek gerçekleştirir.

IDS tespit yöntemlerinin bir alt grubu da vardır, en yaygın iki çeşidi şunlardır:

  • İmza Tabanlı Algılama (SIDS)

Ağ paketlerini saldırı imzaları açısından analiz eder; bunlar belirli bir tehdit ile ilişkili benzersiz özellikler veya davranışlardır. Belirli bir kötü amaçlı yazılım türünde görünen bir kod dizisi, bir saldırı imzasının örneğidir.

İmza tabanlı bir IDS, ağ paketlerini karşılaştırdığı saldırı imzalarının bir veritabanını tutar. Bir paket imzalardan biriyle eşleşme tetiklerse, IDS bunu işaretler. Etkili olmak için, yeni siber saldırılar ortaya çıktıkça ve mevcut saldırılar geliştikçe imza veritabanlarının düzenli olarak yeni tehdit istihbaratıyla güncellenmesi gerekir .

  • Anomali Tabanlı Algılama (AIDS)

Bir ağdaki trafiği izler ve bunu “normal” olarak kabul edilen önceden tanımlanmış bir temel çizgiyle karşılaştırır. Bant genişliği, cihazlar, bağlantı noktaları ve protokoller dahil olmak üzere ağ genelinde anormal aktivite ve davranışı tespit eder, normal ağ etkinliğinin bir temel modelini oluşturmak ve sürekli olarak iyileştirmek için makine öğrenimini kullanır.

Herhangi bir anormal davranışı bildirdiği için, anomali tabanlı IDS genellikle imza tabanlı algılamayı atlatabilecek yeni siber saldırıları yakalayabilir.Ancak anomali tabanlı IDS’ler false pozitiflere daha yatkın olabilir. Yetkili bir kullanıcının hassas bir ağ kaynağına ilk kez erişmesi gibi iyi huylu bir etkinlik bile anomali tabanlı bir IDS’yi tetikleyebilir.

IDS Neden Önemlidir

Bir saldırı tespit sistemi, ekstra bir koruma katmanı sağlayarak onu etkili bir siber güvenlik stratejisinin kritik bir unsuru haline getirir. Birincil savunmalarınızı aşabilen tehditleri yakalamak için diğer siber güvenlik araçlarınızla birlikte kullanabilirsiniz. Yani ana sisteminiz başarısız olsa bile, yine de bir tehdidin varlığı konusunda uyarı alırsınız.

  • IDS, ağ ve sistemlerdeki anormal aktiviteleri erken aşamada tespit ederek hızlı müdahale imkanı sağlar.
  • IDS, tespit edilen olayları kaydeder ve raporlar oluşturur, bu kayıtlar olay yanıtı ve adli analiz süreçlerinde önemli rol oynar.

IDS Nasıl Çalışır

IDS (Intrusion Detection System) çalışma mantığı, ağ ve sistem aktivitelerini izleyerek ve analiz ederek yetkisiz erişim ve kötü niyetli davranışları tespit etmek üzerine kuruludur. IDS’in çalışma prensiplerini ve mantığını anlamak için aşağıdaki adımları inceleyelim:

1. Veri Toplama:

  • IDS, ağdaki veri paketlerini veya sistem aktivitelerini sürekli olarak izler ve toplar.
  • Bu veri toplama işlemi, ağ trafiğini izlemek için ağdaki TAP (Test Access Point) veya ayna portları gibi araçlar kullanılarak gerçekleştirilir.
  • Ana bilgisayar tabanlı IDS (HIDS) ise sistem günlüklerini, dosya bütünlüğünü ve diğer sistem aktivitelerini izler.

2. Ön İşleme:

  • Toplanan ham veriler, analiz edilmek üzere ön işlemeye tabi tutulur.
  • Bu aşamada, veriler normalleştirilir ve analiz için uygun formata dönüştürülür.

3. Analiz ve Karşılaştırma:

  • IDS, iki ana analiz yönteminden birini veya her ikisini kullanarak veri paketlerini analiz eder:
  • İmza Tabanlı Tespit: Bilinen saldırı tekniklerine ait imzalar veya kalıplar kullanılarak veri paketleri analiz edilir. İmza tabanlı tespit, veri paketlerinin içeriğini imza veritabanındaki bilinen saldırı imzalarıyla karşılaştırır.
  • Anomali Tabanlı Tespit: Normal ağ trafiği ve sistem davranışları öğrenilerek, bu normdan sapmalar tespit edilir. Anomali tabanlı tespit, daha önce görülmemiş veya sıfırıncı gün saldırılarını belirlemede etkilidir.

4. Tespit ve Uyarı

  • Analiz sonucunda, potansiyel tehditler veya anormal davranışlar tespit edildiğinde IDS, güvenlik ekiplerine uyarı gönderir.
  • Bu uyarılar, saldırının türü, kaynağı, hedefi ve zaman bilgilerini içerebilir.

5.Tepki ve Müdahale

  • Tespit edilen olaylar daha sonra ayrıntılı olarak incelenir ve gerekli önleyici tedbirler alınır.

IDS Kaçınma Taktikleri

  • Fragmentation (Parçalama)
  • Bir paketi daha küçük, parçalanmış paketlere böler. Bu, saldırganın gizli kalmasını sağlar çünkü algılanacak bir saldırı imzası olmaz. Parçalanmış paketler daha sonra IP katmanındaki alıcı düğüm tarafından yeniden oluşturulur.
  • Flooding (İletim Çokluğu)
  • Bir ağa büyük miktarda gereksiz veya zararlı trafik göndererek IDS’in etkinliğini azaltmayı veya tespit edememesini sağlamayı amaçlayan bir saldırı yöntemidir. Bu teknikle, saldırganlar, IDS’in kaynaklarını tüketerek sistemin aşırı yüklenmesine ve potansiyel olarak önemli saldırı trafiğini gözden kaçırmasına neden olabilir.
  • Obfuscation (Karartma/Gizleme)
  • Saldırganların güvenlik sistemlerini kandırarak kötü niyetli aktivitelerini tespit edilmekten kaçınmak için kullandıkları teknikleri ifade eder. Obfuscation yöntemleri, saldırı trafiğini ve davranışlarını maskeleyerek IDS’lerin bu aktiviteleri doğru bir şekilde tanımlamasını zorlaştırır.
  • Encryption (Şifreleme)
  • Ağ trafiğini şifreleyerek IDS’nin bu trafiği analiz etmesini ve kötü niyetli aktiviteleri tespit etmesini zorlaştırma tekniğidir. Şifreleme, veri paketlerinin içeriğini gizleyerek, IDS’nin imza tabanlı veya anomali tabanlı analiz yapmasını engeller. Bu sayede, zararlı içerik, IDS tarafından fark edilmeden ağda taşınabilir.

IDS Örnekleri ve Kurulumu

  • IDS ürünleri, çeşitli ağ ve sistem güvenlik ihtiyaçlarını karşılamak için tasarlanmıştır. İşte piyasada yaygın olarak kullanılan bazı IDS (Intrusion Detection System) ürünleri:
  • Snort
  • Suricata
  • Zeek(Bro)
  • Cisco Secure IDS
  • Palo Alto Networks IDS/IPS
  • Fail2Ban
  • OSSEC

Bu yazımda Suricata ve Zeekin detaylarına ineceğiz. Bu araçlar, güvenlik topluluğu ve işletmeler arasında popülerlik kazanmıştır çünkü çok sayıda avantaj sunarlar. İşte bu iki aracın aktif olarak kullanılmasının ana nedenleri:

  • Avantajı:
  • Açık kaynaklı olmaları nedeniyle, lisans maliyetlerinden tasarruf sağlarlar ve ticari çözümlere kıyasla daha uygun maliyetlidirler.
  • Kullanıcılar, topluluk tarafından sağlanan ücretsiz destek ve kaynaklardan yararlanabilirler.
  • Eğitim ve Destek
  • Suricata ve Zeek için geniş eğitim materyalleri, belgeler ve topluluk destek kaynakları mevcuttur.
  • Kullanıcılar, bu kaynakları kullanarak araçları etkin bir şekilde kullanmayı öğrenebilirler.

Suricata: bkz https://suricata.io/

ZEEK: bkz https://packages.zeek.org/

Suricata

  • Suricata, çoğu özel ve kamu kuruluşu tarafından kullanılan ve büyük tedarikçiler tarafından varlıklarını korumak için yerleştirilen, yüksek performanslı, açık kaynaklı bir ağ analizi ve tehdit algılama yazılımıdır.
  • Suricata Open Information Security Foundation(OISF) tarafından geliştirilmiştir.
  • OISF, kar amacı gütmeyen bir organizasyon olarak, açık kaynaklı güvenlik yazılımlarının geliştirilmesi ve desteklenmesi amacıyla kurulmuştur.
  • OISF, Suricata’nın sürekli olarak güncellenmesini ve iyileştirilmesini sağlamak için aktif olarak çalışmakta, güvenlik açıklarını tespit etmek ve yeni tehditlere karşı koruma sağlamak için topluluk katkılarını teşvik etmektedir.
  • Suricata multithread çalışmakta ve IPv6' yı tamamen desteklemektedir.
  • Suricata ayrıca dosya çıkarmayı(file extraction) destekler. Bu özelliği sayesinde trafikteki zararlı yazılımlar için virustotalle otomatik bir entegrasyon yapılabilir.
  • Suricata kural yapısından oluşmaktadır:
  • Kural = Kural Başlık + Kural Seçenekleri
  • Kural sonucu belli aksiyonlar alınmaktadır şu şekilde seçilebilmektedir:
  • alert : Aksiyonda alert varsa uyarı vererek loglama işlemi sağlar.
  • pass : Aksiyonda pass varsa paketin geçilmesini sağlar.
  • drop : Aksiyonda drop varsa paketin bloklanarak loglanmasını sağlar
  • reject : Aksiyonda reject varsa pakete cevap olarak reser dönülmesini ve loglanmasını sağlar.

Kuruluma geçelim

Suricatayı Linux sistem üzerine kuracağız.

Sistem paketlerini güncelliyoruz

(

└─$ apt-get update && apt-get upgrade

)

Suricatayı kuruyoruz

(

└─# apt-get install suricata

)

Kök dizine çıktıktan sonra suricata dizinine gelip suricata yapılandırma dosyasını açıyoruz.

└─$ ip a

ile interface in ne olduğunu kontrol edip suricata yapılandırma dosyasında da öyle mi teyit ediyoruz.

(

└─# systemctl start suricata

)

Komutu ile suricatayı başlatıyoruz

Kural Oluşturma

Kural yapısından az önce bahsetmiştik tekrar etmek gerekirse:

Aksiyon Protokol Kaynak_IP Kaynak_Port Yön Hedef IP Hedef_Port Opsiyonlar

ÖR:

alert tcp 10.10.20.100 any -> 10.10.20.200 any (msg:”Muhtemel Port Taraması”;sid:10000001)

alert any any -> any any (msg:”SQL Injection denemesi”,content:”union”)

Kural Dosyası Oluşturma:

/etc/suricata/rules dizinine gidip kendi kullarımızı yazacağımız local.rules u oluşturuyoruz

Örnek olarak SYN taraması ve TCP taramasına kural yazmayı seçtim çünkü SYN ve TCP taramaları çok fazla false pozitiflerin oluşmasını sağlayacaktır. Buradan IP ve port gönderilen bütün paketlerde kural tetiklenecektir.

SYN taraması ve TCP taraması için şu kural yazılabilir:
alert tcp any any -> any any (msg: “Muhtemel SYN/TCP Port Taraması”;sid:10000001; rev:1; )

Bunların neticesinde çalıştıracağımız bir pcap dosyası ile elde edilen logların sonucunu /var/log/suricata/fast.log veya /var/log/suricata/eve.json’dan inceleyebiliriz.

Bu komut bize yardımcı olacaktır:

#tail –f /var/log/suricata/fast.log

Örnek log kaydı:

Farklı kurallar oluşturmak için : https://docs.suricata.io/en/latest/rule-management/index.html

Zeek

  • Bazıları onu yıllar önce (2018'e kadar) bilmiş ve kullanmış olabilir. Eski ismiyle:** Bro.**
  • Zeek, açık kaynak kodlu bir network trafik izleme ve analiz aracıdır. Tüm network trafiğini izleyebilir ve gerçekleşen şüpheli aktiviteleri izleyip analiz etmeye imkan sağlar.
  • Ağ trafiğini log dosyalarına kaydeder ve bunu yaparken Layer-7 seviyesinde trafiği anlamlandırarak daha detaylı, parse edilmiş halde ve kolay anlaşılır bilgi sunar.
  • Http, dns , ftp, smtp, ssh, ssl vb. protokollerin her biri için ayrı log dosyalarında trafiği kaydeder ve böylece tehdit tespitinde kolaylık ve kapsamlı bilgi sağlamış olur.
  • Esneklik ve özelleştirilebilirlik sunar, böylece kullanıcılar kendi ihtiyaçlarına göre belirli olayları veya tehditleri tespit etmek için özel analiz betikleri yazabilirler.
  • Lawrence Berkeley National Laboratory’de Vern Paxson tarafından geliştirilmiştir.
  • İlk olarak 1995 yılında tanıtılmıştır ve o zamandan beri akademik araştırma topluluğu ve güvenlik profesyonelleri tarafından aktif olarak geliştirilmiş ve desteklenmiştir.
  • Açık kaynak kodlu bir proje olup, geniş bir topluluk tarafından sürekli olarak güncellenmekte ve iyileştirilmektedir.
  • İmza tabanlı kural girmeyi destekliyor olmasının yanında protokoller üzerinde güçlü analiz özellikleri sunar.
  • Zeek’in geniş kapsamlı özellikleri ve esnekliği, onu güvenlik profesyonelleri ve ağ yöneticileri için vazgeçilmez bir araç haline getirmektedir.

ZEEK’in Çalışma Yapısı

1.Trafik Yakalama

Zeek, ağ üzerindeki trafiği yakalamak için ağ kartını dinleme moduna alır. Bu, ağdaki tüm veri paketlerinin Zeek tarafından görülebilmesini sağlar. Bu işlem, genellikle ağın önemli noktalarına yerleştirilen TAP (Test Access Point) veya SPAN (Switch Port Analyzer) portları aracılığıyla gerçekleştirilir.

2.Protokol Analizi

Yakalanan trafik, çeşitli ağ protokollerine göre ayrıştırılır ve analiz edilir. Zeek, birçok yaygın ağ protokolünü destekler ve bu protokoller üzerindeki trafiği derinlemesine analiz eder. Desteklenen protokoller arasında HTTP, FTP, DNS, SSL/TLS, SMTP ve daha fazlası bulunur.

3. Olay Tespiti ve Anomali Analizi

Zeek, normal ağ trafiği ve davranışlarını öğrenir ve bu normdan sapmaları tespit eder. Anomali tespiti, ağda daha önce görülmemiş veya sıfırıncı gün saldırılarını belirlemede etkilidir. Ayrıca, belirli saldırı ve tehdit imzaları kullanarak bilinen tehditleri tespit edebilir.

4. Betik Dili ve Özelleştirme

Zeek, kullanıcıların özel analiz ve tespit betikleri yazmasına olanak tanıyan güçlü bir betik diline sahiptir. Bu betik dili, kullanıcıların belirli olayları tespit etmek, anormal davranışları belirlemek ve özel loglama işlemleri gerçekleştirmek için kullanabileceği esnek ve güçlü bir araçtır.

5. Loglama ve Raporlama

Zeek, birçok farklı log dosyası türü oluşturur ve bu loglar genellikle metin dosyaları olarak saklanır.

6. Entegrasyon ve Dağıtım

Zeek, diğer güvenlik araçları ve sistemleri ile entegre edilebilir. Özellikle SIEM (Security Information and Event Management) sistemleri ile entegrasyonu kolaydır, bu da merkezi bir güvenlik yönetimi sağlar. Ayrıca, Zeek’in dağıtımı ve yapılandırması, çeşitli ağ ortamlarına uyacak şekilde esnek ve ölçeklenebilirdir.

Bu yapı, Zeek’in yüksek performanslı ve ölçeklenebilir bir ağ izleme ve analiz aracı olarak nasıl çalıştığını göstermektedir. Temel olarak manager, worker, logger ve proxy bileşenlerinden oluşur. Workers düğümlerinin paralel çalışması, trafiğin verimli bir şekilde işlenmesini sağlar. Merkezi yönetim bileşeni olan Manager, kullanıcıların Zeek sistemini etkili bir şekilde yönetmesine ve analiz etmesine olanak tanır. Proxy bileşeni ise durum bilgisi paylaşımını kolaylaştırarak tutarlılığı sağlar. Bu yapı, Zeek’in ağ güvenliği ve izleme çözümlerinde neden güçlü ve esnek bir araç olduğunu açıkça ortaya koymaktadır.

Zeek tarafından alınan loglar, çeşitli kategoriler altında düzenlenir ve belirli başlıklar altında sınıflandırılır:

  • conn.log : Ağ bağlantılarının genel bilgilerini kaydeder. Her TCP, UDP veya ICMP bağlantısının temel detaylarını içerir.
  • dns.log : DNS sorguları ve yanıtları hakkında bilgi sağlar.
  • http.log : HTTP trafiğini detaylı bir şekilde loglar.
  • ssl.log : SSL/TLS trafiği hakkında bilgi sağlar.
  • files.log : Ağ üzerinden aktarılan dosyalar hakkında bilgi toplar.
  • weird.log : Beklenmeyen veya anormal ağ aktivitelerini kaydeder.
  • notice.log : Önemli güvenlik olayları ve uyarıları içerir.
  • ftp.log : FTP trafiğini izler ve loglar.
  • smtp.log : SMTP (e-posta) trafiği hakkında bilgi sağlar.
  • conn-summary.log : Bağlantıların özet bilgilerini içerir.
  • x509.log : X.509 sertifikaları hakkında bilgi toplar.
  • dhcp.log : DHCP trafiğini izler ve loglar.
  • dce_rpc.log : DCE/RPC (Distributed Computing Environment / Remote Procedure Call) trafiğini izler.

Bu log kategorileri, Zeek’in ağ trafiğini nasıl izlediği ve analiz ettiği konusunda geniş bir kapsam sunar. Güvenlik analistleri, bu logları inceleyerek ağda gerçekleşen olayları ve anormallikleri tespit edip detaylı analizler gerçekleştirebilir.

Kuruluma geçelim

Zeeki manuel olarak Debian tabanlı Kali Linuxa kuracağız

Sistem paketlerini güncelliyoruz

(

└─$ apt-get update && apt-get upgrade

)

Sonrasında ağ trafiğini izlemek ve analiz etmek için gerekli olan geliştirme araçları ve kütüphaneleri kuruyoruz.

(

└─# apt-get install -y — no-install-recommends g++ cmake make libpcap-dev

)

İşlemin devamında Ubuntu 22.04'teki en son Zeek 6.0 LTS sürümü için adımlar şu şekildedir:

(

└─# echo ‘deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_22.04/ /’ | sudo tee /etc/apt/sources.list.d/security:zeek.list
curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_22.04/Release.key | gpg — dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null
sudo apt update
sudo apt install zeek-6.0

)

Gerekli bağımlılıkları yüklüyoruz

(

└─# sudo apt-get install cmake make gcc g++ flex libfl-dev bison libpcap-dev libssl-dev python3 python3-dev swig zlib1g-dev

)

Gereklilikleri indirdiğimize göre zeeki kuralım

(

└─# apt install zeek

)

Henüz bitmedi heyecanlanmayın :)

Konfigürasyonu sağlamak için zeek-aux u clonlamamız gerekiyor

(

└─# git clone https://github.com/zeek/zeek-aux.git

)

(

└─# git clone https://github.com/zeek/cmake.git

)

Şimdi çalıştırabiliriz. Çalıştırmak için adım adım bu komutları kullanacağız:

└─# ./configure

└─# make

└─# make install

Son olarak bulunduğumuz dizinde veri tabanı güncellemesi yapıyoruz

└─# updatedb

Örnek ZEEK Kuralları:

  • Basit HTTP Tespiti

# HTTP isteklerini tespit etmek için global bir olay yöneticisi
event http_request(c: connection, method: string, original_URI: string, unescaped_URI: string, version: string)
{
# HTTP isteği ile ilgili bilgileri loglama
print fmt(“HTTP Request: %s %s %s”, method, unescaped_URI, c$id);
}

# HTTP bağlantısı kurulduğunda tetiklenen olay yöneticisi
event http_message_done(c: connection, is_orig: bool, stat: http_message_stat)
{
if ( is_orig )
{
print fmt(“HTTP Request Completed: %s”, c$id);
}
else
{
print fmt(“HTTP Response Completed: %s”, c$id);
}
}

  • Basit Port Taraması Tespit Etme

# Şüpheli port taramalarını tespit etmek için global değişken
global port_scan_threshold = 10;
global port_scan_tracker: table[count] of count;

# Bağlantı kurulduğunda tetiklenen olay yöneticisi
event connection_attempt(c: connection)
{
local src = c$id$orig_h;
port_scan_tracker[src] += 1;

if ( port_scan_tracker[src] > port_scan_threshold )
{
print fmt(“Port Scan Detected from: %s”, src);
}
}

# Bağlantı zaman aşımına uğradığında veya kapandığında tetiklenen olay yöneticisi
event connection_state_remove(c: connection)
{
local src = c$id$orig_h;
port_scan_tracker[src] -= 1;

if ( port_scan_tracker[src] <= 0 )
{
delete port_scan_tracker[src];
}
}

Umarım faydalı bir içerik olmuştur…

KAYNAK:

--

--