
Первый бэкдор в System Management Mode с открытым исходным кодом, публично доступный для платформ на основе UEFI. Отлично подходит в качестве универсального полигона для различных SMM-экспериментов.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Это устаревший заброшенный проект, за актуальной версией бэкдора обратитесь к странице проекта SMM Backdoor Next Gen и его документации:
https://github.com/Cr4sh/SmmBackdoorNg
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Для получения дополнительной информации об этом проекте, пожалуйста, прочитайте следующую статью:
http://blog.cr4.sh/2015/07/building-reliable-smm-backdoor-for-uefi.html
Содержимое репозитория:
SmmBackdoor.py -- программа на Python, которая позволяет внедрять код бэкдора в PE-образ UEFI DXE-драйвера, взаимодействовать с установленным бэкдором для чтения SMRAM и выполнять некоторые другие полезные действия.
SmmBackdoor/ -- исходный код части UEFI, которая выполняется в режиме системного управления (System Management Mode).
SmmBackdoor.efi, SmmBackdoor.pdb -- бинарный файл части UEFI и его отладочные символы.
smm_call/ -- Linux-программа, подтверждающая концепцию (proof of concept), которая взаимодействует с установленным бэкдором для получения root-привилегий для своего процесса.
Для сборки проекта SmmBackdoor необходима машина с Windows, Visual Studio 2008 и исходным кодом EDK2 (https://github.com/tianocore/edk2).
Пошаговая инструкция:
Скопируйте подкаталог SmmBackdoor в каталог исходного кода EDK2.
Отредактируйте файл Conf/target.txt и установите значение свойства ACTIVE_PLATFORM равным OvmfPkg/OvmfPkgX64.dsc.
Отредактируйте OvmfPkg/OvmfPkgX64.dsc и добавьте следующие строки в конец файла:
#
# 3-rd party drivers
#
SmmBackdoor/SmmBackdoor.inf {
<LibraryClasses>
DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
}
4. Запустите командную строку Visual Studio 2008 и выполните cd в каталог EDK2.
Выполните Edk2Setup.bat --pull для настройки среды сборки и загрузки необходимых бинарных файлов.
cd SmmBackdoor && build
После компиляции результирующий PE-образ будет создан в Build/OvmfX64/DEBUG_VS2008x86/X64/SmmBackdoor/SmmBackdoor/OUTPUT/SmmBackdoor.efi
Чтобы запустить SmmBackdoor.efi в качестве полезной нагрузки инфектора на примере материнской платы Intel DQ77KB:
Сделайте дамп прошивки материнской платы с помощью аппаратного программатора SPI.
Откройте сохранённый образ прошивки в UEFITool.
Извлеките PE-образ FFS-файла с GUID = 26A2481E-4424-46A2-9943-CC4039EAD8F8 и сохраните его в файл extracted.bin.
Внедрите в извлечённый образ SmmBackdoor.efi с помощью SmmBackdoor.py:
$ python SmmBackdoor.py --infect extracted.bin --output infected.bin --payload SmmBackdoor.efi
В UEFITool замените исходный PE-образ на infected.bin.
Сохраните изменённый образ прошивки в файл и запишите его в ПЗУ материнской платы с помощью программатора.
Бэкдор также имеет возможности вывода отладочной информации, которые позволяют видеть отладочные сообщения фазы DXE на экране и получать отладочные сообщения фазы runtime через COM-порт.
Для использования SmmBackdoor.py необходимо установить библиотеку pefile для Python (https://pypi.python.org/pypi/pefile) и фреймворк CHIPSEC (https://github.com/chipsec/chipsec), включая привязки к Python.
Поддерживаемые команды:
SmmBackdoor.py --infect <source_path> --output <dest_path> --payload <payload_path> - внедрить указанный код бэкдора в PE-образ DXE-драйвера.
SmmBackdoor.py --test - проверить наличие бэкдора и вывести информацию о состоянии из структуры BACKDOOR_INFO.
SmmBackdoor.py --dump-smram - сохранить все доступные области SMRAM в файлы.
SmmBackdoor.py --read-phys
- вывести шестнадцатеричный дамп страницы физической памяти по указанному адресу.SmmBackdoor.py --read-virt
- вывести шестнадцатеричный дамп страницы виртуальной памяти по указанному адресу.SmmBackdoor.py --timer-enable - включить периодический таймер SMI, который требуется для smm_call (по умолчанию он включён).
SmmBackdoor.py --timer-disable - выключить периодический таймер SMI.
Использование smm_call:
smm_call [<arg_1> [<arg_2>]] - отправить указанный управляющий код и аргументы SMM-бэкдору.
-
smm_call --privesc - попросить бэкдор предоставить root-привилегии вызывающему процессу и запустить командную оболочку.
Обратите внимание, что этот код был протестирован только на материнской плате Intel DQ77KB. Вы можете попробовать запустить его на любом другом совместимом с UEFI оборудовании, но некоторые функции бэкдора могут не работать.
Автор:
Dmytro Oleksiuk (aka Cr4sh)