IIS Log Yapılandırılması ve Microsoft Log Parser Studio Kullanımı (Configuring IIS Log and Using Microsoft Log Parser Studio)
Merhaba arkadaşlar. Yazdığımız kodları Windows sunucuları üzerinden yayınladığımız IIS’in log yapılandırmasından ve birçok log formatını okuyan, SQL ile logların üzerinde sorgu yapılmasını sağlayan Microsoft ürünü olan Log Parser Studio’dan (LPS) bahsetmek istiyorum.
İlk olarak inceleme yapabilmemiz için elimizde log olması gerekir. Bunun için IIS’de ilgili Sites seçilerek Logging’e çift tıklayarak açılır.
Log File alanında log formatı, nereye kaydedileceği ve yeni oluşturulacak log dosyasının yöntemi belirtilir.
Log formatı olarak 3 format seçilebilmektedir. W3C formatında istediğimiz özelliği açma kapama sanşımızda mevcut olduğu gibi özel isimli formatla isteğimize göre format belirleyebiliriz. Log Parser ile inceleme yapacağımız için W3C formatını özelleştirmenizi önerrim. Özelleştirebilmek için Select Fields butonuna basarak aşağıdaki kolonları ekleyip kaldırabiliriz. Bu alanların ne olduğu ve varsayılan bilgilerini aşağıdaki tabloda belirttim.
+------------------------+-------+-------+-------+-----------------------------------------------------------------------------------------+
| Kolon | IIS | NCSA | W3C | Kullanımı |
+------------------------+-------+-------+-------+-----------------------------------------------------------------------------------------+
| Tarih | EVET | EVET | EVET | Olayla ilişkilendirme |
| Saat | EVET | EVET | EVET | Olayla ilişkilendirme, saat tespiti |
| İstemci IP adresi | EVET | EVET | EVET | User veya Proxy server tespiti |
| Kullanıcı Adı | EVET | EVET | EVET | Tehlikeli kullanıcıların tespiti |
| Servis Adı | EVET | HAYIR | HAYIR | Log dosyalarının taşınırsa erişim yapılan yeri kanıtlamak |
| Sunucu Adı | EVET | HAYIR | HAYIR | Log dosyalarının taşınırsa erişim yapılan yeri kanıtlamak |
| Sunucu IP adresi | EVET | HAYIR | EVET | Log dosyalarının taşınırsa erişim yapılan IP adresini kanıtlamak |
| Sunucu Bağlantı Portu | HAYIR | HAYIR | EVET | Diğer log dosyası türleri ile ilişkilendirme yapmak için port numarası |
| Yöntem | EVET | EVET | EVET | Script ve Executable dosyaların kötüye kullanımı |
| URI Kökü | HAYIR | HAYIR | EVET | Saldırı vektörünü tespit edebilmek için |
| URI Sorgusu | HAYIR | HAYIR | EVET | Malicious data injection tespiti |
| Protokol Durumu | EVET | EVET | EVET | Clienta gönderilen sonuç kodudur. CGI Scan ve SQL Injection tespiti |
| Protokol Alt Durumu | HAYIR | HAYIR | EVET | Substatus kodları |
| Win32 Durumu | EVET | HAYIR | HAYIR | Script kötüye kullanımı |
| Gönderilen Bayt Sayısı | EVET | EVET | HAYIR | Bir scriptten gönderilen olağandışı trafiğin tespiti |
| Alınan Bayt Sayısı | EVET | HAYIR | HAYIR | Bir scriptten gönderilen olağandışı trafiğin tespiti |
| Alındığı Saat | EVET | HAYIR | HAYIR | Bir isteğin işlenmesi için harcanan süre. Olağandışı aktivite tespiti |
| Protokol Sürümü | HAYIR | EVET | HAYIR | Eski script ve browserların tespiti |
| Host Bilgisayar | HAYIR | HAYIR | HAYIR | Kullanıcının IP adresiyle mi hostname ile mi eriştiğini tespit etmek için |
| User-Agent | HAYIR | HAYIR | EVET | Client tarafından gönderilen User-Agent başlığının içeriği. Unique user tespiti |
| Cookie | HAYIR | HAYIR | HAYIR | Client tarafından gönderilen HTTP Cookie başlığı içeriği. Unique user tespiti |
| Referer | HAYIR | HAYIR | HAYIR | Saldırganın nerden geldiğinin tespiti,(arama motorlarından veya diğer dış kaynaklardan) |
+------------------------+-------+-------+-------+-----------------------------------------------------------------------------------------+
İstediğiniz alan yoksa ve eklemek isterseniz yine Select Fields butonuna basarak istediğiniz alanı ekleyebilirsiniz.
Not: Varsayılan olarak gelen log tipi W3C’de Gönderilen Bayt Sayısı ve Alınan Bayt Sayısı loglanmaz. Bu iki alanı ilerde göreceğimiz Log Parser Studioda kullanacağımız için eklemenizi önerrim. Loglama altyapısı hazır olduğuna göre artık Log Parser Studiodan bahsedelim;
Log Parser Studio’yu kullanabilmek için Log Parser 2.2'ye ihtiyacımız var bunu https://www.microsoft.com/en-us/download/details.aspx?id=24659 adresinden indirebilirsiniz varsayılan ayarları ile kurabilirsiniz. Log Parser Studio’yu ise https://techcommunity.microsoft.com/t5/exchange-team-blog/introducing-log-parser-studio/ba-p/601131 adresinden indirebilirsiniz. Bu uygulama Tıkla-Çalıştır uygulaması olduğu için kurulum gerektirmez. LogParser uygulaması olmadan LPS uygulaması çalışmaz.
LPS uygulaması ilk açıldğında yeni sorgu oluştur butonuna tıklanır ve yukarıda bahsettiğimi IIS’in kaydettiği log dosyasının yolu gösterilir. Not: Log Type olarak W3CLOG seçilir. Log tipi seçilmeden sorguyu çalıştıramazsınız.
Client-IP’si ‘84.*.*.102’ olan ilk 10 isteği gördük. Artık daha anlamlı sorgular yazalım :)
SELECT COUNT(*) As Hits,--İstek Adeti
AVG(time-taken) As AvgTimeTaken,--İsteğin IIS'deki İşleme Süresi (IIS'deki Süre)
MAX(time-taken) As MaxTimeTaken,--İsteğin Max süresi MiliSaniye cinsinden
AVG(cs-bytes) As AvgRcvBytes,--Client'dan Servar'a yapılan isteğin ortalama boyutu
MAX(cs-bytes) As MaxRcvBytes,--Client'dan Servar'a yapılan isteğin Max boyutu
AVG(sc-bytes) As AvgSentBytes,--Servar'dan Client'a yapılan isteğin ortalama boyutu
MAX(sc-bytes) As MaxSentBytes,--Servar'dan Client'a yapılan isteğin Max boyutu
TO_LOWERCASE(cs-uri-stem) As Url,--Gelen Lint
sc-status As Status,--Durum Kodu
sc-substatus As Substatus--Alt Hata Kodu
FROM '[LOGFILEPATH]'
GROUP BY Url,Status,Substatus
ORDER BY Hits desc
SELECT Client-Ip as IP, cs(User-Agent) as UserAgent, COUNT(*) As Hits
FROM '[LOGFILEPATH]'
where cs-uri-stem = '/olcmek-istediginiz-istek-sayfasi'
GROUP BY IP, UserAgent
ORDER By Hits desc
Not:İki tarih aralığında arama yapmak için aşağıdaki where kriterinde belirtilen kod kullanılabilir.
SELECT * From Application where TimeGenerated BETWEEN TIMESTAMP('2022-12-25 00:00', 'yyyy-MM-dd hh:mm') AND TIMESTAMP('2022-12-25 23:59', 'yyyy-MM-dd hh:mm')
SELECT STRCAT( cs-uri-stem,
REPLACE_IF_NOT_NULL(cs-uri-query, STRCAT('?',cs-uri-query))
) AS Request,
STRCAT( TO_STRING(sc-status),
STRCAT( '.',
COALESCE(TO_STRING(sc-substatus), '?' )
)
) AS Status,
COUNT(*) AS Total
FROM '[LOGFILEPATH]'
WHERE (sc-status >= 400)
GROUP BY Request, Status
ORDER BY Total DESCs
SELECT QUANTIZE(TO_TIMESTAMP(date, time), 3600) AS Hour,
COUNT(*) AS Total,
SUM(sc-bytes) AS TotBytesSent
FROM '[LOGFILEPATH]'
GROUP BY Hour
ORDER BY ToTal desc
Umarım faydalı olmuştur. Log Parser Studio ile Event Log incelemek için sonraki yazımda görüşmek üzere.