Sigma ile Tehdit Avcılığı
Giriş
Tehdit avcılığının ilk adımı gerekli log kaynaklarına sahip olabilmektir. İhtiyaç duyulan kaynaklar ise merkezi bir sistem üzerinde toplanarak tehdit avcılarının kullanımına sunulmaktadır. Bu konuda her kurum kendi bütçesine ve ölçeğine göre farklı çözümlere başvurmaktadır. Bu durum da farklı standartları ortaya çıkarmaktadır. Ayrıca kullanılan çözüme özel içerik üretme ihtiyacını doğurmaktadır. Bu nedenler de hem içerik üreticilerinin operasyonel maliyetini arttırmakta hem de siber güvenlik merkezleri arasındaki bilgi paylaşımını zorlaştırmaktadır.
Bu yazımda, bahsetmiş olduğum sorunlara çare olarak ortaya çıkan Sigma yapısından bahsetmeye çalışacağım. Şimdiden keyifli okumalar diliyorum.
Sigma Nedir ?
Florian Roth tarafından geliştirilen Sigma, SIEM (Security Information and Event Management) çözümleri için ortak bir sorgu formatıdır. Log kaynağı fark etmeksizin genel bir imza oluşturarak farklı sistemler üzerinde sorgular üretmeyi ve bu sayede ürün bağımsız bir dil oluşturmayı hedeflemektedir. Şu an için tam olarak ürün bağımsız olmasa da açık format oluşu zamanla çok farklı ürünlere de desteği mümkün kılmaktadır. Bu tarih itibariyle desteklediği ürün yelpazesine baktığımızda, alanında lider birçok ürün ile işbirliği içerisinde olduğunu bizlere göstermektedir.
Tüm detaylar, araçlar ve örnek kurallar bir Github projesinde tutulmaktadır. İncelemek yada desteklemek için ziyaret edebilirsiniz.
Sigma Kuralı Nasıl Yazılır ?
Sigma kuralları “yaml” formatında oluşturulmaktadır. Format hakkında genel bilgi ve ufak bir eğitimi aşağıda paylaştığım sayfalarda bulabilirsiniz.
Sigma kuralı oluşturabilmek ve mevcut kuralları görüntüleyebilmek için “Yaml” editörüne ihtiyacımız bulunuyor. Bunun için birçok farklı araç bulunmaktadır. Kullanım kolaylığı ve çoklu platform desteği açısından Sublime Text ve Visual Studio Code editörlerini tavsiye ediyorum.
Kural yazmaya başlamadan önce “yaml” formatı sebebiyle Sigma kurallarında girintilerin (indentation) önemli olduğunu unutmamalıyız. Girintilere dikkat etmediğimizde Sigma kurallarımızı başarılı olarak derleyemeyiz. Ayrıca, bir Sigma kuralında başlık, tespit ve koşul ifadesi bulunmak zorundadır. Tespit içerisinde yazdığımız ifadeleri bir koşula dayandırarak kuralı oluşturmuş oluyoruz. Ayrıca opsiyonel olarak verilen alanları ne kadar doldurursak o kadar anlaşılması kolay ve açıklayıcı bir kural yazmış olacağımızı unutmamız gerekiyor.
Projenin içerisinde birçok farklı Sigma kuralı bulunmaktadır. Yeni bir kural yazmadan önce projeleri incelemek çok faydalı olacaktır.
Örnek Kural Oluşturma
Örneğimizde base64 ile sıkıştırılmış powershell komutunu analiz edeceğiz.
Powershell komutunu incelediğimizde “certutil” kullanılarak base64 ile sıkıştırılmış dosyaların çözüldüğünü görüyoruz.
Bu işlemi tespit edebilmek için aşağıdaki ifadeleri kullanarak yeni bir Sigma kuralı oluşturacağız.
Process: certutil.exe
Command Line: -decode
Parent Process: powershell.exe
Process dizinlerinden bağımsız olması için “*\” ifadesini kullanıyoruz. Ayrıca sıkıştırılmış dosyaları çözebilmek için kullanılan “-decode” ifadesini komut satırı alanında arıyoruz. Tüm bu ifadelerin aynı anda oluşması durumunda kuralın tespit etmesini sağlamak için koşul ifadesine sadece “selection” yazıp kuralımızı tamamlıyoruz.
Sigma Kurallarının Testi
Yazmış olduğumuz kuralları test edebilmek için “sigmac” aracını kullanacağız. Araç Sigma projesi içerisinde araçlar bölümünde yer almaktadır.
Python ile geliştirilen bu aracı kullanabilmek için öncesinde gerekli olan kütüphaneleri kuruyoruz;
pip3 install -r requirements.txt
Sonrasında aracın kullanım yönergelerini görelim;
python sigmac -h
Temel kullanım için gerekli olan iki parametre bulunmaktadır.:
-t hedef; yazmış olduğumuz kuralı hangi ürünün diline dönüştürmek istiyoruz
-c konfigürasyon dosyası; dönüştürmek istediğimiz ürün dilindeki alan eşleştirmesi nasıl olmalı (field mapping)
Aşağıdaki örnekte Splunk için yazılmış basit bir konfigürasyon dosyası bulunmaktadır. Burada ifade edilmek istenen hangi log kaynağının hangi alanları kullandığı ve log toplama esnasında nasıl ayrıştırıldığıdır.
Konfigürasyon dosyamızı ve hedefimizi seçtikten sonra daha önce yazmış olduğumuz kuralı test edebiliriz. Kuralımızı Splunk sorgusuna çeviriyoruz;
python sigmac -t splunk -c ../Tools/sigma-master/tools/config/generic/sysmon.yml rule.yml
(EventID=”1" Image=”*\\certutil.exe” CommandLine=”*-decode*” ParentImage=”*\\powershell.exe”)
Bu yazımda Sigma kurallarını özetlemeye çalıştım. Umarım faydalı olmuştur. Zaman ayırıp okuduğunuz için teşekkür ediyorum.