---
# System prepended metadata

title: 'Практическая работа №7 "Скрытое туннелирование ICMP, DNS"'

---

# Практическая работа №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)

Она же оставляет желать лучшего...