Перевод: Анна Давыдова
Источник: n0where.net
Вредоносная USB атака Raspberry Pi Zero: PoisonTap
Скачать poisontap
PoisonTap использует заблокированные защищенные паролем компьютеры через USB, сбрасывает постоянный бэкдор основанный на WebSocket, раскрывает внутренний роутер и скачивает cookies, используя Raspberry Pi Zero & Node.js. PoisonTap производит каскадный эффект путем использования существующего доверия к различным механизмам машины и сети, включая USB/Thunderbolt, DHCP, DNS, и HTTP, для создания эффекта снежного кома с целью извлечения информации, получения доступа к сети и установки полупостоянных бэкдоров.
Еще немного малинки:
Когда PoisonTap (Raspberry Pi Zero & Node.js) подключен к заблокированному / защищенному паролем компьютеру, он:
- Эмулирует Ethernet устройство через USB (или Thunderbolt);
- Захватывает весь интернет-трафик с компьютера (несмотря на то, что он является низкоприоритетным / неизвестным сетевым интерфейсом);
- Перекачивает и хранит HTTP cookies и sessions из браузера для top 1,000,000 сайтов Alexa;
- Предоставляет внутренний маршрутизатор атакующему, делая его доступным удаленно через исходящие соединения WebSocket и DNS;
- Устанавливает постоянный бэкдор основанный на веб-браузере в кеш HTTP для сотен тысяч доменов и обычных Javascript CDN URL, каждый из которых имеет доступ к cookie через отравление кеша;
- Позволяет атакующей стороне удаленно заставлять пользователя создавать HTTP-запросы и ответы прокси-сервера (GET & POST) с помощью куки-файлов пользователя в любом домене, который имеет бэкдор;
- Не требует разблокировки машины;
- Бэкдоры и удаленный доступ сохраняются даже после извлечения устройства и окончания атаки.
PoisonTap обходит следующие механизмы защиты:
- Routing Table приоритет и сетевой интерфейс Service Order
- HttpOnly Cookies
- SameSite cookie атрибут
- Two-Factor/Multi-Factor Authentication (2FA/MFA)
В двух словах, PoisonTap делает следующее:
Несанкционированное использование сети
- Атакующий подключает PoisonTap (например, вооруженную Raspberry Pi Zero) к заблокированному компьютеру (даже если компьютер защищен паролем)
- 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 серверов, или раскрытие уязвимостей аутентификации.
-
Вот тут как бы https://samy.pl/poisontap/