
Патчинг бинарных файлов через MITM: BackdoorFactory + mitmProxy.
БЛОГ: http://secureallthethings.blogspot.com/2017/08/closing-door-end-of-backdoor-factory.html
Только для специалистов по безопасности и исследователей.
###ТЕПЕРЬ РАБОТАЕТ ТОЛЬКО С v.0.17 >= MITMPROXY >= v.0.11
Docker:
# sudo echo 1 > /proc/sys/net/ipv4/ip_forward # linux
# sudo sysctl -w net.inet.ip.forwarding=1 # macOS
docker pull secretsquirrel/bdfproxy
docker run -it -p 8080:8080 secretsquirrel/bdfproxy bash
# ./bdf_proxy.py
Установка на Kali:
apt-get update
apt-get install bdfproxy
Black Hat USA 2015:
Video: https://www.youtube.com/watch?v=OuyLzkG16Uk
Paper: https://www.blackhat.com/docs/us-15/materials/us-15-Pitts-Repurposing-OnionDuke-A-Single-Case-Study-Around-Reusing-Nation-State-Malware-wp.pdf
DerbyCon 2014:
Video: http://www.youtube.com/watch?v=LjUN9MACaTs
BDFProxy начинается примерно на 18-й минуте.
Свяжитесь с разработчиком:
IRC:
irc.freenode.net #BDFactory
Twitter:
@midnite_runr
Этот скрипт использует две библиотеки: The Backdoor Factory (BDF) и mitmProxy.
###Концепция: Патчит двоичные файлы во время загрузки в стиле MITM.
###Зачем: Потому что многие сайты с инструментами безопасности до сих пор раздают двоичные файлы по не-SSL/TLS каналам.
Вот краткий список:
sysinternals.com
Microsoft - MS Security Essentials
Almost all anti-virus companies
Malwarebytes
Sourceforge
gpg4win
Wireshark
etc...
Да, некоторые из этих приложений защищены механизмами самопроверки. В качестве доказательства концепции я работал над способом автоматического обхода проверок NSIS. Однако это не устраняет исходную проблему изменения битов во время загрузки и выполнения вредоносной полезной нагрузки. Кроме того, BDF по умолчанию вырезает указатель таблицы сертификатов Windows PE во время загрузки, тем самым удаляя подпись из двоичного файла.
##Зависимости:
Pefile - most recent
ConfigObj
mitmProxy - Kali Build .10
BDF - most current
Capstone (part of BDF)
##Поддерживаемое окружение: Протестировано на всех сборках Kali Linux: будь то мощный физический ноутбук, Raspberry Pi или виртуальная машина — каждая из них может запускать BDFProxy.
##Установка: BDF находится в bdf/
Выполните следующее, чтобы загрузить самую свежую версию:
./install.sh
ИЛИ:
git clone https://github.com/secretsquirrel/the-backdoor-factory bdf/
Если вы получили ошибку сертификата, выполните следующее:
mitmproxy
И выйдите [Ctr+C] после загрузки mitmProxy.
##Использование: Перед каждым использованием обновляйте всё:
./update.sh
ПРОЧТИТЕ КОНФИГ!!!
-->bdfproxy.cfg
Перед запуском BDFProxy необходимо настроить параметры C2-хоста и порта. НЕ ДОПУСКАЙТЕ ПЕРЕСЕЧЕНИЯ ПОРТОВ C2 между разными полезными нагрузками. Иначе вы будете отправлять Linux-шеллы на Windows-машины, и всё будет повсюду падать с segfault. После запуска будет создан resource-скрипт Metasploit, который поможет настроить ваш C2-канал. Внимательно проверьте его. Кстати, всё, что находится за пределами раздела [Overall], обновляется на лету, так что вам не нужно убивать прокси, чтобы изменить настройки под ваше окружение.
Но постойте! Вам нужно настроить вашу mitm-машину для перехвата трафика! Если вы используете wifiPineapple, я модифицировал скрипт, выпущенный hack5, чтобы помочь вам с настройкой. Запустите ./wpBDF.sh и введите правильные конфигурации для вашего окружения. Этот скрипт настраивает iptables так, чтобы через прокси пропускался только http-трафик (не SSL). Весь остальной трафик пересылается обычным образом.
Затем:
./bdf_proxy.py
Вот несколько отличных ASCII-схем для возможных физических конфигураций прокси:
Использование в LAN:
<Internet>----<mitmMachine>----<userLan>
Использование Wi-Fi:
<Internet>----<mitmMachine>----<wifiPineapple>)))
##Тестирование:
Suppose you want to use your browser with Firefox and FoxyProxy to connect to test your setup.
Update your config as follows:
transparentProxy = None
Configure FoxyProxy to use BDFProxy as a proxy.
Default port in the config is 8080.
##Логирование:
У нас оно есть. Окно прокси быстро заполнится огромным количеством ссылок в зависимости от тестируемого клиента. Используйте tail -f proxy.log, чтобы видеть, что патчится и блокируется вашими настройками чёрного списка. Однако следите за главным окном прокси, если вы выбрали ручное патчингование двоичных файлов: всё происходит быстро, и за кулисами трафик обрабатывается многопоточно, но первоначальные запросы и ответы блокируются для вашего удобства просмотра.
##Сценарии атак (все — с разрешения целей): -Evil Wifi AP -Arp Redirection -Physical plant in a wiring closet -Logical plant at your favorite ISP
##Сообщение об ошибках
Ошибки случаются, но если я не могу понять вашу проблему, я не могу вам помочь.
Отправляйте проблемы сюда: https://github.com/secretsquirrel/BDFProxy/issues
Включите следующую информацию из вывода этих команд (для длинных выводов используйте pastebin):
# bdfproxy only supports v11 -> v17
$ mitmproxy --version
$ uname -a
# Use pastebin perhaps
$ cat bdfproxy.cfg
$ ./bdf_proxy.py
###Журнал изменений:
####07/04/2016
Поддержка BDF Preprocessor и mitmProxy v17
####12/20/2015
Добавлены параметры конфигурации в bdfproxy.cfg для поддержки подписи кода PE из BDF => CODE_SIGN Подробности см. в README BDF
####11/13/2015
Удалены зависимости от python-magic, потому что существуют две библиотеки с таким названием. Это сбивает с толку.
####10/19/2015
Добавлена поддержка патчинга каталога импорта BDF в code cave вместо новой секции. Для этого установите IDA_IN_CAVE в True в файле bdfproxy.cfg. ЭКСПЕРИМЕНТАЛЬНО...
####8/12/2015
Добавлена поддержка метода замены PE: заменяет загруженный двоичный файл на предоставленный атакующим. Чтобы использовать, измените PATCH_METHOD на replace и укажите SUPPLIED_BINARY
####8/6/2015
Добавлена поддержка onionduke. Чтобы использовать, измените PATCH_METHOD на onionduke и SUPPLIED_BINARY на двоичный файл, который вы хотите привязать к целевому исполняемому файлу.
Добавлена поддержка установки проверки и патчинга requestedExecutionLevel в манифесте PE как highestAvailable для PE-бинарников x86 и x86_64. Установите RUNAS_ADMIN в True.
Добавлена поддержка настройки совместимости с устаревшими машинами XP через флаг XP_MODE со значением True. Это может обеспечить уклонение от антивирусов, поскольку их эмуляторы могут выходить из строя, если этот параметр установлен в FALSE.