5. PowerShell Nedir?
Windows PowerShell, Microsoft tarafından
Windows komut satırı Cmd.exe ve Windows
Script Host'a alternatif olarak geliştirilen yeni
nesil bir komut satırı uygulamasıdır.
Windows PowerShell 1.0 sürümü Windows XP,
Windows Server 2003 ve Windows Vista için
ücretsiz olarak indirilebilmektedir.
Windows 7'den itibaren Windows PowerShell
2.0 işletim sistemi ile beraber gelmektedir.
Yan taraftaki tabloda PowerShell sürümlerini
işletim sistemleri bazında görebilirsiniz.
7. Deep in Thought: Chinese Targeting of
National Security Think Tanks
Çin hükümeti destekli en gelişmiş siber saldırı ekibi olan DEEP PANDA ele geçirdikleri sisteme zamanlanmış görev olarak
Powershell.exe’yi ekliyorlar.
Base64 olarak encode edilmiş kod parçası C&C sunucularından çalıştırılabilir zararlı kodu indirip hafızadan çalıştırıyor.
Diğer sistemlere bu PowerShell scriptini WMI üzerinden kopyalıyorlar. Bütün bu işlemlerde standart Windows araçlarını
ve sistemlerde geçerli kullanıcı hesaplarını kullanıyorlar.
10. PowerShell İzleri – Event Logs
Saldırganların Powershellkullanarak neler yaptıklarını tam olarak öğrenememizintemel
sebeplerin başında ilgili sistemler üzerinde yeteri seviyede loglamanınyapılmaması geliyor.
Windows Server 2012R2 ile birlikte Process Trackingaudit altında yeni bir group policyayarı
geldi ve bu ayar sayesinde ilgili prosesin tam komut satırı detayları loglanabiliyor.
Bu ayar ilk çıktığında sadece Windows 8.1 ve Server 2012R2 sistemlerinde uygulanabilirken
sonrasında çıkan yamaların yardımıyla Windows 7 ve sonrası işletim sistemlerinde de
kullanılabilir duruma geldi.
Bu ayarın aktif olması için Audit Policytanımlarında Process Tracking’in de aktif edilmiş olması
gerekiyor.
Bu tanımlardan sonra ilgili sistem üzerinde oluşturulan her proses için Event ID değeri 4688 olan
bir log kaydı Security loglarına düşer.
11. PowerShell İzleri – Event Logs
Audit Process Creation
1
Oluşturulan her bir prosese ilişkin
detayların Security loglarında yer
almasını sağlayan Audit politikası
12. PowerShell İzleri – Event Logs
Include Command Line In Process Creation Events
2
3
Oluşturulan prosesin komut
satırından aldığı parametreler de
loglanabiliyor
13. PowerShell İzleri – Event Logs
Yerelden olsun uzaktan olsun PowerShellüzerinden bir komut yada script
çalıştırılması durumunda aşağıdaki üç log dosyasında bu işlemle alakalı kayıtlar
oluşturulabilir.
◦ • Windows PowerShell.evtx
◦ • Microsoft-Windows-PowerShell-Operational.evtx
◦ • Microsoft-Windows-PowerShell-Analytic.etl
Aşağıdaki iki log dosyasında ise Windows Remote Management (WinRM) servisi
üzerinden gerçekleştirilen PowerShell aktivitelerine ait bilgiler yer alır.
◦ • Microsoft-Windows-WinRM-Operational.evtx
◦ • Microsoft-Windows-WinRM-Analytic.etl
14. PowerShell İzleri – Event Logs
Windows PowerShell.evtx
Bu log dosyasında PowerShell her başlatıldığında ve
sonlandırıldığında bir kayıt oluşturulur.
◦ Event ID 400: “Engine state is changed from None to
Available.”
◦ Event ID 403: “Engine state is changed from Available to
Stopped.”
◦ Event ID 600: “Provider "<provider name>" is <state>”
Bu kayıtların hiç birinde ilgili eylemi gerçekleştiren
kullanıcı hesabı hakkında bilgi yer almaz.
Analiz sırasında bu kayıtlar incelenerek PowerShell
üzerinden gerçekleştirilen saldırının ne kadar sürdüğü ve
yerel mi uzaktan mı gerçekleştirildiği gibi bilgilere
ulaşılabilir.
15. PowerShell İzleri – Event Logs
Microsoft-Windows-PowerShell-Operational.evtx
Bu log dosyasında PowerShell işlemlerinin
operasyonuyla alakalı olaylar saklanır.
◦ Event ID 40961: “PowerShell console is startingup”
◦ Event ID 40962: “PowerShell console is ready for user
input”
Bu kayıtlar yerelden çalıştırılan PowerShell
konsollarının ne zaman başlatıldığını ve ne
zaman kullanıcıdan girdi beklemeye hazır hale
geldiğini gösterir.
Bu iki olayda da eylemi gerçekleştiren kullanıcı
hesabı hakkında bilgi yer alır.
16. PowerShell İzleri – Event Logs
Microsoft-Windows-PowerShell-Analytic.evtx
Varsayılan olarak Analytic ve Debug logları
tutulmaz ve gösterilmez.
Detaylı analytic loglarını görüntülemek için
Event Viewer’daki View menüsünden Show
Analytic and Debug Log seçeneğini
seçmeli.
Ardından Analytic loglarını toplamak
istediğiniz bileşen üzerinde Enable Log
seçeneğini aktif ederek logların
toplanmasını sağlamalısınız.
17. PowerShell İzleri – Event Logs
Microsoft-Windows-PowerShell-Analytic.evtx
Analyticlogları tutulmaya başladıktan sonra aşağıdaki ID’lere sahip kayıtlar üzerinde analiz yapılabilir.
Event ID 32850:Uzaktan komut çalıştırma
işleminin hangi kullanıcı hesabı üzerinden
gerçekleştirildiğini gösterir.
Event ID 32867/32868: Uzaktan çalıştırılan
PowerShell komutunun ve bu komutun çıktısının
(payload) neler olduğunun yer aldığı kayıtlardır.
Decode edildikten sonra çalıştırılan komut ve
çıktıları hakkında bilgi verir.
18. PowerShell İzleri - Prefetch
Prefetch kavramı, uygulamaların daha hızlı açılmasını sağlamak için Windows XP ile birlikte duyurulan bir kavramdır. Sık
kullanılan uygulamaların henüz çalıştırılmadan önce ilgili uygulamanın kodlarının hafızaya yüklenerek ihtiyaç duyulması halinde
hızlıca çalışması esasına dayanır.
Windows tarafından bu uygulamaya ait .PF uzantılı bir prefetch dosyası oluşturulur. Bu dosyalar %windir%Prefetch
klasöründe yer alırlar ve bu dizin altında en fazla 128 dosya yer alabilir.
Bu klasörde yer alan Layout.ini dosyası sistemin açılışı sırasında yüklenen dosyalar ve klasörler hakkında bilgiler içerir.
Prefetch dosyasının kendisi bir binary dosyadır ve uygulamaya ilişkin bilgiler içerir. Bu dosyanın içerisinde uygulamanın en son
ne zaman çalıştırıldığı,kaç kez çalıştırıldığı ve uygulama yüklenirken ilk 10 saniye içinde erişilen diğer dosyaların hangileri
olduğu bilgisi yer alır. Bunun yanında, uygulamanın adı ve uygulama tarafından yüklenen sürücülerin bilgisi de bu dosyanın
içeriğinde bulunur.
Bununla birlikte ilgili prefetch dosyasının oluşturulma zamanına bakarak uygulamanın ilk kez ne zaman çalıştırıldığı bilgisi de
elde edilebilir.
Windows Vista ve sonrasındaki işletim sistemlerinde prefetch dosyalarının biraz daha gelişmiş hali olan superfetch dosyaları
kullanılmaktadır.
19. PowerShell İzleri - Prefetch
Çağrılan PowerShell scriptin ilk 10 saniye içinde yüklenmesi durumunda ilgili script hakkında
bilgilere ulaşılabiliyor. Bununla birlikte PowerShell’in interaktif modda çalıştırılması durumunda
çağırılan script bilgisine prefetch dosyası üzerinden ulaşılamaz.
20. PowerShell İzleri - Registry
Normal şartlarda PowerShell üzerinden gerçekleştirilen saldırılarda registry üzerinde herhangi bir ize
rastlanmaz. Bunun yanında saldırgan tarafından ele geçirilen sistemlerde PowerShell’in çalışmasını etkileyecek
değişiklikler yapılmış olabilir.
PowerShell Execution Policy sayesinde bir sistemde hangi türden PowerShell scriptlerinin çalışabileceği
belirlenir ve saldırganlar tarafından bu ayarlar değiştirilerek ele geçirilen sistemler üzerinde yetkisiz scriptler
çalıştırılabilir.
Windows PowerShell ortamında 5 farklı çalıştırma politikası mevcuttur.
◦ Restricted – Herhangi bir script çalışmaz. Windows PowerShell sadece interaktif modda çalışabilir. Varsayılan olarak
Windows Server 2012 R2 haricindekiler bu modda çalışır.
◦ AllSigned – Sadece güvenilen yayıncılar tarafından imzalanmış scriptler çalışabilir.
◦ RemoteSigned – İndirilen scriptler güvenilen yayıncılar tarafından imzalandıktan sonra çalışabilir. Windows Server 2012 R2
sistemler için varsayılan mod budur.
◦ Unrestricted – Herhangi bir sınırlama olmadan bütün Windows PowerShell scriptleri çalıştırılır. İnternetnet indirilen
scriptler içinse kullanıcının karşısında scripti çalıştırmak için izin isteyen bir ekran çıkar.
◦ Bypass- Herhangi bir sınırlama olmadan bütün Windows PowerShell scriptleri çalıştırılır ve kullanıcılardan herhangi bir onay
istenmez.
21. PowerShell İzleri - Registry
PowerShell Execution Policy ile ilgili ayarlar registry içinde
HKLMSOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShellanahtarı altında yer alan
ExecutionPolicy isimli değer altında saklanır. Bu değer beş farklı şekilde yer alabilir. Bunlar
◦ Restricted
◦ AllSigned
◦ RemoteSigned
◦ Unrestricted
◦ Bypass
Bu anahtar saldırgan tarafından PowerShellscriptleri çalıştırılmadan önce değiştirilmiş olabilir ve bu anahtarın
son değiştirilme zamanı saldırının başlangıcı hakkında bize bilgi verebilir.
Hatırlatma! Saldırgan bu ayarı değiştirmeden ilgili PowerShell scriptinin çalıştırırken komut satırına ekleyeceği
ExecutionPolicy Bypass parametresi ile çalıştırma politikasını script bazlı değiştirebilir.
23. PowerShell İzleri - Network
Uzak sistemler üzerinde de PowerShell script çalıştırılabiliyor. (PowerShell Remoting)
PowerShell 2.0 ve sonrasında iletişim için kullanılan iki port var. Bunlar;
◦ 5985 (HTTP)
◦ 5986 (HTTPS)
İki iletişimde de payload şifreli taşınır. HTTPS iletişiminde başlık bilgisi de şifreli taşınır.
HTTP üzerinden gerçekleşmesi durumundabaşlıkbilgisi içinde sadece ilgili komutun hangi
kullanıcı tarafındançalıştırıldığı ve PowerShell sürüm bilgisi yer alır. (NTLMSSP kimlik
doğrulamasındaki Authorizationbaşlığı)
İçerik şifreli taşındığı için ham paket verisi üzerinden analiz yapmak yerine flow üzerinden bir
analiz gerçekleştirip anormallikleri tespit etmek daha doğru bir yaklaşımdır.
24. PowerShell İzleri - Memory
PowerShell üzerinden gerçekleştirilen saldırılarda ilgili sistemin hafızasının imajı alınarak da saldırganın izi
sürülebilir.
Powershell remoting ile uzak sistem üzerinde çalıştırılan scriptler c:windowssystem32wsmprovhost.exe
prosesi tarafından host edilir. Bu prosesten sonra olacaklar çalıştırılacak PowerShell komutuna bağlıdır.
◦ Eğer native cmdlet komutlarından birisi çalıştırılacaksa bu durumda wsmprovhost.exe prosesi üzerinden işlemler
devam eder ayrı bir powershell.exe child prosesi oluşturulmaz. Komut tamamlandıktan sonra da wsmprovhost.exe
prosesi sonlandırılır.
◦ Eğer PowerShell tarafından ayrı bir binary dosya yüklenip çalıştırılacaksa(örneğin diskteki bir çalıştırılabilir dosya) bu
durumda ilgili yeni proses wsmprovhost.exe’nin child prosesi olarak sistemde çalıştırılır. Uygulamanın sonlanması
durumunda wsmprovhost.exe de sonlandırılır.
◦ Eğer komut interaktif bir PowerShell oturumu açacaksa (örneğin Enter-PSSession üzerinden) bu durumda komut
direkt olarak wsmprovhost.exe konteksinde çalışır ve wsmprovhost.exe prosesi PSSession oturumu sonlanınca
sonlanır.
Hafıza imajı alındıktan sonra karakter dizilerini çıkartılıp bu karakter dizileri arasında PowerShell
komutları aranabilir.