Poisontap – девайс, который взломает любой компьютер

Расскажу, что это за зверь такой и как его собрать своими руками

Привет, Аноним!
Сегодня я поделюсь с тобой новым способом взлома компьютеров под управлением macOS и Windows. Для этого мы будем использовать устройство под названием Poisontap, которое состоит из набирающего все большую популярность мини-ПК – Raspberry Pi. Если подключить гаджет к компьютеру, то он определяется, как Ethernet-устройство, позволяющее перенаправлять на себя весь сетевой трафик.

Poisontap

Принцип работы

Сначала Poisontap скачивает с компьютера все cookies, которые, как известно, хранятся в кэше браузера, а затем перехватывает управление Wi-Fi-роутером, что дает возможность посредством интернет отправлять любой код на устройство-жертву. Причем, после отключение хакерского гаджета от компьютера, на нем остается бэкдор. Таким образом, решение позволяет обмануть антивирусы и экраны блокировки.

Звучит интересно, не права ли? Поэтому давай разбираться!


Прежде чем мы перейдем к функционалу, я расскажу тебе, как установить Raspbian и Poisontap.

Часть 1. Установка Raspbian

Нам понадобиться SD-карта объемом в 16-32 гигабайта, картридер (как вариант можно обойтись переходником) и образ системы.

  • Скачиваем отсюда образ системы который вам больше нравиться (я выбрал фулл версию с предустановленным софтом — Raspbian Full Buster):

https://www.raspberrypi.org/downloads/raspbian/

  • Далее прожигаем образ на флешку через 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 серверов, или раскрытие уязвимостей аутентификации.

На сегодня это все.

Возможно, информация покажется тебе на первый взгляд сложной, но поверь, эта тема стоит того, что бы разобраться в ней, как следует. А там и кэш не заставит себя долго ждать.

Спасибо за внимание!

Да, хочу!


Напоминаем, что у нас есть и другие проекты, которые могут быть вам интересны: