Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me

Bİlgisayar Ağları - Ders 13 - Snort



  November 15, 2017    Labels:,,,,, 

Snort, 1998 yılında Martin Roesch tarafından geliştirilmiş bir ağ sızma tespit/engelleme sistemidir. GNU lisansı ile dağıtılan, açık kaynak kodlu ve ücretsiz bir yazılımdır. Yazılım, çeşitli Linux dağıtımları, Windows ve MAC gibi pek çok işletim sistemi üzerinde çalıştırılabilmektedir. Snort yazılımını temel alarak grafik arayüz desteği ile çalışacak şekilde geliştirilen bağımsız şirket yazılımları da mevcuttur. Bu yazılımlar yönetim, raporlama, günlükleme (loglama) gibi işlevleri yerine getirmektedir.

Snort'un mimarisi performans, basitlik ve esnekliğe dayalıdır. Snort IP ağları üzerinde gerçek zamanlı trafik analizi ve paket loglaması yapabilen bir yazılımdır. Yazılım protokol analizi, içerik tarama/eşleme yapabildiği gibi, arabellek taşması, port taraması, CGI saldırısı, işletim sistemi parmakizi denemesi gibi pek çok saldırı ve zararlı/şüpheli yazılım çeşidini tespit edebilmektedir. Snort üzerinden geçen trafiği tanımlamak için kullanıcı tarafından da tanımlanabilen esnek kural dilini kullanır; bunun yanı sıra modüler takma-program (plug-in) mimarisini kullanan tespit motoru da bulunmaktadır. Snort'un gerçek zamanlı alarm mekanizması vardır. Bu mekanizma Windows istemcilerine WinPopup pencereleri çıkarabilir, Linux türevlerinde alarm mekanizmalarını syslog'a dahil edebilir, ya da özelleştirilmiş günlük dosyasında alarmları biriktirebilir.

Snort mimarisinin 3 temel bileşeni vardır: paket çözücü, tespit motoru ve günlükleme/alarm altsistemi. Snort temel olarak uygulama seviyesine kadar tüm katmanlardaki veriye bakar ve bu veri içerisinden belirli trafiği toplar; kullanıcı ya da geliştirici tarafından tanımlanabilen kural setlerini uygulayarak bulduklarını değerlendirir.

Snort temelde 3 ayrı modda çalışabilecek şekilde yapılandırılabilir:

Paket İzleyici modu (packet sniffer): Bu mod tcpdump paket izleyici programı gibi basit bir şekilde ağdan paketleri okuyup sürekli bir şekilde konsola akıttığı moddur. Konut satırında
  • ./snort -v
şeklinde çalıştırılabilir; bu şekilde sadece TCP paket başlık bilgilerini ekrana basar.

Paket Günlükleme modu (packet logger): paketleri diske yazar. Komut satırında
  • ./snort -dev -l ./log
komutu ile çalıştırılabilir. Burada TCP paket başlık ile birlikte paket bilgilerini de kaydeder ve /log dizinine günlükler.

Ağ Sızma Tespit/Engelleme Sistemi modu (NIDS/NIPS): Snort'un en karmaşık ve yapılandırılabilir modudur. Snort bu modda temel olarak trafiği analiz edip kullanıcı tarafından tanımlanabilen bir kural seti ile gördüklerine karşı çeşitli eylemler gerçekleştirebilir. Örneğin komut satırında
  • ./snort -dev -l ./log -h 192.168.1.0/24 -c snort.conf
ile çalıştırıldığında snort temel bir NIDS olarak çalışır ve snort.conf dosyasındaki kural seti uyarınca işlem yapar. Eğer snort "inline" modda çalıştırılırsa (./snort -Q) snort IPS olarak davranır ve drop paket düşürme (drop) kurallarını da devreye alır.

Kuralları Yazmak

Snort kuralları basit bir şekilde yazılabilmesine rağmen zararlı/şüpheli trafiği tespit etmede oldukça başarılıdır.

Snort kuralları mantıksal olarak iki kısma ayrılmaktadır: kural başlığı ve kural opsiyonları. Kural başlığı kural eylemini, protokolü, kaynak IP adresi, hedef IP adresi, alt ağ maskeleri ile kaynak ve hedef port bilgilerini içerir. Kural opsiyonu ise kural eylemi takınılacaksa paketin hangi kısımlarının inceleneceğini belirler. Kural eylemi 8 şekilde olabilir:
  • Pass (Geçir): Paketi basit bir şekilde geçirilir
  • Log (Günlükle): Günlükleme rutini kullanıcı tarafından ne tanımlandı ise tam paket olarak kaydedilir.
  • Alert (Alarm): Kullanıcı tarafından belirlenen metotla bir olay bildirisi yaratır ve tüm paketi günlükler.
  • Activate (Etkinleştir): Alarm ver ve ardından başka bir dinamik kuralı etkinleştirir.
  • Dynamic (Dinamik): Bir etkinleştir kuralı etkinleştirinceye kadar boşta kalır, sonra günlükle olarak çalışır.
  • Drop (Düşür): Paketi düşür ve günlükler.
  • Reject (Reddet): Paketi engeller, günlükler, protokol TCP ise TCP yeniden başlat (TCP reset)ya da ICMP port erişilemez mesajı yollar.
  • Sdrop (Günlüklemeden Düşür): Paketi düşürür ve günlüklemez.

Örnek Bir Snort Kuralı

Aşağıda örnek olarak bir alarm kuralı gösterilmiştir:
  • alert tcp any any ? 10.1.1.5 80 (content: "cgi-bin/phf" ; msg "PHF probe!";)
Örnek kuralımızı detaylı olarak inceleyelim:
  • alert - kural eylemi: alarm ver
  • tcp - protokol
  • any - kaynak IP, herhangi bir IP adresinden
  • any - kaynak port, herhangi bir porttan
  • 10.1.1.5 - hedef IP adresi
  • 80 - hedef port 
  • content: -"cgi-bin/phf" - mesaj içeriğinde "cgi-bin/phf" var ise
  • msg "PHF probe!" - PHF probe! Alarmı ver.Kural setleri periyodik olarak Snort geliştirici grup tarafından Snort resmi web sitesinden yayınlandığı gibi, kurallar kullanıcılar tarafından da oluşturulabilmektedir.

Snort Kurulumu

Snort kurulumunu gerçekleştirmeden önce Snort'un düzgün çalışması için bir takım paketlerin kurulması gereklidir.
  • # apt-get update
  • # apt-get install -y build-essential
  • # apt-get install -y libpcap-dev libpcre3-dev libdumbnet-dev
  • # apt-get install -y bison flex
  • # apt-get install -y zlib1g-dev
komutları ile gerekli kurulumları gerçekleştirelim.
  • # wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz
komutu ile Snort'un kullandığı ağ kütüphanesi olan Daq kütüphanesini indirelim.
  • # tar -xvzf daq-2.0.6.tar.gz
  • # cd daq-2.0.6
  • # ./configure
  • # make
  • # make install
komutları ile Daq kütüphanesini kuralım.
  • # wget https://www.snort.org/downloads/snort/snort-2.9.7.6.tar.gz
komutu ile Snort'u indirelim.
  • # cd ..
  • # tar -xvzf snort-2.9.7.6.tar.gz
  • # cd snort-2.9.7.6
  • # ./configure --enable-sourcefire
  • # make
  • # make install
komutları ile Snort'u kuralım.

Not! Snort'un en güncel sürümü için https://www.snort.org/ sitesini ziyaret edebilirsiniz.

No comments:

Post a Comment