February 14, 2021

Об эксфильтрации данных через DNS

Две трети утечек информации происходят не в силу злого умысла. В остальных случаях это намеренные действия киберпреступников, сотрудников организации или ее подрядчиков. Если у нас есть слепое выполнение команды на сервере, где заблокированы все исходящие соединения, кроме DNS, на помощь придёт bash-скрипт под названием Procrustes, который автоматизирует экфильтрацию (отправку наружу) данных по DNS.

Что такое эксфильтрация данных?

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

Эксфильтрация данных может быть проведена как внутри системы, так и удаленно. Внутреннюю угрозу представляют сотрудники, которые продают секретные данные фирмы для получения прибыли или случайно распространяют их, в то время как внешней угрозой является киберпреступник, который использует определенную уязвимость, чтобы проникнуть в систему, а затем украсть данные.

Эксфильтрация DNS-данных

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

Например, мошенник отправляет запрос в example.target.com и DNS target.com получает «example» в виде строки. Он будет рассматривать указанную строку как данные, и это позволит получить доступ к target.com. Далее это дает возможность злоумышленнику настроить скрытый канал с помощью сервера C2 между DNS и клиентом и получать все данные с помощью двунаправленной связи. Манипулирование DNS таким образом, чтобы получить конфиденциальные данные, называется эксфильтрацией DNS-данных.

Когда данные передаются из одной системы в другую без какого-либо прямого соединения, и эта передача данных осуществляется по протоколу DNS, то это называется эксфильтрацией данных DNS.

Обнаружение

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

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

Скрипт procrustes

Для своих операций скрипт принимает в качестве входных данных команду, которую мы хотим запустить на целевом сервере, и на выходе отображает отфильтрованные DNS запросы от сервера с выводом заданной команды.

В настоящее время сценарий поддерживает sh, bash и powershell и совместим с выполнением команд в стиле exec (например, java.lang.Runtime.exec).

Для своих операций сценарий принимает в качестве входных данных команду, которую мы хотим запустить на целевом сервере, и преобразует ее в соответствии с целевой оболочкой, чтобы ее выходные данные могли быть отправлены через DNS. После преобразования команда поступает в «диспетчер».

Диспетчер – это программа, предоставляемая пользователем, которая отвечает за ввод команды и выполнение ее на целевом сервере любыми необходимыми средствами (например, с использованием уязвимости).

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

Более подробно с инструментом можно ознакомиться на его странице GitHub.