Добрый день, уважаемые читатели!
Не так давно я заинтересовался темой создания 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 и т.п.).
Для запуска кода я собрал макетную плату, а после перенёс её на основную.
А теперь сохраним в файл test.txt какой-нибудь текст – я, например, перевёл wav файл с озвучкой из своей любимой игры детства – Nox. Вставим устройство в компьютер, и через 10 секунд оно начнёт печатать.
Скорость, кстати, по моим расчётам 4 килобайта в минуту- немного, с другой стороны фильмы таким образом никто переносить не будет, а вредоносный код – запросто.
Далее нужно раскодировать этот файл – в Astra Linux будем использовать base64, в Windows certutil. В интернете много статей по этому поводу, кому интересно – может ознакомиться.
В следующей статье мы посмотрим на меры противодействия данной угрозе.
Всем успехов и берегите нервную систему, если решили научиться паять – то ещё развлечение.



 
                                     
                                    