DNS-tunneling

Материал из Xgu.ru

Перейти к: навигация, поиск


DNS-tunneling — техника, позволяющая передавать произвольный трафик (фактически, поднять туннель) поверх DNS-протокола. Может применяться, например, для того чтобы получить полноценный доступ к Интернет из точки, где разрешено преобразование DNS-имён.

Dns-tunneling.png

Для организации DNS-туннеля необходимо чтобы снаружи (то есть, в точке, куда направлен туннель) его кто-то принимал. Точка приёма является сервером имён для какой-то зоны. Изнутри сети делаются запросы имён по этой зоне. Так передаётся трафик изнутри <—. В качестве результата преобразования возвращаются ответные данные. Так передаётся трафик внутрь —>.

DNS-туннелирование нельзя запретить простыми правилами брандмауэра, разрешив при этом остальной DNS-трафик. Это связано с тем, что трафик DNS-туннеля и легитимные DNS-запросы неразличимы. Обнаруживать DNS-туннелирование можно по интенсивности запросов (если трафик по туннелю велик), а также более сложными методами, используя системы обнаружения вторжений.

Содержание

[править] iodine

Существует большое количество различных программ, которые позволяет передавать трафик поверх DNS-запросов. Одна из таких программ — iodine.

Названием программа обязана двум фактам:

  1. Сокращение IOD происходит от слов IP Over DNS,
  2. У химического элемента йод (iodine) атомное число 53, как и у порта DNS.

Для создания туннеля необходимо с одной стороны поднять сервер iodined (со стороны Интернета), а с другой стороны — с той, которая находится внутри сети, за брандмауэром — клиент iodine.

В проверочном режиме в качестве аргумента клиента указывается домен, в виде запросов по которому будет представляться туннелируемый трафик, а также обязательно IP-адрес iodine-сервера.

В нормальном режиме второй аргумент не передаётся, а определяется автоматически через DNS.

%# iodine -P 123 ns.xgu.ru 5.6.7.8

Для построения туннеля не в проверочном режиме, а в полноценном, необходимо обязательно указать, что сервер iodined является NS для какой-то определённой зоны.

Например, пусть это будет зона ns.xgu.ru. Тогда в описании зоны xgu.ru должны присутствовать строки (имена условные):

ns.xgu.ru.     NS  iodine.xgu.ru.
iodine.xgu.ru.    A   1.2.3.4

Icon-caution.gif

Лучше использовать по возможности короткие имена, поскольку это сокращает накладные расходы на передачу трафика, инкапсулированного внутрь DNS-пакетов.

Со стороны сервера:

%# iodined -f -m 220 -l 1.2.3.4 -P 123 192.168.0.1 ns.xgu.ru

Здесь:

  • -f — не уходить в фон;
  • -m mtu — использовать пакеты с заданным MTU (некоторый брандмауэры режут слишком большие DNS-пакеты);
  • -l IP — прослушивать только на указанном IP, а не на всех (может пригодиться, когда на машине уже работает DNS-сервер, только на других интерфейсах);
  • -P pass

Со стороны клиента:

%# iodine -P 123 ns.xgu.ru

На клиентской стороне будет установлен адрес 192.168.0.2 (последний байт плюс 1).


Если всё пройдёт успешно, то должны будут появиться сообщения:

Opened dns0
Opened UDP socket
Version ok, both running 0x00000402. You are user #3
Setting IP of dns0 to 192.168.0.5
Setting MTU of dns0 to 220
Sending queries for ns.xgu.ru to 127.0.0.1
Detaching from terminal...

Адреса и имена будут другими, а сообщения такими же.

После поднятия туннеля на клиентской машине появится соответствующий сетевой интерфейс. Его можно будет использовать как и любой другой — осуществлять маршрутизацию, трансляцию адресов и так далее.

%# ifconfig 
dns0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:192.168.0.5  P-t-P:192.168.0.5  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:220  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


[править] Пояснение к схеме DNS-туннелинга

Dns-tunneling.png

Ноутбук клиента, осуществляющего DNS-туннелинг находится за брандмауэром. Клиент имеет возможность пользоваться кэширующим DNS-сервером. Клиент направляет кэширующему серверу запросы по зоне iodine.xgu.ru. Сервер пытается их для него разрешить, для чего выполняет рекурсивную обработку, как предписывается стандартом DNS.

В конечном счёте запросы доходят туннелинг-серверу, который находится по адресу, указанному в качестве NS для зоны iodine.xgu.ru. Туннелинг-сервер обрабатывает их. В частности, он может преобразовать их в IP-трафик и отправить дальше. Обратный трафик преобразуется в DNS-ответы и отправляется кэширующему серверу (который в свою очередь передаёт их туннелинг-клиенту).

Таким образом организуется обмен IP-пакетами (— — —) поверх DNS-трафика (————).

[править] Дополнительная информация

[править] Материалы по DNS на xgu.ru

Firewall Piercing
IP over HTTP | ICMP-tunneling | DNS-tunneling | IP over terminal

Cordless-drill.jpg