- Статья Учим BadUSB работать с разными раскладками клавиатуры
- BadUSB Rubber Ducky своими руками
- Лучше, чем Rubber Ducky
- Создание WiFi Ducky
- Прошивка Arduino Micro Pro
- Прошивка WeMos D1 mini
- Работа паяльником
- Проверка BadUSB WiFi Ducky
- Функционал BadUSB WiFi Ducky
- Написание скриптов для атак
- Дорабатки и усовершенствования Bad USB WiFi Ducky
- Защита от BadUSB WiFi Ducky
- Заключение
Статья Учим BadUSB работать с разными раскладками клавиатуры
Всем доброго времени суток, о BadUsb, Usb Rubber Ducky и о том, как самому сделать аналог данного устройства написано уже много статей.
В этой же статье мы рассмотрим решение проблемы BadUsb при работе с разными раскладками клавиатуры. В качестве инструкции по созданию своего BadUsb будем использовать статью размещенную здесь, на codeby:
В качестве BadUsb , как и в статье используем Arduino Micro Pro.
Если при выполнении скрипта загруженного на наш BadUsb в операционной системе выставлена русская раскладка, возникает проблема, все команды вводятся в русской раскладке и наш скрипт становится бесполезным.
Ищем решение этой проблемы
Недолгий поиск в гугле, наводит нас на одно решение, использовать Alt-коды . Alt-коды в Windows иногда используется для ввода символов, которые отсутствуют на клавиатуре.
Например, зажимаем ALT и удерживая набираем цифры на цифровом блоке Numpad 1 и 3, затем отпускаем ALT и получается вот такой символ ноты ♪ и т.д.
Вот неполная таблица Alt-кодов, полную таблицу можно посмотреть по ссылке: Полная таблица Alt-кодов
Точно также с помощью alt-кодов мы можем эмулировать нажатия клавиш английского, русского алфавита и всех необходимых символов независимо от текущей раскладки клавиатуры, осталось только модифицировать скетч под наши нужны. Дорабатывать скетч мы будем как для голой ардуинки , так и для Wifi Ducky.
Но сначала немного теории, поговорим о том как наша ардуинка эмулирует нажатия клавиш. В большинстве случаев делает она это с помощью базовой библиотеки Keyboard.h, которая по умолчанию уже встроена в Arduino IDE и подключается в самом начале скетча:
Изучив документацию к библиотеке Keyboard.h выясняем, что она использует ASCII коды для «печатаемых» символов клавиатуры.
Нам же нужно найти какие коды соответствуют клавишам цифрового блока., чтобы эмулировать нажатия с помощью Alt-кодов .
Итак, первые 128 значений (от 0 до 127) как мы выяснили, «печатаемые», обрабатываются как ASCI I код и переводятся в коды клавиш. Следующие 8 (от 128 до 135) — это клавиши модификаторы (Ctrl, Shift, Alt и и т.д.).
Полный список клавиш модификаторов можно посмотреть в документации к библиотеке Keyboard.h Keyboard Modifiers — Arduino Reference.
Далее из всего что превышает 135 (но не больше 256, поскольку один байт может содержать значения до 256) вычитается 136 и используется как код ключа для клавиатуры согласно USB HID спецификациям.
Здесь по ссылке вы можете найти списки кодов USB HID для различных устройств ввода-вывода USB HID Usage Tables (pdf документ). Список кодов конкретно для клавиатуры, начиная со стр. 53 и находим в таблице клавиши цифрового блока и их Usege ID (Dec) в десятичной системе счисления.
Это и есть то что нам нужно, и как мы помним все значения ниже 128 обрабатываются как ASCII коды, поэтому не забываем прибавлять 136 к Usage ID (Dec).
Получившиеся значения от 225 до 234 и 219 (для NumLock) мы и будем использовать для написания скетча для ардуино.
В библиотеке Keyboard.h есть несколько основных функций которые эмулируют нажатия клавиш:
В качестве параметра (parameter, кроме Keyboard.releaseAll() — у нее нет параметров) функции принимают коды клавиш о которых мы говорили выше (ASCII, Клавиши модификаторы и (USB HID Usage ID + 136)), от 0 до 256.
В итоге код который будет эмулировать нажатие клавиш клавиатуры с помощью Alt-кодов будет выглядеть следующим образом
Например для английской буквы n или ALT + 110 (смотрим таблицу Alt-кодов):
Да, многовато кода, 5 строк чтобы написать всего одну букву!
Получится довольно длинный скетч, но он повторяющийся и его можно немного оптимизировать. Такой код уже напечатает полное слово «notepad».
Конечно мы не будем все это писать вручную, в интернете можно найти много реализаций DuckyScript to Arduino code конвертера с открытым исходным кодом, я модифицировал одну из версий такого конвертера и добавил поддержку Alt-кодов. За основу взял ducky2arduino_stable от roothaxor.
Просто используйте стандартный синтаксис DuckyScript , а когда вам нужно сгенерировать скетч который будет эмулировать нажатия клавиш используя Alt-коды , поставьте галочку Activate Alt-codes support и замените STRING на ALTCODE
Эти тестовые примеры запускают notepad и печатают Hello World.
Источник
BadUSB Rubber Ducky своими руками
Не для кого не секрет, что хакеры используют для атак небольшие устройства, внешне очень похожие на внешний USB-накопитель (флешку) называемые BadUSB. Чтобы заполучить удаленный контроль нужно всего навсего подключить такое устройство к серверу (компьютеру). Для начала все очень похоже на Rubber Ducky, за одним большим исключением, Rubber Ducky — это разовая акция, последствия которой весьма предсказуемы. Мы же хотим рассказать о гораздо более универсальной модификации BadUSB.
Лучше, чем Rubber Ducky
Наверняка вы уже слышали про Rubber Ducky. Это устройство из разряда BadUSB для HID-атаки. Подобного рода девайсы умеют эмулировать клавиатуру и позволяют отправить любые команды, словно их набрал текущий пользователь.
В этих устройствах есть простой микроконтроллер и память, в которую записывается скетч (код для Arduino и подобных отладочных плат). Он содержит функцию эмуляции нужного устройства и набор выполняемых им действий. Как показывает практика, обычно это клавиатура и последовательность «нажимаемых» на ней клавиш.
Конечно, у этих девайсов есть и свои недостатки. Во-первых, нужно тщательно разведать полную конфигурацию компьютера-жертвы. Во-вторых, перед реальной атакой нужно проверить, как она будет выполняться на максимально подобной тестовой системе, и внести необходимые правки — в частности, подобрать оптимальные задержки. В реальных условиях, скорее всего, будет проблематично второй раз приблизиться к атакуемому компьютеру, а если хоть один скан-код клавиши будет отправлен не вовремя, то все окажется напрасным. В-третьих, можно использовать только один скетч. Нельзя дописать какую-то функцию на лету или прервать и перезапустить набор действий. В этой статье я покажу как создать устройство, лишенное этих недостатков.
Создание WiFi Ducky
Практически это будет тот же самый Rubber Ducky, только с модулем WiFi. Суть в том, что при его подключении к компьютеру скетч не выполняется сразу при подаче питания на плату (хотя такая функция тоже есть). В этот момент создается точка доступа, которая ждет подключения. Соединиться с ней можно как со смартфона, так и с ноутбука и уже оттуда в любой удобный момент совершать необходимые действия.
За основу можно взять Arduino MKR1000 с WiFi-модулем Atmel ATSAMW25 на борту, добавить библиотеку WiFi101 и готовый код отсюда. Однако обойдется это в 35 долларов. Также есть готовый проект Cactus WHID. Он стоит уже 14 долларов и выглядит как флешка, но доработать его будет сложнее.
Я предлагаю собрать более дешевый (меньше десяти долларов) и функциональный девайс под называнием WiFi Ducky. Его автор — Stefan Kremser с ником «Космокурица», а железо для его крутых самоделок продается в отдельном магазине на AliExpress. Там можно купить готовые DIY-модули, скачать код с гитхаба и повторить все шаг за шагом, однако мы пойдем немного другим путем.
Возьмем два устройства:
Arduino Pro Micro
WeMos D1 mini с микроконтроллером ESP-8266EX и WiFi-модулем стандарта 802.11b/g/n на борту.
WeMos D1 mini
Нам необходимо будет соединить их, но вначале — прошить.
Прошивка Arduino Micro Pro
Начнем с платы Arduino. Скачиваем и устанавливаем Arduino IDE. При установке этого программного обеспечения заодно установятся все драйверы для этого устройства, так что дополнительно ничего не надо будет устанавливать. Чтобы подключить ее к компьютеру, необходимо запастить OTG-адаптером или кабелем с надлежащими выходами, так как на плате расположен разъем mini-USB.
После установки программного обеспечения запускаем его и подключаем Arduino к компьютеру. В меню «Инструменты» в разделе «Плата» выбираем Arduino/Genuino Micro. Далее в том же меню выбираем COM-порт, на котором определено устройство. На этом настройка программного обеспечения завершена.
Следующим шагом идем по ссылке, где расположен скетч. На него достаточно взглянуть, чтобы понять, что он делает: преобразует команды типа STRING в поддерживаемый Arduino синтаксис типа Keyboard.print(“”), и активирует нужные контакты. Копируем его и вставляем в Arduino IDE. Нажимаем кнопку «Загрузка» и через две-три минуты получаем сообщение о том, что скетч успешно загружен. Теперь при подаче питания на плату контроллер активирует контакты TX, RX, GND и RAM, после чего переходит в режим ожидания команд.
Прошивка WeMos D1 mini
Добрались до следующего компонента нашего BadUSB на стероидах. В этот раз нам потребуется перейти с micro-USB на USB Type-А. При первом подключении к компьютеру Windows ругнется на неопределенное устройство, поэтому необходимо скачать драйвер CH341 c официального сайта.
Тут ничего сложного: извлекаем из архива EXE-файл, запускаем его с правами администратора и нажимаем INSTALL. После этих нехитрых манипуляций в диспетчере устройств эта плата должна определиться как USB-SERIAL СР340. Поделюсь горьким опытом: если установить неверный драйвер, то устройство определится, но название будет другое, и ничего не заработает. Будьте предельно внимательны!
Правильное определение WeMos D1 mini
Теперь устройство готово к прошивке, и нам нужен прошивальщик. Я воспользуюсь NodeMCU firmware programmer. Заходим на GitHub и скачиваем его в соответствии с версией вашей ОС. У меня это Win64. Еще необходимо скачать саму прошивку. Их будет несколько вариаций, я скачивал esp8266_wifi_duck_4mb.bin, как наиболее увесистый и функциональный вариант.
После этого запускаем и настраиваем прошивальщик. В поле COM Port выбираем тот порт, на котором определилась плата. Обычно программа сама его «видит» и подставляет необходимое значение. Далее переходим во вкладку Config, где в первой строке нажимаем на шестеренку и указываем путь до прошивки, которую скачали. Значение остается 0x00000. Во вкладке Advanced советую выставить параметр Baudrate на 115200. У меня прошивка записалась на такой скорости, а если у вас возникнет ошибка, то просто уменьшите ее. Остальное оставляем без изменения. В итоге должно получиться как на скриншоте.
Значения программы NODEMCU FIRMWARE PROGRAMMER на вкладке Advanced
Когда все нехитрые манипуляции будут выполнены, возвращаемся на вкладку Operation и нажимаем Flash. Ниже кнопки расположен индикатор, который покажет приблизительное время загрузки прошивки в память, а зеленая галочка с надписью NODEMCU TEAM даст знать, что прошивка закончилась.
Работа паяльником
После того как обе платы подготовлены и прошиты, необходимо соединить их в одного «Франкенштейна». Для этого подключаем проводами контакты в соответствии с таблицей:
Для начала лучше соединить их без пайки (на монтажной плате очень удобно) и проверить работоспособность. Подключаем к компьютеру Arduino Micro Pro и тестируем. Если устройство завелось и работает как надо, то можно собирать его уже с припоем. Мелких деталей там нет, перегреть особо нечего, так что получится даже у того, кто недавно поссорился с паяльником.
Вот как получилось у меня.
Как примерно должно получиться
Проверка BadUSB WiFi Ducky
Самое время проверить, не сломалась ли какая-то из плат во время пайки. Подключаем Arduino Micro Pro к компьютеру и ждем, пока установится универсальный драйвер для HID-устройства. «Ардуина» должна сигнализировать двумя красными и одним зеленым светодиодами.
С телефона, планшета или ноутбука смотрим список точек доступа WiFi. Должна появиться новая AP под названием WiFi Duck. Если ее видим, значит, все работает.
Точка доступа WiFi Duck
Подключаемся к ней. Пароль — quackquack (это пароль по умолчанию, его можно будет изменить в настройках). Теперь открываем браузер, идем по адресу 192.168.4.1 (это дефолтный адрес ESP-8266EX в режиме AP) и видим панель управления нашим устройством.
Функционал BadUSB WiFi Ducky
На web-интерфейсе все по-спартански, ничего лишнего. Четыре страницы, или вкладки, — две рабочие и две информационные:
Scripts. Эта вкладка предназначена для работы с уже готовыми скриптами. Изначально она пуста, но кнопкой UPLOAD NEW SCRIPT можно загрузить написанный скетч в форматах .ino и .txt из памяти устройства (с которого зашли), после чего выполнить его в любое удобное время. Можно скрипты писать самому или найти в интернете готовые решения, например тут. Не все из них рабочие, необходимо будет заранее протестировать (оболочка позволяет редактировать их). Памяти на все это дело предостаточно — почти 3 Мбайт.
Страница Scripts
Live Execute. На этой странице расположено поле, в которое мы пишем скетч. Его можно сразу выполнить или сохранить. При сохранении он отобразится на странице Scripts. Язык написания скетча отличается от привычного в Arduino, поэтому ниже поля для ввода дана инструкция с командами и описанием каждой из них.
Страница Live Execute
Settings. Это страница настроек точки доступа. Тут можно поменять название точки доступа, пароль, сделать ее скрытой. Также можно указать скрипт, который будет выполняться сразу при подключении устройства к компьютеру.
Страница Settings
Info. Эта страница больше носит информационный характер. Тут находится ссылка на автора проекта, SDK, веб-сервер, скрипты и их интерпретатор. Можно также обновить версию прошивки ESP8266 «по воздуху»
Страница Info
Написание скриптов для атак
Наше кибероружие подготовлено и начищено, осталось зарядить его скриптами. Обратите внимание на расстановку пауз в них (DELAY). Они нужны для того, чтобы код не начал выполняться слишком рано — прежде, чем целевой компьютер успеет на него отреагировать. Советую делать паузы побольше, исходя из того, что система жертвы будет медленней вашей тестовой. Это может быть из-за отсутствия на ней SSD, меньшего объема оперативки, медленного процессора и так далее.
Смоделируем такую ситуацию: WiFi Ducky уже подключен к цели, а мы находимся где-то неподалеку. В системе есть учетная запись пользователя с правами локального администратора, и она сейчас активна. Нам необходимо выполнить какое-то действие. Для начала создадим скрипт, который создаст еще одного пользователя и добавит его в группу «Администраторы».
Если скетч запустится с правами учетной записи обычного пользователя, то появится сообщение: «Системная ошибка 5. Отказано в доступе». Под админом он выполнится менее чем за полсекунды, после чего окно консоли закроется.
Отлично, теперь необходимо дождаться, пока пользователь заблокирует компьютер и уйдет, к примеру, на обед. Запускаем скрипт, который разблокирует компьютер под нашим пользователем:
Вуаля! Мы работаем за компьютером жертвы без его ведома с новой учетной записью. Конечно, если в системе всего две учетные записи — исходная и наша.
Далее, к примеру, можно загрузить с заранее подготовленного FTP-сервера pwdump:
После чего мы можем сдампить хеши паролей:
…и загрузить файл обратно на сервер:
Останется воспользоваться радужными таблицами для расшифровки, и мы уже владеем учетными записями для продолжения атаки. Устройство все еще в компьютере, и делать мы можем что угодно в радиусе приема «злого WiFi».
Дорабатки и усовершенствования Bad USB WiFi Ducky
Получился довольно неплохое хакерское устройство, но нет предела совершенству. Приведу несколько примеров того, как можно доработать наш BadUSB.
Чтобы устройство не светилось, как гирлянда, в чужом компьютере, можно заменить светодиоды перемычками или закрасить их лаком для ногтей (в несколько слоев). Две отладочные платы на торчащих проводах явно вызовут подозрения, поэтому неплохо было бы подобрать или изготовить для них корпус.
Если будет возможность не просто подобраться к системному блоку, а вскрыть его, то неплохо было бы обзавестись кабелем, который подключается к материнской плате напрямую. Это сильно уменьшит шансы того, что устройство в скором времени обнаружат.
Если устройство будет внутри системного блока, то можно воспользоваться D1 mini Pro V1.1.0, так как у нее есть разъем под внешнюю антенну — она увеличит радиус действия.
Защита от BadUSB WiFi Ducky
Защититься от такого девайса можно точно так же, как и от Rubber Ducky: необходимо заблокировать добавление нового HID-устройства средствами операционной системы либо комплексными системами защиты (Kaspersky, HEAT Software и прочие Endpoint Security).
Заключение
Мы сделали усовершенствованную модель Bad USB Rubber Ducky — WiFi Ducky. Это довольно опасное хакерское устройство размером со спичечный коробок, причем его создание не требует больших вложений. Возможность изготовить его самостоятельно сильно облегчается наличием готовых плат Arduino и скетчей для них.
По-хорошему отладочные платы используют именно для прототипирования, а в дальнейшем разводят уже свою плату с тем же микроконтроллером и модулем WiFi, но без лишних элементов. Ее изготовление можно заказать на заводе. Например, здесь доступно мелкосерийное производство от пяти долларов, и подобных сервисов много.
Можно записать в память WiFi Ducky скрипты, а затем выполнять их в любое время и на любой операционной системе — встроенной памяти хватит на тысячи строк кода. Дистанционное управление добавляет устройству универсальности по сравнению с локальными девайсами класса BadUSB. С ним можно делать на удаленном компьютере что угодно, словно вы сами сидите за его клавиатурой.
Это будет уже не спайка двух отладочных плат, торчащая из USB-порта, а серьезный WiFi Ducky — более миниатюрный и надежный, не привлекающий внимания.
Источник