SNORT NEDİR ?

Fri/09/2010 tarihinde Ufuk TATLIDIL tarafından yayınlandı. Kategori CEH | 965 Kere Okundu

Snort, açık kaynak kodlu olarak geliştirilen, network tabanlı bir saldırı tespit ve önleme (network intrusion prevention and detection system) yazılımıdır. Adından da anlaşılacağı üzere kullanım amacı, herhangi bir networke dışarıdan yapılan sızma girişimlerini testip etmek ve önlemektir. Offical dökümanlarında yaptığı temel işleri şu şekilde sıralamışlar:

 

Sniffer Mode Snortu, sadece geçen paketleri izlemek üzere sniffer modda çalıştırabiliyorsunuz. Bu şekilde network aktivitelerini inceleme şansınız oluyor. Packet Logger Mode Paketleri diske loglamak için kullanılan mod. Network Intrusion Detection System (NIDS) Mode Genel geçer kullanım alanı olan, sızma girişimlerini tespit etme modu. Bu modda, snort -yukarıda da belirttiğim gibi- veri akışını analiz ederek daha önceden tanımlanmış kurallarla eşleştirme işlemi yapıp ilgili kurallarda belirtilmiş aksiyonların uygulanmasını sağlıyor. Inline Mode Bu mod ise -ki asıl ilgilendiğimiz konu bu- paketler iptables ya da IPFW üzerinden yönlendirme yapılarak snort’a iletiliyor ve yönlendirilmiş olan bu paketler, gene daha önceden tanımlanmış kurallar uyarınca geçiriliyor ya da drop ediliyor. Yani kendi başına IDS olarak çalışan Snort, inline modunda çalıştırılarak IPS özelliği kazanmış oluyor. Yani sisteme sızma girişimlerini tespit etmekle kalmıyor aynı zamanda bu girişimlere ait paketlerin drop edilmesine olanak sağlıyor. Şimdi yavaş yavaş uygulama aşamalarına geçelim. Bir önceki yazıda IPFW kurmuştuk; snort_inline paketleri divert soketi aracılığı ile alan bir yazılım olduğundan dolayı da IPFW kurulumu sırasında IPDIVERT özelliğini de devreye almıştık. Şimdi, kurulum notlarına geçmeden önce, konuyu daha iyi kavrayabilmek için çalışma prensibine teorik olarak değinmek istiyorum. Bu teorik bilgilerin pratikteki karşılıklarına yazının kurulum ve yapılandırma bölümünde değineceğim. Diyelim ki, elimizde IPDIVERT özelliği aktif edilmiş bir IPFW server var ve bu serverın üzerinde snort_inline çalışıyor. Bu yapıyı kullanarak networkümüze gelen HTTP isteklerinin tümünü snort_inline ile analiz etmek ve kötü amaçlı/içerikli

