13 Ocak 2016 Çarşamba

Suricata'da IP İtibar (IP Reputation) Ayarlarının Yapılması

Suricata saldırı tespit/engelleme sistemi IP kara listesinde (IP blacklist) olan IP adreslerinden ya da bu IP adreslerine doğru olan trafiği de yakalayabilmektedir. Saldırı engelleme modunda kurulu ise bu trafiği engelleyebilmekte, saldırı tespit modunda ise bu trafikle ilgili alarm üretebilmektedir.
Bu yazıda, bunun için Suricata'da yapılması gereken ayarlardan bahsetmeye çalışacağım.
Suricata'nın yapılandırma (konfigürasyon) dosyası olan suricata.yaml dosyası içerisinde "IP reputation" bölümü bulunmaktadır. Bu bölümün altını değiştirerek Suricata'da IP itibar ayarları yapılmaktadır. Suricata'nın örnek bir "IP Reputation" bölümü aşağıdaki gibidir:
#IP Reputation
 reputation-categories-file: /etc/suricata/iprep/categories.txt
 default-reputation-path: /etc/suricata/iprep
 reputation-files:
  - reputation.list
IP itibar ayarı yaparken ilk önce kara listeye dahil edilecek IP adreslerinin bir sınıflandırmaya tabi tutulması gerekiyor. Bu sınıflandırmanın yer aldığı dosyanın varsayılan (default) ismi /etc/suricata/prep/ dizininde bulunan categories.txt dosyasıdır. (Dosya isimleri ya da dosya yol'u tabii ki farklı olabilir. Burada varsayılan isimler kullanılmıştır.)
categories.txt isimli dosyanın formatı aşağıdaki gibi bir CSV dosyasıdır:
root@suricata:/etc/suricata/iprep$cat categories.txt
1,HACK,Hack Siteleri
2,MP3,MP3 Siteleri
3,SPYWARE,Spyware Listesi
categories.txt dosyasının içeriğindeki satırlar "üç" bölümden oluşmaktadır:
, ,
Sınıfladırmaya öncelikle bir numara vermek durumunudayız: . Bu numara 1 ile 60 arasında olmak zorundadır. Yani IP itibar listemizde en fazla 60 kategori olabilmektedir.
Sınıflandırmaya kısa bir de isim veriyoruz: . Bu isimlerin bire bir aynısı, iprep.rules dosyasına saldırı kuralı (attacking rule) yazarken kullanılmaktadır.
Sınıflandırma için bir de açıklama yazıyoruz:
Sınıflandırma dosyasının yol'unu da suricata.yaml yapılandırma dosyası içerisinde reputation-categories-file: /etc/suricata/iprep/categories.txt şeklinde belirtiyoruz.
IP itibar ayarlarının yapıldığı dizini de yine suricata.yaml yapılandırma dosyası içerisinde belirriyoruz: default-reputation-path: /etc/suricata/iprep
Sınıflandırma dosyasının içeriğini doldurduktan sonra hangi IP adreslerinin engelleneceğini ya da hangi IP adreslerine karşı alarm üretileceğini belirlememiz gerekiyor. Bu listeyi de default-reputation-path: /etc/suricata/iprep dizinine reputation.list dosyası adıyla koyuyoruz. Bu dizinin altında birden fazla liste olabilir. badhosts.listzararli_ip.listmalware.list gibi.
reputation.list ya da benzeri dosyaların içeriği aşağıdaki gibidir:
root@suricata:/etc/suricata/iprep$cat reputation.list
63.71.76.111,1,100
66.28.56.113,1,100
210.60.141.1,1,100
24.215.5.116,1,100
83.149.65.117,1,100
85.17.73.137,2,50
216.74.109.140,2,50
64.239.80.146,2,50
198.65.238.151,2,50
195.144.11.157,3,125
abidancegubidance.com,3,125
abeedeekgubeedeek.com,3,125

reputation.list dosyası da categories.txt dosyası gibi yine bir CSV dosyasıdır ve üç alandan oluşmuştur:
, ,
Kara listemizde olan IP numarasını (216.74.109.140) ya da alan ismini (abidancegubidance.com) ilk bölüme yazıyoruz.
Daha sonra bu IP numarasının ya da alan adının sınıflandırma numarasını belirtiyoruz. Bu numara 1 ile 127 arasında olmak durumundadır.
Son alana da bu IP numarasının ya da alan adının skor değerini yazıyoruz.
Kara listedeki IP adreslerine (IP blacklist) ya da alan isimlerine birçok internet sitesinden erişilebilmekte ve bu kara listede yer alan IP adresleri/alan isimleri indirilebilmektedir. Bunlardan paralı olanlar olduğu gibi ücretsiz olanlar da mevcuttur. Bu kara listenin bir örneğine https://sslbl.abuse.ch/blacklist/ adresinden erişilebilir.
Buraya kadar categories.txt ve reputation.list dosyalarının içeriklerini belirledik. Bu dosyalar, bu halleriyle bir şey ifade etmezler. Bu dosyalar için kural(lar) yazmamız gerekmektedir. IP itibar (IP Reputation) kurallarını herhangi bir Suricata kuralı içerisine yazarsak da çalışacaktır. Fakat IP itibar kurallarını /etc/suricata/rules/iprep.rules altına yazmayı tercih ettik. Aşağıda örnek bir iprep.rules lural dosyası bulunmaktadır. (Aşağıdaki imzalar deneme amaçlı oluşturuldukları için kurallarda tutarsızlıklar olabilir.)
alert tcp any any -> any any (msg:"BU NASIL BIR TRAFIK YA? COK AYIP BU!"; iprep:any,SPYWARE,=,125;)
alert tcp any any -> any any (msg:"AHAN DA DUTDUM SENI!";iprep:dst,SPYWARE,=,125;)
alert tcp any any -> any any (msg:"HACKINGAM PALACE"; iprep:any,HACK,=,100; sid:10005; rev:1;)
alert tcp any any -> any any (msg:"HACKLEME BENI HACKLERIM SENI"; iprep:src,HACK,=,100; sid:10006; rev:1;)
alert tcp any any -> any any (msg:"NE SALDIRIYDI BE!"; iprep:dst,MP3,=,50; sid:10007; rev:1;)
alert tcp any any -> any any (msg:"YETTI GARI"; iprep:both,MP3,<,100; sid:10008; rev:1;)
Şimdi bu kural seti içerisindeki bazı satırları inceleyelim:
alert tcp any any -> any any (msg:"HACKINGAM PALACE"; iprep:any,HACK,=,100; sid:10005; rev:1;)
IP itibarı (IP Reputation) için Suricata saldırı imzasının (kuralının) içerisine iprep parametresini eklememiz gerekiyor. iprep parametresi dört alandan oluşmaktadır:
<any/src/dst/both>: Trafiğin kaynağı belirtilmektedir. Buradaki örnekte kaynak ya da hedef IP kısmında kara listedeki bir IP adresi görülürse alarm üretilmektedir.
HACK: Burada yazan ifade categories.txt dosyası içerisindeki ikinci alanın aynısı olmak zorundadır. (1,HACK,Hack Siteleri) Buradaki kural için bir sınıflandırma belirtmiş oluyoruz bu şekilde.
=,<,>: Burada reputation.list dosyasının üçüncü alanındaki değerle bir kıyaslama yapılmaktadır. (83.149.65.117,1,100) Buradaki örnekte sınıflandırma numarası "1" olan IP adresleri için geçerli bir kural vardır. Sınıflandırma numarası "1" olan IP adresinin "score" değeri de "100" olarak verilmiştir. Bu kurala denk gelen bir trafik olduğu zaman da kurada yer alan tırnak içerisindeki uyarıyı vermektedir. (HACKINGAM PALACE)
categories.txt
1,HACK,Hack Siteleri
reputation.list
83.149.65.117,1,100
Suricata kuralı
alert tcp any any -> any any (msg:"HACKINGAM PALACE"; iprep:any,HACK,=,127; sid:10005; rev:1;)
Konuyu özetleyen bir resmi de aşağıya ekliyorum: