SNORT ile Saldırı Tespiti Burak DAYIOĞLU ODTÜ Bilgi İşlem Dairesi dayioglu@metu.edu.tr http://www.dayioglu.net
Sunum Planı Saldırı Tespiti Snort Nedir? Snort Mimarisi Snort Kuralları Snort İdaresi
Güvenliğin Sağlanması Üç ana çalışma alanı Politikalar ve Prosedürler Teknoloji Eğitim ve Bilgilendirme Teknoloji Uygulamaları Politikanın Uygulanmasını Sağlama Politika Uygunluğunun İzlenmesi
Saldırı Tespiti Politika ihlallerinin ve sistemler üzerindeki anormalliklerin tespit edilmesi Sistemlere sızan yabancıların ve yetkilerini kötüye kullanan kullanıcıların tespit edilmesi Faydaları 7x24 otomatize edilmiş izleme Erken tespit ve uyarı Delil toplanması ve biriktirilmesi
Sistem Sınıflandırması Anormallik Tespiti Davranış profillerine dayalı Tanımlama “normal”’den sapmalar ile gerçekleştirilir Kötüye Kullanım Tespiti Saldırı imzalarına dayalı Pattern-matching vb. yöntemler ile gerçekleştirilir Sunucu Temelli (HIDS) Olay kaynağı olarak sunucu günlük kayıtları kullanılır Ağ Temelli (NIDS) Olay kaynağı olarak ağ üzerinden akan paketler kullanılır
Snort Nedir? Bir “Ağ Temelli Saldırı Tespit Sistemi” GPL lisanslı Farklı platformlarda çalışabiliyor (UNIX, MS-Windows) Modüler mimariye sahip Bir kötüye kullanım tespit sistemi Araştırma çevrelerinde rağbet görüyor Kurumsal kullanımı giderek yaygınlaşıyor
Ağ Üzerinde Snort
Avantajları Çok sayıda sistem tek bir Snort ile izlenebiliyor Birden çok Snort merkezi olarak denetlenebiliyor Yeni saldırıları tanımlayan kurallar kolayca yazılıp eklenebiliyor İnternet üzerinde kural veritabanı Herkese açık Geniş ve güncel Geniş kullanıcı kitlesi, sohbet edilebilen geliştiriciler Hızlı ve yüksek kalitede destek
Dezavantajları Şifrelenmiş iletişimler (VPN’ler, SSL, SSH vb.) izlenemiyor Yüksek hacimli trafiği izleyemeye yetişemiyor Ağ altyapısında değişiklik/düzenleme gerektiriyor
İnternet’te Snort Kuralları Snort’un ev sitesi http://www.snort.org adresinde Her yarım saatte bir güncellenen kurallar bu siteden http yolu ile edinilebilir Alternatif kural dağıtım sitesi ve saldırı tespiti veritabanı http://www.whitehats.com adresinde Sitenin yöneticisi bilişim suçu nedeniyle hapiste olduğu için site güncellenemiyor
Snort Mimarisi ve Eklentileri Snort üç farklı düzeyde eklentiler ile genişletilebilir Ön-işleyici eklentileri İşleyici eklentileri Çıktı eklentileri
Ön-İşleme Eklentileri Girdileri tespit işlemi öncesinde kanonik biçime dönüştürebilmek için http-decode, stream4 ... Tüm paketler üzerinde yapılması gereken işlemleri yapabilmek için portscan ...
İşleyici Eklentileri Kural tanımlama dilini zenginleştirmek için content, ttl, flags ...
Çıktı Eklentileri Üretilen alarmları sorumluya farklı biçimlerde ulaştırabilmek için XML, alert_smb, database ...
Snort Kuralları alert tcp any any -> 144.122.202.0/24 80 (content:“cmd.exe”; msg:“IIS saldirisi”;) var HOME_NET 144.122.202.0/24 alert tcp any any -> $HOME_NET 80 (content:“cmd.exe”; msg:“IIS saldirisi”;) var HOME_NET [144.122.202.0/24,144.122.203.0/24]
Kural Başlığı EYLEM PROTOKOL IP ADRESİ - 1 PORT NO - 1 YÖN alert tcp any any -> 144.122.202.0/24 80 (content:“cmd.exe”; msg:“IIS saldirisi”;) alert tcp any any -> 144.122.202.0/24 80 EYLEM PROTOKOL IP ADRESİ - 1 PORT NO - 1 YÖN IP ADRESİ - 2 PORT NO - 2
Kural Seçenekleri alert tcp any any -> 144.122.202.0/24 80 (content:“cmd.exe”; msg:“IIS saldirisi”;) (content:“cmd.exe”; msg:“IIS saldirisi”;) SEÇENEK ADI SEÇENEK PARAMETRELERİ Kural seçenekleri işleyici eklentileri sayesinde vardır!
Dinamik Kural Aktivasyonu Dinamik kural aktivasyonu sayesinde bazı kuralların yalnızca belli şartlar oluştuğunda aktif hale gelmesi sağlanabilir: activate tcp !$DBADMIN any -> $ORACLE !1521 (activates: 1;) dynamic tcp !$DBADMIN any -> $ORACLE !1521 (activated_by: 1; count: 500;)
Mevcut Kural Seçenekleri msg ttl tod id fragbits dsize flags seq ack content itype icode icmp_id icmp_seq content-list offset depth nocase resp react sid rev classtype priority tag ip_proto regex rpc ipoption
Alarm Öncelikleri İhtiyacı Her alarm aynı derecede önemli midir? İnternet’ten web sunucusuna gelen bir CodeRed isteği Kurum içinden veritabanı sunucusuna başarısız bir root telnet girişimi Kurum içinden bind sürüm sorgulaması Alarmlar için öncelik belirleyebilme önemli bir gereksinim Daha etkin alarm yönetimi / emek kullanımı
Herkesin Öncelikleri Farklı Genel-geçer saldırı tespiti kuralları herkes için aynı olmak durumunda Aksi halde güncel kural setleri kavramı söz konusu olamaz Herkesin öncelikleri farklı Askeri kuruluşlar için her saldırı çok önemli KOBİ’ler için port taramaları az önemli ya da önemsiz
Saldırı Sınıflandırması Saldırılar sınıflara ayrılır Her sınıf için öncelikler kullanıcı tarafından belirlenir attempted-recon Bilgi sızdırma girişimi 3 attempted-DoS DoS Girişimi 7 successful-user Kullanıcı yetkisi edinme girişimi başarılı 9 attempted-admin Sistem yöneticisi yetkisi edinme girişimi 10 successful-admin Sistem yöneticisi yetkisi edinme girişimi başarılı 11
Gerçek Bir Kural Gerçek hayatta kullanılabilecek bir saldırı tespit kuralı alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 ( msg:"WEB-IIS ISAPI .printer access"; uricontent:".printer"; nocase; flags:A+; reference:cve,CAN-2001-0241; reference:arachnids,533; classtype:attempted-recon; sid:971; rev:1; )
Snort İçinde Paket Yolculuğu
Özgün Eylem Tanımlama Dileyen kullanıcılar kendileri için özgün eylemler tanımlayabilir ruletype supheli { type log output output log_tcpdump: suphelipaketler.log } ruletype kritik { type alert output output alert_syslog: LOG_AUTH LOG_ALERT output database: log, mysql, ... }
Özgün Eylemlerin Kullanılması Özgün eylemler, alert vb. yerine kullanılabilir: alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 ( msg:"WEB-IIS ISAPI .printer access"; uricontent:".printer"; nocase; flags:A+; reference:cve,CAN-2001-0241; reference:arachnids,533; classtype:attempted-recon; sid:971; rev:1; ) kritik supheli
Saldırılara Otomatik Yanıt Saldırının geldiği bağlantının kaynağına ya da hedefine sanki diğer uçtan geliyormuş gibi Bağlantıyı acele bitirdim (TCP Reset) Hedef ağ ulaşılamıyor (ICMP Network Unreachable) Hedef bilgisayar ulaşılamıyor (ICMP Host Unreachable) Hedef port ulaşılamıyor (ICMP Port Unreachable) gönderebilir Ek modüller ile güvenlik duvarına talimat vererek uygun kuralların eklenmesini sağlayabilir
Otomatik Yanıt İşe Yarar Mı? Saldırganın hedefinden geliyormuşçasına saldırgana gönderilecek bir “bağlantıyı acele kesiyorum” oyununu saldırgan bertaraf edebilir Gelen paketi görmezden gelir Paket saldırganın hedefinden değil, Snort’tan gelmektedir Hiç duraklamaksızın saldırısını sürdürebilir Eğer otomatik yanıt üretilecek ise Saldırgana değil hedefe göndermek daha makul olacaktır
Snort ile Otomatik Yanıt alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 ( msg:"WEB-IIS ISAPI .printer access"; uricontent:".printer"; nocase; flags:A+; reference:cve,CAN-2001-0241; reference:arachnids,533; classtype:attempted-recon; sid:971; rev:1; ) resp: rst_snd; resp: rst_all; resp: rst_rcv;
İçerik Listeleri Bir dosyada alt alta listelenmiş anahtar sözcük listeleri içerik listesi olarak anılır: oyun.txt: tavla bric okey Snort, bir girdinin tek bir kural marifetiyle tüm bir liste ile karşılaştırılmasına imkan verir alert tcp $HOME_NET any -> any 80 (content-list:”oyun.txt”; msg:”Oyun sitesi erişimi”;)
Site Yasaklama Otomatik yanıt düzeneğine yapılmış bir ilave sayesinde Belli web sitelerine bağlantının yasaklanması Yasaklanan sitelere bağlanılması durumunda bağlanan kullanıcının tarayıcısına mesaj gönderilmesi mümkün olmaktadır alert tcp $HOME_NET any -> any 80 ( content-list:”oyun.txt”; msg:”Oyun sitesi erişimi yasaktır!”; ) react: block, msg;
Snort Kurulumu Güncel sürümü daima http://www.snort.org adresinden edinilebilir Derlemek ve kurmak için aşağıdaki üç komut yeterli olacaktır: ./configure make make install
Özel Modül Yapılandırması Flexresp vb. bazı modüllerı aktif hale getirmek için derleme öncesi yapılandırma seçenekleri verilmelidir: ./configure --with-mysql=DİZİN --with-oracle=DİZİN --with-postgresql=DİZİN --enable-smbalerts --enable-flexresp
Kurulum Sonrası Kurulum işlemi ile Snort program dosyası ve kılavuz sayfası sistemde uygun dizinlere taşınır: /usr/local/bin/snort Kayıtlar için /var/log/snort dizini açılmalı Yapılandırma dosyası olan snort.conf, /etc dizinine taşınmalı Güncel kural dosyaları http://www.snort.org’dan çekilerek uygun bir dizin altına açılmalıdır
Snort Ayarları Yazılımın tüm ayarları snort.conf ve bu dosyadan “include” edilen diğer dosyalar bütünü içinde yer alır Kurulum sonrasında snort.conf içerisinde $HOME_NET ve diğer değişken tanımları güncellenmeli Kural dosyaları için verilen include satırları kuralların bulunduğu dizini gösterecek biçimde güncellenmeli Çalışması istenen ön-işleyiciler açılarak diğerleri çalışmaz duruma getirilmelidir
Örnek Snort Alarmı – 1 Full mode alarm örneği aşağıdaki gibidir [**] [1:583:1] RPC portmap request rstatd [**] [Classification: Attempted Info Leak] [Priority: 3] 10/25-14:39:08.629316 144.122.171.8:2020 -> 144.122.171.255:111 UDP TTL:64 TOS:0x0 ID:3714 IpLen:20 DgmLen:140 Len: 120 [Xref => http://www.whitehats.com/info/IDS10]
Örnek Snort Alarmı - 2 Fast mode alarm örneği aşağıdaki gibidir 08/01/01-22:21:51.207394 [**] [1:1243:1] WEB-IIS ISAPI .ida attempt [**] [Classification: Attempted Admin. Priv. Gain] [Priority: 10] {TCP} 211.48.107.195:2434 -> 193.140.114.39:80
Paket Kayıtları Alarma neden olan ya da özellikle Log eylemi aracılığı ile kaydı tutulması istenen tüm paketler Snort tarafından kayıt edilir Standart kayıt tutma biçimi ile Her kaynak için ayrı bir dizin açılır Her paket bu dizin altında ayrı bir dosya olarak kayıt edilir [**] WEB-IIS ISAPI .ida attempt [**] 08/03-16:47:13.021593 144.122.71.212:1972 -> 62.211.241.19:80 TCP TTL:240 TOS:0x10 ID:0 IpLen:20 DgmLen:1458 ***AP*** Seq: 0x659AEE46 Ack: 0x89F5D9BE Win: 0x4248 TcpLen: 20
Paket Kayıtları - 2 Standart kayıt tutma biçimi alabildiğine yavaştır Her seferinde dizin arama, bulma ya da açma Dizin içerisinde yeni/mevcut dosyayı açma, ekleme Alternatif ve daha etkin bir yöntem tcpdump ile uyumlu olacak biçimde kayıt tutmaktır Tüm paket kayıtları tek bir dosyaya gider İkili (ing. binary) biçimde saklanan kayıtlar daha az disk alanı kaplar Paketin programlanmış araçlarla incelenmesi kolaylaşır
Snort’u Nereye Kurmalı?
Başarılı Bir Snort Kurulumu Kural seti düzenli olarak http://www.snort.org’dan çekilerek güncellenmelidir Mutlaka, normal olmayan trafiği tanımlayan kurallar eklenmelidir Web sunucusuna dns ve ftp istemleri Veritabanı sunucusuna veritabanı erişimi dışındaki istemler ...
Alarmların Yönetimi / Analizi Ağ üzerindeki birden fazla Snort, merkezi bir bilgisayar sistemi üzerindeki veritabanına alarmlarını gönderebilir Veritabanı üzerinde sorgular ile alarmlar çeşitli biçimlerde analiz edilebilir Alarm analizi için kullanılabilecek bazı araçlar SnortSnarf (http://www.silicondefense.com/snortsnarf) ACID (http://www.cert.org/kb/acid) DeMARC (http://www.demarc.org)
Demarc Ekran Görüntüsü - 1
Demarc Ekran Görüntüsü - 2
Güvenlik Duvarı ve Snort Snort birden fazla ağ arayüzünü aynı anda dinleyebilir Bu özelliği sayesinde güvenlik duvarı olarak görev yapan bir bilgisayar sistemi üzerinde de çalıştırılabilir Hogwash ile kural temelli bir güvenlik duvarı uygulaması yapabilirsiniz Web sunucusuna her istem geçsin ama içinde “.printer” ya da “cmd.exe” geçen istemler geçmesin http://www.hogwash.org
SNORT ile Saldırı Tespiti Burak DAYIOĞLU ODTÜ Bilgi İşlem Dairesi dayioglu@metu.edu.tr http://www.dayioglu.net