Sysinternals araçlarının fanatiğiyim. Hepsi güzel, ama özellikle Process Monitor, Process Explorer, Autoruns gibi araçların hayranıyım. Bir süredir Sysmon'un varlığından ve işlevlerinden haberdardım ama çok yakınlaşma fırsatım olmamıştı. Aslında yakınlaşınca anladım ki Sysmon hakkında hiçbir şey bilmiyormuşum. Channel9'daki Defrag Tools programındaki konuşmalar falan konuya sadece giriş seviyesinde değinmiş.
İşin özünde Sysmon da Process Monitor benzeri bir araç. Ama bir grafik arayüzü yok. Grafik arayüz olmayınca da onun yerine geçecek filtreleme işlerini başka bir şekilde yapmamız gerekiyor. Bu şekil de burada XML oluyor.
Şu anda web sayfalarında 13.01 sürümü var. Yani ilk çıktığından bu yana çok yol almış. Yolun çoğu XML yapısı ile ilgili alınmış. Sanıyorum ilk çıktığında bugüne kıyasla çok ilkel bir XML yapısı varmış. Zamanla çok değişmiş. Şu anda XML schemaversion 4.5. Bu neleri değiştirmiş, varsayılan olarak VEYA olan filtre 4.22 ile VE olmuş, yeni XML elemanları eklenmiş vs.
Çalıştırıp yakalamaya başlaması için
sysmon -i
komutunu vermek gerekiyor. Bu şekilde varsayılan ayarlarla çalışmaya başlıyor. Yakaladığı olayları Event Viewer'da Application and Service Logs altında Microsoft-Windows-Sysmon/Operational'a yazıyor. -i anahtarı ile çalıştırıldığı anda kendini %SystemRoot% klasörünün altına kopyalayıp bir servis olarak çalışmaya başlıyor. Bu şekilde bilgisayarı tekrar başlattığımızda da çalışmaya devam ediyor. Faaliyetlerini durdurmak için kaldırmak gerekiyor ki bu da
sysmon -u
ile oluyor. Bir kez kurulduktan sonra varsayılan ayarlarla olayları yakalamaya başlıyor demiştik. Yapılandırmayı değiştirmek için bir XML dosyası oluşturarak -c anahtarı ile bu dosyanın yerini göstermek gerekiyor.
sysmon -c ornek.xml
Buraya kadarki konular zaten her yerde yazılan kısım. Bir örnek üzerinden gidelim. Bir sunucumuz var; bu sunucunun üzerinde IIS çalışıyor. C:\inetpub\wwroot\aspnet_client klasörü altında oluşturulan .aspx dosyalarının hangi süreç tarafından oluşturulduğunu bilmek ve bundan haberdar olmak istiyoruz. Aynı zamanda %ProgramData% ve %SystemRoot%\Temp klasörlerinin altında oluşturulabilecek *.7z, *.zip ve *.rar dosyalarına ait olayları takip etmek istioruz. Aslında bunun mantığını kurala dökmek kolay. Bir pseudo code ile:
(Path = C:\inetpub\wwwroot\aspnet_client VE Extension=*.aspx) VEYA ((PATH=%PROGRAMDATA% VEYA PATH=%SystemRoot%\temp) VE (Extension=.7z VEYA Extension=.zip VEYA Extension=.rar))
demek kolay. Ama bunu XML'e dökmek nispeten zor. Tüm süreci nasıl anlatırım bilemiyorum, ama nihayetinde şunları söyleyebilirim. Birden fazla mantık grupları için RuleGroup'lar oluşturmak gerek. Aynı olaya ait ikisi de include veya ikisi de exlude olan RuleGroup'lar geçerli değil. Ayrıca schemaversion 4.22'den sonra EventFiltering elemanı içindeki öğelerin varsayılan mantık operatörü VE. Bunu değiştirmek için groupRelation attribute'larını kullanıyoruz. İkisi de include olan RuleGroup'lardan kaçınmak için birini exclude yapmam gerekti. Bunu da path'ten yana kullandım. Hariç tutulabilecek path'leri toplayıp bir exlude RuleGroup'u oluşturdum. Sonuçta elimde şöyle bir XML dosyası oldu:
Arada başka öğeler de var. Örneğin cmd.exe, powershell.exe ve iexplore.exe süreçlerinin başlaması da takip ediliyor. Süreç başlaması işlemlerinin takibinde bazı hariç tutmalar için "..." ile olası bir durumu da ekledim. Ayrıca github.com ve githubusercontent.com'a girişleri de takip ettim. Bunun dışındaki süreç başlamalarını ve sonlanmalarını hariç tuttum.Şablon olarak şu kaynaktaki xml dosyası üzerinden gittim.
Yardım ve dökümanlarda gözükmeyen, webde de çok rastlanmayan bir komut satırı parametresi de -t ki bu hata ayıklamayı kolaylaştırıyor. Örneğin kalıcı olarak devreye alma öncesinde bir xml dosyasını denemek istiyorsak bunu aşağıdaki gibi deneme modunda başlatabilir, sonra da konsoldan gelen mesajlarla gidişatı izleyebiliriz:
sysmon -t -i testkonfig.xml
2023-12-27 Ek: Şu sayfada bir de sysmon hizmetinin yetkilerinin kısıtlanarak kullanıcılar tarafından durdurulamaması için yetkilerin yapılması anlatılmış:
Gizle:
sc sdset Sysmon D:(D;;DCLCWPDTSD;;;IU)(D;;DCLCWPDTSD;;;SU)(D;;DCLCWPDTSD;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
Eski haline döndür:
sc sdset Sysmon D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
Güzel.
---
[1] https://posts.specterops.io/putting-sysmon-v9-0-and-or-grouping-logic-to-the-test-c3ec27263df8
[2] https://www.hexacorn.com/blog/2018/06/29/sysmon-doing-lines-part-3/
[3] https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon
[4] https://techcommunity.microsoft.com/t5/sysinternals-blog/sysmon-the-rules-about-rules/ba-p/733649
Hiç yorum yok:
Yorum Gönder