PowerShell (Saldırı – Savunma – Analiz)

PowerShell

PowerShell Nedir-Ne Amaçla Kullanılır?

Bildiğimiz üzere Microsoft bugüne kadar yayınladığı işletim sistemlerinde kolay kullanım için GUI yi ön planda tutuyordu. Microsoft Server ürünleriyle bir ihtiyaç ortaya çıktı. “Sistemin derinlerine inerek daha kararlı olan uygulamaları çalıştırmak.” Maalesef yaygın olarak bilinen adıyla CMD buna yeteri kadar çözüm sağlayamadı, destek olamadı.Bunun üzerine Microsoft PowerShell yazılımını geliştirdi. Bu sayede Microsoft sistem mühendisleri sistemin derinliklerine inerek daha kararlı olan uygulamaları çalıştırabilecekti.

powershell

PowerShell, tutarlı ve kararlı olan MS-DOS a göre daha zengin içerikli bir tasarımdır. GUI ile yapılacak işlemleri çok daha kısa sürede yapmaya olanak tanır.

PowerShell ile Saldırgan Neler Yapabilir?

PowerShell saldırgan tarafından ele geçirildiğinde sisteme direk olarak erişimi olan bir sistem yöneticisiyle aynı şeyleri yapabilecek kadar güçlenir.

  • Hak yükseltme
  • Sistem Bilgilerini Elde Etme
  • Ağ üzerindeki diğer sistemlere müdahale
  • Veri bozma
  • Veri çalma
  • Sistemde kalıcı olma

PowerShell Saldırısında İz Takip Etme

PowerShell saldırısı gerçekleşmiş bir sistemde olaya ilişkin izler;

Eventlog

Windows olay günlükleri, saldırıya maruz kalmış bir sistemde saldırganın etkinliklerini incelemek için kullanılabilir. PowerShell 2.0 ve öncesi için komut geçmişi gibi logların tutulması kısıtlıydı. PowerShell 3.0 ve üzeri sürümlerde daha kapsamlı bir loglama modülü işe dahil oldu ve loglama kalitesi arttı. Herhangi bir PowerShell komutu ya da komut dosyası çalıştırıldıktan sonra Windows aşağıda ki 3 günlüğe loğları yazabilir.

  • Additional Logging in PowerShell 3.0 and Greater
  • Other Logging Options in PowerShell 2.0
  • Logging in PowerShell 2.0

Prefetch

Windows XP ile birlikte tanıtılan önyükleme ve uygulama başlatma işlemi sırasında yükleme sürelerini kısaltmak için tasarlanmış bir performans yükseltme özelliğidir. İşletim sisteminde %systemroot% \prefetch dizininde “.PF” uzantılı olarak saklanır. Dosyanın içeriğini çözümleyecek olursak;

  • İlk yürütülme tarihi ve saati (Prefetch dosyasının oluşturulma tarihine ve saatine karşılık gelir.)
  • Kaç kez çalıştırıldı. (Prefetch dosyasının içinde saklanır.)
  • Son çalışma zamanı (Prefetch dosyasının içinde saklanır.)
  • Çalıştırılmanın ilk 10 saniyesinde eriştiği dosyaların listesi (Prefetch dosyasının içinde saklanır.)
  • Çalıştırılabilir dosyanın tam yolu.

Registry

PowerShelli yazan kişiler, çalışan powershell scriptleri ve komutları için kayıt defterinde herhangi bir değer tanımlamadı. Ancak bir saldırgan işlemlerini kolaylaştırmak için kayıt defterinde bulunan PowerShell yapılandırma ayarlarını değiştirebilir. PowerShell yürütme politikası, kullanıcının sisteme yükleyip yürütmesine izin verilen profilleri veya scriptleri denetleyen bir politikadır. Kayıt defterinde “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell\” anahtarındaki ExecutionPolicy değerinde saklar.

Network Traffic

PowerShell 2.0’dan itibaren uzak bağlantı portları 5985(HTTP) ve 5986(HTTPS) şeklindedir. Her iki durumda da requestler aslında şifrelidir. HTTPS kullanımı sadece requestleri SSL ile olarak gönderir. Yetkisiz uzaktan erişimler portlar default bırakılması dahilince bu portlar üzerinden gerçekleştirilir. Trafiği dinlediğimiz taktirde saldırının varlığında saldırganı tespit edebiliriz gibi yerlerden okunabilir.

PowerShell Riskleri

Ransomwarelar kullanılarak gerçekleştirilen saldırılar son zamanlarda gittikçe artmakta ve artışla doğru orantılı olarak daha komplex bir hal almakta.

Mcafee Labs Haziran 2017 raporundan alınan grafikte son yıllarda tespit edilen yeni ransomware’lara ait sayısal veriler bulunuyor.

Şimdi esas konumuza PowerShell’e geri dönelim. PowerShell destekli ransomware’lar çok daha büyük bir risk içeriyor.

Örneğin, RAT türünde olan meterpreter sızma testlerinde kullanımı oldukça yaygındır. Aynı işlevi gören ps1 ve exe uzantılı 2 adet zararlı dosyayı yaygın olarak kullanılan virüs tarama sitelerinde tarattığımızda powershellin riskini gözler önüne serebiliriz. (Hiçbir bypass yöntemi kullanılmamıştır.)

PowerShell

Exe

Bu da saldırılar için powershell kullanımını gözde hale getirmiştir. Olayın bu şekilde sonuçlanmasının elbette ki bir nedeni var. Bu neden bizi adım adım güvenli bir sisteme götürecektir. Nasıl olduğunu nasıl çalıştığını bilirsek defans tarafında da elimizi güçlendirebiliriz. EXE dosyaları zararlı aksiyonlar için sürekli kullanıldı. Kullanımı arttıkça da tespit ve önleme aksiyonları yani defans vektörü de aynı ivme ile güçlendi. Gelelim PowerShell’e. PowerShell gibi yorumlanan diller ile geliştirilen saldırı vektörleri defanslara karşı daha avantajlıdır. (Yukarıda ki resimlerle bariz bir şekilde ortadadır.) Defans tarafı bu tür zararlıları satır satır irdeleyip çağırdığı fonksiyon ve API’lere göre yargıda bulunabilir ancak tam olarak ne yaptığını kestiremez. Tam olarak ne yaptığını anlamak isterse o dilin interpreter’ına ihtiyaç duyacaktır. Ancak bu sayede kodun gerçek anlamda ne yaptığını anlayabilir. Ancak burada şöyle bir sıkıntı var. Güvenlik çözümleri tüm bu script dilleri için interpreter barındırması gerekmektedir ki zararlıları tespit edebilsin. Bu çok da mantıklı bir şey değildir. Bu yüzden script tabanlı zararlılar diğer derlenip çalıştırılabilen zararlılara oranla daha az tespit edilme oranına sahiptir. Ransomware’ların yaygınlaştığı bu zamanlarda PowerShell risk çemberinin ortasında kalıyor.

Neden Saldırılarda PowerShell Tercih Ediliyor?

Yukarıda PowerShell’in neden risk teşkil ettiğinden bahsettik. Ama PowerShell o kadar güçlü bir yazılım ki saldırganlar karşılarına Windows bir sistem geçtiğini görünce adeta gözleri parlıyor. PowerShell Windows Vista’dan sonra yayınlanan tüm Windows sistemlerine default olarak yüklü geliyor. Vista’dan öncesini kullanan sistem yöneticisi kalmadığını(sayılarının çok az olduğunu) düşünürsek bu saldırgan tarafından büyük bir artıdır. PowerShell .NET Framework’üne erişim sağladığı için .NET Framework kullanılarak yapılabilecek her şeyi powershell üzerinden yapabileceğimiz anlamına gelir. Saldırgan tarafında bir artı daha. MS Office üzerinden Macro çalıştırarak PowerShell çağrılıp kod işletebilir. Saldırgan tarafından yine bir kazanım. PowerShell bir saldırı senaryosunda risk çemberinin merkezine oturmayı işte böyle sağlıyor. Bu yüzden saldırganlar zararlı yazılımlarını PowerShell için oluşturup nokta atışı yapıyorlar. Gerekli önlemler alınmayan sistemlerde PowerShell Sistem Mühendisi için değilde saldırgan için çalışır bir hale geliyor.

Saldırılarda Powershell Nasıl Kullanılabilir?

Kurbana PowerShell’de yazılmış bir zararlı bulaştırılmak isteniyor. Ps1(powerShell uzantısı) uzantılı dosyayı mail olarak gönderip çalıştırmasını beklemek yerine bir Microsoft Office dosyasına macro olarak gönderilebilir. Aynı zamanda DLL ve EXE dosyaları kullanılarak da  PowerShell çağırılıp komut çalıştırılabilir.

Powershell Kullanılan Saldırılardan Korunmak İçin Neler Yapılabilir?

  • Sistemde yetkisiz kullanıcılar için CMD ve PowerShell erişimi kısıtlanmalıdır.
    • Her ne kadar PowerShell.exe engellenmiş olsa bile bypass yöntemi mevcuttur. Bknz: PowerOPS
  • MS Office yazılımlarında Macrolar gerekli değilse kapatılmalıdır.
    • Macrolar kullanılarak powershell çağırılıp komut işletilebilir.
  • Zararlıların bulaşabileceği platformlar için kullanıcıları bilinçlendirilmelidir.
    • Kaynağı güvenilir olmayan indirmeler ya da mail ekleriyle zararlı yazılım sistemlere ulaşabilir.
  • PowerShell in en güncel versiyonunu (5+) kullanarak loglama artırılmalıdır.
    • Loglama detayı arttıkça defans tarafı izinsiz erişimlere karşı daha dinamik bir yapıya kavuşur.
  • PowerShell üzerinde işletilen scriptler ve çıktıları loglanmalı.
    • Çalıştırılan scripler ve çıktılarının loglanması salgırdanın neyi amaçladığını ya da neyi elde ettiğini görmemiz ve gerekli önlemleri almamız için önemlidir.