Укрощаем DNS в Wireshark. Часть 1

9a46eec23440d5dac37a4a33dd5529e6.jpg

О том, как поставить и начать работу в Wireshark, написано множество различных публикаций. Такие базовые вещи, как применение параметров перехвата и работа с фильтрами рассматриваются в различных публикациях. Поэтому в данной статье я не буду подробно рассматривать базовые вещи, вместо этого предлагаю поработать с помощью Wireshark с протоколами прикладного уровня, в частности с DNS. В этой статье мы поговорим о простых DNS запросах, а в следующей рассмотрим более сложные случаи. Но, для начала вспомним немного теории.

Что такое DNS

Протокол DNS (Domain Name System — система доменных имен) относится к числу наиболее важных межсетевых протоколов, поскольку он служит своего рода связующим звеном между доменными именами (например, ya.ru) с IР-адресами (например, 77.88.55.60). Если требуется связаться с сетевым устройством, IР-адрес которого неизвестен, получить доступ к этому устройству можно по его доменному имени в службе DNS.

На DNS-cepвepax хранится база данных с записями ресурсов, содержащих сопоставления IР-адресов и доменных имен, которыми эти серверы делятся с клиентами и другими DNS-серверами.

Структура заголовка в пакете DNS

Заголовок пакета DNS имеет следующий вид:

5c35e379547cc9383d5147c69aa59b0f.png

Рассмотрим каждое из этих полей подробнее:

  • Идентификационный номер DNS (DNS ID Number). Служит для связывания DNS-запросов с DNS-ответами.

  • Запрос/Ответ (Query/Response, QR). Обозначает, содержит ли пакет DNS-зaпpoc или DNS-ответ.

  • Код запроса (OpCode). Определяет тип запроса, содержащийся в сообщении.

  • Авторитетный ответ (Authoritative Answers, АА). Если значение этого поля установлено в ответном пакете, это означает, что ответ поступил от авторитетного сервера доменных имен, обслуживающего данный домен.

  • Усечение (Truncation, ТС). Обозначает, что ответ был усечен, поскольку он оказался слишком большим и не поместился в пакет.

  • Требуется рекурсия (Recursion Desired, RD). Если значение этого поля установлено в запросе, это означает, что DNS-клиент делает рекурсивный запрос, если на целевом сервере доменных имен отсутствует запрашиваемая информация.

  • Рекурсия доступна (Recursion Available, RA). Если значение этого поля установлено в ответе, это означает, что рекурсивные запросы поддерживаются на сервере доменных имен.

  • Зарезервировано (Reserved, Z). По стандарту RFC 1035 в этом поле должны быть установлены все нули. Но оно иногда используется в качестве расширения поля RCode.

  • Код ответа (Response Code, RCode). Служит в DNS-ответах для указания на наличие любых ошибок.

  • Число запросов (Question Count). Обозначает число записей в разделе запросов.

  • Число ответов (Answer Count). Обозначает число записей в разделе ответов.

  • Число записей на авторитетном сервере доменных имен (Name Server (Authority) Record Count). Обозначает число записей ресурсов на сервере доменных имен в разделе начальной записи зоны (Start of Authority, SOA).

  • Число дополнительных записей (Additional Records Count). Обозначает число записей ресурсов в разделе дополнительных сведений.

  • Раздел запросов (Questions Section). Это раздел переменного размера, содержащий один или несколько запросов сведений, посылаемых DNS-cepвepy.

  • Раздел ответов (Answers Section). Это раздел переменного размера, содержащий одну или несколько записей ресурсов, посылаемых в ответ на запросы.

  • Раздел полномочий (Authority Section). Это раздел переменного размера, содержащий записи ресурсов, указывающие на авторитетные серверы доменных имен, которые могут быть использованы для продолжения процесса преобразования имен.

  • Раздел дополнительных сведений (Additional lnformation Section). Это раздел переменного размера, содержащий записи ресурсов, хранящие дополнительные сведения, связанные с запросом, хотя их совсем не обязательно посылать в ответ за запрос.

Смотрим в Wireshark

Думаю, на этом с теорией можно закончить и перейти к непосредственной работе с пакетами DNS в Wireshark. Протокол DNS функционирует в режиме «запрос — ответ». В частности, клиент, желающий преобразовать DNS-имя в IР-адрес, посылает запрос DNS-cepвepy, а тот — ответ с запрашиваемой информацией.

Рассмотрим два пакета, участвующих в таком обмене. Пакет запроса имеет следующий вид:

6dafb7858c888dca489af9fc79890961.png

