Агрессивная атака: DNS-UDP-IP спуфер

Xakep, номер #048, стр. 048-068-2


Поля ip4 заголовка (RFC-791)

ipv4 заголовок равен обычно 20 байтам.

кол-во бит(!) описание

4 версия

4 IHL

8 тип сервиса

16 полная длина

16 идентификация

3 флаги

13 смещение фрагмента

8 TTL (time to live (время жизни)

8 протокол

16 контрольная сумма заголовка

32 source адрес (откуда)

32 destination адрес (куда)

может не быть Опции

нуль Выравнивание (x32)

Далее в нашем случае в ip пакете идет udp пакет.

Поля udp заголовка (RFC-768)

udp заголовок равен восьми байтам.

кол-во байт описание

2 с какого порта

2 на какой порт

2 размер пакета (данные + заголовок)

2 контрольная сумма

Далее в udp пакете идут данные, которые являются нашими dns пакетами, чью структуру мы теперь и рассмотрим.

Структура dns пакета (RFC-1035)

Все данные внутри доменного протокола имеют формат, называемый message (сообщение). Уровни сообщения можно разделить на 5 секций, которые показаны ниже:

+---------------------+

| Header | заголовок

+---------------------+

| Quastion | запрос на преобразование к серверу имен

+---------------------+

| Answer | ответ на этот запрос

+---------------------+

| Authority | сервера имен, ответственные за данный домен

+---------------------+

| Additional | дополнительная информация

+---------------------+

Заголовок, как и понятно, присутствовать обязан всегда. Следующие секции зависят от типа dns пакета. При запросе на резолв (resolve - преобразование) пакет имеет только header и quastion секции. При ответе сервера имен dns пакет имеет все секции сообщения. И вот тут, прежде чем посмотреть непосредственно на поля, стоит остановиться. Дело в том, что все эти фразы "умножение", "атака с использованием множителей" ничего не стоят, т.к. математикой здесь и не пахнет. Как ты видишь, запрос на резолв имеет 2 поля, а возврат - 5 полей. В этом все умножение. Чем больше возвратит name server - тем больше "умножение". Почему назвали умножение, а не увеличение? Я не знаю. Наверное, для солидности. Но как бы это не называлось, метод очень действенный. И защититься от него - в общих случаях можно, а в индивидуальных – практически нереально (об этом чуть ниже). Прежде чем перейти к непосредственной реализации, рассмотрим header и quastion секции (т.к. они нам нужны при составлении пакета). Header очень красочно описан в /usr/include/arpa/nameser_compat.h, но для тех, кто ленив, вот он:

header (12 байт)

кол-во бит флаг описание

16 id - идентификатор dns пакета

1 qr - тип пакета. 0 - запрос, 1 - ответ.

4 opcode - тип запроса: 0 - QUERY, 1 - IQUERY, 2 - STATUS

Назад на стр. 048-068-1  Содержание  Вперед на стр. 048-068-3