4 – ve aksiyon alıyor. Bu çalışma prensibine ait aşağıdaki gibi güzel bir şema var. 1 – Hedef portu 80 olan bir paket networkün giriş kapısı olan IPFW’ye geldiğinde. . snort_inline tarafından reject ediliyor ve göndericiye bir TCP reset paketi gönderiyor. IPFW’de inceleme adımlarına bir sonraki kuraldan devam ediyor.) Aksiyonlar şu şekilde işliyor: Accept: Snort_Inline paketin temiz olduğuna karar verirse. Reject: Networke girmesine izin verilmeyen paket.paketlerin networke girişini engellemek istiyoruz. snort_inline tarafından alınıyor. 2 – Ilgili porta atılan paket. ilgili paketi IPFW’ye geri gönderiyor. accept. divert aracılığı ile snort_inline’ın dinlediği porta yönlendiriliyor. gene snort_inline tarafından daha önceden tanımlanmış olan kural setleri ile karşılaştırıyor. Durumu gözünüzde canlandırmak için ise yarayabilir. 3 – Gelen bu paket.reject. (drop. Drop: Paket siliniyor ve IPFW’ye geri gönderme işlemi yapılmıyor. Bu durumda işlem adımları şu şekilde gelişiyor.

gz # tar xvfz snort_inline-son-surum. şimdi de işin pratik boyutuna bakalım.5′i de kullanabilirsiniz ancak bu durumda paket analizi sırasında kullanılan rule dosyaları da bu versiyon ile uyumlu -yani eski. İşte kurulum adımları şöyle: # http://mesh.sourceforge.net/sourceforge/snortinline/snort_inline-son-surum. Elbette 2.) Neyse. gibi işlemlere bu bölümden sonra değineceğim. Ama eğer illa porttan kuracağım derseniz (cd /usr/ports/security/snort_inline/ dizinine girip make install clean diyin. Ben direk olarak kaynak koddan kurulum yaptım. Dolayısı ile elinizde üzerinde IPFW çalışmakta olan bir FreeBSD server olduğunu varsayıyorum. # # # # cd /usr/ports/devel/pcre make install clean cd /usr/ports/net/libdnet make install clean Dependencies olayını hallettikten sonra snort_inline kurulumuna geçelim.Mevzunun teorik kısmından sonra. Zira bu şekilde yapmamın sebebi snort_inline’ın son sürümü olan 2.tar.5′in port edilmiş olmaması. Bu dökümanın birinci bölümünde IPFW’nin nasıl kurulduğunu ve configure edildidiğini anlatmıştım. Ben kurmuşken güncell kuralları kullanmak istedim bu nedenle de kaynak kodundan kurulum yaptım. Halihazırda güncel ports collectionunda versiyon 2. snort_inline’ın ihtiyaç duyduğu libpcre ve libdnet kütüphanelerini sisteme yüklemeniz gerekiyor. KURULUM Bu bölümde fazlaca detaya girmeden direk olarak kurulum notlarını paylaşacağım. işte kurulum notları: Kuruluma başlamadan önce.6. Herzamanki gibi ports collectiondan kurulum yapabilir ya da kaynak kodundan derleyerek kurulum yapabilirsiniz. Snort_Inline’ı kurmak için izleyebileceğiniz iki yol var.5 bulunuyor.dl.4. Paketleri divert ile snort_inline’a yönlendirme vs.4.tar. Her ikisi de ports collection’da var olduğundan dolayı aşağıdaki gibi kurabilirsiniz.gz # cd snort_inline-son-surum/ # ./configure --enable-inline --enable-ipfw # make # make install .olacak.1.

sh. Ben deneme kurulumları yaparken snort_inline’ı ports üzerinden de kurdum. betik dosyasının içeriği ve izlediğim yolu aktarayım.in.in /usr/local/etc/rc. Ilgili betik dosyasının bir kopyası /usr/ports/security/snort_inline/files/ adresinde snort.d/snort Bu aşamadan sonra dosyanın içeriğinde kendi sisteminize uygun değişklikleri yapmanız gerekiyor.conf # . Bu şekilde kurulduğu zaman herşey yerli yerinde oluyor. Belki size de lazım olur diye.d/ dizini altına kopyalayıp sistem tarafından çalıştırılabilmesi için izin verdim: # cp /usr/ports/security/snort_inline/files/snort.conf to enable Set to YES to enable Default: NO Extra flags passed to Default: -Dq -J 8000 Network interface to Default: "" Snort configuration Default: # Add the following lines to snort: # snort_enable (bool): snort # # snort_flags (str): snort # # snort_interface (str): sniff # # snort_conf (str): file # ${PREFIX}/etc/snort_inline.sh.4 2007/02/26 23:02:04 dougb Exp $ # # # # PROVIDE: snort REQUIRE: DAEMON BEFORE: LOGIN KEYWORD: shutdown /etc/rc. Bundan sonraki kısımlar konfigurasyon ile alakalı.v 1.d/ altında olması gereken startup betiği oluşturulmamıştı.in ismi ile bulunuyor.d/snort # chmod 555 /usr/local/etc/rc.sh. Benim kullandığım şekli ile içerik şu şekilde: #!/bin/sh # $FreeBSD: ports/security/snort_inline/files/snort. Buradaki dosyayı /usr/local/etc/rc. Bu yüzden manuel olarak oluşturup gerekli izinleri verdim.Kurulum aşaması bu kadar. Ancak demin bahsettiğim versiyon problemi nedeni ile yukarıdaki gibi kaynak koddan kurulum yaptığımda /usr/local/etc/rc.

subr name="snort" rcvar=`set_rcvar` command="/usr/local/bin/snort_inline" load_rc_config $name [ -z "$snort_enable" ] && snort_enable="NO" [ -z "$snort_conf" ] && snort_conf="/usr/local/etc/snort_inline.snort..org/pub-bin/downloads.conf" [ -z "$snort_flags" ] && snort_flags="-Dq -J 8100" [ -n "$snort_interface" ] && snort_flags="$snort_flags -i $snort_interface" [ -n "$snort_conf" ] && snort_flags="$snort_flags -c $snort_conf" run_rc_command "$1" Betik dosyasındaki iki tane onemli alan var: [ -z "$snort_conf" ] snort_conf="/usr/local/etc/snort_inline. snort_inline’ın kullandığınız versiyonuna ait kural dosyalarını Snort’un web sitesinden indirip ilgili path’e atmanız gerekiyor. Tam adres: http://www.conf" Conf dosyası. kurulum aşamasında otomatik oluşturulan dosyalar olmadığı için. /etc/rc. Bunlardan birisi de kural setleridir. Kurallar.cgi include /usr/local/etc/snort_inline/etc/classification.config . Kural dosyalarının Free ve paralı versiyonları mevcut. && [ -z "$snort_flags" ] && snort_flags="-Dq -J 8099" Snort_Inline’ı çalıştırırken verilen default argümanlar. CONF DOSYASI Eğer snort_inline’ı default değerleri ile kullanmak istiyorsanız conf dosyası içeriğinde çok fazla bir değişiklik yapmanıza gerek ancak önemli bir kaç satır var ve değiştirmeniz icap ediyor: var RULE_PATH /usr/local/etc/snort_inline/rules Conf dosyasına göz attığınız zaman düzenleyebileceğiniz bir çok variable bulunduğunu görebilirsiniz.

temiz paketlerin 148. Ayrıca. Ordan alıp /usr/local/etc/snort_inline/etc/ dizini altına kopyalamanız yeterli.include /usr/local/etc/snort_inline/etc/reference. # mkdir /var/log/snort Conf dosyası ile ilgili olarak default yapılması gerekenler bu kadar. Ama ben daha gelişmiş bir şekilde kullanmak istiyorum derseniz. Bu noktada dikkat edilmesi gereken bir konu var. Bu nedenle bu aşamada ilgili dizini oluşturun. Log dosyaları defaul olarak /var/log dizini altında snort isimli bir klasörün içerisinde oluşturulur. temiz olan paketlerin firewall’a geri gönderildiğinden bahsetmiştim. Eğer snort isimli bir dizininiz yoksa hata alırsınız. config ipfw_reinject_rule: 00150 Snort_Inline’ın çalışma prensibinden bahsederken. Hal böyle olursa gelen her paket IPFW ve snort_inline arasında birbirine paslanmış olur. kuralına geri gönderilmesini söylüyorum. Herhangi bir loop durumu oluşturmamak için bu konuya dikkat etmek gerekiyor. Diyelim ki 149.config Kural setlerini indirdiğiniz zaman içerisinde classification ve reference isimli conf dosyaları da gelecek. Snort_Inline conf dosyasının bu satırında da temiz paketlerin IPFW’nin 150. Benim örnek IPFW rule setimde 149 numaralı kural gelen paketlerin snort_inline’a yönlendirilmesini söylüyor. Bu durumda bu paketler IPFW’nin 150.conf dosyasındaki bu satırda. AGRÜMANLAR Snort’u çalıştırırken kullanılan ve startup betiği içerisinde geçen argümanlardan bahsetmiştim. [ -z "$snort_flags" ] İlgili flaglar şöyle: && snort_flags="-Dq -J 8099" -D = Snort_Inline’ın Daemon modda çalışması için.map isimli bir dosyanın bulunamadığı ile alakalı hata mesajı alabilirsiniz. kurala geri gönderilmesini belirttiniz. ilgili dosyaları enine boyuna inceleyebilirsiniz. snort_inline’ı çalıştırdığınız zaman unicode. İşte temiz paketlerin IPFW’ye geri gönderilmesi işini snort_inline. output alert_full: snort_inline-full output alert_fast: snort_inline-fast Bu satırlar. Bu dosya da snort_inline’ın kurulumu sırasında download ettiğiniz paketin /etc dizininde mevcut. . kuralından itibaren eşleştirme işlemine tabi tutuluyor. Bu dosyaları ilgili path’e kopyalamanız gerekiyor.conf dosyasındaki bu satır gerçekleştiriyor. kuralınızda paketleri snort_inline’a gönderdiniz ve snort_inline. snort_inline’ın log dosyalarını belirtir.

0.0.0.0/8 deny ip from 127. Gelen tüm paketleri taramak için IPFW’ye örnek olarak şöyle bir komut girebilirsiniz. div4 0 0 *. 00100 00200 00300 65000 65535 allow ip from any to any via lo0 deny ip from any to 127. Normalde netwörkünüze gelen tüm paketleri snort_inline’a yönlendirip taranmalarını sağlayabileceğiniz gibi sadece belli paketleri yönlendirme imkanınız bulunmakta. Ayrıca. Hatta bir kaç tane.) SNORT_INLINE’IN ÇALIŞTIRILMASI Komut satırından çalıştırmak için kullanılan komut şu şekilde: # snort_inline -Dq /usr/local/etc/snort_inline.0/8 to any allow ip from any to any deny ip from any to any Bu örnekte.conf -J 8099 -c Komutu verdikten sonra. Ancak gene de bu konu ile ilgili bilgilere bu yazının birinci bölümü olan IPFW Kurulumu sayfasından erişebilirsiniz. netstat -an |grep 8099 dediğiniz zaman aşağıdaki gibi bir çıktı alırsınız.8100 *.* dosyasında da snort’un start loglarını Aynı şekilde /var/log/message log görebilirsiniz.-q = Quiet (Sessiz ve derinden) -J 8099 = Snort_Inline’ın dinleyeceği port.conf dosyasına snort_enable="YES" satırını eklemeniz gerekiyor. Snort_Inline’ı sorunsuz bir şekilde çalıştırdıktan sonra IPFW’den divert ile paket yönlendirme ile ilgili bilgilere ve örneklere değinmek iyi olur.sonra /etc/rc. (Bu örnekte 8099 numaralı port. farklı conf dosyasına bakan ve farklı port dinleyen snort daemon’u da çalıştırıp ilgili paketleri ayrı ayrı daemonlar üzerinde taratabilirsiniz. Snort_Inline’ın açılışta başlaması için -betik dosyasını kendinize göre düzenledikten. kısaca localhost hariç geri kalan tüm gelen ve giden paketlerin geçişine izin veriyoruz. Not: Bu yazıyı okuyor iseniz zaten IPFW kural söz dizimlerini ve mantığını biliyorsunuz demektir. Kendi betik dosyanızda kendi kullanmak istediğiniz portu verebilirsiniz. Çıktısı aşağıdaki gibi bir kural setimiz olduğunu düşünelim.0. .

Artık IPS’iniz hazır Detaylı bilgi için aşağıda linklerini verdiğim kaynaklara bakabilirsiniz.conf dosyası içerisinde ki config ipfw_reinject_rule: 65000 yapılmalı ki temiz paketlerin 65000 kuraldan ötürü geçişine izin verilsin. geri kalanlar ise yönlendirilmeksizin 65000 numaralı kurala iletilecekti.) Not: Bu kural seti baz alındığında. Sadece belli paket çeşitlerini snort_inline’a göndermek istediğiniz zaman. Şimdi snort_inline tüm paketleri inceliyor ve temiz bulduklarını IPFW’ye geri yolluyor. snort_inline.conf dosyasını örneğin sadece web ataklarına karşılık verecek şekilde düzenleyebilirsiniz. Kaynakça: http://snort-inline. Bu durumda snort_inline’ı çok yormamış olursunuz. # ipfw add 2000 divert 8099 ip from any to any Bu komut ile tüm paketler snort_inline’a yönlendirilmiş oldu.net/ – Snort_Inline ana sayfası http://freebsd. snort_inline. snort_inline’ın SMTP trafiğini analiz eden kurallarını da devreye almanızın pek bir anlamı olmaz.) Snort_Inline’ın kurulumu ve yapılandırması bu şekilde.rogness. Komut şu şekilde. # ipfw add 2000 divert 8099 ip from any to any 80 Bu durumda. (/var/log/snort/snort_inline-fast dosyasından takip edebilirsiniz. Temiz olmayanlar ise (kural diziminde geçen aksiyon bölümünden hareketle) drop ediliyor ya da sadece alert veriyor. destination’u 80 olan tüm paketler snort_inline’a yönlendirilecek.Şimdi de gelen/giden tüm paketleri snort_inline’ın dinlemekte olduğu 8099 numaralı porta gönderelim.net/snort_inline/ – Güzel bir döküman . Bir başka örnek: Eğer sadece web trafiğini snort_inline’a göndermek isteseydik kural şu şekilde olacaktı. (Sadece 80.sourceforge. porta gelen istekleri yönlendiriyorsanız.

Sign up to vote on this title
UsefulNot useful