
PacketWhisper: Скрытое извлечение данных и обход атрибуции с использованием DNS-запросов и текстовой стеганографии. Избегайте проблем, связанных с типичными методами DNS-эксфильтрации. Передача данных между системами без прямого соединения устройств друг с другом или с общим конечным пунктом. Не требуется управлять DNS-сервером имен.
PacketWhisper — скрытая передача данных и обход атрибуции с помощью DNS-запросов и текстовой стеганографии, без необходимости в контролируемых злоумышленником серверах имен или доменах; обход DLP/MLS-устройств; обход фильтрации данных и белых списков DNS-серверов. Преобразует любой тип файла (например, исполняемые файлы, Office, Zip, изображения) в список полных доменных имен (FQDN), использует DNS-запросы для передачи данных. Просто, но чрезвычайно эффективно.
(Обновление 27.05.2020: Да, я перенесу все свои проекты Github на Python3 в течение лета 2020 года.)
Joe Gervais (TryCatchHCF)
Традиционная эксфильтрация через DNS основана на одном из следующих подходов: DNS-туннелирование; скрытие данных в полях DNS-запроса; или закодированные/зашифрованные полезные нагрузки, разбитые на части и используемые в качестве поддоменов в DNS-запросе. Все эти методы требуют, чтобы злоумышленник контролировал домен и/или связанный с ним DNS-сервер для получения данных, что ведет к атрибуции. Эти подходы также уязвимы для черных списков DNS-серверов (распространено) и белых списков (становится все более распространенным). Еще одна проблема — аналитики DFIR знакомы с этими методами, а системы SIEM часто обнаруживают их и сигнализируют о них.
PacketWhisper преодолевает эти ограничения.
Что, если данные можно передавать с помощью собственных разрешенных DNS-серверов цели, без прямого соединения взаимодействующих систем друг с другом или с общим конечным пунктом? Даже если на границе сети применяется фильтрация данных для блокировки эксфильтрации?
Чтобы это осуществить, PacketWhisper объединяет DNS-запросы с текстовой стеганографией. Используя набор инструментов Cloakify, он преобразует полезную нагрузку в список строк FQDN. Затем PacketWhisper использует список FQDN для создания последовательных DNS-запросов, передавая полезную нагрузку через (или внутри) сетевые границы, при этом данные скрыты на виду, и две системы никогда не соединяются напрямую друг с другом или с общим конечным пунктом. Шифры, используемые PacketWhisper, обеспечивают несколько уровней обмана, чтобы избежать генерации оповещений, а также ввести в заблуждение попытки анализа.
Для получения данных вы захватываете сетевой трафик, содержащий DNS-запросы, любым удобным для вас способом. (См. «Захват файла PCAP» ниже для примеров точек захвата.) Затем вы загружаете захваченный файл PCAP в PacketWhisper (запущенный на любой удобной системе), который извлекает полезную нагрузку из файла и деклакифицирует её в исходную форму.
DNS — привлекательный протокол для использования, потому что, хотя это относительно медленный способ передачи данных, DNS почти всегда разрешен через сетевые границы, даже в наиболее защищенных сетях.
Важное примечание: Мы используем DNS-запросы для передачи данных, а не успешные DNS-разрешения. PacketWhisper никогда не требует успешного разрешения ни одного из своих DNS-запросов. Фактически PacketWhisper даже не смотрит на DNS-ответы. Это расширяет наши сценарии использования и подчеркивает тот факт, что нам никогда не нужно контролировать домен, к которому мы обращаемся, и никогда не нужно контролировать DNS-сервер, обрабатывающий DNS-запросы.
Итак, используя PacketWhisper, мы преобразуем полезную нагрузку, которая выглядит так:
В список FQDN, подобный этому:
Который PacketWhisper превращает в DNS-запросы, отображающиеся в сетевом трафике так:
Которые вы захватываете как файл PCAP в любой точке пути разрешения DNS, а затем загружаете этот PCAP в свою локальную копию PacketWhisper для восстановления полезной нагрузки:
Смотрите слайды DEF CON 26 (включены в проект) из моей презентации на Packet Hacking Village. Слайды представляют информацию о DNS-эксфильтрации, текстовой стеганографии / наборе инструментов Cloakify и о том, как PacketWhisper объединяет их в метод передачи данных. Я специально создавал слайды так, чтобы они были полезны сами по себе, поэтому информация и предыстория должны быть полными. Однако вы также можете посмотреть видео моей презентации на DC26 Packet Hacking Village, которое предоставляет дополнительный контекст.
Я включил в проект образец файла PCAP (ловко названный «sample.pcap»), который содержит отдельные полезные нагрузки для каждого из шифров. Они могли бы быть файлами любого типа, конечно, но в данном случае я просто передал текстовые файлы в PCAP. Загрузите его в PacketWhisper и попробуйте!
В качестве быстрого теста в вашей собственной среде запустите PacketWhisper из виртуальной машины, затем отправьте файл, выполняя захват пакетов на сетевом интерфейсе VM через хост-систему. Затем вы можете загрузить файл PCAP в любой удобный экземпляр PacketWhisper для декодирования файла. Просто помните, что это не быстрая передача. Маленькие файлы и терпение — ваши друзья.
Вопрос: «Почему вы не использовали Scapy или dnspython?»
Ответ: Я ненавижу зависимости проектов в своих операционных инструментах. Я стараюсь делать свои проекты максимально атомарными и самодостаточными для максимальной надежности, особенно на стороне клиента, где я могу не контролировать среду и/или иметь минимальные привилегии. Благодаря структуре PacketWhisper я могу запустить его на ограниченном хосте с оболочкой, просто заархивировав проект и распаковав его на целевом хосте.
Вопрос: «Почему PacketWhisper не является форком проекта Cloakify Toolset?»
Ответ: Тот же ответ, что и выше. Нам нужен лишь очень специфический поднабор возможностей Cloakify, а добавление всего остального в PacketWhisper приведет только к загромождению каталога и появлению инструментов/шифров, которые PacketWhisper не может использовать. Поскольку я владею обоими проектами, я обещаю синхронизировать любые изменения между ними.
$ python packetWhisper.py
Шифры на основе FQDN состоят из 3 категорий:
Уникальные случайные поддомены FQDN
РЕКОМЕНДУЕМЫЙ РЕЖИМ ШИФРОВАНИЯ ДЛЯ БОЛЬШИНСТВА СЛУЧАЕВ ИСПОЛЬЗОВАНИЯ
Это FQDN со случайными элементами, встроенными в поддомены. Это помогает предотвратить DNS-кеширование, а также позволяет передавать данные за пределы NAT-устройств, которые могут находиться на пути DNS-запроса. Поскольку IP-адрес отправляющей системы недоступен за NAT-устройством, созданные шифром поддомены содержат уникальные элементы тегов, чтобы помочь нам идентифицировать полезные нагрузки PacketWhisper в захвате пакетов.
Эти шифры имитируют форматы различных сервисов, которые полагаются на сложные поддомены как средство идентификации сеанса, пользователя, кешированного контента и т. д. Этот подход помогает DNS-запросам PacketWhisper сливаться с остальным трафиком сети.
Первая часть имени поддомена на самом деле является строкой из списка шифров. Остальная часть имени поддомена рандомизируется, чтобы сделать каждый FQDN уникальным, что предотвращает преждевременное закрытие пути DNS-запроса из-за кеширования. Затем мы добавляем доменное имя. Мы конструируем FQDN таким образом, чтобы они выглядели как обычные FQDN, связанные с выбранным доменом, для лучшего слияния с нормальным веб-трафиком, наблюдаемым в любой сети.
Уникальные повторяющиеся FQDN