DOOM через DNS: как легитимный протокол становится транспортом для вредоносных нагрузок
Инженер по безопасности Адам Райс (Adam Rice), специализирующийся на создании CTF-задач, регулярно использует DNS TXT-записи для доставки полезных нагрузок в своих сценариях. Идея проста: TXT-записи - это произвольные текстовые поля без какой-либо валидации содержимого. Если через них можно доставить шеллкод, то почему не целую программу?
DNS — протокол без встроенного контроля содержимого. Именно это свойство делает его удобным транспортом не только для резолвинга имён, но и для произвольных данных. Инженер по безопасности Адам Райс наглядно показал это, реализовав запуск DOOM целиком через TXT-записи одной DNS-зоны.
Архитектура проекта состоит из двух частей: серверной (подготовка и загрузка данных в DNS) и клиентской (скачивание и запуск).
1. За основу взят managed-doom - порт оригинального движка DOOM на чистый C#. Выбор не случаен: .NET-сборки (managed assemblies) можно загрузить в память через Assembly.Load() из массива байт, без записи файлов на диск (удобный метод для "стелс"-вирусов, кстати).
2. Форк движка (doom-over-dns) потребовал серьёзных модификаций:
• Убрана работа с файловой системой - загрузка WAD-файла переведена на MemoryStream.
• Заменена нативная оконная библиотека GLFW на прямые Win32 API-вызовы через P/Invoke.
• Полностью удалён звук (для экономии места в DNS-записях).
• Компиляция переведена с Native AOT на framework-dependent .NET 8 - иначе рефлексия невозможна.
3. С компрессией WAD-файл сжимается с 4 МБ до 1.7 МБ, бандл DLL - с 4.4 МБ до 1.2 МБ. Итого ~3 МБ данных, закодированных в base64, распределённых по 1 966 TXT-записям в одной DNS-зоне (в целом не рекордное количество и DNS-хостинги такое позволяют).
4. Загрузка записей выполняется через CloudFlare API (скрипт Publish-DoomOverDNS.ps1). Процесс
Читать на habr.com

