Suricata Nedir? Nasıl Kural Yazılır? Dikkat Edilmesi Gerekenler Nedir?

Kerimcan Ö.
6 min readMar 28, 2023

--

Suricata Nedir?

Yüksek performanslı IDS/IPS aracıdır. Suricata snorta göre multithread çalışır, IPv6 destekler. Keza dosya çıkartmayı destekler. Bu özellik ne işe yarar? Trafikteki zararlı yazılımlar için virustotal ile entegrasyon sağlamaktadır.

İmza/kural tabanlı çalışır.

Sniffer && Logger

Suricata Logları Nasıl Görüntülenir?

Eve.json formatındadır, jq aracıyla görüntülenebilmektedir. ELK kurarak da filebeat vasıtasıyla suricatanın loglarını toplayabiliriz.

Özellikleri

Ağ trafiği pcap olarak kayıt eder, daha sonrasında analiz için rahatlık sağlar.

Konfigürasyon dosyası YAML formatındadır.

Kuralları günlük güncellenmelidir

Kendi kurallarımızı yazabiliriz.

Birçok çalışma moduna sahiptir. Hangi modda çalışacağını başlganıçta verilen parametrelerle belirlenmektedir.

En çok tercih edileni ise (pcap device) saldırı tespit sistemi modunda bir paket sırasıyla paket yakalama, çözümleme akış işlemi ve tespit modüllerinden geçer. Bu işlem neticesinde ya paket geçirilir ya da alarm üretilir.

Kural Yapısı

İki kısımdan oluşmaktadır.

Kural = Kural Başlık + Kural Seçenekleri

Rule Head (Kural Başlığı)

  • Rule Actions (Kural Aksiyonları): Pass, drop, alert, reject (kullanılacak)
  • Protocol : IP, ICMP, TCP, UDP, HTTP

Rule Options (Kural Seçenekleri)

  • Keywords

Kural Yapısı

Kurallar kuruma özel yapılmalıdır.

Kural Başlığı Temel Olarak 4 Alt Bölüme Ayrılır.

-Kural Aksiyonu : Pass, drop, alert, reject

-Protokol : TCP, UDP, ICMP, IP vb.

-Kaynak IP-Port: Tek bir IP veya gruplama kullanılabilir.

-Hedef IP-Port: Tekdit bir IP veya gruplama kullanılabilir

Aksiyon:

Yazılan kurala uyan paket içeriğinin ne yapacağını belirtmektedir.

Alert: uyan paketler için uyarı verir ve loglama yapar

Pass: Paketi geçer

Drop: Paketi bloklar ve durumu loglar. (IPS modu)

Reject: Paketi engeller, geri reset döner. Durumu loglar (IPS modu)

Protokol:

Hangi protokolün kontrol edildiğini belirtmektedir.

TCP, UDP, ICMP, IP, HTTP

IP Adres Alanı:

Kaynak IP adresini belirtmektedir.

Ağ trafiğinin nereden geldiğini gösterir.

! İFADESİ: Hariç anlamı taşımaktadır.

Any İFADESİ: Tüm ip adresleri anlamı taşımaktadır.

$HOME_NET gibi değişken tanımlarında kullanılabilir.

Port Alanı:

Trafiğin geldiği ve gittiği port gösterilebilir.

Yön Belirteci:

Trafiğin sol taraftan sağ tarafa doğru gittiğini göstermektedir.

ÖRNEĞİN: source → destination yada source <> destination şeklindedir.

Kural İmleçleri:

( ) Parantez içinde yazılmalıdır.

; seçenekler birbirinden ayrılır.

. her yazılan seçenek ; ile bitmelidir.

Kural Seçenekleri (Rule Options)

Meta ayarlamalarında suricata kural kontrol etkisi yoktur.

Meta ayarları suricatanın olayları rapor etmesi için vardır.

  • msg (message)
  • Kural tetiklenirse istenilen mesajı yaz.
  • Kural seçeneklerine genelde msg ile başlanılmalıdır
  • (msg: “selaam, yakalandın”); gibi :))
  • sid (signature id)
  • Her bir kuralın tanımlanacak numarası
  • sid:123123123;
  • rev (revision)
  • Kuralın versiyonunu belirtir.
  • Kuralda değişiklik olduğunda rev numarası bir arttırılmalıdır.
  • Kural seçenekleri bölümünde genelde sid ve rev en sonda yer alır.
  • rev:13;
  • reference
  • Kuralla ilgili detay bilgilerin yerlerini gösterir.
  • reference: viki.org;
  • classtype
  • Kural sınıflandırılması hakkında bilgi vermektedir.
  • classification.config dosyası içerisinde bilgiler yer almaktadır.
  • cat /usr/local/etc/suricata/classification.config dizinindedir.
  • Kural default priority değeri burada tanımlanmıştır.
  • 1–4 arası kullanılır. Yüksek öncelik 1’dir
  • priortiy:5; şeklinde bir kural yazılırsa default değerin üzerine yazmaktadır.
  • Protokollerin başlıklarıyla ilgili anahtar kelimeler:
  • IP Keywords
  • TTL, Ipopts (ip options), Sameip, ip_proto, Id, Fragbits, Fragoffset vb. bunun için bknz: https://suricata.readthedocs.io/en/suricata-6.0.0/rules/header-keywords.html
  • TTL: Bir paketin başlığında belirli bir IP yaşam süresi değerini kontrol etmek için kullanılır
  • ipopts: Belirli bir IP seçeneğinin ayarlanıp ayarlanmadığını kontrol edebilir. Kuralın başında kullanılması önerilir. ipopts yapısı belli bir yapılarla eşleşebilir.
  • sameip: Her paketin bir kaynak IP adresi ve bir hedef IP adresi vardır. Kaynak IP, hedef IP ile aynı olabilir. Sameip anahtar sözcüğü ile kaynağın IP adresinin hedefin IP adresiyle aynı olup olmadığını kontrol edebilmektedir.
  • ip_proto: IP protokolüyle kullanılmaktadır. Protokolün adını veya numarasını kullanabilirsiniz. Diğer IP protokolü için kullanabileceğiniz ad ve numaralar için bknz: http://en.wikipedia.org/wiki/List_of_IP_protocol_numbers

Örnek: Birkaç suricata kuralı yazalım.

alert tcp any any -> any 80 (msg:"HTTP traffic detected"; flow:to_server, established; content:"GET"; nocase; http_method; sid:1000001; rev:1;)

Bu kural, HTTP trafiği algılandığında alarm verir. Kuralın ayrıntıları şu şekildedir:

  • alert: Kuralın tetiklendiğinde bir alarm oluşturması gerektiğini belirtir.
  • tcp: Kuralın TCP trafiğiyle çalışacağını belirtir.
  • any any: Kaynak ve hedef IP adresleri için herhangi bir adresi kabul eder.
  • >: Yönlendirme işareti, kaynak ve hedef adreslerini ayırır.
  • any 80: Hedef portu 80 olarak belirtir, yani HTTP trafiği için tipik olarak kullanılır.
  • msg:"HTTP traffic detected": Alarmın açıklamasını belirtir.
  • flow:to_server, established: Yalnızca sunucuya giden trafiği takip eder ve trafiğin kurulmuş bir bağlantıda olmasını gerektirir.
  • content:"GET"; nocase; http_method;: HTTP GET isteklerini arar ve büyük-küçük harf duyarsızlığı sağlar.
  • sid:1000001: Kurala bir kimlik numarası atar.
  • rev:1: Kuralın sürüm numarasını belirtir.

Bu kural, bir HTTP GET isteği algılandığında alarm verecektir. Ancak Suricata, ayrıca IP adresi, port numarası, protokol, veri içeriği ve diğer özellikleri de dahil olmak üzere çeşitli kriterleri kullanarak daha karmaşık kurallar oluşturmanıza olanak tanır.

Örnek 2: HTTP trafiği için

alert http any any -> any any (msg:"HTTP traffic detected"; sid:1000001; rev:1;)

Bu kural, herhangi bir kaynaktan herhangi bir hedefe giden HTTP trafiğini tespit eder ve “HTTP traffic detected” mesajı gönderir.

Örnek 3: ICMP trafik için

alert icmp any any -> any any (msg:"ICMP traffic detected"; sid:1000002; rev:1;)

Bu kural, herhangi bir kaynaktan herhangi bir hedefe giden ICMP trafiğini tespit eder ve “ICMP traffic detected” mesajı gönderir.

Örnek 4: SSH trafik için bir kural:

alert tcp any any -> any any (msg:"SSH traffic detected"; app-layer-protocol:ssh; sid:1000003; rev:1;)

Bu kural, herhangi bir kaynaktan herhangi bir hedefe giden SSH trafiğini tespit eder ve “SSH traffic detected” mesajı gönderir. Ayrıca, app-layer-protocol:ssh ile belirtilen uygulama katmanı protokolünü kullanır.

Örnek 5: Belirli bir IP adresinden gelen trafiği engelleme:

drop ip 192.168.0.10 any -> any any (msg:"Blocked traffic from IP address 192.168.0.10"; sid:1000004; rev:1;)

Bu kural, 192.168.0.10 IP adresinden gelen trafiği engeller ve “Blocked traffic from IP address 192.168.0.10” mesajı gönderir.

Örnek 6: Belirli bir HTTP anahtar kelimesini içeren trafiği tespit etme:

alert http any any -> any any (msg:"HTTP traffic detected with keyword 'hacking'"; http.uri; content:"hacking"; sid:1000005; rev:1;)

Bu kural, herhangi bir kaynaktan herhangi bir hedefe giden HTTP trafiğinde “hacking” kelimesini içeren URI’leri tespit eder ve “HTTP traffic detected with keyword ‘hacking’” mesajı gönderir.

Örnek 7: Bu kural, SQL enjeksiyonu denemesi tespit edildiğinde alarm oluşturacaktır.

alert tcp any any -> any any (msg:"SQL injection attempt detected"; flow:to_server, established; content:"' or 1=1--"; nocase; pcre:"/((\\%27)|(\\')|(\\-\\-))/ix"; sid:1000002; rev:1;)
  • flow:to_server, established: Yalnızca sunucuya giden trafiği takip eder ve trafiğin kurulmuş bir bağlantıda olmasını gerektirir.
  • content:"' or 1=1--"; nocase;: İstek içeriğinde belirtilen dizeyi arar ve büyük-küçük harf duyarsızlığı sağlar.
  • pcre:"/((\\%27)|(\\')|(\\-\\-))/ix";: PCRE (Perl-Compatible Regular Expressions) kullanarak, %27, ' veya -- karakter dizilerini arar.

IP Reputation

Belirlenen zararlı IP adreslerine ağ trafiği yakalanır.

IP reputation ayarlarını suricata.yaml üzerinden yapmayı ihmal etmeyiniz. 🙂

/etc/suricata/iprep dizini

IP reputation ile ilgili bilgiler yer almaktadır.

/etc/suricata/iprep/categories.txt dizini

Black list alınacak IP adreslerinin sınıflandırıldığı dosyadır.

CSV dosya formatındadır.

Burada kısa ad olarak belirlenen isim, saldırı tespit kuralı oluşturulurken kullanılmaktadır.

<id>, <short_name>, <description> şeklindedir

reputation-files:

  • reputation.list
  • Alarm oluşması ve izlenmesi istenilen ip adreslerinin default olarak yazıldığı dosyadır.
  • Bunun dışında oluşturulması istenilen dosyalar oluşturulabilir. Örneğin: zararli_ip.list
  • Dosya formatı ise CVS’dir. Üç bölümden oluşur. <ip>, <category>, <reputation score>

--

--