Splunk SIEM Nedir? Nasıl Kurulur?

Splunk lisanslaması kullanılan GB üzerinden yapılmaktadır. Örneğin ; günlük 2 GB kullanım varsa yıllık 3600 $ gibi.

Tabii ki alınacak lisans ve yapılacak anlaşmaya bağlı olarak bu fiyatlandırma değişecektir.

  • Universal Forwarder
  • Light Forwarder
  • Heavy Forwarder (Diğerlerine göre en temel fark indexor gibi indexleme yapabilmesidir. Ancak diğer forwarder seçeneklerine nazaran CPU kullanımı yüksektir.)

Log : Mevcut altyapıda kullanılan donanımsal ve yazılımsal ürünlerden gelen ve onların üzerindeki aktivitelere ilişkin kayıtlara verilen isimdir.

Log Toplama : Farklı kaynaklardan gelen log kayıtlarının bir arada tutulmasıdır.

EPS (Event Per Second) : Log Toplama şileminin yapıldığı cihaza saniyede gelen log sayısıdır. Birçok üretici lisanslamayı EPS değerine göre gerçekleştirmektedir.

Event : Örnekle anlatmak gerekirse, Bir donanım ya da yazılım üzerinde hatalı login denemesi bir event (olay) olarak adlandırılır.

Incident : Bir cihazda 1 dakika içinde 5 kereden fazla başarısız login isteği ise incident olarak adlandırılır.

Korelasyon : Incident’ların değerlendirildiği kurallardır. Event’ların incident’a dönüştürülmedir de diyebiliriz.

Parsing : SIEM üzerine gelen RAW datanın içeriğinin özelliklerine göre bölünmesidir. Örneğin ; Bir log içerisinden kaynak ip adresini (src ip), hedef ip adresini (dst ip), tarihini (time) değerlerini alarak bir çıktı oluşturmak istiyorsak kullanmamız gereken metod.

Source Address : 192.168.16.16, kullanıcı adı : Ceyhun, destination port : 443 olan sorgulamalar yapabilmek için parsing önemli bir avantaj sağlar. Arama süreçleri de hızlanır.

Indexor : Parse işlemini gerçekleştiren Splunk bileşenidir.

SIEM : Bütün logları toplayıp, bunları korele eden ve mantıklı bir şekilde kurallar oluşturmamızı sağlayan yazılımdır. (Korelasyon yaparken Taxonomy kavramını da es geçeçemek gerekmektedir.)

Örneğin; X Y Z ihtimali 3-5-7 kez, a,b,c zamanda yaşanırsa alarm üret (SOC ekiplerini bilgilendir). Üretilen bu alarm sonrası SOC ekibinin incelemeleri ile tespit edilen zararlı bir yazılım olursa bu zararlıya ilişkin hash bilgilerinin , IOC bilgilerinin varsa C&C sunucularının ip adresleri ve dns kayıtları gibi bilgiler tespit edilerek güvenlik ürünleri üzerinde yapılandırmaların gerçekleştirilmesi için girdi sağlanabilir. (Bu süreç API ya da python gibi programlama dilleri aracılığıyla otomatize edilebililir)

Splunk Tarafından Önerilen Kurulum Topolojisi

Centos üzerinde kurulum gerçekleştirilecektir. Sırasıyla uygulanan adımlar aşağıdaki gibidir.

splunk topolojisi

  • systemctl stop firewalld
  • systemctl disable firewalld
  • rpm -i splunk.xx.xx.rpm
  • cd /opt/splunk/bin
  • ./splunk start
    • Yes
    • Admin
    • Password
    • Password
  • http://ipadresi:8000
  • Splunk Web arayüzünde oturum açıldıktan sonra Server Settings => General Settings => Splunk Web altından Enable SSL kısmından Yes seneği seçilerek Web arayüzüne https bağlantı aktif hale getirilir.

Kurulumun ardından ./splunk status komutu ile splunk servisinin durumu kontrol edilebilir.

Sunucunun yeniden başlatılması sonrası Splun’ın otomatik olarak başlaması için,

./splunk enable boot-start komutu kullanılır.

Yukarıda verilen sıralama doğrultusunda yapılan kuruluma ilişkin ekran görüntüleri aşağıda yer almaktadır.

