Snort Kullanımı

snort

Snort VE Snort Kullanımı

Snort 1998 yılında Martin Roesch tarafından geliştirilmiş olan saldırı tespit/önleme(IDS/IPS) sistemidir. Açık kaynak kodlu ve ücretsiz olan bu yazılım Sourcefire firması tarafından hala geliştirilmektedir. Linux,Windows ve MacOS uyumu olan IDS/IPS uygulamasının mimarisi, performans, basitlik ve esnekliğe dayanmaktadır. Snort’un ana amacı ağ üzerinde paket loglaması ve trafik analizi yapmaktır. Fakat varsayılan ayarlarda Snort en fazla 40-50 mb’lık bir trafiği kaldırabilmektedir. Bu kabul trafiğini artırmak için ise varsayılan ayarlar değiştirilerek, daha trafik bant genişlliği artırılabilmektedir..Snort esnek mimarisi sayesinde bir çok saldırıyı ve zararlı/şüpheli yazılımı tespit edebilmektedir. Snort kural tabanlı bir IPS sistemi olduğu için hem imza hemde diğer bileşenleri kontrol edebilmektedir.

Snort’un diğer IDS/IPS sistemlerine göre bir diğer kolaylığı da esnek kurallar yazabilme imkanı vermesidir. Snort kurallarını manuel olarak yazılabileceği gibi hazır kurallar(BleedingEdge, SourceFire vs) da kullanılabilmektedir.

Snort’un kurulumu doğrudan derlenmiş kodlarla yapabileceği gibi kaynak kodları snort makinesinde derlenerek de yapılabilmektedir. Snort kurulumuna geçmeden önce snort mimarisinden bahsedelim.

snort

Snort temel olarak uygulama seviyesine kadar tüm katmanlardaki veriye bakabilmekte ve bu veri içerisinden belirli trafiği toplamaktadır. Sonrasında kullanıcı ya da geliştirici tarafından tanımlanabilen kural setlerini uygulayarak bulduklarını değerlendirmektedir. Fakat bazı güvenlik senaryolarında sadece bir pakete bakmak saldırıyı tespit etmek için yeterli olmayabilir. Örneğin, saldırgan göndereceği paketlerin farkedilmemesi için parçalayıp göndermiş olabilir veya saldırgan port taraması yapmış olabilir. Böyle durumlarda bu parçalı paketlerin birleştirilmesi gerekmektedir. Bu birleştirme işlemini Snort mimarisindeki Preprocessor modülü yapabilmektedir. Preprocessor’ların kullanıldığı bir başka durum da encode edilmiş verilerin decode edilmesi ihtiyacıdır.

Örneğin senaryomuzda snort, “exploit” kelimesini tespit ettiği zaman alert verecektir. Fakat saldırgan exploit kelimesini 2 pakete bölerek “expl” ve “oit” olarak göndermekte. Bu durumda eğer bu paketler birleştirilmezse saldırı tespit edilemeyecek. Bu nedenle Snort içinde yer alan herhangi bir preprocessor modülü ile önce parçalanmış olan paketleri birleştirir sonrasında saldırı tespit incelemesi için bir sonraki aşamaya geçirir.

Bir başka senaryomuzda Snort sistemimiz ASCII bir içerik ararken saldırgan paket içeriğini URL encoded olarak gönderiyor. Encode işleminden dolayı snort sistemi saldırıyı tespit edemiyor. Fakat saldırgandan gelen verilerin preprocessor modülleri tarafından decode edilmesi sonucu saldırı Snort tarafından tespit edilebilmektedir.

Snort temelde 3 ayrı modda çalışabilmektedir;

  • Packet Sniffer(Paket Dinleme Modu): Bu modda sıradan paket izleyici programlarda olduğu gibi gelen paketleri okuyup sadece TCP paket başlık bilgisini yazmaktadır.

snort –v

  • Packet Logger(Paket Loglama Modu): Gelen paketlerin TCP paket başlığı ile birlikte diğer paket bilgilerini de ./log dizinine kaydeder.

