Добрый день, уважаемые читатели!
Не так давно я заинтересовался темой создания 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. В интернете много статей по этому поводу, кому интересно — может ознакомиться.
В следующей статье мы посмотрим на меры противодействия данной угрозе.
Всем успехов и берегите нервную систему, если решили научиться паять — то ещё развлечение.