# Практическая работа №7 "Скрытое туннелирование ICMP, DNS" Выполнил студент группы БСБО-04-20: Люцько С.А. Проверил преподаватель: Садыков Ильдар Венерович **Москва 2023г.** --- ## ICMP-туннелирование **Построим следующую топологию:** ![](https://hackmd.io/_uploads/rJTPswGS3.png) **Начнём с Kali-2022.** Подключимся к Kali-2022 по SSH: ``` ssh user@192.168.10.129 ``` ![](https://hackmd.io/_uploads/r1xKnwfB2.png) Создадим папку icmp и перейдём в неё: ``` mkdir icmp cd icmp ``` ![](https://hackmd.io/_uploads/SyQA3PMBn.png) Клонируем в неё friedrich/hans c GitHub: ``` git clone https://github.com/friedrich/hans ``` ![](https://hackmd.io/_uploads/BJ9PaDGrh.png) Компилируем файл: ``` make ``` ![](https://hackmd.io/_uploads/SyF56PGHn.png) Запустим сервер Hans: ``` sudo ./hans -s 10.1.2.0 -p eve@123 ``` ![](https://hackmd.io/_uploads/Sy0Uy_MB3.png) Видим, что появился виртуальный интерфейс tun0: ![](https://hackmd.io/_uploads/ryMc1ufr2.png) **Перейдём к Linux-Debian.** Установим Git: ``` apt update -y && apt install git -y ``` Клонируем friedrich/hans c GitHub: ``` git clone https://github.com/friedrich/hans ``` ![](https://hackmd.io/_uploads/r1o2xdMrn.png) Компилируем файл: ``` cd hans/ apt install make net-tools g++ -y make ``` ![](https://hackmd.io/_uploads/BJHobdzBn.png) Запускаем hans с сслыкой по IP-адресу на внешний сервер (Kali-2022): ``` ./hans -c 192.168.10.129 -p eve@123 ``` ![](https://hackmd.io/_uploads/ryPufOGS2.png) Появился виртуальный интерфейс tun0 с IP-адресом 10.1.2.100: ![](https://hackmd.io/_uploads/Hy-qzufS2.png) C Kali-2022 этот адрес пингуется: ![](https://hackmd.io/_uploads/S1DafOGHn.png) Также можно подключиться по SSH: ![](https://hackmd.io/_uploads/Sy0g7dzS2.png) **Анализ ICMP-трафика.** Пингуя внешние ресурсы, например, 8.8.8.8, на LAN интерфейсе pfSense мы увидим пакеты следующего вида: ![](https://hackmd.io/_uploads/S14VV_zBn.png) В то время как ICMP-трафик туннеля в результате работы ICMP-инкапсулирования выглядит так: ![](https://hackmd.io/_uploads/SkT54_frh.png) --- ## Простое DNS-туннелирование **Начнём с Kali-2022.** Запустим сервер iodined: ``` sudo iodined -P eve@123 10.99.99.1/24 -c i.example.com ``` Появился виртуальный интерфейс dns0: ![](https://hackmd.io/_uploads/BkH1tufBh.png) **Перейдём к Linux-Debian.** Установим iodine: ``` sudo apt install iodine ``` ![](https://hackmd.io/_uploads/HkNlPufrh.png) Изменим DNS-записи: ``` nano /etc/resolv.conf ``` Установим следующие параметры: ![](https://hackmd.io/_uploads/rJqx9dGBn.png) Теперь же запустим iodine-клиент с подключением по домену: ``` iodine -P eve@123 i.example.com ``` ![](https://hackmd.io/_uploads/r1O6c_fB3.png) Появился виртуальный интерфейс dns0 c IP-адресом 10.99.99.2/24: ![](https://hackmd.io/_uploads/BJ8ljufrn.png) C Kali-2022 этот адрес пингуется: ![](https://hackmd.io/_uploads/B1dNj_zBn.png) Также можно подключиться по SSH: ![](https://hackmd.io/_uploads/r1TvjOMr2.png) **Анализ DNS-трафика.** Нормальный трафик: ![](https://hackmd.io/_uploads/SJ0H2OMHn.png) Туннельный трафик, операции не распознаны: ![](https://hackmd.io/_uploads/r1k_2_MSh.png) Данный способ имеет минус, меняя DNS-сервер, мы теряем доступ к внутренним DNS-серверам инфраструктуры. --- ## Сложное DNS-туннелирование Дополним топологию следующим образом: ![](https://hackmd.io/_uploads/SJziZpGHh.png) **Начнём с DNS-server-external.** Установим статический IP-адрес: *ПКМ по интернет подключению -> Open Network and Internet settings -> Network and Sharing Center -> Ethernet -> Properties -> Internet Protocol Version 4 (TCP/IPv4) -> Properties* Устанавливаем следующие параметры: ![](https://hackmd.io/_uploads/rkfiwx4H2.png) Сменим название хоста. Открываем Server Manager: *Local Server -> {Computer name} -> Change* Устанавливаем следующие параметры: ![](https://hackmd.io/_uploads/Hk6nhTQrh.png) Установим верный часовой пояс: *Local Server -> {Time zone} -> Change time zone...* Устанавливаемм следующие параметры: ![](https://hackmd.io/_uploads/SyeJ1AMr2.png) Перезагружаем устройство DNS-server-external. После перезагрузки открываем Server Manager: *Manage -> Add Roles and Features* * Первые три окошка прокликиваем *'Next >'* * В четвёртом окошке выбираем *'DNS-Server'*, во всплывшем жмём *'Add Features'*, в следующем - *'Continue'* * Снова трижды прокликиваем *'Next >'* * Жмём *'Install'* После завершения установки идём в Server Manager: *Tools -> DNS -> ПКМ по названию хоста -> Properties -> Forwardes -> Edit* Добавляем DNS Яндекса (77.88.8.8): ![](https://hackmd.io/_uploads/HJj9A6XSh.png) **Переходим к DNS-server-internal.** Установим статический IP-адрес: *ПКМ по интернет подключению -> Open Network and Internet settings -> Network and Sharing Center -> Ethernet -> Properties -> Internet Protocol Version 4 (TCP/IPv4) -> Properties* Устанавливаем следующие параметры: ![](https://hackmd.io/_uploads/Sk6gmx4Sh.png) Сменим название хоста. Открываем Server Manager: *Local Server -> {Computer name} -> Change* Устанавливаем следующие параметры: ![](https://hackmd.io/_uploads/rkU7Xg4H3.png) Установим верный часовой пояс: *Local Server -> {Time zone} -> Change time zone...* Устанавливаемм следующие параметры: ![](https://hackmd.io/_uploads/SyeJ1AMr2.png) Перезагружаем устройство DNS-server-internal. После перезагрузки открываем Server Manager: *Manage -> Add Roles and Features* * Первые три окошка прокликиваем *'Next >'* * В четвёртом окошке выбираем *'DNS-Server'*, во всплывшем жмём *'Add Features'*, в следующем - *'Continue'* * Снова трижды прокликиваем *'Next >'* * Жмём *'Install'* После завершения установки идём в Server Manager: *Tools -> DNS -> ПКМ по названию хоста -> Properties -> Edit* Добавляем DNS-External (192.168.10.201): ![](https://hackmd.io/_uploads/B1cRPlNBh.png) Установим локальный адрес как предпочитительный для DNS, чтобы форвардиться до DNS-External: *ПКМ по интернет подключению -> Open Network and Internet settings -> Network and Sharing Center -> Ethernet -> Properties -> Internet Protocol Version 4 (TCP/IPv4) -> Properties* Устанавливаем следующие параметры: ![](https://hackmd.io/_uploads/ByLZ4lVBh.png) Проверяем работу DNS-сервера: ![](https://hackmd.io/_uploads/Bki3JAXrh.png) Всё работает! **Переходим к Kali-2022-1.** Укажем DNS-Internal в качестве DNS-сервера: ``` sudo -i nano /etc/resolv.conf ``` Устанавливаем следующие параметры: ![](https://hackmd.io/_uploads/rJenAgEr3.png) Попробуем сделать DNS-запрос: ``` dig ok.ru ``` ![](https://hackmd.io/_uploads/r12uFlVB3.png) Успешно! Ответ получен, а значит, DNS работает. C 8.8.8.8 также получаем ответ: ![](https://hackmd.io/_uploads/HkY2FlEH3.png) **Настроим pfSense на блокировку всех DNS, кроме нашего DNS-сервера** В настройках фаервола: *'Firewall' -> 'Rules' -> 'Add^'* Добавляем следующее правило: ![](https://hackmd.io/_uploads/Hyaisg4rh.png) ![](https://hackmd.io/_uploads/SyRBneNS3.png) ![](https://hackmd.io/_uploads/BJ8Tjl4Hn.png) Отключаем правила на выход в Интернет: ![](https://hackmd.io/_uploads/B19FnxVr2.png) Теперь пробуем получить ответ от 8.8.8.8: ![](https://hackmd.io/_uploads/Sy1-6gErn.png) Не выходит. Однако если попробовать обратиться к DNS-серверу по умолчанию (DNS-Internal): ![](https://hackmd.io/_uploads/BkOp0gNBh.png) Мы получаем ответ! **Проверим IP-адрес Kali-2022-2.** ![](https://hackmd.io/_uploads/BJj_1b4H2.png) IP-адрес Kali-2022-2: *192.168.10.129* **Переходим к DNS-server-external.** После завершения установки идём в Server Manager: *Tools -> DNS -> ПКМ по названию хоста -> New zone...* * Первые три окошка прокликиваем *'Next >'* * В четвёртом указываем зону "mirea.tech" ![](https://hackmd.io/_uploads/HJNbfWVr3.png) * Далее трижды проклтикиваем *'Next >'* * Жмём *'Finish'* В списке появилась необходимая зона: ![](https://hackmd.io/_uploads/ByswMZErn.png) Далее ПКМ по пустой области справа: *New Host (A or AAAA)...* Добавляем следующий хост (DNS-External): ![](https://hackmd.io/_uploads/BycbX-VH2.png) Аналогичным образом добавляем delegate хост (Kali-2022-2): ![](https://hackmd.io/_uploads/By_nm-Erh.png) Теперь вновь ПКМ по пустой области справа: *New Delegation...* * Прокликиваем *'Next'* * Устанавливаем следующие параметры во втором окошке: ![](https://hackmd.io/_uploads/ByMNNZESh.png) * В третьем жмём *'Add'* * Добавляем следующую запись: ![](https://hackmd.io/_uploads/Hkejr-NH3.png) * Прокликиваем *'Next'* и *'Finish'* **Переходим к Kali-2022-1.** Попробуем пропинговать mirea.tech: ![](https://hackmd.io/_uploads/HyhNUbEH3.png) IP-адрес определяется! Попробуем при помощи утилиты dig раскопать доменную запись с tunnel.mirea.tech: ``` dig NS tunnel.mirea.tech ``` ![](https://hackmd.io/_uploads/rJpoLWESh.png) Успех! **Переходим к Kali-2022-2.** Поднимем кастомный DNS-сервер: ``` sudo -i iodined -P eve@123 10.99.99.1/24 -c tunnel.mirea.tech ``` ![](https://hackmd.io/_uploads/SJHn5M4H2.png) Появился виртуальный интерфейс dns0: ![](https://hackmd.io/_uploads/Hk1xu-EBh.png) **Вернёмся к Kali-2022-1.** Поднимем клиент: ``` iodine -P eve@123 tunnel.mirea.tech ``` ![](https://hackmd.io/_uploads/ByguuZVHn.png) Туннель установлен! Появился виртуальный интерфейс dns0 со своим IP-адресом: ![](https://hackmd.io/_uploads/SJG2OZVr3.png) Теперь внешняя машинка на другом конце туннеля пингуется: ![](https://hackmd.io/_uploads/Sy11FbNHn.png) **Вернёмся к Kali-2022-2.** Настроим выход "наружу" в Интернет: ``` nano /etc/sysctl.conf ``` Раскомментируем следующий параметр, чтобы разрешить маршрутищировать трафик: ![](https://hackmd.io/_uploads/ByCwt-NS2.png) ``` sysctl -p ``` ![](https://hackmd.io/_uploads/Sy8taCEH3.png) Пропишем NAT для выхода с eth0 наружу, предварительно очистив все существовавшие ранее правила: ``` iptables -t nat -F iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ``` ![](https://hackmd.io/_uploads/Sk455Z4Hn.png) **Вернёмся к Kali-2022-1.** Заменим маршрут по умолчанию: ``` ip route delete default ip route add default via 10.99.99.1 ``` ![](https://hackmd.io/_uploads/SyuCbzNHn.png) Пробуем пропинговать восьмёрки: ![](https://hackmd.io/_uploads/S1ZyRANBn.png) Успех! Мы вышли из инфраструктуры наружу. Мы можем даже выйти в интернет и замерить скорость соединения: ![](https://hackmd.io/_uploads/BJKACRVB3.png) Она же оставляет желать лучшего...