Not: Indexor kurulumları da aynı metod ile gerçekleştirildiği için bu dökümanda ayrıca anlatılmayacaktır. Yukarıda verilen topolojideki kurulumu gerçekleştirmek için Master sunucu – bu dökümanda kurulumunu yaptığımız sunucu- kurulumunun ardından 2 adet indexor sunucusu kurmanız gerekmektedir.

Search Head (Cluster Master) Konifürasyonu

Master Node üzerine ssh ile bağlanılır ve sunucu üzerinde net-tools kurulu değilse yum install net-tools komutu ile kurulum gerçekleştirilir.

netstat -plate | grep splunk

Web arayüzünde oturum açılır.

Settings

DISTRIBUTED ENVIRONMENT

Indexor Clustering kısmına geçiş yapılır.

Enable indexor clustering

Master Node

Replication Factor : 2 (Indexor sayısı, datanın kaç kopyası olacağı)

Search Factor : 1 (Arama yapacak cihaz sayısı)

Security Key : xxxxx (Tüm cihazlarda aynı olmalı)

Enable Master Node

Restart Now

Search Head Yapılandırmasının CLI Üzerinden Kontrolü

vim /opt/splunk/etc/system/local/server.conf

Indexor1 ve Indexor2 Yapılandırması

Web arayüzünde oturum açılır.

Settings

DISTRIBUTED ENVIRONMENT

Indexor Clustering kısmına geçiş yapılır.

Enable indexor clustering

Master Node

Replication Factor : 2 (Indexor sayısı, datanın kaç kopyası olacağı)

Search Factor : 1 (Arama yapacak cihaz sayısı)

Security Key : xxxxx (Tüm cihazlarda aynı olmalı)

Enable Master Node

Restart Now

Bucket Stage Seçenekleri

Hot : Gelen logların tutulduğu alan. Loglar ilk olarak bu alanda depolanır.

Warm : Hot log alanının kapasitesi dolduğunda, loglar warm disk üzerine aktarılır. Hot ve warm kısmları log aramalarının en hızlı yapıldığı yerlerdir.

Cold : Performansın biraz daha düşük olduğu kısımdır. Daha yavaş diskler üzerinde yapılandırılır. Geçmişe yönelik loglar bu kısımda bulunur.

Frozen : Logların silinmeden önce tutulduğu son kısımdır. Buradaki loglar gereksinimler doğrultusunda silinebilir ya da arşivlenebilir. Bu kısımda bulunan loglar üzerinde arama yapılamaz.

Thawed : Arşivlenen loglar burada tutulur ve bu loglar üzerinde arama yapılabilir.

indexes.conf Yapılandırma Dosyasının Oluşturulması ve Indexor Sunuculara Push Edilmesi

Bu kısımdaki işlemler Master Node üzerinde gerçekleştirilmelidir.

indexes.conf dosyası oluşturulur ve aşağıdaki yapılandırma bilgileri bu dosyaya eklenir.

[[email protected] ~]# vim /opt/splunk/etc/master-apps/_cluster/default/indexes.conf

homePath = $SPLUNK_DB/_introspection/db

coldPath = $SPLUNK_DB/_introspection/colddb

thawedPath = $SPLUNK_DB/_introspection/thaweddb

homePath.maxDatasizeMB=50000

coldPath.maxDatasizeMB=50000

repFactor = 0

homePath.maxDatasizeMB=50000

coldPath.maxDatasizeMB=50000

Yukarıdaki iki değer oldukça önemlidir. Toplam 100GB log olduğunda loglar eski loglardan başlayarak silinmeye başlar. Bu değer büyütülmeli ve mümkünse arşivlenmelidir.

Burada yapılan ayarlar indexor sunucularına da gönderilmelidir.



Diskte aşağıda path’i belirtilen değerden daha az boş alan kalırsa indexleme durdurulur. Bu oldukça önemli bir noktadır. Dikkat edilmesi gerekir.

Settings

    Server Settings

            General Settings

                    Index Settings

                        Pause indexing if free space (in MB) falls below


SPL (Search Processing Language)

index=main

