Добрый день, уважаемые читатели!

Не так давно я заинтересовался темой создания Bad USB с целью изучения принципов действия и противодействия.

Напомню, что такое BadUSB цитатой из Википедии:

BadUSB — класс хакерских атак, основанный на уязвимости USB-устройств. Благодаря отсутствию защиты от перепрошивки в некоторых USB-устройствах, злоумышленник может видоизменить или полностью заменить оригинальную прошивку и заставить устройство имитировать любое другое устройство. BadUSB предназначен для доставки и исполнения вредоносного кода.

Я не преследую цель выложить подробную инструкцию по созданию Bad USB — это достаточно просто и любой, кто заинтересуется этой темой сможет создать устройство самостоятельно.

Здесь ведётся разработка библиотеки Easy HID — ссылка.

Там же можно ознакомиться с простейшей схемой для сборки устройства.

И действительно, как и указано в названии библиотеки EasyHID — ничего сложного в её использовании нет. Разберём код простого BadUSB, которое имитирует клавиатуру:

Данный код инициализирует SD карту, считывает по частям файл test.txt и печатает его с помощью функции Keyboard.print().

#include <EasyHID.h>
#include <SPI.h>
#include <SD.h>

File myFile;
char buf[200];

void setup() {
  delay(10000);
  HID.begin();
  Serial.begin(9600);
  while (!Serial) {
    ;
  }
  Serial.print("Initializing SD card...");
  if (!SD.begin(10)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
}

void loop() {
  myFile = SD.open("test.txt");
  if (myFile) {
    while (myFile.available()) {
        static uint32_t timer = millis();
        if (millis() - timer >= 1000) {
          timer = millis();
          myFile.readBytes(buf, 150);
          Keyboard.print(buf);
        }
        HID.tick();
    }
    myFile.close();
  } else {
    Serial.println("error opening test.txt");
  }

}

В файле test.txt может быть бинарный файл (эксплоит, либо вирус) в кодировке base64, либо скрипт на python — всё ограничивается фантазией.

По этому же принципу можно задать перечень команд — комбинаций клавиш для выполнения каких-либо действий (открытие командной строки, запуск строки Run в Windows и т.п.).

Для запуска кода я собрал макетную плату, а после перенёс её на основную.

Макетная плата BadUSB
Финальный вариант

А теперь сохраним в файл test.txt какой-нибудь текст — я, например, перевёл wav файл с озвучкой из своей любимой игры детства — Nox. Вставим устройство в компьютер, и через 10 секунд оно начнёт печатать.

Вот так вот печатается аудио.

Скорость, кстати, по моим расчётам 4 килобайта в минуту- немного, с другой стороны фильмы таким образом никто переносить не будет, а вредоносный код — запросто.

Далее нужно раскодировать этот файл — в Astra Linux будем использовать base64, в Windows certutil. В интернете много статей по этому поводу, кому интересно — может ознакомиться.

В следующей статье мы посмотрим на меры противодействия данной угрозе.

Всем успехов и берегите нервную систему, если решили научиться паять — то ещё развлечение.

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

Ваш e-mail не будет опубликован.