Что такое DNS-туннелирование? Инструкция по обнаружению
DNS-туннелирование превращает систему доменных имён в оружие хакеров. DNS – это, по сути, огромная телефонная книга интернета. А ещё DNS является базовым протоколом, позволяющим администраторам делать запросы в базу данных DNS-сервера. Пока вроде всё понятно. Но хитрые хакеры осознали, что можно скрытно общаться с компьютером-жертвой путём внедрения управляющих команд и данных в протокол DNS. Эта идея и лежит в основе DNS-туннелирования.
Как работает DNS-туннелирование
Для всего в интернете есть свой отдельный протокол. И DNS поддерживает относительно простой протокол типа запрос-ответ. Если вы хотите посмотреть, как он работает, то можете запустить nslookup – основной инструмент для подачи DNS-запросов. Вы можете запросить адрес, просто указав интересующее доменное имя, например:
В нашем случае протокол ответил IP-адресом домена. В терминах DNS-протокола, я сделал запрос адреса или запрос т.н. «А»-типа. Существуют и другие типы запросов, при этом DNS-протокол будет отвечать с различным набором полей данных, которыми, как мы это позже увидим, могут воспользоваться хакеры.
Так или иначе, по своей сути DNS-протокол занимается передачей запроса на сервер и его ответа обратно клиенту. А что, если злоумышленник добавит срытое сообщение внутрь запроса доменного имени? Например, вместо ввода вполне легитимного URL, он введёт данные, которые хочет передать:
Предположим, злоумышленник управляет DNS-сервером. Тогда он может передавать данные — например, персональные данные, — и не обязательно будет обнаружен. В конце концов, с чего вдруг DNS-запрос может стать чем-то нелегитимным?
Управляя сервером, хакеры могут подделывать ответы и отправлять данные обратно на целевую систему. Это позволяет им передавать сообщения, спрятанные в различных полях DNS-ответа, во вредоносное ПО на заражённой машине, с указаниями наподобие поиска внутри определённой папки.
«Туннелирующая» часть данной атаки заключается в сокрытии данных и команд от обнаружения системами мониторинга. Хакеры могут использовать наборы символов base32, base64 и т.д., или даже шифровать данные. Такая кодировка пройдёт незамеченной мимо простых утилит обнаружения угроз, которые осуществляют поиск по открытому тексту.
И это и есть DNS-туннелирование!
История атак через DNS-туннелирование
У всего есть начало, включая идею захвата DNS-протокола для хакерских целей. Насколько мы можем судить, первое обсуждение такой атаки проводилось Оскаром Пирсаном (Oskar Pearson) в почтовой рассылке Bugtraq в апреле 1998 года.
К 2004 году, DNS-туннелирование было представлено на Black Hat как хакерский метод в презентации Дэна Каминского (Dan Kaminsky). Таким образом, идея очень быстро переросла в настоящий инструмент атаки.
На сегодня DNS-туннелирование занимает уверенные позиции на карте потенциальных угроз (и блогеров в сфере информационной безопасности часто просят его объяснить).
Слышали ли вы о Sea Turtle ? Это действующая кампания киберпреступных группировок — скорее всего, спонсируемая государством, — направленная на захват легитимных DNS-серверов с целью перенаправления DNS-запросов на собственные сервера. Это означает, что организации будут получать «плохие» IP-адреса, указывающие на поддельные веб-страницы под управлением хакеров, — например, Google или FedEx. При этом злоумышленники смогут заполучить учётные записи и пароли пользователей, которые те неосознанно введут их на таких поддельных сайтах. Это не DNS-туннелирование, но просто ещё одно скверное последствие контроля DNS-серверов хакерами.
Угрозы DNS-туннелирования
DNS-туннелирование – это как индикатор начала стадии плохих новостей. Каких именно? Мы уже рассказали о нескольких, но давайте их структурируем:
Вывод данных (эксфильтрация) – хакер скрытно передаёт критичные данные поверх DNS. Это определённо не самый эффективный способ передачи информации с компьютера-жертвы — с учётом всех издержек и кодировок — но он работает, и при этом – скрытно!
Управление и контроль (Command and Control, сокращённо C2) – хакеры используют DNS-протокол для отправки простых управляющих команд, скажем, через троян удалённого доступа (Remote Access Trojan, сокращённо RAT).
Туннелирование IP-Over-DNS – это может звучать безумно, но существуют утилиты, реализующие IP-стек поверх запросов и ответов DNS-протокола. Это делает передачу данных с помощью FTP, Netcat, ssh и т.д. относительно простым занятием. Крайне зловеще!
Выявление DNS-туннелирования
Существует два основных метода обнаружения злоупотреблением DNS: анализ нагрузки и анализ трафика.
При анализе нагрузки защищающаяся сторона ищет аномалии в данных, передаваемых в обе стороны, которые могут быть обнаружены статистическими методами: странно выглядящие имена хостов, тип DNS записи, которая не используется настолько часто, или нестандартная кодировка.
При анализе трафика оценивается число DNS запросов к каждому домену по сравнению со среднестатистическим уровнем. Злоумышленники, использующие DNS-туннелирование, будут генерировать большой объём трафика на сервер. В теории, значительно превосходящий нормальный обмен DNS-сообщениями. И это необходимо отслеживать!
Утилиты DNS-туннелирования
Если вы хотите провести собственный пентест и проверить, насколько хорошо ваша компания сможет обнаружить и отреагировать на такую активность, то для этого есть несколько утилит. Все они умеют туннелировать в режиме IP-Over-DNS:
Iodine – доступна на многих платформах (Linux, Mac OS, FreeBSD и Windows). Позволяет установить SSH-шелл между целевым и управляющим компьютером. Вот неплохой гайд по настройке и использованию Iodine.
OzymanDNS – проект DNS-туннелирования от Дэна Каминского, написанный на Perl. С ним можно подключаться по SSH.
DNSCat2 – «DNS-туннель, от которого не тошнит». Создаёт зашифрованный C2-канал для отправки/скачивания файлов, запуска шеллов и т.д.
Утилиты DNS-мониторинга
Ниже представлен список нескольких утилит, который будет полезен для обнаружения туннелирующих атак:
dnsHunter – Python-модуль, написанный для MercenaryHuntFramework и Mercenary-Linux. Считывает .pcap файлы, извлекает DNS-запросы и производит сопоставление геолокации, что помогает при анализе.
reassemble_dns – утилита на Python, читающая .pcap файлы и анализирующая DNS-сообщения.
Микро FAQ по DNS-туннелированию
Полезнейшая информация в виде вопросов и ответов!
В: Что такое туннелирование? О: Это просто способ передачи данных поверх существующего протокола. Лежащий в основе протокол обеспечивает выделенный канал или туннель, который потом используется для сокрытия информации, передающейся в действительности.
В: Когда был осуществлена первая атака по DNS-туннелированию? О: Мы не знаем! Если вы знаете – дайте, пожалуйста, нам знать. Насколько нам известно, первое обсуждение атаки было инициировано Оскаром Пирсаном в почтовой рассылке Bugtraq в апреле 1998 года.
В: Какие атаки похожи на DNS-туннелирование? О: DNS – далеко не единственный протокол, который можно использовать для туннелирования. Например, вредоносные программы по управлению и контролю (C2) часто используют HTTP для маскировки канала взаимодействия. Как и при DNS-туннелировании, хакер скрывает свои данные, но в данном случае они выглядят как трафик обычного веб-браузера, обращающегося на удалённый сайт (контролируемый злоумышленником). Это может остаться незамеченным программами мониторинга, если они не настроены воспринимать угрозу злоупотребления HTTP-протоколом в хакерских целях.
Хотите, чтобы мы помогли с обнаружением DNS-туннелирования? Ознакомьтесь с нашим модулем Varonis Edge и попробуйте бесплатное демо!