Poisontap – устройство способное взломать любой компьютер
Энтузиаст, хакер и просто хороший специалист в области компьютерной безопасности — Сэми Камар поделился новым способом взлома компьютеров под управлением macOS и Windows. Для этого он разработал устройство под названием Poisontap, которое состоит из набирающего все большую популярность миин-ПК – Raspberry Pi. Если подключить гаджет к компьютеру, то он определяется, как Ethernet-устройство, позволяющее перенаправлять на себя весь сетевой трафик.
Сначала Poisontap скачивает с компьютера все cookies, которые, как известно, хранятся в кэше браузера, а затем перехватывает управление Wi-Fi-роутером, что дает возможность посредством интернет отправлять любой код на устройство-жертву. Причем, после отключение хакерского гаджета от компьютера, на нем остается бэкдор. Таким образом, решение позволяет обмануть антивирусы и экраны блокировки.
Если вы хотите узнать о нем больше, Сэми полностью раскрывает его детали на своем сайте: samy.pl/poisontap/
Там же приведен ряд советов, как обеспечить защиту от такого рода атаки – от запечатывания USB-портов компьютера цементным раствором или клеем, до следования не очень обнадеживающим и непрактичным советам от Microsoft «Не оставляйте ваши лэптопы и компьютеры без присмотра».
Прежде чем мы перейдем к функционалу, я расскажу вам как установить Raspbian и Poisontap.
Часть 1. Установка Raspbian
Нам понадобиться sd-карта весом в 16-32 гигабайта, картридер(как вариант можно обойтись переходником) и образ системы.
Скачиваем отсюда https://www.raspberrypi.org/downloads/raspbian/ образ системы который вам больше нравиться (я выбрал фулл версию с предустановленным софтом – Raspbian Full Buster). Далее прожигаем образ на флешку через Win32DiskImager (ссылка: https://sourceforge.net/projects/win32diskimager/files/latest/download )
Так выглядит Win32DiskImager:
В Device мы выбираем нашу флешку, а в Image File – образ ОС, после нажимаем Write, когда процесс завершиться можно вставить флешку в нашу малину и запускаться, далее будет простая настройка, где нужно будет выбрать язык системы и тд., не вижу смысла этого показывать.
Часть 2. Настройка служб и Установка Poisontap
Когда система установлена можно настроить базовые службы.
Для начала открываем консоль и пишем sudo raspi-config
Далее в появившемся окне выбираем все то, что показано в гифке:
Когда мы все сделали перезагружаем малинку и после перезагрузки в консоли пишем sudo apt-get update.
В консоли пишем:
sudo apt-get install git npm
sudo npm install websocket
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash –
sudo apt-get install nodejs
git clone https://github.com/samyk/poisontap
cd poisontap
sudo node backend_server.js &
Дальше нам нужно создать bash скрипт – sudo nano install.sh.
Когда нажали Enter у вас откроется текстовый редактор, куда нужно поместить следущее:
# Instructions adjusted from https://gist.github.com/gbaman/50b6cca61dd1c3f88f41
sudo bash
echo -e “\nauto usb0\nallow-hotplug usb0\niface usb0 inet static\n\taddress 1.0.0.1\n\tnetmask 0.0.0.0” >> /etc/network/interfaces
echo “dtoverlay=dwc2” >> /boot/config.txt
echo -e “dwc2\ng_ether” >> /etc/modules
sudo sed –in-place “/exit 0/d” /etc/rc.local
echo “/bin/sh /home/pi/poisontap/pi_startup.sh” >> /etc/rc.local
mkdir /home/pi/poisontap
chown -R pi /home/pi/poisontap
apt-get update
apt-get -y install isc-dhcp-server dsniff screen nodejs
Выйти должно что-то такое:
Нажимаем CTRL + X, Y и Enter
Пишем в консоли sudo chmod +x install.sh и теперь можно запустить наш скрипт.
Как вы видите пришлось написать exit что бы скрипт пошел дальше, так что держите это в уме.
Если скрипт остановиться, используем exit снова.
Теперь нам нужно редактировать файл rc.local, по перед этим мы его забекапим на рабочий стол:
sudo cp /etc/rc.local /home/pi/Desktop/
sudo nano /etc/rc.local
Убираем все строки из файла, что бы он выглядел вот так:
Проделываем почти тоже самое с dhcpd.conf:
sudo cp /etc/dhcp/dhcpd.conf /home/pi/Desktop/
sudo cp dhcpd.conf /etc/dhcp/dhcpd.conf
На этом установка завершена, можно подключать наш rpi0 к компьютеру, но перед этим проверьте файл /etc/network/interfaces, в нем должны быть примерно такие строчки:
auto usb0
allow-hotplug usb0
iface usb0 inet static
address 1.0.0.1
netmask 0.0.0.0
Так же стоит добавить в файл /etc/default/isc-dhcp-server строчку:
INTERFACES=”usb0″
Часть 3. Функционал Poisontap
Когда PoisonTap подключен к компьютеру, он:
- Эмулирует Ethernet устройство через USB (или Thunderbolt);
- Захватывает весь интернет-трафик с компьютера (несмотря на то, что он является низкоприоритетным / неизвестным сетевым интерфейсом);
- Перекачивает и хранит HTTP cookies и sessions из браузера для top 1,000,000 сайтов Alexa;
- Предоставляет внутренний маршрутизатор атакующему, делая его доступным удаленно через исходящие соединения WebSocket и DNS;
- Устанавливает постоянный бэкдор основанный на веб-браузере в кеш HTTP для сотен тысяч доменов и обычных Javascript CDN URL, каждый из которых имеет доступ к cookie через отравление кеша;
- Позволяет атакующей стороне удаленно заставлять пользователя создавать HTTP-запросы и ответы прокси-сервера (GET & POST) с помощью куки–файлов пользователя в любом домене, который имеет бэкдор;
- Бэкдоры и удаленный доступ сохраняются даже после извлечения устройства и окончания атаки.
Что еще умеет Poisontap?
PoisonTap эмулирует Ethernet устройство (например, Ethernet через USB/Thunderbolt) — по умолчанию, Windows, OS X и Linux распознают ethernet устройство, автоматически загружают его как низкоприоритетное устройство сети и подают запрос через него, даже если машина заблокирована или защищена паролем.
PoisonTap отвечает на DHCP запрос и предоставляет машине IP адрес, однако, DHCP ответ создан для того, чтобы сообщить машине, что внешнее IPv4 пространство (0.0.0.0 – 255.255.255.255) является частью локальной сети PoisonTap, а не маленькой подсети (например, 192.168.0.0 – 192.168.0.255)
- Обычно не имеет значения, подключено ли вторичное сетевое устройство к машине, поскольку ему будет предоставлен более низкий приоритет, чем существующему (доверенному) сетевому устройству, и он не заменит шлюз для интернет трафика, но …
- Любая таблица маршрутизации / приоритетность шлюза / порядок безопасности службы сетевого интерфейса легко обходится ввиду приоритетности “LAN traffic” над “Internet traffic”.
- PoisonTap использует этот сетевой доступ даже в качестве низкоприоритетного сетевого устройства, поскольку подсеть
- низкоприоритетного сетевого устройства имеет более высокий приоритет, чем шлюз (маршрут по умолчанию) устройства с наивысшимприоритетом.
- Это означает, то, что если трафик предназначен для 1.2.3.4, тогда как обычно данный трафик попадает в маршрут/шлюз по умолчанию для первичного (не PoisonTap) сетевого устройства, PoisonTap на самом деле получает трафик, потому что локальная сеть / подсеть PoisonTap, как предполагается, содержит 1.2.3.4, и каждый другой существующий IP-адрес.
- Ввиду перечисленных выше причин, весь интернет трафик проходит через PoisonTap, даже если машина подключена к другому устройству сети с более высоким приоритетом и надлежащим шлюзом (подлинный wifi, ethernet,и т. д.)
Как работает перекачивание cookie?
- До тех пор, пока в веб-браузере работает фон, одна из открытых страниц, вероятно, будет выполнять HTTP-запрос в фоновом режиме (например, загружать новую рекламу, отправлять данные на аналитическую платформу или просто продолжать отслеживать вашу веб-активность) через AJAX или динамические теги script/iframe
- Вы можете увидеть это самостоятельно, просто зайдите в свой devtools / inspector (обычно Cmd + Shift + I или Ctrl + Shift + I), перейдите на самый посещаемый веб-сайт, перейдите на вкладку Network («Сеть») и наблюдайте, как удаленные ресурсы продолжают быть доступными, даже если вы не предпринимаете никаких действий на странице.
- По этому HTTP запросу, так как весь трафик выходит на PoisonTap устройство, PoisonTap DNS быстро возвращает свой адрес, заставляя, таким образом, HTTP запрос попадать на PoisonTap сервер (Node.js).
- Если DNS сервер указывает на внутренний IP (LAN), к которому PoisonTap не может получить права доступа, атака продолжает функционировать, поскольку внутренний DNS-сервер будет генерировать публичные IP-адреса для различных атакуемых доменов, и это те общедоступные IP-адреса, которые PoisonTap уже перехватил.
- Как только внутренний DNS сервер отвечает, браузер попадает на общедоступный IP адрес, в итоге, попадая на веб-сервер PoisonTap (Node.js) в любом из сценариев.
- Когда Node веб-сервер получает запрос, PoisonTap отвечает откликом, который может быть интерпретирован как HTML или Javascript, оба из которых выполняются правильно (многие веб-сайты загружают HTML или JS в фоновых запросах)
- Затем страница HTML/JS-agnostic производит множество скрытых iframes, один iframe для каждого домена Alexa-top-1-million
- Любая “X-Frame-Options” безопасность на домене теперь с легкостью обходится, т.к. PoisonTap сейчас является HTTP сервером и сам выбирает, какие заголовки отправлять клиенту.
- Так как каждый iframe HTTP запрос на сайт выполняется (например, ), HTTP cookies отправляются из браузера на «общедоступный IP » уже украденный PoisonTap, который быстро протоколирует информацию о cookies и аутентификации, записывая десятки тысяч пользовательских cookies на PoisonTap
- Любая “HttpOnly” cookie безопасность легко обходится и эти cookies захватываются, ввиду того, что Javascript не выполняется на самом домене, а используется в первую очередь только для загрузки iframe.
- Любая безопасность Cross-Origin Resource Sharing или Same-Origin Policy также обходится без проблем, потому что способ, с помощью которого был получен доступ к домену, браузеру кажется вполне законным/легитимным
- Все это происходит потому, что мы перехватываем cookies, а не учетные данные, и поэтому любые 2FA/MFA, реализованные на сайте, очень просто обходятся, когда атакующий использует cookie для входа. Так происходит ввиду того, что мы, на самом деле, не выполняем функцию входа, а продолжаем уже существующую сессию, которая не запускает двухфакторную проверку подлинности.
- Если сервер использует HTTPS, но в файлах cookie явно не выставлена отметка Secure cookie, защита HTTPS без проблем обходится и cookie отправляются в PoisonTap.
Удаленно доступные веб-бэкдоры
- В то время как PoisonTap создавал тысячи iframes, заставляя браузер загружать каждый из них, эти iframes являются не просто пустыми страницами, а скорее HTML + Javascript бэкдорами.
- Поскольку PoisonTap force-кэширует эти бэкдоры в каждом домене, бэкдор привязан к этому домену, позволяя атакующему использовать cookie домена и запускать запросы того же источника в будущем, даже если пользователь в настоящий момент не вошел в систему.
- Например, когда http://nfl.com/PoisonTap iframe загружен, PoisonTap принимает отклоненный интернет трафик и отвечает на HTTP запросы через Node веб-сервер.
- Добавлены дополнительные заголовки HTTP для кэширования страницы как неопределенной.
- Фактический ответ страницы представляет собой комбинацию HTML и Javascript, которая создает постоянный WebSocket на веб-сервере атакующего (через Интернет, а не на PoisonTap устройстве)
- WebSocket остаётся открытой, позволяя атакующему, в любой момент времени в будущем, подключиться к машине с бэкдором и выполнить запрос к любому источнику, где реализован данный бэкдор (Alexa top 1,000,000 sites — смотри ниже)
- Если бэкдор открыт на сайте (например, nfl.com), но пользователь хочет провести атаку против другого домена (например, pinterest.com), атакующий может загрузить iframe с nfl.com в бэкдор pinterest.com (http://pinterest.com/PoisonTap)
- И снова обращаю ваше внимание, что любая безопасность “X-Frame-Options”, Cross-Origin Resource Sharing, и Same-Origin Policy на домене полностью обходится, т.к. запрос попадет в кэш, из которого вышел PoisonTap, а не в подлинный домен.
Бэкдор для роутера и удаленный доступ
- Есть одна сеть, которую PoisonTap не может взломать, и этой сетью является реальная LAN подсеть подлинного сетевого интерфейса (например, если пользовательской wifi подсетью является 192.168.0.x, то эта сеть останется незатронутой), но…
- PoisonTap force – кэширует бэкдор на специальном хосте, в частности IP-адрес целевого маршрутизатора, добавленный к «.ip.samy.pl», например. 192.168.0.1.ip.samy.pl, по существу осуществляя постоянную атаку перезапуска DNS.
- При использовании PoisonTap в качестве DNS сервера (жертва использует общедоступный DNS сервер), PoisonTap временно отвечает специальными PoisonTap IP (1.0.0.1), подразумевая то, что любой запрос в данный момент попадет на PoisonTap веб-сервер.
- Если вместо этого DNS-сервер установлен во внутреннюю сеть (например, 192.168.0.x), дополнительный специально созданный запрос поступает на 1.0.0.1.pin.ip.samy.pl, который сообщает моему DNS серверу (в общедоступном интернете), что необходимо временно отвечать на любой [ip.address].ip.samy.pl адрес с «прикрепленным» адресом (1.0.0.1) на протяжении нескольких секунд
- Затем PoisonTap быстро устанавливает бэкдор на http://192.168.0.1.ip.samy.pl/PoisonTap, который на данный момент указывает на устройство PoisonTap в 1.0.0.1, что позволяет обращаться к бэкдору и кэшировать с устройства PoisonTap
- Защита DNS пиннинга и DNS перепривязки легко обходится ввиду истощения таблицы DNS пиннинга
- из-за сотен тысяч ранее запрошенных запросов, и повторное связывание не должно произойти в будущем, что делает эту атаку устойчивой в течение длительных периодов времени (спасибо Мэтту Остину за то, что он поделился этой атакой со мной!)
- Теперь, когда бэкдор принудительно кэшируется по адресу http://192.168.0.1.ip.samy.pl/PoisonTap, любые будущие запросы к 192.168.0.1.ip.samy.pl будут обращаться к незакрепленному IP-адресу, запуская 192.168. 0,1 и указывая непосредственно на маршрутизатор.
- Это означает, что если вы загружаете хост 192.168.0.1.ip.samy.pl/PoisonTap в iframe удаленно через бэкдор, вы теперь можете выполнить AJAX GET/POSTs на любой другой странице на внутреннем роутере, полностью удаленно, таким образом открывая удаленный доступ к внутреннему роутеру.
- Это может привести к другим атакам на роутер, к которым у атакующего могло бы и вообще не быть доступа, к таким как использование учетных данных администратора по умолчанию для перезаписи DNS серверов, или раскрытие уязвимостей аутентификации.
Обо всем этом вам расскажу только я на канале @cybersecs