Shinigami — это экспериментальный инструмент, предназначенный для обнаружения и распаковки имплантатов вредоносного ПО, внедряемых с помощью технологического процесса или стандартных процедур упаковщика.
Инструмент работает путем подключения функций NT, связанных с очисткой процессов, и маркировки новых исполняемых страниц памяти битом защиты страницы. Этот метод позволяет Синигами обнаруживать косвенные изменения потока, обычно вызванные шелл-кодом или распакованным кодом, которые часто указывают на наличие вредоносного ПО. Синигами создает целевой исполняемый файл в приостановленном состоянии и внедряет библиотеку DLL под названием «Ичиго». Эта библиотека автоматически подключает все необходимые функции для обнаружения и извлечения имплантата. Как только артефакт будет полностью извлечен, инструмент завершит процесс.
Эффективность синигами может варьироваться в зависимости от конкретного вредоносного ПО, на которое он нацелен. Тем не менее, это ценное дополнение к любому набору инструментов для анализа вредоносных программ и может оказаться полезным при обнаружении и анализе вредоносных программ, использующих очистку процессов или общие процедуры упаковщика.
Важно: это инструмент динамической распаковки, и его не следует запускать на вашем личном компьютере или в лаборатории статического анализа.
Основной метод Shinigami для извлечения имплантатов, введенных с помощью процесса выемки, включает в себя перехват двух функций NT: NtResumeThread и NtWriteVirtualMemory. Вот как это работает:
Крючок NtResumeThread
NtWriteVirtualMemory
Hook
--stop-at-write
. Универсальный модуль распаковщика Shinigami помечает вновь выделенные области памяти битом PAGE_GUARD. Он также применяет этот бит, если защита какой-либо существующей области памяти заменена чем-то исполняемым. Используя защитные страницы, он может отслеживать, какая область памяти будет использоваться для размещения какого-либо шелл-кода или PE-образов.
Для каждого обнаруженного шеллкода Синигами сохраняет необработанный шеллкод на диске. Он также сканирует эту область памяти в поисках PE-файлов и сохраняет их. Shinigami рассматривает каждое выполнение шелл-кода как новый этап, поэтому к концу у вас будет рабочий каталог с файлами с именем filename_shellcode_STAGENUM.bin or .exe
.
У инструмента есть несколько опций:
Usage: Shinigami [--help] [--version] [--output VAR] [--stop-at-write] [--verbose] [--only-executables] [--exported VAR] program_name
Positional arguments:
program_name Name of the program to execute
Optional arguments:
-h, --help shows help message and exits
-v, --version prints version information and exits
-o, --output Directory to dump artefacts
--stop-at-write Unhollow: Stop the execution when the PE file is being to be written
--verbose Display a verbose output
-p, --only-executables Only extract PE artefacts
-e, --exported Exported Function: Choose a exported function to execute if the target is a DLL (rundll will be used)
Некоторые важные параметры:
-o, --output : указывает каталог для дампа извлеченных артефактов. По умолчанию извлеченные артефакты будут сохранены в каталоге вывода в текущем рабочем каталоге. Вы можете указать другой каталог, передав его путь в качестве аргумента.
--stop-at-write : этот аргумент используется во время распаковки пустого процесса. Когда Синигами обнаруживает, что PE-файл записывается в пустой процесс, он останавливает выполнение и сохраняет извлеченный PE-файл. Эта опция может быть полезна, если вы хотите избежать выполнения всего пустого процесса и вам нужно только извлечь распакованный код.
--verbose : отображает подробный вывод. Это может быть полезно для отладки или понимания внутренней работы синигами.
![]() |
---|
Тестирование против Драйдекса |
После завершения извлечения процесс завершается, и вы получаете (надеюсь на это) извлеченный PE:
![]() |
---|
Сброшенный имплантат |
Обнаруженный имплантат будет удален в формате, описанном в разделе «Методы обнаружения».
![]() |
---|
Распаковка рандомного загрузчика описана здесь |
В приведенном выше примере Shinigami автоматически обнаружил поведение универсального загрузчика и извлек из него все выполненные шеллкоды и изображения, не требуя каких-либо специальных переключателей для включения или отключения процедуры распаковки. Это стало возможным, поскольку Синигами разделяет некоторые функции с модулем unhollow, используя общие хуки, предоставляемые библиотекой Gancho.
![]() |
---|
Распаковка Emotet DLL |
Shinigami также имеет поддержку DLL и возможность восстанавливать внедренные двоичные файлы с использованием отдельных заголовков DOS. Примечательно, что образцы вредоносных программ, такие как Emotet, используют эту технику для обхода PE-сканеров в памяти. Синигами обнаруживает такие недостающие части (заголовок DOS) и использует эвристику для их восстановления.
Получите свой вкус на странице выпуска.
Было бы здорово, если бы вы помогли этому проекту, поэтому, если хотите, вот зависимости и шаги.
Пожалуйста, откройте проблему или запрос на включение любых изменений, которые вы хотели бы внести.
Этот крутой образ талисмана был вдохновлен фильмом «Блич» и создан Dall-E.