Her eklenen log kaynağını, log kaynağının türüne göre farklı index’lere eklenmesi önerilen yapılandırmadır. Böylece aramalarda daha hızlı sonuç alınması sağlanır.

index’in yanısıra host ve sourcetype parametlerini girerek sorgu yapmak, datanın daha hızlı gelmesini sağlar.

Örneğin; index=main host= 10.100.1.25 sourcetype=syslog

Sol tarafta Interesting Fields kısmında filtrelemeyi daha efektif kullanmayı sağlayacak seçenekler yer almaktadır.

SPL top, table ve sort Komutları

Table Kullanımı

index=main host=10.100.1.25 sourcetype=syslog | table srcip dstip

Top kullanımı

index=main host=10.100.1.25 sourcetype=syslog | table srcip dstip | top srcip dstip

İlk 10 ip adresini listelemek; top limit = 10

Sort Kullanımı

sort count ==> En azdan en çoğa doğru listeler.

Not : SPL
dilinde boşluk and (ve) anlamına gelmektedir.

En fazla trafiği olan 20 sonuçtan log sayısı 1000’in üzerinde olanları listelemek için;

index=main host=10.100.1.25 sourcetype=syslog | table srcip dstip | top limit=20 srcip dstip | where count >1000

<1000 dersek log sayısı 1000’den az olanlar listelenir.

where dstip=”10.100.25.25″ è Destination ip adresi 10.100.25.25 olanları listeler.

Örneğin genel bir arama yaptık ve src port’ların (kaynak port) listelenmesini istemiyoruz. Bunun için;

| fileds -src port

RAW data görüntülenmek istenirse Verbose moda geçilerek Events kısmından RAW data görüntülenebilir.

Bir ip adresine yapılan tüm isteklerin sayısını görüntülemek için;

index=main host=10.100.1.25 sourcetype=syslog dstip=”192.168.10.100″ | stats count

Yapılan isteklerin hangi ip adresinden ve kaç defa yapıldığını listelemek için;

stats count by srcip

Bir ip adresi bir destination ip adresine hangi portlardan , kaç kez erişim sağlamaya çalışmış bilgisini görüntülemek için;

stats count by srcip dstip service

Yukarıdaki duruma ilave olarak servisin SMB olduğu durumları filtreleme;

stats count by srcip dstip service | where service=”SMB”

Yapılan sorguda srcip , dstip ve kullanılan service aynı olan logları sadece bir kez listeleme;

index=main | table srcip dstip service | dedup srcip dstip service

Arama sonucunda srcip ve dstip değerlerini SOURCEIP ve DESTINATIONIP olarak düzenleme;

| rename srcip AS SOURCEIP dstip AS DESTINATIONIP

index=main| eval A=if(dstip=”8.8.8.8″,1,0) | table A dstip è Eğer destination ip adresi 8.8.8.8 ise A sütununa 1 değilse 0 yazar.

|where A=1 è Bu da eklenirse sadece A’nın 1 olduğu sonuçlar listelenir.

IP adreslerinin Ülke Bilgisinin Elde Edilmesi

index=main |iplocation dstip |table dstip vity Country | where Country == Russia è Rusya’ya doğru olan tüm istekleri listeler.

Twitter’a erişim sağlayan ip adreslerinin tespit edilmesi

index=main | where like (hostname, “%twitter%”) table hostname srcip

Burada twitter parametresinin yerine zararlı yazılımlara ya da post exploitation sonrası kullanılan yazılımlara ilişkin aramalar da yapılabilir.

Loglarda destination ip adresi 1.0.0.0/8 aralığına giden log varsa

index=main |eval zararli=if(cidrmatch(“1.0.0.0/8”,dstip), “zararlidir”, “zararli_degildir”) | table zararli dstip |where (“zararli”) |table srcip dstip

BruteForce Attack Tespiti

index=main action=login status=failed |stats count by user | where count >1 AND (user=”admin”)

Manuel CSV Eklenmesi ve CSV Dosyası Kullanılarak Korelasyon Yazımı

Eklenecek CSV dosyası /opt/splunk/var/run/splunk/csv klasörü içine kopyalanır.

Ardından inputcsv importedilecekdosya.csv | stats count by destination_ip