Command Line Obfuscation Teknikleri Kapsamında SIGMA Kuralları

SANS DFIR Summit 2021 kapsamında Wietze Beukema tarafından tarafından anlatılan “Exploring Windows Command-Line Obfuscation” konusu, SIGMA kurallarının yazımında dikkat edilmesi gereken hususlar konusunda oldukça önemli detaylar içeriyor. Saldırganların, savunma tarafında yazılan alarm kurallarını atlatmak için kullanabileceği tekniklerden biri olan “Windows Command Line obfuscation” ile SIEM tarafında yazılan SIGMA kuralların atlatılmasının önüne geçilebilmesi için aşağıdaki videonun izlenmesini ve sonrasında Wietze tarafından yazılan yazının okunması ve nihayetinde ilgili GitHub kütüphanesinin incelenmesini önemle tavsiye ediyorum.

Windows işletim sisteminin yerleşik komutlarının bir kısmının (arp, certutil, bitsadmin vd.) ASCII, UTF-8 veya Unicode seçenekleriyle çalışması mümkün olduğu için yazılan Sigma kurallarında bahse konu seçeneklerin özellikle incelenmesi gerekmekte. Windows Command Line obfuscation tekniği toplam beş başlık altında gerçekleştirilebiliyor. Detaylara geçmeden önce bu başlıkları inceleyerek yazıya devam edelim.

1- Seçenek Karakteri Değişimi (ping -n 0 127.0.0.1 –> ping /n 0 127.0.0.1)

2- Karakter Değişimi (reg export HKCU out.reg –> reg eˣport HKCU out.reg)

3- Karakter Girişi ( wevtutil gli hardwareevents –> wevtutil gࢯli hardwareevents)

4- Çift tırnak Girişi (dir c:\windows\ –> dir c:\"win"d""ow"s")

5 – Kısaltmalar veya Semboller (powershell /e --> powershell /enco)

Testleri yapabilmek için aşağıdaki gibi basit bir sistem oluşturarak, incelemelere başlayalım.

İlk örnek olan “C:\Windows\system32\ARP.EXE” -Ğa” komutu çalıştırıldığında aşağıdaki ekran görüntülerinden de görüleceği üzere hem Windows Event loglarında hem de Sysmon loglarında “arp -Ğa” parametsiyle loglanmakta.

Örneğin, Sigma kuralları kapsamında “arp -a” parametresiyle bir alarm kuralı yazılsaydı, “arp -Ğa” komut çıktısı SIEM tarafından algılanmayacağı için bahse konu alarm SIEM tarafında, saldırgan tarafından atlatılmış olacaktı.

Powershell “/e” ile çalıştırıldığında base64 ile encode edilen komutları çalıştırabiliyor. Aşağıdaki ekran görüntüsünden de görüleceği üzere “/encodedcomm” parametresine “echo test” in base64 ile encode edilmiş halini verdiğimizde komut başarıyla çalışmakta. (ZQBjAGgAbwAgAHQAZQBzAHQA)

Bu bağlamda, SIEM veya Sigma kurallarına sadece “/e” parametresini değil aşağıdaki komut satırlarını da eklemek gerekiyor.

  • powershell /e
  • powershell /en
  • powershell /enc
  • powershell /enco
  • powershell /encod
  • powershell /encode
  • powershell /encoded
  • powershell /encodedc
  • powershell /encodedco
  • powershell /encodedcom
  • powershell /encodedcomm
  • powershell /encodedcomma

Bir diğer örnekteyse “certutil” komutuna “/split” parametresi yerine “/؅split” parametresini verelim.

Komut başarıyla çalışıyor ve Sysmon loglarında komut çıktısı aşağıdaki gibi yer alıyor. Kural tarafında “split” bölümü direkt olarak “certutil.exe /split” şeklinde birebir yazıldıysa SIEM tarafında bahse konu logun kaçırılması olasılığı oldukça yüksek.

Volume shadow copy örneklerini listelemek için “vssadmin.exe l”i”st volumes” komutu çalıştırıldığındaysa durum biraz daha farklı.

Hem Windows Event loglarda hem de Sysmon loglarında “vssadmin” logları komutun çalıştığı şekilde loglanmakta. Bu bağlamda “vssadmin” ile ilgili yazılan Sigma kurallarının “önce test et, sonra doğru olduğunu varsay” yaklaşımı gerçekleştirildikten sonra geçerli olduğu varsayılabilir.

Bir diğer örnek olan “bitsadmin” komutuyla devam edelim.” /”t”ransfer” komutuyla DuckDuckGo’dan bir .txt dosyası indirelim.

Aşağıdaki loglardan da görüleceği üzere, Windows Event logları ve Sysmon “”/t”ransfer” parametresi yerine, logu “/transfer” olarak kaydetmekte. Bu noktada, “bitsadmin” ile yazılan kurallarda sorun olmadığı varsayılabilir.

Bir sonraki örnek olan “findstr /offℒine “findstr” “*.json“” komutunu inceleyelim.

“ℒ” karakteri aşağıdaki şekilde loglanmakta. Bu bağlamda “/offline” parametresiyle yazılan kuralların atlatılması mümkün.

reg e*port HKCU” komutunu incelemekle devam edelim. Aşağıdaki ekran görüntüsünden de görüleceği üzere “export” parametresi yerine “e*port” paramatresi kullanılsa dahi komut başarıyla çalışmakta.

Komut satırının aldığı parametrelere dair ekran görüntüsü:

Sonuç olarak, SIEM’e Sigma kuralı veya daha farklı herhangi bir kural yazarken; yazılan kural kapsamında yer alan komutların nasıl çalıştığını, hangi parametreleri aldığını, bu parametrelerin saldırganlar tarafından nasıl atlatılabileceğini bilmek önem arz ediyor.

Kaynaklar:

1- https://github.com/wietze/windows-command-line-obfuscation/blob/main/

2- https://www.youtube.com/watch?v=o1g5oiCMkcI

3- https://www.wietzebeukema.nl/blog/windows-command-line-obfuscation

Yorum bırakın

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.