loader image

Data Analiz Canavarı Splunk #2 — Log Verileri ve SPL

Serinin 2. makalesi olarak bir önceki makalemde yüklemiş olduğum LOG verilerinden olan web application uygulamasının LOG verilerine bakıp uygulamalı olarak temel bir şekilde SPL’i tanıyacağız. Bir önceki makaleme buradan ulaşabilirsiniz.

Makaleye başlarken kısaca Log kavramından bahsetmek istiyorum.

Log ;

Sistemimizde gerçekleşen olayların hareketlerini kaydeden dosyalara log kayıtları denir. Bu kayıtlar, sistemdeki tüm hareketleri detaylı bir şekilde kayıt altına alır, bu da çeşitli avantajlar sunar. Log dosyalarının sunduğu avantajlar arasında, analiz yapılabilmesi; sistemde meydana gelen sorunların nedenlerinin incelenerek anlaşılabilmesi ve bu sorunlara çözümler üretilebilmesi yer alır.

Siber saldırıların tespiti ve aydınlatılmasında log kayıtları büyük önem taşır. Siber güvenlik uzmanları, bu kayıtları detaylı bir şekilde inceler ve saldırıların kaynağını ortaya çıkarır. Türkiye’de, 5651 sayılı kanun kapsamında, her kurumun bu erişim kayıtlarını tutması zorunludur. Bu yükümlülük, siber güvenliğin sağlanması ve olası ihlallerin hızla tespit edilmesi açısından hayati öneme sahiptir.

LOG Türleri ;

Transaction LOG (SQL Server): Temel olarak veri tabanındaki değişikliklerin kaydını tutar. Örneğin veri tabanına bir kullanıcı eklenir ya da silinirse transaction log’a kaydedilir.

Event Log: Windows sistemlerde, log kayıtları sistem üzerinde gerçekleştirilen işlemleri detaylı bir şekilde kayıt altında tutar. Bu kayıtlar, yaşanan siber güvenlik olaylarında hangi kullanıcının ne zaman sisteme giriş yaptığı, kullanıcı bilgileri gibi önemli bilgileri içerir. Bu sayede, olayların detaylı bir şekilde aydınlatılması ve sorunların kökenine inilmesi mümkün hale gelir. Log kayıtlarının tutulması, siber güvenlik uzmanları için vazgeçilmez bir kaynak olup, olası güvenlik ihlallerinin hızla tespit edilmesi ve önlenmesi konusunda kritik bir rol oynar.

Syslog: Sistem günlüğü protokolü anlamına gelir. Routerlar, firewallar, yazıcılar gibi çeşitli cihazlar syslog standardını kullanır ve günlük logları toplam. Linux ve Unix tabanlı sistemlerde kullanılır. Syslog loglama standardı facility ve priority iki bölümden oluşur.

Facility, hangi tip logların tutulacağını belirtir. (Örneğin ftp, mail,user, daemon)

Priority, logların önem derecesini belirtir. (örneğin: emergency, alert, critical,error.)

Karşımıza çıkabilecek terimleri tanımızda fayda var 🙂

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

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

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

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

Parsing: SIEM üzerine gelen ham 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.

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. (Aşağıda detaylı olarak yazacağım)

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

LOG

1. Adım

Tarayıcımızdan 127.0.0.1:8000 diyerek Splunk sayfasına gidiyoruz ve kullanıcı adı-parolamızı girerek başlıyoruz.

2. Adım

Arayüzümüzde bulunan Search & Reporting diyerek Log kayıtlarımızın bulunduğu arayüzü geçiyoruz.

Data Summary (Kırmızıyla belirttim) tıklayarak daha daha önce yüklemiş olduğum Log verilerine ulaşıyorum.

Karşıma 3 tane Log verisi geldi. web_server kayıtlarından başlayarak yüklemiş olduğum Log verilerinden örnekleri inceleyelim;

Web_server

Web sunucuya uzaktan bağlantı yapan bir kullanıcının logunu görüyoruz

Ssh ile 4411 portu kullanarak 223.213.255.255 IP’li user ubuntu kullanıcısının Failed Password logu görüyorum.

Database

Web application uygulamasına giriş yaparken kullanılan kullanıcı adı-şifresi, applicatian da bulunan resimler, ürünler, fiyatlar, satın alınan ürünün id’si, ne zaman satın alındı, stok bilgisi vb. bilgiler db’de tutulur.

6428 ID’li kullanıcı, muhtemelen alışverişini tamamlamış ve database’den kredi kartının bilgisinin sorgulanması yapılıyor diyebiliriz.

¨SELECK * FROM creditcard: Kredi kart tablosundaki bütün data’ları çekmesidir.

Yeşil olarak belirttiğim en sağdaki sayı, Duration Time / Yenileme-Bekleme Süresi dir. Milisaniye cinsinden ifade edilir ve SQL sorgusunun tepki süresidir.

SPL’e geçmeden önce SIEM’den bahsetmek istiyorum.

SIEM (Security Information and Event Management)

SIEM, ‘’Güvenlik Bilgi Yönetimi’’ olan SIM ve ‘’Güvenlik Olay Yönetimi’’ olan SEM’in birleştirilmiş halidir. Güvenlik Bilgileri ve Olay Yönetimi olarak çevrilir.

Temel olarak, bir işletmenin altyapısındaki güvenlikle ilgili tüm olayları izlemek ve analiz etmek için tüm kullanıcılar, sunucular, ağ cihazları ve güvenlik duvarları tarafından oluşturulan günlükleri ve olay verilerini (log) toplayan güvenlik yazılımıdır.

SPL nedir ?

Açılımı (Search Processing Language) olan SPL, herhangi bir veriyi aramamıza, analiz etmemize ve görselleştirmemize olanak sunan 140'ın üzerinde komut sunan bir dildir ve öğrenilmesi kolaydır.

Search & Reporting kısmına giderek SPL yazacağımız arayüzü ulaşıyoruz.

SPL Arayüzünü Tanıyalım

Kırmızıyla belittiğim alan SPL yazım alanı

Arayüzünün sol tarafında bulunan Fields bölümü vardır. Fields bölümü Log’ların ne anlama geldiğini gruplayan bir yapı olarak düşünülenebilir.

Arayüzünün sol tarafında bulunan Fields bölümü vardır. Fields bölümü Log’ların ne anlama geldiğini gruplayan bir yapı olarak düşünlenebilir.

Bir kaç örnekle gösterelim..

#clientip

#clientip ‘e tıkladığımda web application uygulamama bağlanan Top 10 ip’leri görebiliyorum.

#useragent

#useragent : web application uygulamasına bağlanırken kullanıcıların en çok hangi browser ile bağlandıklarını burada görebiliyoruz.

a file

Web application uygulamasında sayfaları ifade eder.

product.screen: Ürünleri görüntüleme sayfası

cart.do: Sepete ekleme sayfası

category.screen: Kategorileri görüntüleme sayfası

Kısacası web application uygulamasındaki sayfaları görebiliyoruz.

#status

#status: Karşımıza http status code karşımıza çıkıyor. Http Status Code, istemci ile sunucu arasındaki iletişim sürecinde neler olduğunu açıklayan 3 haneli sayılardır. Bunlar;

100–199 : Bilgi mesajları

200–299 : Başarılı bağlantı

300–399 : Yönlendirme mesajları

400–499 : İstemci kaynaklı hata

500–599: Sunucu kaynaklı hata

SPL Yazımı

Temel olarak Fields üzerinden nasıl SPL yazıldığını uygulayarak göstereceğim.

Yüklediğiniz log verileri, ham log verileridir. Anlamlı bilgilere ulaşmak ve veriler arasındaki ilişkileri ortaya çıkarmak için bu verilerin korelasyonunu sağlamamız gerekmektedir.

Peki, bu süreç nasıl işler? Bir senaryo üzerinden açıklamak gerekirse:

Web application uygulamasından kullanıcıların ürün satın aldığı ve kaç tanesinin başarılı bir şekilde sonuçlandığına bakalım.

1. Adım

İlk olarak yukarıda bahsettiğim şekilde SPL arayüzüne giriyoruz ve SPL yazma alanına index=main yazarak aratıyoruz.

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ını sağlanır.

2. Adım

Fields bölümünde bulunan a action’ a tıklayarak satın alma anlamına gelen purchase tıklayarak SPL’imize ekliyoruz.

19,235 tane LOG kayıdı olduğunu görüyoruz.

3. Adım

Başarılı olan satın alma işlemlerine bakmak için yine Fields bölümünde bulunan success.do seçeneğine tıklayıp SPL’imize eklemiş oluyoruz.

Burada dikkat çekmek istediğim nokta satın alma işleminin sağlık olması için status’ de eklememiz gerekli çünkü http status code 200 başarılı bağlantı anlamına gelmekte.

Http Status Code 200–299 : Succesful Responses

Log sayımız 16.139

Karşımıza istediğimiz Log’lar gelmiş oldu.

 

Peki sepete ekleme sırasında kullanıcıların aldığı hataları görmek istersem…

action=addtocart status!=200 yazarak istediğimiz Log’lar listelenmiş oluyor.

action=addtocart status!=200 yazarak istediğimiz Log’lar listelenmiş oluyor.

status!=200 (! işareti) başarılı olmayanları gösterir.

 

Get & Post metodları

GET :Sunucudan data çekme

POST : Sunucuya data gönderme

 

Splunk’da bir çok komut vardır. Temel olarak bilmemiz gereken komutlara değinmek istedim .

Fields Komutu

Fields komutunun amacı log araştırması yaparken işimize yarayan fields (grupları) yönetmemizi sağlar.

SPL yazdığımız alana ‘ | ’ pipe işaretini yaparak bir alt satıra geçmesini sağlıyoruz. Daha sonra yanına fields ve çalışmak istediğimiz fields gruplarını aralarına virgül koyarak yazıyoruz.

Fields alanında bulunan gruplarımızdan çalışmak istediklerimizi seçtik. Log incelemsi yaparken oldukça faydalı bir komuttur.

Table Komutu

Log verilerini tablo haline getirmemize yarayan komuttur. Bunun için ’ | table ‘ komutu ile istediğimiz fields gruplarını seçerek tablo şekline dönüştürebiliriz.

 

Rename Komutu

Başlıkları istediğimiz adları vermemizi sağlar.

 rename clientip as IP, status as Durum, productId as ÜrünId, file as Dosya

komutunu yazarak isteiğimiz adlar verebiliriz.

 

Sort Komutu

Sort sıralama komutudur. Büyükten küçüğe yada tam tersi olarak sırama yapmamızı sağlar.

IP’leri sıralayalım;

Büyükten küçüğe sıralama yapmak için; | sort -clientip

 

Küçükten büyüğe doğru sıralama yapmak için; | sort clientip

 

Dedup Komutu

Çalışmış olduğumuz tabloda, yinelenen değerleri/verileri dedup (deletedublication) komutuyla tekilleştirmemize yardımcı olur.

dedup clientip komutuyla tekilleştirebiliriz

 

Top ve Rare Komutu

Birbirlerinin zıtları olarak söyleyebiliriz;

Top, alanlardaki en yaygın değerleri kolayca bulmanızı sağlar.

Rare, alanlardaki en az ortak değerleri kolayca bulmanızı sağlayan bir Splunk komutudur.

Top Komutu

top clientip komutu ile

Başarılı bir şekilde web application da ürünleri en çok satın alan Top 10 IP’yi görüyoruz.

Rare Komutu

rare clientip

Başarılı bir şekilde web application da ürünleri en az satın alan 10 IP’yi görüyoruz.

Stats Komutu

Bir aramanın sonuçlarına veya bir dizinden alınan olaylara ilişkin özet istatistikleri hesaplamak için kullanılır.

Başarılı satın alınan ürünleri ya da sepete eklenen ürünlerin istatistiklerine bakmak istiyoruz:

				
					stats count by file
				
			

Stats komutuyla birlikte bir çok komut kullanılmaktadır bunlardan birisi de count: saydırma komutu dur.

Stats Sum Komutu

Belirli bir alandaki tüm veri değerlerinin toplamını sağlar.

Web application kullanıcılarının kaç GB trafik oluşturduğunu görmek istiyoruz.

				
					stats sum(bytes)
				
			

Toplam trafiğimiz karşımıza çıkıyor. Peki toplam trafiği gruplara bölmek istersek.

File Komutu

				
					stats sum(bytes) by file
				
			

Sayfaların almış olduğunu trafiği gruplamış olduk.

List Komutu

Verileri listeli haline getir.

Kullanıcılan kullandığı tarayıcılarının listesini görmek istediğimizi varsayalım

				
					stats list(useragent)
				
			

Peki sayı olarak kaç farklı useragent ‘a bakmak istersek;

Dc Komutu

stats dc(useragent)

16 farklı useragent olduğunu görebiliyoruz.

Splunk üzerinden SPL yazmak uzmanlık gerektirir. Sizlere temel olarak bir olay üzerinden nasıl SPL yazılabileceğini uygulayarak anlatmak istedim.

Unutmadan..

Şapkan beyazsa kırmızıdan daha önde olmalısın…