Я думаю для пользователей Хабра и пентестеров в частности, тема badusb устройств не является секретной. Это вещи действительно интересные и полезные, а наверное, самый известный такой прибор - это USB Rubber Ducky от компании Hak5. С ним есть проблема, эти устройства сейчас в принципе не продаются в РФ, а если бы и продавались, то не нашлось бы много желающих платить по $80 за штуку (это без учёта доставки). Тем более что характер использования таких устройств зачастую подразумевает подбрасывание, то есть это расходный материал, которого нужно много.

Поэтому интернет полон рассказов о том, как дёшево и сердито можно сделать что-то подобное с помощью ардуино или прочих учебных плат. Это действительно работает, вот только подобные самоделки очень сильно уступают оригиналу по возможностям и не являются полноценной заменой. В этой же статье я покажу всем, кто не боится взять в руки паяльник, как за цену одной такой уточки можно собрать десяток badusb устройств, которые эту уточку в некоторых случаях даже превосходят.

Хорошее badusb устройство не может быть просто клавиатурой

Давайте представим что происходит при подключении нового USB устройства к ПК? Установка драйверов, которая может занять на старых компьютерах десятки секунд. Если ваш badusb девайс просто ждёт 3 секунды и потом пытается отправлять нажатия клавиш, то он окажется бесполезен. Точно так же слишком долгое ожидание на новом компьютере приведёт к тому, что устройство достанут раньше чем начнутся нажатия. То есть, для надёжной работы устройство должно само понимать, когда ПК уже готов воспринимать информацию, а когда ещё нет. И точно в нужный момент, чтобы не терять ни секунды лишнего времени начинать работу.

А что, если вы решили действовать методом подброса устройства? Можете ли вы заранее знать, в какой компьютер вставят ваш badusb? Нет. И ведь для каждой операционной системы будут нужны свои собственные команды и комбинации клавиш. Если вы просто слепо надеетесь, что на компьютере будет, например, Windows, а на деле там Linux или MacOS, ваш скрипт не сработает. Чтобы скрипты работали везде, устройство должно само определять ОС на компьютере, в который оно было вставлено, и только потом выбирать подходящюю последовательность нажатий.

Точно так же, например, неожиданно включённый на момент подсоединения badusb устройства CapsLock может полностью испортить все команды, которые вы пытались набрать на ПК. Этого можно избежать только если устройство способно само каждый раз при подключении проверять его состояние и при необходимости выключать.

Нельзя также забывать и о том, что ключевым фактором успеха для применения badusb является скрытность. Эти устройства должны выглядеть совершенно обычными и вести себя так же. Подключая к компьютеру флешку, пользователь ожидает появление нового USB диска. Если этого не происходит, это сразу привлекает к себе ненужное внимание и может обрушить все ваши планы. Не говоря уже о том, что интерфейс USB диска необходим для ситуаций, где у ПК нет подключения к интернету, а вам всё ещё нужно извлечь из него какие-то данные, например.

Подобного рода нюансов на самом деле довольно много. Любой, кто попробует просто взять ардуино и готовую USB-HID библиотеку, чтобы за пару дней слепить на коленке свой девайс с нуля, в лучшем случае получит что-то работающее только в идеальных условиях. Нередко такие самоделки ещё и выглядят как маленькая бомба, которую никто в здравом уме не вставит в свой компьютер. Поэтому мы пойдём по другому пути. Возьмём за основу готовый проект с открытыми исходниками - PocketAdmin. Устройство, в котором все эти технические тонкости были продуманы заранее, осталось только собрать и переходить сразу к работе пентестера.

Шаг 1. Устанавливаем софт и загружаем файлы проекта

Для начала вам понадобится установить нужные программы для работы с файлами проекта. А именно: KiCad (для файлов электрической схемы, печатной платы, итд), GCC + binutils для архитектуры ARM (для компиляции исходников и компоновки конечного файла прошивки), openocd (для записи прошивки в микроконтроллер на устройстве), make (для автоматизации процесса). В качестве примера, на системе Debian Linux всё это можно установить следующей командой:

sudo apt-get install kicad kicad-packages3d gcc-arm-none-eabi binutils-arm-none-eabi openocd make

Затем вам понадобятся сами файлы проекта, их можно взять в github репозитории, просто жмём Code, Download Zip, дальше распаковываем содержимое архива.

Шаг 2. Заказывем изготовление печатных плат

Файлы, имеющие отношение к аппаратной части устройства находятся в папке под названием hardware. Используя KiCad можно в подробностях изучить, а при желании модифицировать схему и плату устройства.

В нашем случае в этом нет необходимости, поэтому отправляемся в подкаталог gerbers, где находятся собственно те самые файлы которые нужно будет отправить в производство. Как правило, их нужно сначала собрать в zip архив, а затем отправить на завод по вашему выбору. Показывать буду на примере компании pcbwave, так как они дают скидку на самый первый заказ. У других производителей процесс будет выглядеть похожим образом. Заходим на их сайт, регистрируем аккаунт. Жмём кнопку PCB Instant Quote, загружаем zip архив с гербер файлами.


В моём случае размер и прочие технические спецификации были выбраны автоматически и правильно. А именно: двухслойная плата размером 31*15мм, толщина платы 1.6мм, толщина меди 35мкм (1 oz), зелёная маска с белой шелкографией. Осталось только указать число 10 шт, регион и способ доставки. Если ваш производитель спрашивает, то минимальная ширина проводника и зазоров 0.2мм, минимальный диаметр отверстия 0.4мм.

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

Шаг 3. Заказываем детали и собираем

Теперь, когда платы уже заказаны, осталось закупить нужные детали. Их полный список в расчёте на 1 плату есть в файле BOM.txt из репозитория проекта. Все эти компоненты недорогие и их можно купить на Aliexpress, в том числе и пластиковый корпус. Самые редкие имеют ссылку на страницу товара, остальные можно легко найти через поиск. Так что умножаем цифры на 10 и делаем заказ (мелких компонентов лучше взять с запасом), ждём доставки, забираем.

Как только вы получили все свои посылки, можно приступать к сборке. Я рекомендую использовать гелеобразный флюс для того чтобы покрыть им почти все контактные площадки (кроме USB разъёма).

После этого нужно паяльником нанести на эти места припой и таким образом заменить паяльную пасту.

Теперь можно использовать паяльный фен для лёгкого и быстрого монтажа всех SMD компонентов.

Последним следует припаять USB разъём, при этом нужно следить за тем чтобы он встал в корпусе ровно. Для этого можно сначала поместить плату в половинку корпуса и уже на месте припаивать разъём.

Всё, плата готова, осталось её помыть от флюса (изопропиловым спиртом или растворителем 646) и можно переходить к прошивке.

Шаг 4. Компилируем и записываем прошивку

Файлы, имеющие отношение к прошивке находятся в папке firmware.
Здесь с помощью утилиты make можно запустить следующие команды:

make
make upload
make clean

"make" скомпилирует исходный код прошивки и создаст несколько новых файлов, среди которых будет firmware.bin; именно он и должен быть записан в память микроконтроллера. Команда "make upload" собственно и запишет этот файл в ROM, используя аппаратный программатор ST-Link V2. Прежде чем запускать эту команду нужно подключить плату устройства к программатору, а сам программатор к вашему компьютеру. "make clean" удалит все файлы, созданные командой "make"

Подключение программатора к плате устройства происходит через 5 отверстий на торце. Поэтому я вставляю 5-пиновый разъём в один конец кабеля, чтобы получить контакты торчащие наружу, а другую сторону кабеля подключаю к контактам SWCLK, SWDIO, GND, 3.3V, 5V на самом программаторе.

Теперь достаточно вставить эти торчащие контакты в cоответствующие отверстия на плате и просто прижать рукой. В таком состоянии программатор можно подключать к ПК и запускать команду "make upload".

Если вы не допустили никаких ошибок, то результат будет выглядеть примерно так:

Шаг 5. Проверяем, пользуемся

Поздравляю, с этого момента устройство готово и его можно закрывать в корпус и использовать по назначению. В отличие от USB Rubber Ducky и аналогов на ардуино вам нужно будет напрямую сохранять payload.txt в корневом каталоге на USB диске устройства. Сам payload.txt должен содержать команды на своём расширенном варианте языка Duckyscript и по умолчанию эти команды будут запущены при подключении устройства. Вся документация касательно языка скриптов и прочих возможностей устройства доступна на вики, на русском и английском языках.

Комментарии (2)


  1. GennPen
    18.04.2024 10:04

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

    И в статье ручной монтаж чуть ли не паяльником. А можно было заказать монтаж SMD там же где и заказывали плату.


    1. krakrukra Автор
      18.04.2024 10:04
      +1

      Ну в принципе можно, да. Но это будет дороже и уже не совсем своими руками.
      Лично я бы рекомендовал автоматизированную сборку только тем, кому нужно 100 и больше плат. У меня например получалось за один день собрать штук 30 по такой вот технологии дома.