
Когда речь заходит о Flipper Zero, многие вспоминают RFID, NFC, Sub-GHz. Но одна из самых интересных возможностей устройства — это JavaScript-движок и модуль BadUSB, который позволяет превратить Flipper в программируемую USB-клавиатуру.
В этой статье разберём небольшой, но показательный скрипт, который автоматически устанавливает набор инструментов для пентеста(или другого ПО) на macOS через Homebrew. И посмотрим, почему JavaScript на Flipper значительно интереснее классического DuckyScript.
Почему одного DuckyScript уже мало?
Традиционные BadUSB-сценарии обычно пишутся на DuckyScript:
Подход рабочий, но чаще упирается в ограничения:
нет циклов;
нет циклов;
нет условий;
нет условий;
нет модулей;
нет модулей;
сложно обрабатывать состояния;
сложно обрабатывать состояния;
код плохо масштабируется.
код плохо масштабируется.
Во Flipper доступен JavaScript API, который позволяет писать полноценную логику:
Например:
По сути мы получаем миниатюрный сценарный движок прямо внутри устройства.
Разбираем скрипт
Начинается всё с подключения модулей, где первый отвечает за уведомления Flipper, а второй — за эмуляцию HID-устройства:
Следом задаётся список программ:
Список можно расширять любым количеством пакетов.
Следующий блок задаёт USB-идентификаторы:
Здесь используются VID и PID производителя Apple(гуглятся или смотрятся в настройках).
После короткой индикации:
скрипт проверяет наличие соединения:
Это уже преимущество JavaScript перед DuckyScript. Можно выполнять действия только при наличии активного USB-соединения.
Автоматический запуск терминала
Далее происходит открытие Spotlight(Command + Space):
После небольшой паузы вводится:
Скрипт ищет iTerm и запускает его.
При желании можно заменить на:
Установка инструментов
Самая интересная часть, так как больше всего показывается превосходство над DuckyScript:
На каждую программу, cоздаётся команда установки через brew:
То есть список пакетов превращается в набор последовательных установок.
Например:
Таким образом один и тот же сценарий можно использовать для разных ролей:
пентестер;
пентестер;
DevOps-инженер;
DevOps-инженер;
разработчик;
разработчик;
аналитик безопасности.
аналитик безопасности.
Обратная связь через Flipper
После завершения цикла:
Flipper отображает успешное выполнение.
Дополнительно в терминал выводится сообщение:
Где это действительно полезно
Чаще демонстрации BadUSB сводятся к “взлом умный холодильник за 5 секунд”. Но, как по мне, гораздо интереснее сценарии автоматизации(не только просто установок приложений).
При выдаче нового ноутбука специалисту:
Что можно улучшить ?
У исходного скрипта есть несколько ограничений.
Если Homebrew не установлен:
весь сценарий остановится.
Логичнее сначала выполнить проверку:
и при необходимости установить пакетный менеджер.
Сейчас используется:
Но установка приложение, особенно metasploit, может занимать минуты.
Фиксированные паузы работают не всегда надёжно.
Сценарий предполагает, что:
пользователь авторизован;
пользователь авторизован;
iTerm установлен;
iTerm установлен;
Homebrew присутствует;
Homebrew присутствует;
сеть работает.
сеть работает.
Почему JavaScript меняет правила игры
Идея этого примера не в установке Nmap или Hydra.
Интереснее другое: Flipper превращается из “умной флешки с макросами” в полноценную платформу автоматизации.
Появляются:
циклы;
циклы;
условия;
условия;
работа с модулями;
работа с модулями;
управление логикой выполнения;
управление логикой выполнения;
интерактивная обратная связь через устройство.
интерактивная обратная связь через устройство.
Поэтому, как по мне, JavaScript-сценарии для Flipper выглядят перспективнее классических DuckyScript-пейлоадов.
Рассмотренный скрипт занимает всего несколько десятков строк, но хорошо показывает эволюцию BadUSB-подхода.
Flipper уже не просто отправляет заранее записанную последовательность нажатий клавиш. Он принимает решения, проверяет состояние подключения, управляет логикой выполнения и автоматизирует рутинные действия.
Исходный код, можно посмотреть здесь: https://gitlab.com/DuDlick/flipper-auto-installer/-/blob/main/download_all.js?ref_type=heads