Как не бороться с обфускацией 🫤
Автоматическое извлечение конфигураций упрощает выявление новых C2. Мы реверсим вредоносное семейство, находим конфигурацию и пишем скрипт для ее извлечения. Однако, если код сильно обфусцирован, как в случае, например, с
Помимо техники
Значение, которое кладется в edx, — второй аргумент функции run_send_recv_timer — вычисляется весьма странным образом, хотя в итоге результат выглядит как на скрине 2.
Все эти арифметические упражнения необходимы, чтобы в итоге получить 1.
📂 Эффективное извлечение конфигурации требует умения находить важные фрагменты кода и данных, в том числе среди подобных образцов.
Нас интересует в этом случае публичный ECDH-ключ сервера, используемый для генерации сессионного ключа шифрования данных в протоколе. Он зашифрован однобайтовым XOR. Проблема заключается в рандомизированных арифметических операциях для сборки буфера ключа на стеке.
Найти функцию расшифровки в дампе просто, нужный фрагмент кода — на скрине 3.
🧐 Встает проблема найти ссылку на функцию. Если бы семпл был x32, то задача была бы проста: найти начало функции и байты
Но в
💡Примечание: ссылок две, потому что зашито два ключа — один для
Найдя ссылку на функцию расшифровки, ищем начало вызывающей ее функции. Ее псевдокод — на скрине 4.
Зашифрованный ключ собирается на стеке и далее расшифровывается. Мы знаем, что за этой красотой стоит сильно обфусцированный ассемблерный код, значит, считать буфер «as is» будет тяжело.
Прибегнем к такому инструменту, как эмулятор. Мы не будем деобфусцировать это скриптом, воспроизводить логику, а просто «выполним» это и считаем результат.
Для этого, поскольку мы знаем адрес ссылки на функцию
В итоге получаем изящное решение: создаем эмулятор, выделяем 4 байта под длину результата, загружаем тело функции как шеллкод и устанавливаем хук, который будет срабатывать на каждой инструкции.
Внутри коллбэка мы пропускаем один
Благодаря эмулятору, мы не стали пытаться изменить обфускацию, а приняли ее такой, какая она есть, чтобы получить желаемое 😌
#tip #trick #C2
@ptescalator
Автоматическое извлечение конфигураций упрощает выявление новых C2. Мы реверсим вредоносное семейство, находим конфигурацию и пишем скрипт для ее извлечения. Однако, если код сильно обфусцирован, как в случае, например, с
Emotet 5, задача усложняется.Помимо техники
Control Flow Flattening, которая сама по себе неприятна, он добавляет много мертвого кода, а также раскладывает арифметические выражения на набор, казалось бы, бессмысленных и случайных операций, например, как на скрине 1.Значение, которое кладется в edx, — второй аргумент функции run_send_recv_timer — вычисляется весьма странным образом, хотя в итоге результат выглядит как на скрине 2.
Все эти арифметические упражнения необходимы, чтобы в итоге получить 1.
Нас интересует в этом случае публичный ECDH-ключ сервера, используемый для генерации сессионного ключа шифрования данных в протоколе. Он зашифрован однобайтовым XOR. Проблема заключается в рандомизированных арифметических операциях для сборки буфера ключа на стеке.
Найти функцию расшифровки в дампе просто, нужный фрагмент кода — на скрине 3.
E8 <function-address-LE>, то есть call с операндом в виде адреса функции расшифровки. Но в
x64 вся адресация RIP-relative, то есть операнды-адреса — это смещения относительно конца текущей инструкции. Значит, мы найдем все инструкции call и проверим, равен ли операнд адресу начала функции расшифровки. Выглядит это так:
calls = self.mdmp.find_bytes(b"\xE8", segment_start, segment_size, find_first=False)
decrypt_refs = []
for call_pos in calls:
call_offset = self.mdmp.read(call_pos + 1, 4)
call_offset = struct.unpack("<i", call_offset)[0]
if call_pos + 5 + call_offset == decrypt_key_func_start:
decrypt_refs.append(call_pos)
if len(decrypt_refs) == 2:
break
💡Примечание: ссылок две, потому что зашито два ключа — один для
ECDH, второй для ECDSA, каждый расшифровывается в отдельной функции.Найдя ссылку на функцию расшифровки, ищем начало вызывающей ее функции. Ее псевдокод — на скрине 4.
Зашифрованный ключ собирается на стеке и далее расшифровывается. Мы знаем, что за этой красотой стоит сильно обфусцированный ассемблерный код, значит, считать буфер «as is» будет тяжело.
Прибегнем к такому инструменту, как эмулятор. Мы не будем деобфусцировать это скриптом, воспроизводить логику, а просто «выполним» это и считаем результат.
Для этого, поскольку мы знаем адрес ссылки на функцию
decrypt_KEY, мы должны всего лишь найти начало функции decrypt_ECK1, считать ее и отдать эмулятору, который сделает всю грязную работу. Для эмуляции используем Speakeasy, который умеет эмулировать не только инструкции, но и среду ОС.В итоге получаем изящное решение: создаем эмулятор, выделяем 4 байта под длину результата, загружаем тело функции как шеллкод и устанавливаем хук, который будет срабатывать на каждой инструкции.
def emulate_decrypt_key_func(self, func_body):
emul = speakeasy.Speakeasy()
shellcode = emul.load_shellcode(fpath=None, data=func_body, arch="amd64")
ctx = {"entry": True, "mem": emul.mem_alloc(4), "skip_call": True}
emul.add_code_hook(self.code_hook_key, ctx=ctx)
emul.run_shellcode(shellcode)
decrypted = self.decrypt(ctx["encrypted_string"], ctx["key"], ctx["length"])
return decrypted
Внутри коллбэка мы пропускаем один
call — вызов пустышки nullsub_4 — и останавливаемся перед вызовом decrypt_key. В этот момент в одном из параметров лежит готовый буфер с зашифрованным ключом. Далее этот буфер считывается и расшифровывается в ECDH-ключ, как видно на скрине 5.Благодаря эмулятору, мы не стали пытаться изменить обфускацию, а приняли ее такой, какая она есть, чтобы получить желаемое 😌
#tip #trick #C2
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍15❤6🥰1👏1
Фишинговая легитимность 😂
В рамках анализа одного из фишинговых писем мы заметили, как злоумышленники попытались разместить фишинговый контент на странице домена telegra․ph.
Их задумка, вероятно, состояла не в использовании «обширного» функционала сервиса для публикации контента, а в репутации самого домена. И это может сработать, ведь с учетом вполне легитимного наполнения данных WHOIS, SSL-сертификата, а также веб-категории домена telegra․ph у различных агрегаторов эта страница при анализе получит минимум нейтральный статус.
Все это натолкнуло нас на мысль рассмотреть некоторые кейсы использования легитимных сервисов в фишинговых кампаниях, встречающиеся на практике.
1️⃣ Собственно, Telegraph.
Это анонимная блог-платформа известного разработчика. Функционал минималистичен, отсутствуют элементы управления, а текст публикуется с использованием только двух уровней заголовков: Title и сам текст.
В сам блог есть возможность поместить только кликабельные элементы для перехода на фишинговую страницу, при этом стилистика остается нейтральной и минималистичной. Пример фишинговой страницы в telegra․ph — на скриншоте.
В каком-то смысле подобный стиль страницы напоминает текстовое электронное письмо, с той лишь разницей, что непосредственно вредоносная ссылка прячется от автоматизированных средств анализа еще за одним уровнем перехода.
2️⃣ Онлайн-среды разработки.
Онлайн-среда разработки, поддерживающая HTML, JavaScript, да еще и с функцией совместной разработки и публикации (вроде JSFiddle), может использоваться для доставки вредоносов или внедрения в цепочку сложных и разнообразных техник редиректа.
Вот, например, размещенный на JSFiddle код с загрузкой png-картинки, исполняющийся без дополнительных действий:
Проблема подобных ссылок с онлайн-IDE понятна: под них легко придумать фишинговое содержание письма («я разработчик, вот мое портфолио с проектами»), а репутация их доменов не даст сработок у средств анализа.
Кроме того, для анализа содержимого страницы потребуются продвинутые средства, позволяющие эмулировать переходы по страницам или загрузку контента путем выполнения JavaScript-кода.
3️⃣ IPFS.
Известный протокол распределенного хранения файлов стал популярным инструментом среди злоумышленников. Точнее, не сам протокол, а так называемые IPFS-шлюзы — онлайн-сервисы, предоставляющие доступ к файлам, размещенным с использованием этой технологии без специальных клиентов. Они являются своего рода прокси для доступа к размещенным в подобном хранилище HTML-страницам, что позволяет злоумышленнику не заморачиваться с хостингом страницы.
Кроме того, файл с IPFS-хранилища невозможно удалить: IPFS-хостинг может лишь повесить заглушку о вредоносном содержимом запрашиваемого файла, при этом самому хостингу, чтобы найти такой контент в хранилище, требуется время и ресурсы.
✋ Чтобы защититься от подобной эксплуатации легитимных сервисов, при защите периметра можно использовать средства защиты, проверяющие контент веб-содержимого URL-ссылок перед вынесением вердикта. А при получении подобных ссылок на личную почту или в мессенджере лучше перестраховаться и проверить их в нескольких сервисах, показывающих репутацию индикаторов компрометации.
#web #ti #tip
@ptescalator
В рамках анализа одного из фишинговых писем мы заметили, как злоумышленники попытались разместить фишинговый контент на странице домена telegra․ph.
Их задумка, вероятно, состояла не в использовании «обширного» функционала сервиса для публикации контента, а в репутации самого домена. И это может сработать, ведь с учетом вполне легитимного наполнения данных WHOIS, SSL-сертификата, а также веб-категории домена telegra․ph у различных агрегаторов эта страница при анализе получит минимум нейтральный статус.
Все это натолкнуло нас на мысль рассмотреть некоторые кейсы использования легитимных сервисов в фишинговых кампаниях, встречающиеся на практике.
1️⃣ Собственно, Telegraph.
Это анонимная блог-платформа известного разработчика. Функционал минималистичен, отсутствуют элементы управления, а текст публикуется с использованием только двух уровней заголовков: Title и сам текст.
В сам блог есть возможность поместить только кликабельные элементы для перехода на фишинговую страницу, при этом стилистика остается нейтральной и минималистичной. Пример фишинговой страницы в telegra․ph — на скриншоте.
В каком-то смысле подобный стиль страницы напоминает текстовое электронное письмо, с той лишь разницей, что непосредственно вредоносная ссылка прячется от автоматизированных средств анализа еще за одним уровнем перехода.
2️⃣ Онлайн-среды разработки.
Онлайн-среда разработки, поддерживающая HTML, JavaScript, да еще и с функцией совместной разработки и публикации (вроде JSFiddle), может использоваться для доставки вредоносов или внедрения в цепочку сложных и разнообразных техник редиректа.
Вот, например, размещенный на JSFiddle код с загрузкой png-картинки, исполняющийся без дополнительных действий:
a = document.createElement('a');
document.body.appendChild(a);
a.download = name;
a.href = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABWSURBVDhPY0xISPh//0UOA7mAiVyNMH2jBjAwkBQGjD9KGBTEJ6OEO0kG2NvbMwCjnXwDsEU5SS5ANuDhjRCGJbPFSQsDdBfIyMhQZgDIQLK9QLWkDABPsQw5I+5qmAAAAABJRU5ErkJggg==";
a.click();
Проблема подобных ссылок с онлайн-IDE понятна: под них легко придумать фишинговое содержание письма («я разработчик, вот мое портфолио с проектами»), а репутация их доменов не даст сработок у средств анализа.
Кроме того, для анализа содержимого страницы потребуются продвинутые средства, позволяющие эмулировать переходы по страницам или загрузку контента путем выполнения JavaScript-кода.
3️⃣ IPFS.
Известный протокол распределенного хранения файлов стал популярным инструментом среди злоумышленников. Точнее, не сам протокол, а так называемые IPFS-шлюзы — онлайн-сервисы, предоставляющие доступ к файлам, размещенным с использованием этой технологии без специальных клиентов. Они являются своего рода прокси для доступа к размещенным в подобном хранилище HTML-страницам, что позволяет злоумышленнику не заморачиваться с хостингом страницы.
Кроме того, файл с IPFS-хранилища невозможно удалить: IPFS-хостинг может лишь повесить заглушку о вредоносном содержимом запрашиваемого файла, при этом самому хостингу, чтобы найти такой контент в хранилище, требуется время и ресурсы.
✋ Чтобы защититься от подобной эксплуатации легитимных сервисов, при защите периметра можно использовать средства защиты, проверяющие контент веб-содержимого URL-ссылок перед вынесением вердикта. А при получении подобных ссылок на личную почту или в мессенджере лучше перестраховаться и проверить их в нескольких сервисах, показывающих репутацию индикаторов компрометации.
#web #ti #tip
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍8😱3❤1
Так все же, как правильно? 🇨🇦
Anonymous Poll
21%
Хеш 😐
31%
Хэш 😒
3%
Хаш 🧠
4%
[ti ⌨️
2%
Криптосигнатура 🤓
15%
Контрольная сумма 🍞
1%
Идентификатор 🕵️♀️
3%
Чек-сумма 🧮
0%
Кодировка данных 💾
20%
5b717f9e843de36448780e90f00942fc 😃
😁10👍3🔥1
Полковники пишут первыми! (🔞 )
В коллекции вредоносных рассылок от имени правоохранительных органов пополнение.
В сентябре нескольким адресатам было отправлено письмо от «Следственного комитета» с повесткой для вызова на допрос в качестве свидетеля по уголовному делу (скриншот 1).
Сама повестка — это PDF-документ, который при попытке открыть его грустно констатирует, что просмотреть содержимое не получается и нужно скачать Adobe Font Package, чтобы данные отобразились корректно (скриншот 2).
🔗 Ссылка ведет на домен
К сожалению, файл представляет собой Medusa Stealer, поэтому прочитать документ так и не получится…
🧐 Если внимательно приглядеться к письму, можно заметить пасхалки — и разоблачить злоумышленников:
• В поле отправителя указано
• Письмо отправлено c IP-адреса, не принадлежащего организации, от имени которой якобы пришла повестка.
• «
IOCs
Net:
Files:
#ti #phishing #ioc
@ptescalator
В коллекции вредоносных рассылок от имени правоохранительных органов пополнение.
В сентябре нескольким адресатам было отправлено письмо от «Следственного комитета» с повесткой для вызова на допрос в качестве свидетеля по уголовному делу (скриншот 1).
Сама повестка — это PDF-документ, который при попытке открыть его грустно констатирует, что просмотреть содержимое не получается и нужно скачать Adobe Font Package, чтобы данные отобразились корректно (скриншот 2).
adobe.updatedownloader.com, откуда, если обратиться к нему с российского IP-адреса, действительно скачивается файл с именем:
adobe_PDF_reader_fonts_update_24.2.5_Win_x86-64.exe (bea1dfdae82c67aac7a262c25dffadc0190270e2412db0c051da9ffab8e3a157)
К сожалению, файл представляет собой Medusa Stealer, поэтому прочитать документ так и не получится…
🧐 Если внимательно приглядеться к письму, можно заметить пасхалки — и разоблачить злоумышленников:
• В поле отправителя указано
noreply@sledcom.ru — это легитимный адрес электронной почты государственного органа, однако письмо не содержит подписи DKIM, позволяющей проверить подлинность отправителя.• Письмо отправлено c IP-адреса, не принадлежащего организации, от имени которой якобы пришла повестка.
• «
СЛЕДСТВЕННIЙ КОМИТЕТ» в шапке письма.IOCs
Net:
updatedownloader.com
62.197.48.140
5.42.73.251
Files:
bea1dfdae82c67aac7a262c25dffadc0190270e2412db0c051da9ffab8e3a157
7fa0642a96e8e9a796a4dba55877d1c730c64f257956872c3f6d405417e30024
#ti #phishing #ioc
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍11👾4🤯2
В начале сентября эксперты группы киберразведки TI департамента PT ESC обнаружили интересный VHDX-файл, который оказался частью цепочки атаки на организации в странах Азии. Мы не знаем точного исходного вектора, но, скорее всего, файл распространялся через фишинг.
✍️ VHDX-файл — это виртуальный диск, который можно подключить к системе начиная с Windows 8 двойным нажатием мыши. Он будет считаться логическим томом до выключения системы.
Как и любой контейнер, VHDX-файл может выступать в роли вредоносного объекта. Исследователь Уилл Дорманн в посте от 2019 года рассказал, что с помощью специально подготовленного образа можно спровоцировать системную ошибку в Windows и вызвать «синий экран смерти».
👾 В атаках мы редко видим использование этого контейнера, однако виртуальный диск может содержать в себе вредоносные файлы, которые должна запустить жертва. Хакер может убедить жертву сделать это через техники социальной инженерии. Для начала заражения устройства жертве достаточно открыть присланный ей диск и запустить вредоносный файл внутри него. Схема заражения (например, как на первом скриншоте) такая же, как в случае, если бы пользователю прислали архив с таким же вредоносным вложенным файлом.
💡 Для хакеров преимущество в использовании VHDX-файлов (как и в использовании ZIP-файлов) заключается в том, что они не подпадают под действие MoTW (Mark of the Web): при запуске документа из этих контейнеров не включается режим Protected View, а Windows SmartScreen не предупреждает жертву об опасности. Стоит также отметить, что под VHDX-формат приспособлено меньшее количество антивирусных решений, чем под те же ISO-файлы. Следовательно, при попадании в систему образ вряд ли будет моментально удален этим СЗИ.
Хотя VHDX-файлы и редко используются в атаках, TI-аналитику, как и любому другому исследователю, важно уметь качественно анализировать эти файлы, чтобы не упустить важные детали, которые могут помочь провести атрибуцию или дать дополнительные IoC, позволяющие построить связи с другими атаками.
Хакеры допускают ошибки: они могут использовать один VHDX-файл в двух разных атаках или же загрузить ошибочные файлы. В любом из этих случаев злоумышленники, как правило, удаляют файлы, а так как это диск, то аналитик может попробовать их восстановить (в том числе с точными датами создания этих файлов) — другими словами, аналитик может построить таймлайн изменения файлов на диске. Это можно сделать с помощью специальных инструментов для проведения форензики.
• Создание виртуальной машины и монтирование диска в нее. Это позволит посмотреть файлы в проводнике и увидеть то, что получила жертва атаки (но не удаленные файлы).
• Autopsy — универсальный инструмент для исследования образов, который может получать данные из множества файлов разных типов, физических дисков, сырых образов. Есть таймлайн изменения файлов внутри образа (пример — на втором скриншоте).
• FTK Imager — аналог программы Autopsy, показавший наилучшие результаты в извлечении удаленных файлов с диска.
В скором времени мы опубликуем статью, в которой детально разберем эту атаку. Следите за новостями.
#ti #tool #tip #news
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤6👍6🐳1🆒1
Когда активно занимаешься реверсом, рано или поздно возникает ситуация, когда на твоем пути появляется исполняемый файл на Delphi. Анализ объектов в Delphi требует особого подхода, и вручную это делать сложно. Однако такой анализ можно значительно ускорить с помощью автоматизации, если знать, как именно устроена структура объектов.
🕵️ Первый шаг при анализе Delphi — не забыть переключить параметр компилятора в
Options → Compiler Options → Compiler, тогда IDA будет лучше обрабатывать вызовы функций.Классы в Delphi создаются через функцию
ClassCreate, которая получает на вход указатель на структуру класса и вызывает в нем функцию Tobject_NewInstance путем вычитания оффсета из указателя на VMT. 👀 Сама структура класса в Delphi выглядит следующим образом (пример на скриншоте 1):
struct DelphiClassInternal
{
DWORD* vmt;
DWORD* InterfaceTable; используется только для интерфейсов
DWORD* PAutoTable;
DWORD* PInitTable;
DWORD* TypeInfo;
DWORD* FieldTable;
DWORD* MethodTable;
DWORD* DynamicMethodTable;
}
💼 Рассмотрим содержимое полей
TypeInfo, MethodTable и FieldTable подробнее, поскольку в них больше всего полезной для анализа информации.➡️ TypeInfo
В Delphi каждый тип объекта имеет свой идентификатор. Как видно на скриншоте 2, для нашего объекта выставлен идентификатор 7 — тип
Class. В зависимости от этого типа, для объекта указывается соответствующий контекст. Для классов это информация о Property и указатель на родительский тип. Зная имя Property, нетрудно понять и разметить Get/Set-функции. Восстановление этих имен позволяет сильно упростить восприятие некоторых блоков кода. Пример на скриншоте 3.➡️ MethodTable
Внимательный читатель заметит, что на скриншоте 1 присутствуют имена некоторых методов. Достать их можно, заглянув в таблицу опубликованных (Published) методов (текущего и родительского классов). Delphi не хранит информацию о других типах методов: приватных, защищенных и публичных. Помимо имени, там приводятся: возвращаемый тип, количество аргументов, их типы и имена.
Псевдоструктуру метода можно представить так (пример на скриншоте 4):
struct CMArg
{
DWORD* TypeInfo;
WORD UNK;
BYTE NameLen;
char Name[];
BYTE UNK2[3];
}
struct ClassPubMethod
{
WORD EntrySize;
DWORD* MethodPtr;
BYTE NameLen;
char Name[];
WORD W_UNK1;
DWORD* ReturnType;
WORD W_UNK2;
BYTE ArgCount;
CMArg Args[];
}
Из-за механизма наследования методов в Delphi восстановление даже части имен методов имеет большую пользу, если сделать это глобально, для всех классов. Затем это можно использовать среди прочего и для генерации структуры VMT класса с осмысленными именами. Пример — на скриншоте 5.
➡️ FieldTable
Заглянув в
Class → FieldTable, можно найти большое количество информации о переменных (пример на скриншоте 6). Представлена она может быть в двух вариантах: 1. В виде имени, оффсета и номера типа переменной (из таблицы типов). Первые два байта в
FieldTable — количество элементов в этой таблице, следующие четыре — указатель на таблицу типов.2. В виде имени, оффсета и указателя на тип переменной (таблица начинается сразу после таблицы из п. 1).
Структура переменных имеет следующий вид:
struct VarTypeTable
{
WORD Count;
DWORD* Entries[];
}
struct ClassVar
{
DWORD* TypeInfo;
WORD VarOffset;
WORD UNK;
BYTE NameLen;
char Name[];
}
struct TableClassVar
{
WORD VarOffet;
WORD UNK;
WORD TableTypeNum;
BYTE NameLen;
char Name[];
}
Исходя из полученной информации о переменных можно составить структуру класса (нужно не забыть, что переменные также наследуются из родительских классов). Пример — на скриншоте 7.
🤔 Резюме: в Delphi присутствует большое количество RTTI-информации, за счет которой можно относительно просто разметить большое количество функций или восстановить структуру классов для упрощения статического анализа.
#TI #Delphi #Reverse
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👏6👍5👎1😱1💩1🤡1
😁12🤡7👻2🎃1
TLS в сети: как быть 🤷♂️
Ты — мощный движок разбора сетевого трафика.
Ты работаешь на благо системы защиты информации, перемалывая терабайты проходящих через тебя данных.
В твоих недрах крутятся десятки тысяч нефолзящих экспертных правил, тебе не страшны любые протоколы L7 — HTTP, SMTP, FTP, DNS.
Но внезапно в тебя подают какую-то невнятную мешанину из байтиков сетевого соединения по 443-му порту, которая начинается с магических |1603| 🧙
«О нет!». Это же TLS, декрипт которого никто не удосужился сделать, и его инкапсулированное содержимое теперь скрыто от тебя. Но ведь внутри может быть что-то плохое, что-то вредоносное. Как же быть?
Не расстраивайся! TLS-трафик в целом поддается анализу, хоть и не контентному. Можно выделить два основных метода:
1. Анализ информации из заголовков и сертификатов.
2. Анализ характеристик TCP-сессий.
Анализ информации из заголовков и сертификатов (актуально для версии TLS ниже 1.3)
Основные параметры заголовков, которые можно проанализировать:
• Версия протокола. Например, SSL 3.0 или TLS 1.0.
• Наборы шифров (cipher suites) — указывают на алгоритмы, которые будут использоваться для шифрования данных и создания MAC (Message Authentication Code).
• Алгоритмы сжатия.
• Порядок и типы поддерживаемых расширений. Например, расширение ALPN (Application-Layer Protocol Negotiation) используется для согласования протокола прикладного уровня (например, HTTP/2 или HTTP/3).
Аспекты анализа сертификатов:
• Цепочка сертификации: кто выдал сертификат (центр сертификации, CA), является ли цепочка валидной и корректно ли настроена.
• Срок действия сертификата: просроченные или неправильно настроенные сертификаты свидетельствуют о небезопасной конфигурации сервера или атаке, например о MITM (man in the middle).
• Подозрительные имена серверов (Common Name): они могут сигнализировать о поддельных или скомпрометированных сертификатах. Например, С2-сервер VenomRAT по умолчанию предоставляет интересную информацию о себе (скриншот 1).
🫵 Дополнительно можно анализировать цифровые отпечатки — уникальные идентификаторы клиентов, устанавливающих TLS-соединения, или серверов, принимающих такие соединения.
В основе работы JA3 и JA3s лежат сбор характеристик во время TLS-рукопожатия и генерация отпечатка. JA3 — это хеш-функция, которая вычисляется с помощью алгоритма MD5 на основе параметров, передаваемых клиентом при установке TLS-соединения. В результате формируется уникальный идентификатор клиента — JA3-отпечаток (WARNING — может фолзить!).
Например, JA3
Детектирование на основании JA3 и JA3s поддерживают практически все сетевые СЗИ, в том числе и продукты Positive Technologies — PT NAD и PT Sandbox. Анализ TLS 1.3 — более сложная задача, но об этом в другой раз.
Анализ характеристик TCP-сессий
Анализатор может смотреть на характеристики TCP-сессий, инкапсулирующих зашифрованный трафик: на размер пакетов, их частоту и временные интервалы между ними. Даже не видя содержимого пакетов, DPI-система способна сделать выводы о типе трафика или возможной аномалии.
В качестве примера можно привести бэкдор, который все делал правильно: «притащил» библиотеку для работы с SSL, пытаясь скрыть свои очень важные данные. Однако в сети он вел себя весьма интересно: клиент (то есть бэкдор) всегда отправлял на С2-сервер полезную нагрузку TCP размером 163 байта, а сервер отвечал ему полезной нагрузкой размером 166 байт (скриншот 3). Это или какой-то Heartbeat, или волшебный padding.
Понаблюдав за бэкдором некоторое время, убедившись, что это поведение не просто аномалия, а повторяющийся шаблон, мы с чистой совестью покрыли его детектом.
Вывод: увидел TLS — не расстраивайся.
Happy hunting! 🎯
#detect #malware #network #hunt #tips
@ptescalator
Ты — мощный движок разбора сетевого трафика.
Ты работаешь на благо системы защиты информации, перемалывая терабайты проходящих через тебя данных.
В твоих недрах крутятся десятки тысяч нефолзящих экспертных правил, тебе не страшны любые протоколы L7 — HTTP, SMTP, FTP, DNS.
Но внезапно в тебя подают какую-то невнятную мешанину из байтиков сетевого соединения по 443-му порту, которая начинается с магических |1603| 🧙
«О нет!». Это же TLS, декрипт которого никто не удосужился сделать, и его инкапсулированное содержимое теперь скрыто от тебя. Но ведь внутри может быть что-то плохое, что-то вредоносное. Как же быть?
Не расстраивайся! TLS-трафик в целом поддается анализу, хоть и не контентному. Можно выделить два основных метода:
1. Анализ информации из заголовков и сертификатов.
2. Анализ характеристик TCP-сессий.
Анализ информации из заголовков и сертификатов (актуально для версии TLS ниже 1.3)
Основные параметры заголовков, которые можно проанализировать:
• Версия протокола. Например, SSL 3.0 или TLS 1.0.
• Наборы шифров (cipher suites) — указывают на алгоритмы, которые будут использоваться для шифрования данных и создания MAC (Message Authentication Code).
• Алгоритмы сжатия.
• Порядок и типы поддерживаемых расширений. Например, расширение ALPN (Application-Layer Protocol Negotiation) используется для согласования протокола прикладного уровня (например, HTTP/2 или HTTP/3).
Аспекты анализа сертификатов:
• Цепочка сертификации: кто выдал сертификат (центр сертификации, CA), является ли цепочка валидной и корректно ли настроена.
• Срок действия сертификата: просроченные или неправильно настроенные сертификаты свидетельствуют о небезопасной конфигурации сервера или атаке, например о MITM (man in the middle).
• Подозрительные имена серверов (Common Name): они могут сигнализировать о поддельных или скомпрометированных сертификатах. Например, С2-сервер VenomRAT по умолчанию предоставляет интересную информацию о себе (скриншот 1).
🫵 Дополнительно можно анализировать цифровые отпечатки — уникальные идентификаторы клиентов, устанавливающих TLS-соединения, или серверов, принимающих такие соединения.
В основе работы JA3 и JA3s лежат сбор характеристик во время TLS-рукопожатия и генерация отпечатка. JA3 — это хеш-функция, которая вычисляется с помощью алгоритма MD5 на основе параметров, передаваемых клиентом при установке TLS-соединения. В результате формируется уникальный идентификатор клиента — JA3-отпечаток (WARNING — может фолзить!).
Например, JA3
a85be79f7b569f1df5e6087b69deb493 однозначно указывает на соединение ВПО Remcos с С2-сервером (скриншот 2). Детектирование на основании JA3 и JA3s поддерживают практически все сетевые СЗИ, в том числе и продукты Positive Technologies — PT NAD и PT Sandbox. Анализ TLS 1.3 — более сложная задача, но об этом в другой раз.
Анализ характеристик TCP-сессий
Анализатор может смотреть на характеристики TCP-сессий, инкапсулирующих зашифрованный трафик: на размер пакетов, их частоту и временные интервалы между ними. Даже не видя содержимого пакетов, DPI-система способна сделать выводы о типе трафика или возможной аномалии.
В качестве примера можно привести бэкдор, который все делал правильно: «притащил» библиотеку для работы с SSL, пытаясь скрыть свои очень важные данные. Однако в сети он вел себя весьма интересно: клиент (то есть бэкдор) всегда отправлял на С2-сервер полезную нагрузку TCP размером 163 байта, а сервер отвечал ему полезной нагрузкой размером 166 байт (скриншот 3). Это или какой-то Heartbeat, или волшебный padding.
Понаблюдав за бэкдором некоторое время, убедившись, что это поведение не просто аномалия, а повторяющийся шаблон, мы с чистой совестью покрыли его детектом.
Вывод: увидел TLS — не расстраивайся.
Happy hunting! 🎯
#detect #malware #network #hunt #tips
@ptescalator
🔥31👍8✍5👎3💩2🤡2