Здесь клиент отправляет запрос DNS серверу через стандартный порт 53. Приступив к анализу заголовков в данном пакете, мы видим в первой строке, что в протоколе DNS в качестве транспортного используется протокол UDP.

В части данного пакета, относящейся к протоколу DNS, можно обнаружить, что мелкие поля, расположенные ближе к началу пакета, сведены средствами Wireshark в единый раздел Flags. В этом разделе единица только напротив Recursion desired, то есть разрешаются рекурсивные запросы.

В разделе Queries мы видим, что запрашивается преобразование доменного имени wireshark.org в межсетевой адрес (IN) хоста (тип А). По существу, в данном пакете запрашивается следующее: «Какой IР-адрес связан с доменом wireshark.org?».

В целом, данное сообщение является стандартным DNS запросом, который не усечен (флаг Truncated равен нулю) и требует рекурсию. Теперь рассмотрим ответ на этот запрос.

04422b9f486e2fc0d7833f3d4cbc82d2.png

Здесь мы видим типичное ответное сообщение, в нем рекурсия доступна, если она требуется. Подробнее о рекурсии в DNS мы поговорим в следующей статье.  Также, данный пакет содержит лишь один запрос и одну запись ресурсов, поскольку он включает в себя первоначальный запрос вместе с ответом на него.

То есть, доменному имени wireshark.org соответствует IР-адрес 128 .121. 50 .122. Получив эти сведения, клиент может теперь создать IР-пакеты и приступить к обмену данными с сервером, имеющим доменное имя wireshark.org.

Типы записей

В поле Type обоих сообщений мы видим значение A (1) — IP-адрес хоста. Однако, помимо этого типа, существуют также и другие типы записей. Вот полный список:

1 А IРv4-адрес хоста
2 NS Авторитетный сервер доменных имен
5 СNAME Каноническое имя псевдонима
15 MX Обмен почтой
16 TXT Текстовая строка
28 АААА 1Рv6-адрес хоста
251 IXFR Инкрементный перенос зоны
252 AXFR Полный перенос зоны

Записи NS указывают первичный и вторичный DNS-серверы, ответственные за зону. Первичный сервер отвечает за преобразование имени зоны в IP-адрес, в то время как вторичный сервер отвечает за возврат IP-адреса записи хоста, связанной с этим именем.

Каждый DNS-сервер из зоны DNS должен иметь назначенную ему NS-запись, иначе он не сможет должным образом выполнять свои обязанности в зоне.

Запись типа CNAME позволяет иметь и использовать на сервере более одного имени домена (хоста). Например:

user.example.ru.  CNAME  example.ru.

Запись MX создает поддомен, который обслуживается внутренним почтовым сервером.

Запись TXT (текстовая запись) является информационной и не несет функциональной нагрузки.

Запись АААА это IРv6-адрес хоста.

И наконец, инкрементальный (IXFR) и полный (AXFR) переносы DNS зон. Перенос зоны происходит в том случае, если данные зоны передаются между двумя устройствами — как правило, из соображений резервирования. Например, в организациях с несколькими DNS-серверами сетевые администраторы зачастую настраивают вспомогательный DNS-cepвep на хранение копии данных зоны из основного DNS-cepвepa на тот случай, если основной сервер окажется недоступным.

На рисунках мы видим примеры AXFR запроса и ответа. Сразу можно обратить внимание на то, что в качестве транспорта здесь используется TCP, поскольку он обеспечивает более надежную передачу данных. Поэтому первые три пакета из данного файла перехвата служат для трехэтапного процесса установки связи по протоколу ТСР.

a2261b17374f9f34c14d407d929ca28f.png

Далее идут два служебных TCP пакета, а затем мы видим запрос на полный перенос DNS зоны.

8ee6caf8496f37cb591b91acd1ebc13f.png

Здесь тип записи уже AXFR.  Это означает, что по данному запросу требуется получить всю DNS-зoнy из сервера.

515db8cac19deea3444e5f8807abbe6a.png

В этом примере у нас относительно мало данных, хотя как правило зоны DNS содержат намного больше записей. Как только перенос зоны завершится, начнется процесс разрыва связи по протоколу ТСР, представленный в самом конце данного дампа перехвата.

Заключение

В этой статье мы рассмотрели основные виды DNS сообщений и их представление в Wireshark, которые можно встретить в любой сети, где используется разрешение доменных имен. В следующей статье мы подробно поговорим о рекурсии и работе с соответствующими сообщениями в Wireshark.

В преддверии старта специализации Network Engineer хочу порекомендовать вам бесплатные вебинары курса про IP форвардинг в L2 и L3 сегментах, а также про статическую и динамическую маршрутизацию. Регистрируйтесь, будет полезно!

© Habrahabr.ru