Sigma Kuralları ile SIEM Ürünlerinde... - Gais Security- Gais Siber Güvenlik Teknolojileri

Sigma Kuralları ile SIEM Ürünlerinde Tehdit Avı

Sigma Nedir?

Sigma ilgili log olaylarını esnek ve kolay bir şekilde tanımlamaya yarayan imza formatıdır. Formatın tüm loglara uygulanabilmesi, esnek ve yazması kolay olmasından dolayı yeni yeni popülerleşmeye başlamıştır.

Bu projenin amacı ise araştırmacı ve analistlerin algılama yöntemlerini tanımlayabilecekleri ve başkaları ile paylaşabilecekleri yapısal bir kural formatı oluşturabilmek. YARA kurallarına benzetebiliriz.

Bugün herkes analiz için log verilerini toplar, bunları korale eder kuralları gerekli SIEM veya log toplama ürünleri ile işler. Ancak YARA kuralları gibi çalışmaları başkaları ile paylaşabilecekleri açık bir format yoktur Sigma bize bu konuda destek sağlıyor.

Bu kurallar birçok platforma uygulanabilir. Aşağıda hangi platformları desteklediği yazmaktadır

  • Splunk (Dashboard ve Plugin)
  • ElasticSearch Query Strings
  • ElasticSearch Query DSL
  • Kibana
  • Elastic X-Pack Watcher
  • Logpoint
  • Windows Defender Advanced Threat Protection (WDATP)
  • Azure Sentinel / Azure Log Analytics
  • ArcSight
  • QRadar
  • Qualys
  • RSA NetWitness
  • PowerShell
  • Grep with Perl-compatible regular expression Desteği

Sigma Kural Yazımı

Projenin kullanımı ise oldukça kolay, Sigma yaml formatını kullandığı için yaml destekleyen bir derleyici ile çalışmamız gerekmekte bu kısımda YARA kural tanımlaması gibi yara uygulaması ile yapılmaz ayrıca bir derleyici gerektirir. Konunun devamında yaml plugini olan Webstorm derleyicisi üzerinden gideceğiz, siz dilerseniz VSCode veya Atom kullanabilirsiniz.

1. Aşağıdaki bağlantıdan repoyu indiriniz.

https://github.com/Neo23x0/sigma

 

2. Herhangi bir derleyici ile projeyi açıp içerisinde yer alan “rules” dizinine gelin. Bu kısımda örnek hazırlanmış kurallar mevcuttur bunların üzerinden düzenleme yapabilir veya sıfırdan kural yazabiliriz. Aşağıda kural yapısını anlatmaya başlayalım. Kural yapısını anlatırken ilk olarak örnek kurallardan birisini kullanacağım daha sonrasında kendi kuralımızı yazıp bunu Sigmac aracında işleyeceğiz. Sigmac aracını makalenin ilerleyen kısımlarında göreceğiz.

 

Aşağıda birkaç adet kural var bu kurallar üzerinde incelemelerimize başlayalım. Aşağıda görüldüğü üzere kural yapısı oldukça basit ve anlaşılır. Kural üzerindeki parametre ve aldıkları değerleri yakından inceleyelim. Anlatıma geçmeden önce aşağıdaki fotoğraflarda farkettiğiniz üzere bir dallanma mevcut aynı parent-child ilişkisine benzetebiliriz.

  • Title: Kural başlığı.
  • Description: Kuralın ne işe yaradığı ile ilgili detaylı bilgi.
  • Author: Kuralı yazan kişi
  • Logsource: Kuralın nereden alındığı. Log kaynağını, platformu, uygulamayı ve algılama için gereken türü tanımlar.  Birden fazla alt parametre alabilir bunlar;
  • Category: Kuralın hangi kategoriye ait olduğu (webserver veya apt gibi)
  • Product:  Herhangi bir üründen alındıysa bu yazılabilir. (Apache, Windows, Unix gibi)
  • Service
  • Date: Kuralın oluşturulduğu tarih.
  • Level: Kuralın  kritiklik derecesi yazılmalıdır.
    • Low
    • Medium
    • High
    • Critical
  • Status: Kuralın durumunu belirtir üç farklı değer alır.
  • Stable: Kural, kararlı olarak kabul edilir ve platformlarda kullanılabilir.
  • test: Çoğu işi bitmiş son testleri gerçekleştirilen kural
  • experimental:  Daha hazırlık aşamasında kullanılması önerilmeyen kurallardır.
  • references: Kural içinde yer alan indikatörlerin, Sigma dilinden konuşacak olursak keywordlerin referansları bu kısma yazılabilir.  

sigma_kurallari_ile_tehdit_avi_2

Şimdi geldik önemli kısımlara çünkü şuanki anlatacağım parametreler kuralın ana hattını oluşturmakta. SIEM  ve Log yönetim ürünlerine eklendiğinde gerekli alertin dönmesini sağlayan kısmı inceleyeceğiz. Yine bazı alt parametreler almakta bunlarıda detaylı bir şekilde tanımlayalım.

  • Detection:  Kuralımızdaki indikatörlerin tespiti ve araçlarda log üretilebilmesini sağlayan alan burasıdır. Alt parametreler alır.
  • Keywords: Alert üretilecek indikatörler yani  kuralın yazılma amacı olan durumun belirleyici, karakteristik özellikleri olan anahtar kelimelerdir.

Keywordler görüldüğü üzere tırnak işaretleri içersine yazılmaktadır. Her keyword tek satırda liste olarak yazılır burda her bir satırın arasında aslında mantıksal bir OR ifadesi vardır.  Anlaşılması açısından aşağıdaki kuralda bunu inceleyelim.

Aşağıdaki kuralda iki farklı keyword vardır bunları anlamlandıracak olursak;

“ 'EvilService' OR(veya) 'svchost.exe -n evil'  eşleşmesinde alert üret “ şeklinde bir anlamlandırma yapabiliriz.

detection:

  keywords:

    - EVILSERVICE

    - svchost.exe -n evil

  • Selection: Bu kısım mantıksal AND ifadesini kullanmak için oluşturduğumuz yapıdır. Burada anahtar kelimelerin dışında hangi üründe hangi sürümde gibi birçok bilgiyi işin içine katabiliriz. Aşağıda örnek ile anlamlandırma yapacağız.

“Security Log kaydında AND(ve) Event ID değeri 517 OR(veya) 1102 olan  eşleşmeleri ara” şeklinde anlamlandırabiliriz.

detection:

  selection:

    - EventLog: Security

      EventID:

        - 517

        - 1102

Yukarıda görüldüğü üzere Security log kaydını işin içine kattık ve bu log kaydında 517 ve 1102 numaralı EventID yi aramasını istedik.

Bu kısımda bir parantez açmakta yarar var keyword ve selection parametrelerini kural içerisinde istediğiniz kadar kullanabilirsiniz. Ancak bu kullandığınız parametreleri condition içersinde amacınıza uygun olarak yazmanız gerekmektedir.

  • Condition : Kuralın  platformlar üzerinde nasıl işleneceği ile ilgilenen kısımdır oldukça önemli ve karmaşık alandır.  Kuralınızdaki indikatörleri hangi parametre ile tanımladıysanız bunu yazmanız en temel yöntemdir. Detaylı bir şekilde aşağıda inceleyeceğiz.
  • Mantıksal  AND/OR

“keywords1 or keywords2” veya “keywords1 and keywords2 “   Birden fazla tanımladığınız keyword parametresinin ya ikisinin birden gözükmesi gerektiğini yada ikisinden birinin gözükmesi gerektiğini söylemek için kullanılır.

“all of keywords”: Listelenen herhangi bir öğenin varsayılan davranışı yerine listedeki tüm anahtar kelimelerin görünmesi gerektiği anlamına gelir.

“1 of keywords”: Keyword parametresi içindek anahtar kelimelerden bir tanesinin geçmesi yeterlidir.

“1 of them”: Parametreden bağımsız olarak tanımlanmış herhangi bir indikatörden bir tanesinin gözükmesi gerektiği anlamına gelir.

“all of them”:Tanımlanmış indikatörlerin hepsinin gözükmesi gerektiğini belirtir.

“selection1 and (keywords1 or keywords2)”: Selection1 parametresi altındaki indikatörlerin ve keyword1 veya keyword2 parametresinden birisinin içindeki indikatörlerin görülmesi gerektiğini belirtir.

Aşağıdaki resimde kuralın yazım şekli verilmiştir.

sigma_kurallari_ile_tehdit_avi_2

 

Sigma ile Kendi Kuralımızı Oluşturalım

1.Sigma ile Robots.txt Ziyaret Tespiti

İlk kuralımız oldukça basit olsun örneğin Apache üzerinde çalışan bir web hizmetimiz olduğunu var sayalım burada robots.txt sayfasına girildiği zaman alert üretilmesini istiyoruz. Konunun anlaşılması açısından böyle bir örnek verdim, robots.txt botlar tarafından ziyaret edildiği için FalsePositive üretecektir.

sigma_kurallari_ile_tehdit_avi_4

Yukarıda görüldüğü üzere tanımlamamızı yaptık. Burada tekrar belirtmekte yarar var önemli olan Detection alanıdır, bu alan kuralımızın etkinliğini belirleyecektir.     ,

2. Wordpress Sistemlerde xmlrpc Zafiyetinin Tespiti

Bu zafiyetimiz güncel wordpress sistemlerde aktif olan zafiyetlerden biridir. Xmlrpc.php sayfası sadece post isteklerini kabul eden bir sayfadır. Eğer manipülasyon yapılarak post isteği gönderilirse belli parametreler ile zafiyete uğratılabilir. Aşağıda zafiyetin kuralı eklenmiştir.

sigma_kurallari_ile_tehdit_avi_5

Kuralımızı yazdığımıza göre bunu sigmac ile splunk için dönüştürüp kullanabiliriz.

sigma_kurallari_ile_tehdit_avi_6

Sigmac İle Kuralı Dönüştürme

Tools dizini içerisinde yer alan Sigmac uygulaması ile yazdığımız kuralları kullanılacak platforma uygun şekilde dönüştürür. Kullanım için Python3 gereklidir. Uygulamayı kontrol etmek için aşağıdaki komutu çalıştırmanız yeterlidir. Araç repodan indirdiğiniz dosya içeriğinde bulunan tools dizini içerisindedir.

Python3 sigmac –h

sigma_kurallari_ile_tehdit_avi_7

Kuralı dönüştürmenin birden fazla yolu vardır aşağıda bunları detaylı olarak işleyeceğiz.

Tek Kuralı Dönüştürmek

-t parametresi ile çevrilecek hedef platform seçilir.

Sigmac - t splunk  -r rules/web/web_webshell_keyword.yml

Kural Setini Dönüştürmek

Çevirme işlemi sırasında backend tarafındaki hataları göstermemesini istiyor isek -I parametresi kullanabiliriz. –r parametresi ile çevrilecek kuralın yolunu recursive olarak belirtebiliriz.

Sigmac  - I - t splunk  -r rules/web/

Custom Config ile Kural Dönüştürmek

-c parametresi ile config dosyamızın yolunu belirtebiliriz. Burada parantez açmakta yarar var genelde kurallar config dosyası belirtmeden çalışmamakta bu yüzden tools dizini içerisindeki config dosyalarını dönüştürme aşamasında kullanabilirsiniz.

sigmac -t splunk -c config/splunk-windows-all.yml  ../rules/web/web_webshell_keyword.yml

Genel Config Dosyası ile Kural Dönüştürmek

Aşağıdaki komutu açıklayacak olursak,  dönüştürülecek hedef olarak ElasticSearch seçilmiş(-t es-qs) daha sonrasında config  dosyası belirtirken genel kullanım sağlayan sysmon config dosyası seçilmiş ve Windows için process_creation kuralının dönüştürülmesi hedeflenmiştir.

sigmac -t es-qs -c tools/config/generic/sysmon.yml -r rules/windows/process_creation

 

Sigma ile SIEM Ürünlerinde Tehdit Avı adlı makalemizin ilk serisi bu şekilde bir sonraki seride detaylı dönüştürme işlemleri ve SIEM ürünlerine bu kuralların uygulanmasını göreceğiz.


Orçun Karataş 28.07.2019