• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Статья Что с тобой, DNS ?

Здравия всем… Обычно было так, да?… Да пошло оно к чёрту, это всё, конечно, стиль, образ, но это не я, это не правда.
Всем привет! Что сегодня приготовил день грядущий? А сегодня мы коснёмся темы DNS, который тоже, казалось бы, используют и не жалуются, но, как выяснилось, нет.

what wih you?.jpg


Это что?

И первый вопрос, который будет затронут – это история, а второй – предназначение. В те же давние-стародавние времена, когда ARPANET перерождался в то, что мы видим сейчас, появилась необходимость как-то называть хосты, ибо пользоваться ip-адресами было не слишком удобно. Точнее, эта необходимость была всегда, но раньше она чудесно закрывалась файлом hosts и ,при необходимости узнать адрес, который ещё не внесён, звонком в сетевой информационный центр. Эта система прекрасно работала, пока количество хостов не стало расти с абсолютно невообразимыми скоростями. Интернет полнился и, благодаря этому, и спсиок интернет-протоколов тоже. В 1984 году появился протокол Berkley Internet Name Daemon или bind. Это ПО крайне распространено, в особенности в Unix-подобных системах, и на данный момент является самым популярным решением для развёртывания DNS в сети.

Почему так грустно?

Изначально DNS, как и другие протоколы раннего интернета создавались для идеального доброго мира, а значит не имели защиты от слова “совсем”. В начале 1990-х интернет стал вбирать в себя крупных коммерческих игроков, а значит и деньги, которые хотели бы заиметь некоторые нечистые на руку господа. В то время было обнаружено несколько уязвимостей, эксплуатация одной из которых приводила к подмене DNS-записей и, как следствие… чему угодно т.к. если вы переходите на codeby.net вы ведь не будете проверять по ip-адресу, точно ли вы перешли на тот codeby? А никак, кроме ip-адреса подобную атаку не обнаружить.
Сейчас всё стало куда лучше, ведь появился DNSSEC, который добавляет криптографическую подпись на DNS-записях, что исключает возможность DNS-poisoning’а, и TSIG, который позволяет создавать криптографический туннель для передачи DNS кэша в одноранговых сетях. Это используется для авторизованной передачи зоны и динамического обновления адресов.

А что делать?

Даже сейчас, когда всех старичков пытаются обложить заплатками с ног до головы, кое-где остаются прорехи, которыми вполне успешно пользуются. После окончания этого спринта и моего переезда я обязательно сделаю подробную статью с практикой, скрин-джеком и командами. Спектр возможных атак весьма велик. Собственно, вот:

Подмена сервера
  1. Когда вы вводите “codeby.net” в поле “url” своего браузера, ваш компьютер делает запрос к DNS-серверу и ждёт. Вот тут-то и происходит магия. И не придётся даже дуть, как завещал великий Амаяк Акопян. Пока клиент ждёт, он уязвим. Вместо настоящего DNS-ответа мы можем прислать не менее настоящий, но свой. Ведь никто не мешает вам поднять DNS-сервер у себя и пропускать через себя трафик. Кстати да, для реализации этой атаки вам нужно находиться между клиентом и настоящим сервером. После того, как клиент принял от вас DNS-запись он будет общаться не с реальным сервером, а с тем, которым вы пожелаете.
  2. Этот и следующий способы можно реализовать удалённо, ведь никто не мешает вам прикинуться удалённым DNS-сервером, но для этого надо чтобы совпадал IP-адрес отправителя пакета с адресом DNS-сервера, имена, содержащиеся в запросе и ответе, и порт, через который происходит общение. А, и ещё ID. Адреса и имена выяснить легко, порт не так уж сложно подобрать, а вот ID… тоже можно подобрать, так что проблем особо нет.
  3. Этот способ – это практически то же самое, что и способ 2, ведь если DNS-сервер не знает какой-то адрес, он обращается к своим собратьям, которыми можно успешно прикинуться. В этом случае всё немного проще, ведь порт подбирать уже не нужно, все DNS-сервера общаются между собой по выделенному порту – 53. Здесь есть большой плюс: то, что вы скормите серверу, он сохранит в кэш и при дальнейших запросах на это имя будет пользоваться вашей записью. А теперь представьте ситуацию: Некая инфраструкура была только что поднята и один из клиентских компьютеров хочет запросить сайт сбера. Вот он вводит sber.ru (возможно там не так, я не пользуюсь сбером) и идёт делать свои дела, за которыми он шёл. Всё хорошо? Нет, ведь его банковские данные только что угнали т.к. когда доменный DNS-сервер запросил адрес сайта сбера, ему прислали ответ с фейковым сервером, который содержит в себе сайт, являющийся полной копией сберовского. Мало того, теперь каждый пользователь этой компании будет заходить на этот сайт якобы сбера и терять деньги. Круто да?
DoS

Разумеется, подменять DNS – это не всё, что можно сделать. Можно ещё и класть DNS сервера.
Об этом будет совсем вкратце, т.к. я не считаю возможность положить сервер перспективным направлением при пентесте. Сделать это можно четырьмя способами:

Обычный флуд.
Компьютер может генерировать 1000 DNS-запросов секунду, сервер может обработать 10000 запросов в секунду. 10 компьютеров и ещё один запрос (хз, можете сами подойти спросить) и сервер лежит. Кстати, вам не нужно устанавливать соединение, а значит и получать ответ. Что это значит? Можно указать любой адрес отправителя. И сами скроетесь и заблокировать будет труднее и, теоретически, можно кого-нибудь подставить.

Отражённые запросы.
Это нисколько не сложнее. Отправляете запросы на любой DNS-сервер, указываете обратным адресом адрес атакуемого и отдыхаете. DNS-ответы куда больше по объёму, чем ваши запросы, поэтому потребуется меньше ресурсов. Кроме того, таким образом можно класть не только DNS сервера но и любой другой узел сети. Усиление может достигать 3-4 крат, хотя при должном умении может и 10 и 100. Чтобы усилить атаку втрое-вчетверо нужно действовать по инструкции, которую я только что дал, чтобы получить усиление вдесятеро, придётся найти те доменные имена, в ответ на который приходят самые тяжёлые сообщения. А вот чтобы достичь стократного увеличения, вам придётся самим создавать эти тяжелоотвечающие DNS-имена.

Рекурсивные запросы.
Когда сервер не может найти какую-либо запись в своём кэше он идёт искать её у друзей. Пока он этим занимается, запись временно хранится у него. На сохранение и обработку этих запросов тратятся ресурсы. Память, Процессор, Пропускная способность. Что-то закончится, рано или поздно.

Garbage DNS.
Простите, но в этом случае вам придётся буквально загадить 53 порт абсолютно любым тяжёлым трафиком. Хоть учебник по квантовой физике ему грузите через telnet, не важно. В принципе, так можно загадить любой порт, но остальные порты гораздо проще закрыть без последствий.

Эта статья вышла объёмнее предыдущих, поэтому сегодня она одна, мне нужно отдохнуть. Всем пока. Кому-то доброе утро, кому-то спокойной ночи, а я спать. Всем пока!)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!