snort –dev –l ./log

  • Network Intrusion Detection/Prevention System( Ağ Saldırıları Tespit/Önleme Modu): Snort bu modda temel olarak gelen trafiği analiz eder ve kullanıcı tarafından tanımlanabilen bir kural seti ile gelen paketlere karşı çeşitli aksiyonlar gerçekleştirebilir. Komutu ile snort.conf dosyasındaki kurallara göre işlemler yapar.

./snort -dev -l ./log -h 10.0.1.0/24 -c snort.conf

Snort Kurulumu

Şimdi de snort kurulumuna geçelim. Normal işletim sistemlerinde Snort’un root hakları ile çalışmasını istemeyiz. Çünkü Snort, yazılım ve ağ üzerinden gelen paketleri, girdileri alıp işlediği için hafıza taşma saldırılarına maruz kalabilir. Böyle bir durumla karşılamamak için Snort normal kullanıcı düzeyinde çalıştırılmalıdır. Ubuntu 16.04 desktop versiyonu üzerinden yapılacak olan kurulumda ilk olarak makine güncellemeleri yapılmalıdır. Sonrasında snort kurulumuna başlamak için gerekli olan kütüphaneleri kuruyoruz.

snort

Bu bağımlı paketleri kurmadığımız takdirde snort kurulumu sırasında hata verecektir. Sonraki adımımızda Snort’un veri toplama kütüphanesini kurmamız gerekmektedir. Bu kütüphaneyi Snort’tan önce kurmazsak Snort kurulumu sırasında hata çıkmaktadır.

snort

wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz

komutu ile Snort tarafından kullanılan ağ kütüphanesi, Data Ecquisition(DAQ) paketi indirilmiş olur. Sonrasında

snort

tar -xvzf daq-2.0.6.tar.gz
cd daq-2.0.6
./configure && make && sudo make install

Komutları ile kütüphanenin kurulumu tamamlanmış olur. Kütüphaneyi kurduktan sonra artık Snort’u kurabiliriz. Bir dizin geri gelip wget ile snort kaynak kodlarını çekebilmekteyiz.

wget https://www.snort.org/downloads/snort/snort-2.9.12.tar.gz

snort

tar -xvzf snort-2.9.12.tar.gz
cd snort-2.9.12
./configure –enable-sourcefire && make && make install

Komutları ile snort paketlerini de kurmuş olmaktayız. Bu işlemden sonra

ldconfig

komutu ile kütüphaneleri güncellemekteyiz. Snort’un çalıştırılabilir halini /usr/snort/bin dizini altına da softlinklemek için

ln -s /usr/local/bin/snort /usr/sbin/snort

komutunu kullanabilmekteyiz. Artık Snort’un kurulup kurulmadığını kontrol edebiliriz.

snort –V

komutu bize kurulu olan snort’un versiyon bilgilerini göstermektedir.

snort

Snort kurulumunu tamamladıktan sonra artık ayarlamaların nasıl yapıldığına bakabiliriz. Snort dosyalarının içinde gelen hazır ayar dosyalarını direk kullanabilmekteyiz. Fakat sistemimizdeki özel tespit ve önleme isteklerimize göre bu dosyalarda oynama yapmamız gerekmektedir. İlk olarak hazır gelen bu dosyaları sistemimize dahil edelim. Bu işlem için

cp ./etc/*.conf* /etc/snort
cp ./etc/*.map /etc/snort

komutlarını kullanabilmekteyiz. Bu komutlar hazır gelen ayar dosyalarını Snort’un çalıştığı sistem dosyalarının arasına kopyalamaktadır.

snort

Kopyalama işlemini yaptıktan sonra ayar dosyalarını isteğimize göre değiştirmemiz gerekmektedir. /etc/snort dizini altındaki snort.conf dosyasında değişikliklerimizi yapmalıyız. Eğer preprocesser kullanılmasını istiyorsak snort.conf dosyasından bu satırları aktif etmemiz gerekmektedir. Dizin gösterimlerinde hata varsa bu hatalar yine bu dosyadan düzeltilmelidir.

snort

Snort Kuralları

Ayarlama yapmanın en önemli kısmı snort için kural girmektir. Şimdi bu kurallara bir göz atalım. 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ığında, kural eylemini, protokolü, kaynak IP adresi, hedef IP adresi, alt ağ maskeleri ile kaynak ve hedef port bilgileri verilmektedir. Kural opsiyonunda ise kural eylemi belirtilir. Kural eylemi 8 şekilde olabilir:

  • Alert (Alarm): Kullanıcı tarafından belirlenen kurala uyan paketler için uyarı verilir ve log olarak kaydedilir.
  • Pass (Geçir): Paketi basit bir şekilde geçirir, önemsemez.
  • Log (Günlükle): Kullanıcı tarafından belirlenen kurala uyan paketler için uyarı verilmez fakat log olarak kaydedilir.
  • Activate (Etkinleştir): Alarm verilir ve ardından başka bir dinamik kural etkinleştirilir.
  • Dynamic (Dinamik): Bir activate kuralı gelene kadar bekler, active edilince kuralları uygular.
  • Drop (Düşür): Paketi düşürür ve log olarak kaydeder.
  • Reject (Reddet): Paketi engeller, log kaydı alır, TCP RST ya da ICMP port unreachable mesajı gönderir.
  • Sdrop (Günlüklemeden Düşür): Paketi düşürür ve log kaydı almaz.

Örnek bir Snort kuralını inceleyecek olursak:

alert UDP any 80 -> 10.1.1.5 80 (content: “/bin/sh ” ; msg “Shell!”;)

Örnek kuralımızı detaylı olarak inceleyelim:

  • alert – kural eylemi: alarm ver
  • UDP – protokol
  • any – kaynak IP, herhangi bir IP adresinden
  • 80 – kaynak port, 80. Porttan
  • 10.1.1.5 – hedef IP adresi
  • 80 – hedef port
  • (content: “/bin/sh ” ; msg “Shell!”;) – mesaj içeriğinde “/bin/sh” var ise msg “Shell!” – Shell! Alarmı ver.

Son olarak kuralları yazarken dikkat etmemiz gereken bir kaç özellikten bahsetmemiz gerekmektedir. Protokol belirtilirken, TCP,UDP,ICMP,IP protokolleri olmasına dikkat edilmelidir.İp adresi verilirken CIDR olabilir,netmask olabilir, ip adresinin önüne “!” konularak hariç tutulabilir. Aynı şekilde port verilirkende “!” karakteri ile hariç tutulabilir, “34:9000” şeklinde aralık verilebilir, “any” kullanarak herhangi bir port olması belirtilebilir, “:567” 567 den küçük portlar şeklinde büyük,küçük ifadeleri kullanılabilir. “->” işareti ile trafiğin yönü belirtilir.

snort

snort –v

komutu ile snort’u çalıştırmaktayız. Böylece ağda oluşan trafiği izleyebiliriz. Başka bir sunucudan Snort’un bulunduğu sunucuya ICMP paketi gönderdiğimizde çıktımız şekildeki gibi olmaktadır.

snort

Snort ile trafik izleme kapatıldıktan sonra snort bizler için alınan, droplanan, geçirilen vs işlem gören paketlerin bilgilerini ve istatistiklerini göstermektedir. Aynı şekilde bu trafiği ve Snort’un bir çok özelliğini arayüz ile de görebilmekteyiz. Bu arayüzü bizlere sağlayan çeşitli açık kaynak yazılımlar bulunmaktadır. Bu yazılımlar Snort ile bağlandığında, Snort ile erişilebilecek her türlü bilgi, arayüz üzerinden kontrol edilebilmektedir.

Blog postu ile ilgili bir sorunuz varsa bizimle iletişime geçebilirsiniz.

Size nasıl yardımcı olalım?

İhtiyacınız olan her an Prisma danışmanları yanı başınızda. Bizimle 7/24 iletişime geçebilirsiniz.


Sızma testi hizmetlerimizi incelediniz mi?