
Набор инструментов для аппаратной песочницы

Набор инструментов для аппаратной песочницы
Вредоносное ПО часто использует методы анти-ВМ, которые могут различаться по сложности обнаружения и противодействия. Хотя интеграция мер анти-обнаружения в наших лабораториях является часто используемым вариантом, нам также следует рассмотреть использование реальной аппаратной песочницы, даже если это звучит странно. Используя потрясающий проект PCILeech и аппаратный доступ DMA, XenoboxX предоставляет набор инструментов для задач анализа, таких как дамп динамически выделенной памяти и поиск IoC. Эти инструменты позволяют нам внедрять код на уровне ядра через DMA, что делает обнаружение значительно более сложным и даёт новый взгляд на анализ.
XenoboxX в настоящее время ориентирован на 64-битную Windows, но в будущем может быть расширен и на другие платформы.
Инструмент был представлен на DEFCON 32 Demo Labs: здесь
Очевидно, мы говорим о физических средах, поэтому:
установите DMA Board на целевой ПК. Подключите плату к хост ПК
установите PCILeech на ваш хост ПК: если вы не собираетесь разрабатывать или вносить изменения, вы можете просто установить бинарные файлы (думаю, это наиболее распространённый вариант), доступные на странице релизов
установите XenoboxX на ваш хост ПК: как и в предыдущем пункте, вам могут понадобиться только предварительно скомпилированные бинарные файлы (в папке pcileech)
внедрите модуль PCILeech:
./pcileech kmdload -kmd WIN10_X64_3
это вернёт адрес памяти, который вы будете использовать для запуска шеллкодов (напр. 0x7ffff000)
запустите шеллкоды XenoboxX:
./pcileech wx64_dumpalloc -0 0xbac -s "\\??\C:\temp\test" -kmd 0x7ffff000
В настоящее время XenoboxX содержит 3 wx64 шеллкода:
wx64_dumpalloc: прикрепляется к определённому PID и дампит все выделения памяти, выполненные процессом. Если флаги защиты существующей памяти изменяются, область дампится снова (иногда вредоносное ПО меняет защиты, чтобы избежать проверок).wx64_memgrep: ищет заданные пользователем строки в памяти, выделенной PID. Может быть прикреплён к процессу на определённое время.wx64_strings: ищет все строки в памяти, выделенной PID. Может быть прикреплён к процессу на определённое время.Примечание: в качестве экспериментального подхода Xenobox в настоящее время вообще избегает перехвата (hooking), и все обнаружения выполняются через опрос (polling). Очевидно, это имеет некоторые недостатки, но это намеренный выбор дизайна на данный момент, чтобы быть максимально скрытным.
Пример:
./pcileech wx64_dumpalloc -0 0xbac -s "\\??\C:\temp\test" -kmd 0x7ffff000
-0 PID для присоединения в шестнадцатеричном формате (обязательно)-1 время мониторинга процесса. Значение по умолчанию: 0x20-s выходная папка, куда будут сохранены дампы памяти и логПример:
./pcileech wx64_memgrep -0 0x564 -1 0x80 -s "Hello, 123" -2 1 -kmd 0x7ffff000
-0 PID для присоединения в шестнадцатеричном формате (обязательно)-1 время мониторинга процесса. Значение по умолчанию: 0x20-2 поиск строки ASCII (0x0) или WIDE (0x1). Значение по умолчанию: 0x0-3 поиск с учётом регистра (0x1) или без (0x0). Регистрозависимый поиск быстрее. Значение по умолчанию: 0x0-4 поиск только на страницах памяти с возможностью записи (0x0) или всех (0x01). Значение по умолчанию: 0x0-s строка для поиска (в двойных кавычках)Пример:
./pcileech wx64_strings -0 0x19e0 -1 0x100 -3 0x15 -kmd 0x7ffff000
-0 PID для присоединения в шестнадцатеричном формате (обязательно)-1 время мониторинга процесса. Значение по умолчанию: 0x20-2 поиск строки ASCII (0x0) или WIDE (0x1). Значение по умолчанию: 0x0-3 минимальная длина строки. Значение по умолчанию: 0xA-4 поиск только на страницах памяти с возможностью записи (0x0) или всех (0x01). Значение по умолчанию: 0x0Если вы хотите изменить или пересобрать скрипты XenoboxX, помните, что вам понадобятся некоторые файлы из репозитория PCILeech, а именно:
wx64_common.hwx64_common.cshellcode64.exeВ комментариях каждого .c файла вы найдёте инструкции по компиляции. Например:
cl.exe /O1 /Os /Oy /FD /MT /GS- /J /GR- /FAcs /W4 /Zl /c /TC /kernel wx64_common.c
cl.exe /O1 /Os /Oy /FD /MT /GS- /J /GR- /FAcs /W4 /Zl /c /TC /kernel wx64_dumpalloc.c
ml64.exe wx64_common_a.asm /Fewx64_dumpalloc.exe /link /NODEFAULTLIB /RELEASE /MACHINE:X64 /entry:main wx64_dumpalloc.obj wx64_common.obj
shellcode64.exe -o wx64_dumpalloc.exe "DUMP ALLOCATED MEMORY \n===============================================================\nREQUIRED OPTIONS: \n -0 : Process PID to open. Example '-0 0x0fe0'. \nOPTIONAL OPTIONS: \n -1 : Process monitoring timeout Default: 0x20. Example: '-1 0x100'. \n -s : Specify output folder/file for dumps. Example: \"\\??\C:\temp\test\"\n===== RESULT OF DUMPALLOC OPERATION ======================%s\nNTSTATUS : 0x%08X \n===============================================================\n"
XenoboxX — это не окончательный инструмент анализа: это очень специфический подход, который я считаю полезным для очень специфического анализа. Я не думаю, что этот инструмент заменит ваш текущий рабочий процесс, но, возможно, он окажется полезным для той самой неприятной вредоносной программы.
Вклад и предложения приветствуются. Пожалуйста, откройте issue, если у вас есть вопросы, или pull request, если хотите внести свой вклад. Спасибо!