Suricata’da Kural Yazma

kaleileriteknoloji
2 min readAug 3, 2021

Bu yazımızda suricata’nın kural yapısından bahsedeceğim.

Suricata’nın kural yapısı aşağıdaki şekildedir:

Aksiyon Protokol Kaynak_IP Kaynak_Port Yön Hedef IP Hedef_Port Opsiyonlar

Örnek:

alert tcp 10.10.20.100 any -> 10.10.20.200 any (msg:”Muhtemel Port Taraması”;sid:10000001)

• Aksiyonlar aşağıdaki şekilde seçilebilmektedir:

alert -> kuralın tetiklenmesi sonucu aksiyonda alert varsa , uyarı vererek loglama işlemi sağlar.

pass -> kuralın tetiklenmesi sonucu aksiyonda pass varsa , paketin geçilmesini sağlar.

drop -> kuralın tetiklenmesi sonucu aksiyonda drop varsa , paketin bloklanarak loglanmasını sağlar.

reject -> kuralın tetiklenmesi sonucu aksiyonda reject varsa , pakete cevap olarak reset dönülmesini ve loglanmasını sağlar.

Protokol aşağıdaki seçenekleri içerebilir:

• TCP

• UDP

• ICMP

• IP

Kaynak ve Hedef IP aşağıdaki seçenekleri içerebilir:

• Bir ağı CIDR olarak ifade edebilir.

• Tek bir IP adresi olabilir

• [IP1,IP2] şeklinde IP adresi grubu olabilir.

• IPyi dışarıda bırakmak için IP önüne ! koyulabilir.

• Any ifadesi ile bütün IPler kastedilebilir.

• Conf dosyasında oluşturulan değişkenler kullanılabilir.

Port bilgisi aşağıdaki seçenekleri içerebilir:

• 1923 gibi bir port olabilir.

• Portun önüne ! koyularak port hariç tutulabilir.

• 1071:1453 gibi bir port aralığı eklenebilir.

• Any ifadesi ile bütün portlar kapsanabilir.

Yön kavramı trafiğin hangi akış yönünde olacağını belirtir. İki yönlü de ifade edilebilmektedir.

Opsiyon aşağıdaki ifadeleri içermektedir:

• Msg ile kural tetiklenirse hangi ifade yazılacağı belirlenmelidir.

• Sid ile snort kural idsi yazılmalıdır. Yazılan kurallar 10000001 den itibaren verimesi önerilmektedir.

• Rev ile kuralın kaç kere revizyon geçirdiği belirlenmelidir.

• Classtype ile kuralın ne tür ile ilgisi olduğu belirtilebilir.

• Flags ile set edilen flag kontrolü yapılabilir.

F -FIN

S -SYN

R — RESET

P — PUSH

A -ACK

U — URGENT

• TTL ile ttl değer kontrolü yapılabilir.

• Content ile paketin içerisindeki veri kontrol edilebilmektedir.

Content : “kale” mesaj içeriğinde kale varsa anlamına gelir.

Binary ifade kullanımında |binaryData| aralığına eklenmelidir. Diğer bir örnek ise content: “USER kale” ile FTP için username kale girilmiş şeklinde düşünülebilir.

• Dsize ile paket boyutu kontrolü yapılabilir. Dsize > 100 100 byte büyük payload varsa anlamına gelir.

• Offset ile verinin kaçıncı byte’ından itibaren kontrole başlanacağı belirtilir.

• Depth ile verinin kaç byte uzunlukta veri kontrol edileceği belirtilir.

• Within ile ilk content ifadesinde kaç byte sonra ikinci content ifadesinin aranacağı söylenir. Örneğin content:”USER”, content:”kale” , within:20 ile USER gördükten 20 karakter içerisinde kale ifadesi aranacaktır.

• Urlcontent ile url içerisinde ilgili ifadenin kontrolü sağlanır. (Not: İçerik filtreleme için özellikle kullanılabilir.)

• Resp ile pakete nasıl bir tepki verileceği belirtilir. Rst_snd ile RST flagi set edilmiş bir paket gönderilir.

• React ile içerik filtreleme sonucu nasıl bir tepki verileceği belirtilebilir. Örneğin engelleyebilir, uyarı çıkarabilir veya yönlendirme yapabilir.

Örnek Kurallar

alert any any -> any any (msg:”SQL Injection denemesi”,content:”union”)

alert any any -> any $SUNUCU_NET 80,443,8080 (msg:”Muhtemel Command Injection”;content:”cmd.exe”)

alert any any -> any any (msg:”Muhtemel port taraması”;flags:S,window:2048)

--

--