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

info

Эта статья — часть серии пуб­ликаций о прак­тичес­ких при­емах взло­ма и атак с исполь­зовани­ем под­ручных устрой­ств, которые мож­но соб­рать дома. В этих матери­алах мы рас­кры­ваем прос­тые спо­собы получе­ния несан­кци­они­рован­ного дос­тупа к защищен­ной информа­ции и показы­ваем, как ее огра­дить от подоб­ных атак. Пре­дыду­щая статья серии: «KARMAгед­дон. Ата­куем кли­ент­ские устрой­ства с помощью Karma».

warning

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

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

У телефо­на нас­толь­ко боль­шой потен­циал, что с его помощью мож­но реали­зовать прак­тичес­ки любые физичес­кие ата­ки. Нес­мотря на то что он работа­ет на мобиль­ном про­цес­соре (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
#!/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 стирает грань между компьютером и телефоном
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
#!/bin/bash
ssh -i ~/id_rsa -p 8022 localhost "termux-notification -t '$title' -c '$text'"

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

android/speak.sh
#!/bin/bash
ssh -i ~/id_rsa -p 8022 localhost "termux-tts-speak $text"

Что каса­ется дат­чиков, что­бы получить информа­цию с аксе­леро­мет­ра, мож­но исполь­зовать такой скрипт:

android/sensors/accelerometer.sh
#!/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 под­держи­вает быс­трое изме­нение мас­шта­ба кон­соли с помощью муль­титач‑жес­та. Что­бы скрип­ты мог­ли работать в инте­рак­тивном режиме, мож­но при­дать им еди­ный стиль интерфей­са, поз­воля­ющий при­нять парамет­ры как через опции коман­дной стро­ки, так и через инте­рак­тивный зап­рос того или ино­го парамет­ра:

#!/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 на компь­юте­ре, исполь­зуя ради­ока­нал и адап­тер бес­про­вод­ной мыш­ки.

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

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии