Автор: Алексей Романов, ведущий специалист по исследованию киберугроз 

Всем привет!

Наша команда проводит много red-team-проектов и, как следствие, постоянно имеет дело с различными системами мониторинга сетевого трафика. Вопрос «Как не спалиться?» в такой работе почти так же важен, как проникновение в инфраструктуру. Поэтому сегодня я хочу поговорить о маскировке сетевого трафика между С2-агентом и сервером — посмотрим на нетривиальные и даже забавные способы это сделать.

Сокрытие трафика важно, потому что одно неаккуратное действие пентестера внутри инфраструктуры может умножить на ноль все его усилия. Представим, что он потратил неделю и нашел в веб-приложении RCE-уязвимость. Дальше обошел WAF, но стоит загрузить на сервер C2-агент для удаленного доступа и контроля, как бьет тревогу EDR. Команда SOC вносит IP- и MAC-адреса пентестера в черный список, сообщает команде разработки об уязвимости в их ПО. И все: неделя рабочего времени red team ушла в никуда, по сути, проект провален. В отчете будет написано что-то позорное вроде «я пробрался внутрь, меня обнаружили».

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

Трансляции Twitch и видео YouTube

Представим эдакую райскую инфраструктуру для пентестера, где нет строгого белого списка разрешенных протоколов, доменов, IP-адресов или портов, где компания не ограничивает доступ сотрудников к развлекательным ресурсам, не фильтрует контент, не использует DLP-системы. Вот где можно на полную применить профессиональную фантазию! Например, nu11z из red-team-команды VK придумал маскировать данные под трафик видеосервисов и стриминговых платформ вроде YouTube и Twitch.

Для этого C2-сервер и С2-агент подключаются к заранее подготовленному стриму в интерактивном режиме, после чего агент может отправлять сообщения в чате, а сервер — там же ему отвечать. Сообщения в чате — это простейшие JSON-структуры, и для C2-сервера не будет проблемой их найти по заранее определенной метке. Например, можно писать в формате /ATTACK/e3r33r3r2, где ATTACK — это метка для поиска, а e3r33r3r2 — сообщение для сервера.

Стрим можно создать самостоятельно, можно использовать легитимную трансляцию ничего не подозревающего пользователя. Главное, чтобы C2-агент и сервер зашли по единой ссылке и выполнили подключение по WebSocket Security (WSS). 

Несколько нюансов, без которых способ не сработает:

  1. Должен быть доступ из корпоративной сети к платформе www.twitch.tv. Если компания использует строгие политики доступа в интернет, видеохостинги и социальные сети блокируются на уровне разрешения доменного имени.

  2. Агент и сервер должны подключиться по WSS. Если он заблокирован, опять же ничего не выйдет.

  3. Важно учитывать, на каком хосте исполняется С2-агент, и лучше всего применять эту технику, когда после преодоления периметра вы оказались на каком-нибудь персональном компьютере. При сегментировании сетей политики доступа и категоризации трафика зачастую определяются по назначению того или иного сегмента. В пользовательском сегменте ограничения скорее локальные, есть доступ к внешним ресурсам с использованием разных протоколов. В DMZ, где располагаются серверы, политики сетевого взаимодействия строже, как и мониторинг сетевых взаимодействий. Если вдруг из такого сегмента полетит подозрительный HTTP-запрос, это должно сразу привлечь внимание команды безопасности. Представьте лица аналитиков SOC, когда сервер из DMZ решит прогуляться на Twitch. Потому повторюсь: пентестер должен понимать, где оказался, когда преодолел внешний периметр. 

Если учитывать эти три условия, активность вроде описанной выше может не вызвать подозрений. 

На одном проекте, где нам удалось применить такую технологию, мы оставались незамеченными на протяжении нескольких недель. В конце концов мы намеренно спалились — загрузили Mimikatz на хост с С2-агентом. Пообщавшись с аналитиками SOC, мы выяснили, что они спокойно смотрели на трафик стриминговых площадок и видеохостингов. Мол, все мы люди, всем порой хочется открыть на фоне стрим на Twitch, а на YouTube вообще можно зайти в образовательных целях. 

Ну а нам в результате удалось успешно завершить red-team-проект. 

Двигаемся к следующей технике. 

Форумы, аниме и фанфики

Еще один похожий метод позволяет использовать комментарии на форумах. Как и в первом случае, самое сложное здесь — выбрать целевой хост, который станет посредником между агентом и сервером. Кроме того, целевой форум не должен располагаться за антибот-решением или WAF, иначе придется возиться с JS Challenge и капчами. А главное, в сети не должно быть серьезных ограничений на отправку скриптами комментариев, отзывов и прочих текстовых сообщений.

Как работает эта техника, расскажу на примере другого нашего проекта.

Для начала мы поискали форумы, которые бы подходили нам технически, то есть позволяли незарегистрированным пользователям без ограничений оставлять комментарии под постами. В итоге остановились на подборке из трех площадок: популярный сайт с фанфиками, малоизвестный аниме-форум и непопулярный форум по старой онлайн-игре. Там не было ни капчи, ни лимита сообщений, ни контроля содержимого, ни модерации — ничего. Спам-боту такие условия позволят заполнить форум рекламой, а мы же стали публиковать и читать С2-команды. 

Разумеется, под каждый форум нам пришлось писать свой парсер и свой обработчик. В итоге мы получили инструмент, который обеспечивал нужный результат, достаточно было предоставить С2-агенту и серверу ссылку на какой-нибудь форумный пост с доступным разделом комментариев и отзывов. Единственное, что нас ограничивало, — максимальный объем сообщения в 3094 символа. Поэтому по ходу проекта нафлудили мы очень много — 270+ страниц.

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

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

DNS-протокол и EDNS0

А что, если пентестер сталкивается с жестко сегментированными сетями, практически полностью изолированными от внешнего мира? Первое, что ему приходит в голову, — использовать классические сетевые протоколы, доступные в большинстве инфраструктур, например DNS.

Однако классические техники передачи данных вроде DNS-over-53 (Do53), DNS-over-TLS (DoT) или DNS-over-HTTPS (DoH) не всегда подходят для нашей задачи — скрытой коммуникации между агентом и сервером. Системы комплексного сетевого мониторинга успешно обнаруживают в трафике характерные для таких атак аномалии. Например, наш BI.ZONE Secure DNS для этой цели контролирует скорость входящих и исходящих DNS-пакетов, профилирует источник инициатора DNS-запроса и конечный домен, проверяет структуру каждого заголовка DNS-пакета. Попытки передать что-то вроде xpda6xtv8p.BmH/OPNLVbwkGUtYZXVQFLyAOFGiE3RI58gpKqDaNHS9xG9Uy3u8Z21D3GDQsoB.ji7qji6kwi.dns2.doh-detection-demo.ru ни к чему не приведут.

Мы решили изучить атаки с использованием DNS-протокола, используя наш продукт. Мы знаем, что BI.ZONE Secure DNS умеет декодировать данные из списка известных кодировок, обращать внимание на зашифрованные пакеты в PQDN, а также соотносить данные из прошлых запросов и текущего. Что, если использовать Do53, а запросы и ответы кодировать с помощью собственного набора символов? Тогда запрос будет отдаленно напоминать легитимный. 

Мы сгенерировали вордлист C2-агента и переписали парсер, чтобы агент отправлял UID uid=0(root) gid=0(root) groups=0(root) как совокупность поддоменов: touchE0OhsexMy.Baby69gidE0OhsexMy.Baby69groupsE0OhsexMy.dns1.doh-detection-demo.ru.

Также мы конфигурировали задержку по времени запроса и ответа, регулировали количество и размер ответных DNS-пакетов, произвольно разделяли большие ответы, например вывод списка файлов в текущей директории. Мы попробовали применить непопулярные кодировки и алгоритмы шифрования, отправляли запросы на разрешение AAAA-записи, чтобы получить ответ в 16 байтах IPv6-адреса и так обойти механизмы фильтрации.

В результате установили, что алгоритмы сигнатурного анализа и эвристики действительно не обнаруживают аномалии. Однако сбор статистики, контроль объема данных, отслеживание скорости делают свое дело. Пара команд — и сессии нет, ибо домен улетает в блеклист. Эти же проверки сводят на нет попытки использовать DoT или DoH.

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

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

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

В структуре EDNS0 есть заголовок RDATA типа octet stream, а внутри у него — информационное поле, которое подходит для внедрения данных. Мы написали кастомный C2-агент, доработали в C2-панели демон, отвечающий за принятие и обработку запросов, и получили неплохой инструмент, который запросто обходит любые проверки. Потому что, как ни странно, многие DNS-серверы по умолчанию поддерживают расширение EDNS0, а контролирует его лишь небольшая часть мониторинговых решений.

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

Проверив работоспособность подхода, мы обсудили детали с командой разработки BI.ZONE Secure DNS, после чего для нашего продукта эта зона больше слепой не является. А мы, пентестеры, уже успешно применили эту технику на нескольких red-team-проектах. 

Напоследок пара слов о DNS-туннелировании в целом. Главный недостаток технологии — она очень медленная. Размер DNS-пакета составляет 253 байта, что очень мало с учетом шифрования и кодировок. Чанки придется собирать достаточно долго, особенно когда нужно скачать файлы или прочитать вызов SysCall(). DNS-over-HTTPS — это стильно, модно, молодежно, но все равно медленно. Если есть возможность использовать в инфраструктуре HTTP, лучше выбрать другой транспорт. А вот если сегмент сети изолирован и большинство протоколов попросту заблокированы, DNS-туннели эффективны.

Порносайты

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

Стоит ли говорить, как непросто нам было сформировать подборку ресурсов... 

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

Небольшая модификация С2 — и заработала бесперебойная передача команд через несколько порносайтов. Получилась своеобразная round-robin-балансировка.

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

Самое интересное: С2-агент с передачей команд через порносайты так и остался необнаруженным. 

Рассказав об этой ситуации коллегам из SOC, мы в ответ услышали: «Да мы видели эту активность! Но разве будет L1-аналитик писать ведущему инженеру, мол, хватит смотреть порнуху? Кринж, да и только». По опыту, это частая реакция, если у организации нет жесткого регламента с прямым запретом «взрослых» ресурсов.

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

Итог

Существует огромное количество способов замаскировать передачу С2-команд. Кто-то гоняет трафик через Domain Borrowing, кто-то — через порталы с музыкой. Какие-то способы всегда будут актуальными, какие-то подойдут только в определенных случаях, а какие-то ушли в прошлое.

И как быть? Как защитить инфраструктуру от подобной аномальной активности? Не перемещать же всех сотрудников в изолированный сегмент сети с ограниченным и контролируемым доступом в интернет. Это уже меры повышенной безопасности, которые подойдут далеко не каждой организации. 

Мы рекомендуем поступать так:

  • На конечных устройствах используйте EDR-агенты и AV-решения, интегрируемые с песочницей. Они очень мешают C2-агенту исполняться. Даже если он не делает Exec(), а просто помещается в %AUTORUN%, это все равно спровоцирует вызов соответствующей Ring3 WinAPI, собирающий телеметрию EDR-агент обнаружит подозрительную активность и отправит алерт аналитику SOC.

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

  • Применяйте специализированные решения безопасности для работы с DNS-трафиком.

  • Используйте контентную фильтрацию и белые списки на уровне HTTP и DNS, чтобы контролировать посещаемые пользователями ресурсы.

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

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