Wazuh üzerinde özel güvenlik kuralları (rule writing) oluşturmak

Wazuh üzerinde özel güvenlik kuralları (rule writing) oluşturmak

1. Kural Dosyalarının Konumu ve Hiyerarşi

Bir önceki görselde gördüğümüz /var/ossec/ruleset/rules dizininde Wazuh’un varsayılan kuralları yer alır. Ancak bu kurallar, sistem güncellemeleri sırasında sıfırlanabilir veya üzerine yazılabilir.

Kendi oluşturacağınız kuralları her zaman şu yoldaki dosyaya yazmalısınız:

👉 /var/ossec/etc/rules/local_rules.xml

2. Decoder (Çözücü) Mantığını Anlamak

Bir kural yazmadan önce, Wazuh’un gelen logu anlayıp anlamadığından emin olmanız gerekir. Wazuh, ham logları alır ve “Decoder”lar yardımıyla içindeki IP adreslerini, kullanıcı adlarını veya eylem tiplerini ayrıştırır. Özel bir kural, ancak log doğru çözümlendiyse (decoded) eşleşebilir.

3. Kuralın Temel Yapısı (XML Syntax)

Özel kurallar 100000 ID numarası ile başlar. Bir kural oluştururken, genellikle zaten var olan genel bir kuralı temel alır (if_sid) ve spesifik bir koşul eklendiğinde alarm seviyesini yükseltirsiniz.

Örnek Senaryo: Linux sunucularınızdaki güvenlik duvarı (örneğin UFW) tarafından bloklanan ancak spesifik bir portu veya deseni hedef alan logları yakalamak istediğinizi varsayalım.

Gelen ham log: May 20 15:00:00 webserver kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:00:00:00:00:00 SRC=192.168.1.50 DST=10.0.0.10 PROTO=TCP DPT=22

Bunu yakalayacak özel bir kural şu şekilde yazılır:

XML
<group name="syslog, ufw, custom_rules,">
  <!-- UFW Bloklama logunu tespit eden kural -->
  <rule id="100010" level="7">
    <if_sid>4100</if_sid> <!-- 4100, Wazuh'un genel syslog kuralıdır -->
    <match>[UFW BLOCK]</match>
    <regex>DPT=22</regex>
    <description>Güvenlik Duvarı: SSH (Port 22) bağlantı girişimi UFW tarafından engellendi.</description>
    <group>firewall_drop, ssh_attack,</group>
  </rule>
</group>

Kural Bileşenleri:

  • rule id=”100010″: Özel kuralımıza verdiğimiz benzersiz kimlik (100000 ile 120000 arası).

  • level=”7″: Alarmın ciddiyet seviyesi (0’dan 15’e kadar). 7 ve üzeri genellikle dashboard’da dikkat edilmesi gereken alarmlardır.

  • if_sid: Kuralın bağımlı olduğu üst kural. Bu örnekte 4100 (genel syslog) tetiklendiyse bu kuralı kontrol et diyoruz.

  • match: Logun içinde tam olarak aranan metin. Hızlıdır ve sistemi yormaz.

  • regex: Daha karmaşık desen aramaları için düzenli ifadeler (Regular Expressions).

  • description: Wazuh Dashboard üzerinde göreceğiniz alarm açıklaması.

4. Kuralı Test Etme (wazuh-logtest)

Kuralı local_rules.xml dosyasına ekledikten sonra hemen sistemi yeniden başlatmak yerine kuralın çalışıp çalışmadığını test etmelisiniz. Wazuh sunucusuna terminalden bağlanarak test aracını çalıştırabilirsiniz:

Bash
/var/ossec/bin/wazuh-logtest

Bu aracı çalıştırdıktan sonra ham log satırını yapıştırdığınızda, Wazuh size bu logun hangi decoder'dan geçtiğini ve yazdığınız 100010 numaralı kuralı tetikleyip tetiklemediğini detaylıca gösterecektir.

5. Yöneticinin Yeniden Başlatılması (Restart)

Test aracı yazdığınız kuralın sorunsuz çalıştığını onayladıysa, kuralın aktif hale gelmesi için Wazuh-Manager servisini yeniden başlatmanız gerekir:

systemctl restart wazuh-manager