AMSI Bypass ve Defender Atlatma (Eğitimsel / OSCP)
PowerShell araçlarını (Nishang, PowerUp, mimikatz) çalıştırırken AMSI'nin bloklamasını aşma teknikleri: reflection ile amsiInitFailed yamalaması, string-obfuscation kavramı, amsi.fail/Invoke-Obfuscation, DefenderCheck ile imza tespiti ve admin olarak real-time protection devre dışı bırakma. Savunma/eğitim çerçevesinde anlatılır.
- Hedefte PowerShell çalıştırma
- Real-time protection kapatmak için admin (opsiyonel)
- Bypass mantığını anlamak için temel .NET reflection bilgisi
Komutlar
DefenderCheck.exe Invoke-Mimikatz.ps1 Set-MpPreference -DisableRealtimeMonitoring $true Add-MpPreference -ExclusionPath 'C:\Windows\Temp' Get-MpComputerStatus | Select RealTimeProtectionEnabled,AntivirusEnabled,IsTamperProtected sc query windefend AMSI Nedir ve Neden Önemli?
AMSI (Antimalware Scan Interface), PowerShell’e gönderilen script içeriğini çalışmadan önce AV motoruna gösteren bir köprüdür. Nishang reverse shell’i, PowerUp.ps1, Invoke-Mimikatz gibi araçlar bilinen imzalar taşıdığından AMSI bunları string seviyesinde yakalar ve IEX çağrısı çalışmadan bloklar. Bu sayfa, kendi lab/OSCP ortamında bu engeli neden ve nasıl aştığını eğitimsel olarak açıklar.
Enumerasyon — Önce Durumu Anla
Bypass denemeden önce neyle karşı karşıya olduğunu öğren: Get-MpComputerStatus ile real-time protection ve Tamper Protection durumunu sorgula. Tamper Protection açıksa Set-MpPreference ile Defender’ı kapatamazsın — bu durumda obfuscation/bypass yoluna gidilir. sc query windefend servisin aktif olup olmadığını gösterir.
1. AMSI Bypass — Reflection Kavramı
En yaygın teknik, System.Management.Automation.AmsiUtils sınıfındaki amsiInitFailed alanını .NET reflection ile $true yapmaktır. Bu, AMSI’nin başlatılamadığını düşünmesini sağlar ve tarama atlanır. Mantık şudur: tek bir bellek bayrağı değiştirilerek tüm sonraki script taramaları devre dışı kalır. Bilinen public one-liner’lar artık imza ile yakalandığı için, çalışan bir bypass genelde string’lerin parçalanıp runtime’da birleştirilmesini (concatenation) gerektirir — örn. sınıf/alan adlarını 'Amsi'+'Utils' gibi bölmek. Bu, AMSI’nin kendi imzasını gizlemek için zorunludur. [UNVERIFIED] hangi tam string-split varyantının güncel Defender’ı geçeceği sürekli değişir; bu yüzden ezber yerine kavramı bil.
2. String / Script Obfuscation
Araç imzasının tamamını gizlemek için:
- amsi.fail — tarayıcıda rastgele/çalışan AMSI bypass snippet’leri üretir; her seferinde farklı çıktı verdiğinden imza tutmaz.
- Invoke-Obfuscation — bir PowerShell script’ini token/encoding seviyesinde dönüştürerek statik imzaları kırar. PowerUp.ps1 gibi araçları geçirmek için kullanılır.
3. DefenderCheck ile Cerrahi Yaklaşım
Kör obfuscation yerine, DefenderCheck.exe script.ps1 ile dosyanın hangi tam baytının imzayı tetiklediğini bulup yalnızca o satırı değiştirmek çok daha verimlidir. Fonksiyon adlarını yeniden adlandırmak, yorumları silmek veya o bloğu base64’lemek çoğu zaman yeterli olur. Bu, mimikatz/PowerUp gibi büyük araçlarda standart iş akışıdır.
4. Admin ile Doğrudan Devre Dışı Bırakma
Zaten admin/SYSTEM isen bypass ile uğraşmaya gerek yoktur: Set-MpPreference -DisableRealtimeMonitoring $true real-time taramayı kapatır, Add-MpPreference -ExclusionPath ile araç dizinini muaf tutarsın. Önemli: Tamper Protection (Win10 1903+) bu komutları sessizce engelleyebilir; Get-MpComputerStatus’ta IsTamperProtected $true ise bu yol kapalıdır.
OSCP / Eğitim Notları
- Bu teknikler savunma anlayışı (mavi takım için tespit) ve yetkili pentest için anlatılmıştır. AMSI bypass’ı OSCP’de standart bir tekniktir ve sınavda kullanımı serbesttir.
- En sağlam yaklaşım: önce fileless çalıştırmayı dene (DownloadString), AMSI yakalarsa bypass uygula, hâlâ olmuyorsa DefenderCheck ile cerrahi obfuscation yap, admin’sen doğrudan kapat.
- Disk yerine bellekte çalışmak (help-transfer’daki IEX yöntemi) on-disk AV taramasını da atlatır; AMSI ise bellek taraması olduğu için ayrıca ele alınmalıdır.