Badusb
Содержание:
Write
Since ducky script can be written in any standard ASCII text editor, open your favorite – be it gedit, nano, vi, emacs, or even notepad (how ironic in this case?). Don’t worry – I won’t judge you for using vim.
We’ll begin our payload with a remark, a comment stating what the payload does, it’s intended target and the author. This won’t be processed by our duck encoder later on, but it will be helpful if we ever share this payload with the community.
Our next line should delay for at least one full second. The purpose of this delay is to allow the target computer to enumerate the USB Rubber Ducky as a keyboard and load the generic HID keyboard drivers. On much older machines, consider a slightly longer delay. In my experience no more than three seconds are necessary. This delay is important since the USB Rubber Ducky has the capability of injecting keystrokes as soon as it receives power from the bus, and while USB is capable of receiving the keystroke frames, the operating system may not be ready to process them. Try plugging in a USB keyboard into any computer while jamming on the keys and you’ll notice a moment is necessary before any interaction begins.
Next we’ll issue our favorite keyboard combination, Windows key + R to bring up the Run dialog.
Typically the Run dialog appears near instantly to us humans, however to a USB Rubber Ducky with a clock speed of 60,000 cycles per second, that instant is an eternity. For this reason we’ll need to issue a short delay – perhaps just one tenth of a second.
Now with the Run dialog as the active window we’re ready to type our notepad command.
The STRING command processes the following characters case sensitive. Meaning STRING C will type a capital letter C. Obviously our keyboards don’t have separate keys for lowercase and capital letters, so our payload actually interprets this as a combination of both the SHIFT key and the letter c – just as you, the human, type. It’s nice to know that the STRING command handles this for you. It does not however end each line of text with a carriage return or enter key, so for that we’ll need to explicitly specify the key.
As before whenever a GUI element changes we’ll need to wait, albeit briefly, for the window to appear and take focus as the active window. Depending on the speed of the computer and the complexity of the program we’ll want to adjust the delay accordingly. In this example we’ll be extremely conservative and wait for a full second before typing.
Finally with notepad open and set as our active window we can finish off our ducky script with the historic words.
At this point our text file should look like the following:
Save this text file as helloworld.txt in the same directory as the duck encoder.
Готовим Wi-Fi Ducky
Практически это будет тот же самый Rubber Ducky, только с модулем Wi-Fi. Суть в том, что при его подключении к компьютеру скетч не выполняется сразу при подаче питания на плату (хотя такая функция тоже есть). В этот момент создается точка доступа, которая ждет подключения. Соединиться с ней можно как со смартфона, так и с ноутбука и уже оттуда в любой удобный момент совершать необходимые действия.
За основу можно взять Arduino MKR1000 с Wi-Fi-модулем Atmel ATSAMW25 на борту, добавить библиотеку WiFi101 и готовый код отсюда. Однако обойдется это в 35 долларов. Также есть готовый проект Cactus WHID. Он стоит уже 14 долларов и выглядит как флешка, но доработать его будет сложнее.
Я предлагаю собрать более дешевый (меньше десяти долларов) и функциональный девайс под названием Wi-Fi Ducky. Его автор — Stefan Kremser с ником «Космокурица», а железо для его крутых самоделок продается в отдельном магазине на AliExpress. Там можно купить готовые DIY-модули, скачать код с гитхаба и повторить все шаг за шагом, однако мы пойдем немного другим путем.
Возьмем два устройства:
- Arduino Pro Micro;
- WeMos D1 mini с микроконтроллером ESP-8266EX и Wi-Fi-модулем стандарта 802.11b/g/n на борту.
Нам необходимо будет соединить их, но вначале — прошить.
Все описанные действия выполнялись на операционной системе Windows 7 x64.
Прошивка Arduino Micro Pro
Начнем с платы Arduino. Скачиваем и устанавливаем Arduino IDE. При установке этого программного обеспечения заодно установятся все драйверы для этого устройства, так что дополнительно ничего не надо будет устанавливать. Чтобы подключить ее к компьютеру, необходимо запастись OTG-адаптером или кабелем с надлежащими выходами, так как на плате расположен разъем mini-USB.
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!
Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя!
Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
Test
With the ducky script encoded into an inject.bin file, we’re ready to test the payload. Copy the inject.bin file to the root of the Micro SD card. Insert the Micro SD card into the USB Rubber Ducky. Now sneak up to the target test machine and plug in the USB Rubber Ducky.
The first time you ever plug the USB Rubber Ducky into a computer it will take a moment, typically just a second, to enumerate it as a HID keyboard and load the generic drivers. For this reason we’ve added a one second delay to the beginning of our payload. If the test is not successful on the first attempt, it may be because the target test machine has not yet successfully loaded the generic keyboard drivers. To replay the payload, press the button or unplug and replug the USB Rubber Ducky. This test payload should be successful against all recent version of Windows.
If the test were unsuccessful, note where things went awry and tweak the ducky script accordingly. Re-encode the inject.bin file, copy it to the Micro SD card (replacing the current file) and re-test.
Lather, rinse, repeat as necessary.
Устройство Flash накопителей
На самом деле, ОС ничего не знает о подключаемом устройстве. Ей приходится ждать, пока девайс сам не сообщит, к какому классу устройств он принадлежит. Если взять простейший пример, когда мы втыкаем флешку в USB-разъем, то флешка сообщает операционной системе не только что является накопителем, но и свой объем. Тут сразу вспоминаются хитрожелтые китайские товарищи, которые таким образом научились выпускать флешки повышенной емкости (встречались чуть ли не на пару терабайт). Чтобы разобраться, как такое возможно, давай вспомним (или узнаем), как система распознает USB-устройства.
Флешка без красивой обертки
BlueStacks — быстрый эмулятор Android на компьютере
- Платформы:Windows, macOS.
- Версия Android: 7 Nougat.
Разработчики системы BlueStacks утверждают, что ее четвертая версия — самый быстрый способ запуска Android-приложений на компьютере
Они акцентируют внимание на удобстве использования программы для мобильных игр. С ней не нужно заморачиваться, насколько сильно заряжен смартфон, а также включать режим «Не беспокоить», чтобы избавиться от регулярно всплывающих уведомлений, входящих вызовов и других отвлекающих факторов
Это новый уровень для мобильных развлечений, вместе с которыми можно использовать удобную физическую клавиатуру и другие тематические инструменты.
Так как разработчики затачивали эмулятор Android-приложений именно для игр, отдельное внимание они уделили производительности BlueStacks. Четвертая версия системы быстрее третьей в целых восемь раз
Более того, разработчики обещают, что она шустрее Samsung Galaxy S9+ в шесть раз. BlueStacks имитирует Android Nougat (7.1.2) — не самая новая версия мобильной платформы Google, но и она чаще всего справляется со всеми возложенными на нее обязанностями. Это в большей степени стало возможным за счет обновления графического движка, который лучше справляется со всем необходимым софтом.
BlueStacks работает с вкладками. Первая по умолчанию предназначена для «Центра приложений» с рекомендованным для эмулятора софтом. Вторая под названием «Мои приложения» — это интерфейс стандартного Android с домашним экраном с избранными программами и играми, нижним доком с софтом, который используется чаще всего, а также меню для полного набора установленных приложений (стандартных и пользовательских). Запущенные программы и игры открываются в виде дополнительных вкладок, и с помощью них можно работать сразу с несколькими приложениями.
В BlueStacks есть «Камера», которая без проблем использует встроенную вебку компьютера. В наборе стандартных приложений также нашлось место для «Калькулятора», «Файлового менеджера», «Настроек», картографической программы «Локация», браузера Chrome и поисковой строки для софта Search Apps. В интерфейсе системы также есть три стандартных кнопки для перехода к домашнему экрану, возвращения к предыдущему меню и вызова панели многозадачности. Оболочка BlueStacks работает вполне уверенно, чтобы использовать ее на постоянной основе. Простые сторонние приложения летают, несложные игры также в порядке.
Introduction — a bit wordy, pasted from my original paper
The advanced uses and capabilities of rogue USB hardware implants for use in cyber espionage activities is still very much an unknown quantity in the industry. Security professionals are in considerable need of tools capable of exploring the threat landscape, and generating awareness in this area. BadUSB2, is a tool capable of compromising USB fixed-line communications through an active man-in-the-middle attack. It is able to achieve the same results as hardware keyloggers, keyboard emulation, and BadUSB hardware implants. Furthermore, BadUSB2 introduces new techniques to defeat keyboard-based one-time-password systems, automatically replay user credentials, as well as acquiring an interactive command shell over USB.
But we already have Rubber ducky!
So how is this any different from existing USB hardware implants like the Rubber Ducky, or keyloggers. Firstly, the devices I’ve seen can only achieve one or two attack classes such as eavesdropping or message fabrication. BadUSB2 can eavesdrop, replay, modify, fabricate, exfiltrate data and BadUSB in one device. Furthermore, when combining these attack classes really interesting attack scenarios begin to surface. Secondly, keyboard emulation devices register as an additional USB device making them easy to detect and block, i.e. why do I now have two keyboards attached!? Yes, such devices can be easily detected and blocked. The same can be said of BadUSB, it often needs to register as a secondary USB device to perform a malicious task. BadUSB2 is an INLINE hardware implant giving it the stealth of a hardware keylogger but far more capabilities as mentioned above. Finally, (law of 3’s), just cos…
Research
If our payload is to type “Hello World” into Windows notepad, we must first figure out the best way to open that program using just the keyboard. On Windows there are a variety of ways to open notepad. On modern versions one may press the GUI or Windows key and begin typing “notepad” and pressing enter.
While this may suffice, our objective hasn’t specified the version we’re targeting – so we’ll want to use a technique with the widest possible support. Older versions of Windows don’t include the ability to search programs from the start menu just by typing. All versions since Windows 95 however include the keyboard combination Win+R. This powerful shortcut opens the Windows Run dialog, which states “Type the name of a program, folder, document or Internet resource, and Windows will open it for you.”
Since notepad.exe resides in c:\windows by default, we could simple type “c:\windows\notepad.exe” then press enter and notepad would open. On most machines it only takes a brief moment for the small program to open, and when it does it will be the active window. Keep this in mind, because we will always be typing into the active window, and anytime we change a GUI element we must wait for the computer to respond. It may seem like notepad opens instantly to us humans, but to a computerized keyboard that types over 9000 characters per minute, that millisecond counts.
Finally, with notepad open we should be able to simple type the words “Hello World”.
From our target test machine, be it a Windows Virtual Machine or bare metal, test this theory by manually entering in what we’ll later instruct the USB Rubber Ducky payload to type. Does it work? Great! Let’s move on to writing the ducky script.
Описание
USB устройства несут в себе микроконтроллер, отвечающий за общение с хостом по интерфейсу USB. В процессе инициализации микроконтроллер сообщает хосту, наряду с другой служебной информацией, классы, к которым принадлежит устройство. Хост загружает нужный драйвер и работает с устройством исходя из его класса и этих данных. Одно физическое устройство может реализовывать несколько классов и для хоста являться несколькими отдельными устройствами: веб-камеры реализуют одновременно класс видео и класс аудио устройств.
BadUSB пользуется тем фактом, что производители не защищают свои устройства от перепрошивки, а хосты не проверяют USB устройства на подлинность. Благодаря этому злоумышленник может подменить прошивку микроконтроллера и выдать одно устройство за другое. Также, так как все коммуникации ведутся через этот микроконтроллер, злоумышленник может перехватывать и подменять любые данные и команды между устройством и хостом. Возможно и автоматическое заражение устройств: устройство заражает хост, запуская на нём вредоносное ПО, затем хост автоматически заражает все подключенные к нему USB устройства.
Каждый контроллер уникален, и для каждого необходимо разрабатывать зараженную прошивку или патч отдельно. Невозможно написать универсальное программное обеспечение и использовать его на любом микроконтроллере. Процедура прошивки различается от одного контроллера к другому. Все это значительно уменьшает вероятность эпидемии BadUSB, однако не защищает от целенаправленной атаки.
Противодействие
В рамках доклада «BadUSB — On Accessories that Turn Evil» было предложено несколько способов защиты от BadUSB, однако, по словам исследователей, полноценная интеграция защиты займет продолжительное время.
Одним из возможных способов противостояния является подпись прошивки производителем оборудования и соответствующая проверка на стороне хоста перед использованием устройства, что не предусмотрено текущей спецификацией USB. Другим решением проблемы может стать блокировка возможности перепрошивки устройств самим производителем.
Марк Шаттлворт, основатель Canonical Ltd., также высказывался по вопросу безопасности USB устройств и как решение проблемы предлагал полностью открыть исходный код прошивок.
Несмотря на то, что ряд средств комплексной антивирусной защиты, такие как ESET Endpoint Antivirus, Kaspersky Endpoint Security, компонент «Родительский контроль» у Dr.Web AV-Desk, позволяют ограничивать доступ к сменным носителям и разрешать активацию согласно «белому списку», в случае с Bad USB, таких мер недостаточно. Пользователь сам может разрешить подключение опасного устройства, ошибочно посчитав его безопасным. По утверждению корреспондента «Компьютерры» Андрея Василькова, разработчики антивирусных решений будут вынуждены в будущем добавить «отдельные модули для более гибкого дополнительного контроля над подключаемыми по USB устройствами».
Защита от атак BadUSB появилась в Kaspersky Endpoint Security 10, в обновлении от 7 декабря 2015 года.
Защитные решения Dr.Web с 11-й версии защищают от BadUSB-уязвимости для устройств, имитирующих клавиатуру.
Некоторые виды атак
Имитация клавиатуры
Устройство представляется компьютеру жертвы клавиатурой, а по истечении некоторого времени начинает отправлять последовательности нажатий клавиш. В результате злоумышленник может выполнить на компьютере жертвы любые действия, доступные авторизованному пользователю с помощью одной только клавиатуры. К примеру, злоумышленник может загрузить из интернета и запустить вредоносное ПО.
Существенным минусом данного вида атак является отсутствие доступа к информации на экране и, как следствие, отсутствие обратной связи на любые действия со стороны зараженного устройства. Например, злоумышленник не может определить как текущую раскладку клавиатуры, так и произведен ли вход в систему.
Имитация сетевой карты
Устройство представляется компьютеру жертвы сетевой картой и, таким образом, может перехватывать или перенаправлять сетевой трафик. В частности, отвечая на DHCP запрос адресом DNS сервера злоумышленника и не предоставляя шлюза по умолчанию, злоумышленник может перенаправить трафик жертвы: компьютер жертвы будет производить разрешение адреса через DNS сервер злоумышленника, но, в отсутствие шлюза по умолчанию, будет использовать другой, настоящий сетевой интерфейс.
Boot Injection
Устройство с достаточным местом для хранения вредоносного кода, например, флеш-накопитель, может определить момент включения компьютера и в момент определения BIOS’ом выдать на загрузку вирус для заражения операционной системы. Это становится возможным благодаря тому, что по поведению хоста при общении с USB микроконтроллером возможно определить ОС хоста, в частности Windows, Linux, MacOSX, а также BIOS.
Выход из виртуального окружения
Атака использует возможность повторной инициализации устройства. Выполняясь в виртуальной машине, вирус заражает любое подключенное по USB устройство. Зараженная прошивка выполняет переинициализацию и представляется двумя независимыми устройствами: неким новым и тем, которое уже было подключено к виртуальной машине. Новое устройство будет автоматически подключено к хостовой ОС, а старое — обратно в виртуальную машину. Таким образом, может быть произведен выход за пределы виртуального окружения, то есть осуществлен переход от клиентской до хостовой ОС.
Заключение
Мы сделали усовершенствованную модель Rubber Ducky — Wi-Fi Ducky. Это довольно опасное устройство размером со спичечный коробок, причем его создание не требует больших вложений. Возможность изготовить его самостоятельно сильно облегчается наличием готовых плат Arduino и скетчей для них.
По-хорошему отладочные платы используют именно для прототипирования, а в дальнейшем разводят уже свою плату с тем же микроконтроллером и модулем Wi-Fi, но без лишних элементов. Ее изготовление можно заказать на заводе. Например, здесь доступно мелкосерийное производство от пяти долларов, и подобных сервисов много.
Можно записать в память Wi-Fi Ducky скрипты, а затем выполнять их в любое время и на любой операционной системе — встроенной памяти хватит на тысячи строк кода. Дистанционное управление добавляет устройству универсальности по сравнению с локальными девайсами класса BadUSB. С ним можно делать на удаленном компьютере что угодно, словно ты сам сидишь за его клавиатурой.
Это будет уже не спайка двух отладочных плат, торчащая из USB-порта, а серьезный Wi-Fi Ducky — более миниатюрный и надежный, не привлекающий внимания.
Защититься от такого девайса можно точно так же, как и от Rubber Ducky: необходимо заблокировать добавление нового HID-устройства средствами операционной системы либо комплексными системами защиты (Kaspersky, HEAT Software и прочие Endpoint Security).