Konuyu Okuyanlar: 1 Ziyaretçi

PowerShell Logging: Script Block, Module ve Transcription Açmak

PowerShell Logging: Script Block, Module ve Transcription Açmak
[Resim: attachment.php?aid=287]

Selam,

PowerShell modern Windows'ta yönetim dili; saldırganlar da bunu biliyor. Script Block Logging kapalıysa SIEM kör kalır. Bu yazıda Script Block, Module Logging ve Transcription'ı labda nasıl açacağınızı ve nelere dikkat edeceğinizi anlatıyorum.

Üç katman
  • Module Logging: belirli modüllerin pipeline olayları
  • Script Block Logging: derlenen script block metni (Event ID 4104)
  • Transcription: oturumun metin kaydı (dosyaya)

GPO / yerel politika
Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell altında ilgili ayarları Enabled yapın. Labda kayıt defteri ile:
Kod:
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging" /v EnableModuleLogging /t REG_DWORD /d 1 /f reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging\ModuleNames" /v * /t REG_SZ /d * /f
Transcription:
Kod:
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription" /v EnableTranscripting /t REG_DWORD /d 1 /f reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription" /v OutputDirectory /t REG_SZ /d C:\PSTranscripts /f
OutputDirectory ACL'ini sıkı tutun; transcript içinde parola olabilir.

[Resim: attachment.php?aid=288]

Logları okumak
Event Viewer > Applications and Services Logs > Microsoft > Windows > PowerShell > Operational
Kod:
Get-WinEvent -LogName 'Microsoft-Windows-PowerShell/Operational' | Where-Object Id -eq 4104 | Select-Object -First 5 TimeCreated, Message
4104 mesajında ScriptBlock metni vardır. EncodedCommand kullanan saldırılarda burada decode edilmiş içerik görünebilir (motor derlediği için).

Gürültü ve gizlilik
  • Yoğun yönetim scriptleri log hacmini şişirir; WEF ile merkezi toplayın
  • Transcription'da secret geçmesin diye SecureString ve gizli kasa kullanın
  • Constrained Language Mode + AppLocker/WDAC ile birlikte düşünün

Saldırgan kaçınması
Logging'i kapatan / log silen davranışları ayrıca izleyin (4104'ün aniden kesilmesi, Event Log servisi oynamaları). Protected Event Logging (dokümante kurulum) ileri adım olabilir.

Kaynaklar
  • Microsoft Docs: about_Logging_Windows_PowerShell
  • FireEye / Mandiant PowerShell logging blogları (tarihsel referans)
  • Sigma rules: powershell script block

Siz Transcription'ı tüm workstation'larda mı açıyorsunuz, yoksa yalnızca sunucu/jump host'ta mı?

4104 boyutları ve WEF
Script Block logları büyük olabilir; WEF'te bandwith planlayın. Gerekirse yalnızca belirli sunucu gruplarında tam logging, workstation'da örnekleme. Yine de jump host / bastion'da tam açın; saldırgan oradan geçer.

PowerShell 7 vs 5.1
Logging ayarları sürüm ve host'a göre değişebilir. pwsh (Core) ve Windows PowerShell için politikaları ayrı doğrulayın. Test: küçük bir script çalıştırıp 4104 düşüyor mu bakın.


Doğrulama senaryosu
Bu konuyla ilgili ek bir kontrol: değişikliği yaptıktan sonra en az bir negatif test ve bir pozitif test tanımlayın. Negatif test 'alarm boşyere düşmemeli', pozitif test 'bilinen kötü örneği yakalamalı' der. İkisini de kaydedin.

Lab disiplini
Ortamlar arasında (lab, staging, production) aynı yapılandırmayı kör kopyalamayın. Adresler, sertifikalar ve kimlikler farklıdır. Şablon kullanın, değerleri envanterden doldurun.

Runbook'a taşımak
İlgili log ve kanıtları olaydan sonra en az kurum politikasının öngördüğü süre kadar saklayın. Disk dolunca en eski güvenlik logunu silmek klasik hatadır; ayrı retention politikası tanımlayın.

Ölçüm ve alarm sağlığı
Yanlış pozitifleri susturmak ile körleşmek arasındaki çizgi incedir. Suppress kuralına gerekçe ve gözden geçirme tarihi yazın. Süresi dolunca yeniden değerlendirin.

Kapsam ve izin hatırlatması
Bu adımları change ticket olmadan production'da uygulamayın. Küçük görünen bir audit ayarı bile uygulama uyumluluğunu bozabilir. Önce staging, sonra kontrollü yayılım.

Yedekleme ve geri dönüş
Yılda en az iki kez masabaşı tatbikatı yapın: 'bu kontrol kırılırsa kim fark eder?' sorusunu sorunsuz cevaplayabilmelisiniz. Tatbikat notlarını wiki'ye ekleyin.

Log saklama süresi
Araç çıktısını ekran görüntüsü olarak bırakmak yerine makinece okunur formatta (JSON/CSV) arşivleyin. İki yıl sonraki denetimde arama kolaylaşır.

Yanlış pozitif yönetimi
Yetki ayrımı: bu kontrolü yapılandıran kişi ile alarmı triaj eden kişi mümkünse farklı olsun. Küçük ekiplerde olmasa bile en azından farklı hesap kullanın.

Değişiklik yönetimi ile ilişki
Sürüüm yükseltmelerinden sonra regresyon testi yapın. 'Aynı config' yeni sürümde farklı varsayılanlara bağlanmış olabilir. Release note'daki breaking change bölümünü okuyun.

Eğitim tatbikatı
Dış bağımlılık (feed, imza seti, konteyner imajı) için bütünlük doğrulaması yapın. İmzasız feed ile gelen kural seti tedarik zinciri riskidir.

Doğrulama senaryosu
Bu konuyla ilgili ek bir kontrol: değişikliği yaptıktan sonra en az bir negatif test ve bir pozitif test tanımlayın. Negatif test 'alarm boşyere düşmemeli', pozitif test 'bilinen kötü örneği yakalamalı' der. İkisini de kaydedin.

Lab disiplini
Ortamlar arasında (lab, staging, production) aynı yapılandırmayı kör kopyalamayın. Adresler, sertifikalar ve kimlikler farklıdır. Şablon kullanın, değerleri envanterden doldurun.

Runbook'a taşımak
İlgili log ve kanıtları olaydan sonra en az kurum politikasının öngördüğü süre kadar saklayın. Disk dolunca en eski güvenlik logunu silmek klasik hatadır; ayrı retention politikası tanımlayın.

Ölçüm ve alarm sağlığı
Yanlış pozitifleri susturmak ile körleşmek arasındaki çizgi incedir. Suppress kuralına gerekçe ve gözden geçirme tarihi yazın. Süresi dolunca yeniden değerlendirin.

Kapsam ve izin hatırlatması
Bu adımları change ticket olmadan production'da uygulamayın. Küçük görünen bir audit ayarı bile uygulama uyumluluğunu bozabilir. Önce staging, sonra kontrollü yayılım.

Yedekleme ve geri dönüş
Yılda en az iki kez masabaşı tatbikatı yapın: 'bu kontrol kırılırsa kim fark eder?' sorusunu sorunsuz cevaplayabilmelisiniz. Tatbikat notlarını wiki'ye ekleyin.

Log saklama süresi
Araç çıktısını ekran görüntüsü olarak bırakmak yerine makinece okunur formatta (JSON/CSV) arşivleyin. İki yıl sonraki denetimde arama kolaylaşır.

Yanlış pozitif yönetimi
Yetki ayrımı: bu kontrolü yapılandıran kişi ile alarmı triaj eden kişi mümkünse farklı olsun. Küçük ekiplerde olmasa bile en azından farklı hesap kullanın.

Uygulama notu
Bu rehberdeki komutları olduğu gibi kopyalamadan önce yolları, arayüz adlarını ve IP adreslerini kendi ortamınıza göre değiştirin. Dağıtım farkları (Debian/Ubuntu/RHEL/Windows sunucu) çıktı biçimini değiştirebilir; man sayfası ve resmi dokümantasyon birincil kaynaktır. Bir adım beklediğiniz sonucu vermezse önce yetki (sudo/Administrator), sonra sürüm, en son da yapılandırma dosyası sırasıyla bakın. Değişiklikleri geri almak için snapshot veya yapılandırma yönetimi (Ansible/Git) kullanın; 'elle bir dokundum' geçmişi denetimde kaybolur. Alarm ve log örneklerini ekip kanalında paylaşırken kişisel veri ve iç IP şemasını maskeleyin.
Yasal uyarı: Bu içerik eğitim amaçlıdır. Anlatılanları yalnızca kendi sistemlerinizde veya yazılı izin aldığınız sistemlerde uygulayın. Yetkisiz erişim ve sistemlere müdahale 5237 sayılı TCK'nın 243, 244 ve 245. maddeleri kapsamında suçtur.


Ek DosyalarEkran Görüntüleri
       
Cevapla



Hızlı Menü: