यूएसबी उपकरणों के कनेक्शन इतिहास को ट्रैक करने के रूप में लिनक्स फोरेंसिक। यूएसबी उपकरणों के कनेक्शन इतिहास को ट्रैक करने के रूप में लिनक्स फोरेंसिक, कनेक्टेड यूएसबी उपकरणों को प्रदर्शित करना

💖क्या आपको यह पसंद है?लिंक को अपने दोस्तों के साथ साझा करें

USB फ़्लैश ड्राइव या कोई अन्य कनेक्ट करते समय यूएसबी डिवाइसऔर कंप्यूटर पर फ़ाइलों का एक सेट बनाया जाता है जिससे आप उन तक पहुंच सकते हैं। जब आप काम करते हैं फ़ाइल मैनेजरसब कुछ काफी सरल है, लेकिन एक बार जब कंसोल की बात आती है तो सब कुछ और अधिक कठिन हो जाता है।

प्रत्येक नौसिखिया के लिए कनेक्टेड डिवाइसों की पहचान करने में सक्षम होना महत्वपूर्ण है, चाहे वह यूएसबी फ्लैश ड्राइव, एसडी कार्ड या हो हार्ड डिस्कताकि गलत जगह पर कुछ न लिखें या गलत डिस्क को फॉर्मेट न करें। इस लेख में हम कंप्यूटर से जुड़े लिनक्स यूएसबी उपकरणों को देखने के कई तरीकों पर गौर करेंगे।

ऑपरेटिंग रूम में लिनक्स प्रणालीएक विशेष प्रबंधन दर्शन का उपयोग किया जाता है। डिवाइस सहित सभी ऑब्जेक्ट को फ़ाइलें माना जाता है। जब कोई डिवाइस सिस्टम से कनेक्ट होता है, तो उसके लिए /dev/ डायरेक्टरी में एक फ़ाइल बनाई जाती है।

आमतौर पर, जब आप किसी यूएसबी फ्लैश ड्राइव या अन्य स्टोरेज डिवाइस को डेस्कटॉप वातावरण वाले सिस्टम से कनेक्ट करते हैं, तो डिवाइस स्वचालित रूप से /मीडिया/यूजरनेम/डिवाइस_लेबल/ फ़ोल्डर में माउंट हो जाता है, और फिर आप इस फ़ोल्डर में डिवाइस से फ़ाइलों तक पहुंच सकते हैं . हालाँकि, ऐसी स्थितियाँ होती हैं जब आपको USB को मैन्युअल रूप से माउंट करने की आवश्यकता होती है और तब यह विकल्प मदद नहीं करेगा।

सभी डिवाइस फ़ाइलें /dev/ निर्देशिका में स्थित हैं। यहां आप एसडीए, एचडीए फाइलें पा सकते हैं, जो हैं एचडीडी, साथ ही sda1 या hda1 फ़ाइलें, जो आपको डिस्क विभाजन तक पहुंचने की अनुमति देती हैं। इस सब पर हम पहले ही लेख में विस्तार से चर्चा कर चुके हैं। आप कमांड का उपयोग करके /dev/ निर्देशिका में सभी डिवाइसों की सूची देख सकते हैं:

अब यह समझना बाकी है कि इनमें से कौन सी डिवाइस फ़ाइलें USB डिवाइस की हैं और वास्तव में कौन सी डिवाइस की हैं।

Linux USB डिवाइस कैसे देखें

आपके सिस्टम से जुड़े प्रत्येक डिवाइस के बारे में अधिक विस्तृत जानकारी प्राप्त करने और लिनक्स डिवाइस की सूची देखने के लिए, आप df कमांड का उपयोग कर सकते हैं। इसका उपयोग फ्री डिस्क स्थान देखने के लिए किया जाता है:

कुल आकार और व्याप्त स्थान के आधार पर, आप यह निर्धारित कर सकते हैं कि आपका फ्लैश ड्राइव कौन सा उपकरण है, लेकिन लिनक्स उपकरणों को देखने का यह तरीका बहुत सुविधाजनक नहीं है और यह केवल पहले से माउंट किए गए फ्लैश ड्राइव के साथ काम करता है, कई और भी हैं जो अधिक सटीक जानकारी प्रदान करते हैं;

Lsblk कमांड आपके कंप्यूटर से जुड़े सभी ब्लॉक डिवाइसों की एक सूची प्रदर्शित करता है। उपयोगिता न केवल उनका आकार, बल्कि उनके प्रकार (डिस्क/विभाजन) के साथ-साथ प्रमुख और छोटे डिवाइस नंबर भी प्रदर्शित करती है। यहां फ्लैश ड्राइव ढूंढना थोड़ा आसान है, हमें दो डिस्क दिखाई देती हैं, और यदि 698 गीगाबाइट आकार वाली पहली हार्ड ड्राइव है, तो दूसरी निश्चित रूप से एक फ्लैश ड्राइव है:

एक और तरीका है, यह fdisk उपयोगिता है। यह आपको कंप्यूटर से जुड़े सभी ब्लॉक डिवाइस पर विभाजन तालिका देखने की अनुमति देता है। लेकिन उपयोगिता को सुपरयूजर के रूप में निष्पादित किया जाना चाहिए:

आप कर्नेल संदेश कतार dmesg को देखकर भी कनेक्टेड USB डिवाइस के बारे में पता लगा सकते हैं। कर्नेल में होने वाले सभी ऑपरेशनों की जानकारी यहां संग्रहीत की जाती है। कंप्यूटर से अभी जुड़े फ्लैश ड्राइव का नाम यहां प्रदर्शित किया जाएगा। कर्नेल संदेश देखने के लिए, चलाएँ:

यह देखने के लिए कि कौन से एसडी डिवाइस यूएसबी हैं, निम्न कमांड का उपयोग करें:

ls -l /dev/disk/by-id/usb*

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

स्थिति का आकलन करना संभव बनाने के लिए, आइए देखें कि यूएसबी समर्थन कैसे लागू किया जाता है और कनेक्टेड डिवाइसों के बारे में जानकारी कहां देखें, हालांकि यूएसबी के बारे में जो कुछ भी कहा गया है वह आंशिक रूप से लागू होता है। Linux में USB समर्थन लागू करना लिनक्स यूएसबीप्रोजेक्ट (www.linux-usb.org) वह जगह है जहां आपको जानकारी के लिए जाना चाहिए। आज के कंप्यूटरों में आप तीन प्रकार के नियंत्रक पा सकते हैं, जो उपकरणों के साथ इंटरैक्ट करने के इंटरफ़ेस में भिन्न होते हैं। ये हैं OHCI (ओपन होस्ट कंट्रोलर इंटरफ़ेस), UHCI (यूनिवर्सल होस्ट कंट्रोलर इंटरफ़ेस) और EHCI (एन्हांस्ड होस्ट कंट्रोलर इंटरफ़ेस)। पहले दो USB संस्करण 1.1 के लिए समर्थन लागू करते हैं, अंतिम 2.0 480 Mbit/s तक की स्थानांतरण गति प्रदान करता है। यूएचसीआई नियंत्रक कुछ हद तक सरल और सस्ते हैं, लेकिन इसके लिए जटिल ड्राइवरों की आवश्यकता होती है और प्रोसेसर पर अधिक भार पड़ता है। अपने नियंत्रक प्रकार का पता लगाना अभी भी बहुत सरल है:

$lspci -v
00:02.0 यूएसबी नियंत्रक: एनवीडिया कॉर्पोरेशन एमसीपी55 यूएसबी नियंत्रक (रेव ए1) (प्रोग-यदि 10)

झंडे: बस मास्टर, 66 मेगाहर्ट्ज, फास्ट डेवसेल, विलंबता 0, आईआरक्यू 11
Fe02f000 पर मेमोरी (32-बिट, नॉन-प्रीफ़ेचेबल)
क्षमताएं:

00:02.1 यूएसबी नियंत्रक: एनवीडिया कॉर्पोरेशन एमसीपी55 यूएसबी नियंत्रक (रेव ए2) (प्रोग-यदि 20)
सबसिस्टम: बायोस्टार माइक्रोटेक इंटरनेशनल कॉर्प अज्ञात डिवाइस 3405
झंडे: बस मास्टर, 66 मेगाहर्ट्ज, तेज़ डेवसेल, विलंबता 0, आईआरक्यू 5
Fe02e000 पर मेमोरी (32-बिट, नॉन-प्रीफ़ेचेबल)
क्षमताएं:

जैसा कि आप देख सकते हैं, मेरे पास दोनों प्रकार के नियंत्रक हैं: OHCI और EHCI। यदि आप स्व-असेंबल कर्नेल का उपयोग कर रहे हैं, तो "USB होस्ट कंट्रोलर ड्राइवर्स" आइटम में आवश्यक ड्राइवर को सक्षम करें। मैं आप पर सभी विकल्पों का बोझ नहीं डालूँगा; कर्नेल में उपलब्ध सभी मापदंडों को “cat /usr/src/linux/.config |” टाइप करके देखा जा सकता है। ग्रेप-आई यूएसबी"।

आपको यह भी याद रखना चाहिए कि USB के साथ काम SCSI इम्यूलेशन द्वारा किया जाता है, इसलिए आपको SCSI समर्थन से संबंधित मापदंडों को सक्रिय करने की आवश्यकता है।
USB उपकरणों के साथ सीधे काम करने के लिए, वर्चुअल फ़ाइल सिस्टम /proc में एक निर्देशिका /proc/bus/usb बनाई जाती है, जिसे /etc/fstab के माध्यम से माउंट किया जाता है:

कोई नहीं /proc/bus/usb usbfs noauto 0 0
यदि आपकी फ़ाइल में ऐसी कोई पंक्ति नहीं है, तो इसका मतलब यह हो सकता है कि डेवलपर्स ने आपको अनावश्यक विचारों से बचा लिया है और स्टार्टअप स्क्रिप्ट में यूएसबीएफएस लगा रहे हैं। यह किस विशिष्ट लिपि में किया गया है, यह आपको “प्रविष्ट करने पर पता चल जाएगा” सुडो ग्रेप -आईआर "यूएसबीएफएस" /आदि/*". उदाहरण के लिए, KUbuntu में USB माउंट करने के लिए एक स्क्रिप्ट जिम्मेदार है /etc/init.d/mountdevsubfs.sh. आप USB के लिए फ़ाइल सिस्टम को मैन्युअल रूप से /proc/bus/usb पर इस प्रकार माउंट कर सकते हैं:

$ sudo mount -t usbdevfs none /proc/bus/usb

इसके बाद कमांड " माउंट | ग्रेप यूएसबीएफएस" पंक्ति की उपस्थिति दिखानी चाहिए:

procbususb पर /proc/bus/usb प्रकार USBFS (आरडब्ल्यू)

और निष्कर्ष " lsmod» लोड किए गए मॉड्यूल यूएसबीकोर, ड्राइवर मॉड्यूल ohci_hcd, ehci_hcd, uhci_hcs, साथ ही कनेक्टेड डिवाइस के ड्राइवर के अनुरूप एक मॉड्यूल स्कैनर.ओ, प्रिंटर.ओ, यूएसबी_स्टोरेज.
USB डिवाइस को कनेक्ट करने की जानकारी यहां से प्राप्त की जा सकती है /var/log/dmesgऔर सीधे से /proc. यदि निर्देशिका /प्रोक/बस/यूएसबीखाली का मतलब है कि USB वर्चुअल फ़ाइल सिस्टम माउंट नहीं है। निर्देशिका के अंदर नियंत्रकों की संख्या के अनुसार 001, 002 जैसे नामों वाली कई फ़ाइलें होनी चाहिए और एक डिवाइस फ़ाइल जो सभी डिवाइसों के बारे में "जानती" हो:

$ cat /proc/bus/usb/devices

टी: बस=02 लेव=00 प्रिंट=00 पोर्ट=00 सेंट=00 देव#= 1 एसपीडी=480 एमएक्ससीएच=10
बी: आवंटन= 0/800 हमें (0%), #इंट= 0, #आइसो= 0
डी: वेर= 2.00 सीएलएस=09(हब) सब=00 प्रोट=01 एमएक्सपीएस=64 #सीएफजीएस= 1

एस: निर्माता=लिनक्स 2.6.20-15-जेनेरिक ehci_hcd
एस: उत्पाद=ईएचसीआई होस्ट नियंत्रक
एस: सीरियलनंबर=0000:00:02.1


ई: Ad=81(I) Atr=03(इंट.) MxPS= 4 Ivl=256ms

टी: बस=01 लेव=00 प्रिंट=00 पोर्ट=00 सेंट=00 डेव#= 1 एसपीडी=12 एमएक्ससीएच=10
बी: आवंटन= 0/900 हमें (0%), #इंट= 0, #आइसो= 0
डी: Ver= 1.10 सीएलएस=09(हब) सब=00 प्रोट=00 एमएक्सपीएस=64 #सीएफजीएस= 1
पी: विक्रेता=0000 उत्पादआईडी=0000 रेव= 2.06
एस: निर्माता=लिनक्स 2.6.20-15-जेनेरिक ohci_hcd
एस: उत्पाद = ओएचसीआई होस्ट नियंत्रक
एस: सीरियलनंबर=0000:00:02.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
मैं: यदि#= 0 Alt= 0 #EPs= 1 सीएलएस=09(हब) उप=00 प्रोट=00 ड्राइवर=हब
ई: Ad=81(I) Atr=03(इंट.) MxPS= 2 Ivl=255ms

टी: बस=01 लेव=01 प्रिंट=01 पोर्ट=07 सीएनटी=01 डेव#= 2 एसपीडी=480 एमएक्ससीएच= 0
डी: Ver= 2.00 सीएलएस=00(>आईएफसी) सब=00 प्रोट=00 एमएक्सपीएस=64 #सीएफजीएस= 1
पी: विक्रेता=1307 उत्पादआईडी=0163 रेव= 1.00
एस: निर्माता=?????????y
एस: उत्पाद=यूएसबी मास स्टोरेज डिवाइस
एस: सीरियलनंबर=9fe1ad57805553
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 80mA
I: यदि#= 0 Alt= 0 #EPs= 3 क्ल्स=08(स्टोर.) सब=06 प्रोट=50 ड्राइवर=यूएसबी-स्टोरेज
ई: Ad=01(O) Atr=02(थोक) MxPS= 512 Ivl=125us
ई: विज्ञापन=82(आई) एटीआर=02(थोक) एमएक्सपीएस= 512 आईवीएल=0एमएस
ई: Ad=83(I) Atr=03(इंट.) MxPS= 64 Ivl=16ms

आउटपुट को समझना आसान है, दस्तावेज़ में विवरण देखें ( /usr/src//Documentation/usb/proc_usb_info.txt). मुझे बस यही कहना है कि पत्र टीटोपोलॉजी को इंगित करता है, बसऔर स्तरदिखाएँ कि डिवाइस किस बस से जुड़ा है और स्तर, Spd गति दिखाता है, एमएक्ससीएच- इससे कितने अन्य डिवाइस कनेक्ट किए जा सकते हैं, चालक- चालक। उदाहरण के लिए, ड्राइवर=हब दिखाता है कि यह एक हब है, और ड्राइवर=यूएसबी-स्टोरेज जानकारी संग्रहीत करने के लिए एक यूएसबी डिवाइस है।
KUbuntu रिपॉजिटरी में आप कई उपयोगिताएँ पा सकते हैं जो आपको USB को समझने में मदद करेंगी। तो, lsusb का उपयोग करके आपको USB उपकरणों के बारे में और भी अधिक जानकारी मिलेगी, और यदि आपको कंसोल पसंद नहीं है, तो USBview का उपयोग करें।

मूल रूप से मैं हॉट डिवाइस को लिनक्स के साथ कंप्यूटर से जोड़ने के बारे में बस इतना ही कहना चाहता था, मुझे उम्मीद है कि आज से आपको इससे कोई समस्या नहीं होगी।




विषयों में से एक में मेरे विसर्जन के हिस्से के रूप में (कॉम्पेज़ा विशेषता में मेरे अध्ययन के दौरान), मैंने एक दिलचस्प परियोजना पर काम किया, जिसे मैं बाहरी हार्ड पर "यूनीवर" फ़ोल्डर की गहराई में दफन नहीं करना चाहूंगा। गाड़ी चलाना।

इस प्रोजेक्ट को कहा जाता है usbripऔर लिनक्स फोरेंसिक के लिए एक छोटा ओपन सोर्स कंसोल उपयोगिता है, अर्थात् यूएसबी डिवाइस कनेक्शन के इतिहास के साथ काम करने के लिए। प्रोग्राम शुद्ध Python 3 (कुछ तृतीय-पक्ष मॉड्यूल का उपयोग करके) में लिखा गया है और इसमें Python 3.x दुभाषिया और कुछ पंक्तियों के अलावा अन्य निर्भरता की आवश्यकता नहीं है आवश्यकताएँ.txt, pip3 का उपयोग करके एक पंक्ति में हल किया गया।

इस पोस्ट में मैं इस सॉफ़्टवेयर की कुछ क्षमताओं का वर्णन करूंगा और डाउनलोड स्रोत के लिंक के साथ एक संक्षिप्त मैनुअल छोड़ूंगा।

काटना! (...मेरा मतलब है कट!)

स्क्रीनशॉट

हटाने योग्य USB उपकरणों का कनेक्शन इतिहास प्राप्त करना:


खोज अतिरिक्त जानकारीमॉडल पहचानकर्ता (पीआईडी) द्वारा यूएसबी डिवाइस के बारे में:

विवरण

जैसा कि ज्ञात है, ओएसजीएनयू/लिनक्स-आधारित सिस्टम विभिन्न प्रकार की घटनाओं को लॉग करने के लिए बहुत संवेदनशील हैं, और यूएसबी डिवाइस को कनेक्ट/डिस्कनेक्ट करना कोई अपवाद नहीं है। यूनिक्स दर्शन के "सार्वभौमिक इंटरफेस के रूप में टेक्स्ट स्ट्रीम" में से एक के साथ संयुक्त, वितरण के आधार पर ऐसी घटनाओं की कलाकृतियों के बारे में जानकारी (विस्तार की अलग-अलग डिग्री में) निम्नलिखित फ़ाइलों में से एक या अधिक में पाई जा सकती है:
  • /var/log/kern.log* ;
  • /var/log/syslog* ;
  • /var/log/संदेश* ;
  • /var/log/dmesg* ;
  • /var/log/daemon.log* .
फोरेंसिक-प्रूफ़ हमें इस मामले पर यह तस्वीर भी दिखाता है (थोड़ी अधूरी, लेकिन कोई बात नहीं):

अपने काम के लिए, यूएसब्रिप डेबियन (उबंटू) पर आधारित सभी लिनक्स बिल्ड के लिए सार्वभौमिक खोजता है। लिनक्स टकसालआदि) और RPM (CentOS, Fedora, openSUSE, आदि), लॉग फ़ाइलें, अर्थात्: /var/log/syslog* या /var/log/messages*, उन्हें खोजने में पार्स करता है आवश्यक जानकारीऔर यूएसबी डिवाइस कनेक्शन के पाए गए निशानों को सुंदर प्लेटों (या सूचियों - जो भी आपको पसंद हो) में बदल देता है।

USBrip यह भी कर सकता है:

  • JSON फ़ाइलों के रूप में अधिकृत (विश्वसनीय) उपकरणों की सूची बनाएं;
  • विश्वसनीय उपकरणों की सूची के आधार पर "अपमानजनक घटनाओं" की खोज करें: घटनाएं (यूएसबी कनेक्शन/डिस्कनेक्शन) जिसमें यूएसबी डिवाइस शामिल थे जिन्हें विश्वसनीय के रूप में चिह्नित नहीं किया गया था;
  • किसी USB डिवाइस के बारे में अतिरिक्त जानकारी उसके VID (विक्रेता आईडी) और/या PID (उत्पाद आईडी) द्वारा देखें।

संदर्भ

उपलब्ध मॉड्यूल की सूची प्राप्त करें:

$ Python3 usbrip.py -h
किसी विशिष्ट मॉड्यूल के लिए उपलब्ध सबमॉड्यूल की सूची प्राप्त करें:

$python3 usbrip.py<модуль>-एच
किसी विशिष्ट सबमॉड्यूल के लिए उपलब्ध विकल्पों की सूची प्राप्त करें:

$python3 usbrip.py<модуль> <подмодуль>-एच

वाक्य - विन्यास

$ Python3 usbrip.py बैनर $ Python3 usbrip.py घटनाओं का इतिहास [-q] [-t | -एल] [-ई] [-एन घटनाओं की संख्या] [-डी तारीख [दिनांक...]] [-सी कॉलम [कॉलम...]] [-एफ लॉगफाइल [लॉगफाइल...]] $ पायथन3 यूएसब्रिप .py इवेंट gen_auth<ВЫХОДНОЙ_ФАЙЛ.JSON>[-q] [-e] [-n घटनाओं की संख्या] [-d दिनांक [दिनांक...]] [-f लॉगफ़ाइल [लॉगफ़ाइल...]] $ Python3 usbrip.py ईवेंट उल्लंघन<ВХОДНОЙ_ФАЙЛ.JSON>[-क्यू] [-टी | -एल] [-ई] [-एन घटनाओं की संख्या] [-डी तारीख [दिनांक...]] [-सी कॉलम [कॉलम...]] [-एफ लॉगफाइल [लॉगफाइल...]] $ पायथन3 यूएसब्रिप .py आईडी खोज [-q] [--vid VID] [--pid PID] [--ऑफ़लाइन] $ Python3 usbrip.py आईडी डाउनलोड [-q]

विकल्प

"इवेंट इतिहास", "इवेंट जेन_ऑथ", "इवेंट उल्लंघन", "आईडी खोज", "आईडी डाउनलोड" सबमॉड्यूल द्वारा समर्थित विकल्प: -q, --quiet बैनर, सूचना (हरा) संदेशों के प्रदर्शन को छोड़ दें, और करें निष्पादन के दौरान प्रश्न न पूछें ######################################## ## #################################### "घटनाओं का इतिहास", "द्वारा समर्थित विकल्प ईवेंट जेन_ऑथ" सबमॉड्यूल ", "ईवेंट उल्लंघन": -ई, - केवल हटाने योग्य यूएसबी उपकरणों के लिए बाहरी खोज (जिसमें वियोग की जानकारी है) -एन ईवेंट की संख्या, - ईवेंट की संख्या दिनांक के अनुसार नवीनतम ईवेंट की संख्या -d DATE [DATE..], --date DATE [DATE...] खोजते समय घटनाओं को फ़िल्टर किया जाएगा -f LOG_FILE [LOG_FILE...], --फ़ाइल LOG_FILE [LOG_FILE.] प्रदर्शित किया जाएगा। ..] लॉग फ़ाइलों की सूची (यदि निर्दिष्ट नहीं है, तो इवेंट इतिहास को डिफ़ॉल्ट लॉग फ़ाइलों का उपयोग करके खोजा जाएगा: /var/log/syslog* या /var/log/messages* OS संस्करण के आधार पर) ##### ######## ##################################### ######## ##################### "घटना इतिहास", "घटना उल्लंघन" सबमॉड्यूल द्वारा समर्थित विकल्प: -t, -- तालिका तालिका के रूप में आउटपुट उत्पन्न करती है (यदि टर्मिनल विंडो का आकार तालिका को सही ढंग से प्रदर्शित करने के लिए पर्याप्त नहीं है, तो आउटपुट स्वचालित रूप से सूची के रूप में उत्पन्न हो जाएगा; -t ध्वज को निर्दिष्ट करते समय, आउटपुट जबरन तालिका के रूप में उत्पन्न किया जाएगा) -l, --list आउटपुट को एक सूची के रूप में उत्पन्न करेगा -c COLUMN [COLUMN...], --column COLUMN [COLUMN.. .] उन स्तंभों की सूची जिनका उपयोग तालिका बनाते समय किया जाएगा (केवल तालिका के रूप में आउटपुट उत्पन्न करते समय प्रभाव पड़ता है); अनुमत कुंजियाँ: "conn", "user", "vid", "pid", "prod", "manufact", "serial", "port", "disconn"। ############################################ ################################## "आईडी सर्च", "आईडी डाउनलोड" सबमॉड्यूल द्वारा समर्थित विकल्प: - -विड वीआईडी ​​विक्रेता आईडी या यूएसबी डिवाइस निर्माता आईडी (आमतौर पर 4 हेक्साडेसिमल अंक) -विड पीआईडी ​​उत्पाद आईडी या यूएसबी डिवाइस मॉडल आईडी (आमतौर पर 4 हेक्साडेसिमल अंक) - यदि निर्दिष्ट हो तो ऑफ़लाइन, डेटाबेस में यूएसबी डिवाइस के बारे में अतिरिक्त जानकारी खोजें पहचानकर्ता डेटा को पहले अपडेट किए बिना तैयार किया जाएगा (डेटाबेस)

उपयोग के उदाहरण

सभी USB उपकरणों का कनेक्शन इतिहास दिखाएं, बैनर, सूचनात्मक (हरा) संदेशों को छोड़ें, और निष्पादन के दौरान प्रश्न पूछे बिना (-q, --quite), एक सूची के रूप में आउटपुट उत्पन्न करें (-l, -- सूची), जिसमें 100 सबसे हाल ही में पाई गई घटनाएँ शामिल हैं (-n घटनाओं की संख्या, -number घटनाओं की संख्या):
$ Python3 usbrip.py इवेंट इतिहास -ql -n 100
हटाने योग्य यूएसबी डिवाइस (-ई, --एक्सटर्नल) का कनेक्शन इतिहास दिखाएं, फ़ील्ड (कॉलम) "कनेक्टेड", "वीआईडी", "पीआईडी", "डिस्कनेक्टेड" और "सीरियल नंबर) के साथ तालिका के रूप में आउटपुट उत्पन्न करें ” (-सी कॉलम [कॉलम...], --कॉलम कॉलम [कॉलम...]), तिथियों के आधार पर खोज को फ़िल्टर करना (-डी दिनांक [दिनांक...], --दिनांक दिनांक [दिनांक...] ), बाहरी लॉग फ़ाइलों से जानकारी लेना (-f LOG_FILE [LOG_FILE...], --फ़ाइल LOG_FILE [LOG_FILE...]):
$ Python3 usbrip.py इवेंट हिस्ट्री -et -c conn vid pid disconn सीरियल -d "दिसंबर 9" "दिसंबर 10" -f /var/log/syslog.1 /var/log/syslog.2.gz
सभी यूएसबी उपकरणों के कनेक्शन इतिहास की एक तालिका बनाएं और आगे के विश्लेषण के लिए आउटपुट को एक फ़ाइल में रीडायरेक्ट करें। इस घटना में कि आउटपुट स्ट्रीम मानक स्टडआउट नहीं है ("|" या ">" उदाहरण के लिए), विशेष आउटपुट डेटा में मौजूद नहीं होंगे। टर्मिनल में फ़ॉन्ट रंग के लिए जिम्मेदार वर्ण, इसलिए पाठ फ़ाइलअपठनीय पात्रों से अटा पड़ा नहीं होगा। यह भी ध्यान दिया जाना चाहिए कि usbrip कुछ UNICODE स्थिरांक का उपयोग करता है, इसलिए उन्हें सही ढंग से प्रदर्शित करने के लिए बनाई गई फ़ाइल के एन्कोडिंग को तुरंत UTF-8 में परिवर्तित करना एक अच्छा विचार होगा (उदाहरण के लिए, एन्कोव का उपयोग करके), और विंडोज-शैली का भी उपयोग करें बेहतर पोर्टेबिलिटी के लिए न्यूलाइन वर्ण (उदाहरण के लिए awk का उपयोग करना):
$ Python3 usbrip.py इतिहास की घटनाएँ -t | awk "( उप("$", "\r"); प्रिंट )" > usbrip.txt && enconv -x UTF8 usbrip.txt
टिप्पणी:विशेष से छुटकारा यदि आउटपुट पहले ही stdout पर भेजा जा चुका है तो रंग के लिए ज़िम्मेदार वर्ण भी संभव हैं। ऐसा करने के लिए, आपको प्राप्त डेटा को एक नई फ़ाइल usbrip.txt में कॉपी करना होगा और एक और awk निर्देश जोड़ना होगा:
$ awk "( उप("$", "\r"); gsub("\\x1B\\[*[ -/]*[@-~]", ""); प्रिंट )" usbrip.txt && enconv -x UTF8 usbrip.txt
JSON फ़ाइल (trusted/auth.json) के रूप में विश्वसनीय उपकरणों की एक सूची बनाएं जिसमें पहला शामिल हो तीन 26 सितंबर को कनेक्ट हुए डिवाइस:
$ Python3 usbrip.py इवेंट gen_auth Trusted/auth.json -n 3 -d "सितम्बर 26"
विश्वसनीय उपकरणों (विश्वसनीय/auth.json) की सूची के आधार पर हटाने योग्य यूएसबी उपकरणों के कनेक्शन इतिहास के बीच "उल्लंघन करने वाली घटनाओं" की खोज करें और "कनेक्टेड", "वीआईडी" और "पीआईडी" के साथ एक तालिका के रूप में आउटपुट उत्पन्न करें। " खेत:
$ Python3 usbrip.py इवेंट उल्लंघन विश्वसनीय/auth.json -et -c conn vid pid
किसी USB डिवाइस के VID और PID के आधार पर उसके बारे में अतिरिक्त जानकारी ढूँढना:
$ Python3 usbrip.py आईडी खोज --vid 0781 --pid 5580
यूएसबी डिवाइस आईडी डेटाबेस डाउनलोड/अपडेट करें (स्रोत

विषयों में से एक में मेरे विसर्जन के हिस्से के रूप में (कॉम्पेज़ा विशेषता में मेरे अध्ययन के दौरान), मैंने एक दिलचस्प परियोजना पर काम किया, जिसे मैं बाहरी हार्ड पर "यूनीवर" फ़ोल्डर की गहराई में दफन नहीं करना चाहूंगा। गाड़ी चलाना।

इस प्रोजेक्ट को कहा जाता है

usbrip

और लिनक्स फोरेंसिक के लिए एक छोटा ओपन सोर्स कंसोल उपयोगिता है, अर्थात् यूएसबी डिवाइस कनेक्शन के इतिहास के साथ काम करने के लिए। प्रोग्राम शुद्ध Python 3 (कुछ तृतीय-पक्ष मॉड्यूल का उपयोग करके) में लिखा गया है और इसमें Python 3.x दुभाषिया और कुछ पंक्तियों के अलावा अन्य निर्भरता की आवश्यकता नहीं है

आवश्यकताएँ.txt

pip3 का उपयोग करके एक पंक्ति में हल किया गया।

इस पोस्ट में मैं इस सॉफ़्टवेयर की कुछ क्षमताओं का वर्णन करूंगा और डाउनलोड स्रोत के लिंक के साथ एक संक्षिप्त मैनुअल छोड़ूंगा।

$ Python3 usbrip.py आईडी डाउनलोड

लिंक और पोस्टस्क्रिप्ट

आप से उपयोगिता प्राप्त कर सकते हैं

GitHub

चलाने के लिए सभी निर्भरताएँ और सही संचालनमें दर्शाया गया है

आवश्यकताएँ.txt

ध्यान देने के लिए धन्यवाद!

पी.एस.

हाँ, बैनर शैली और सूचना संदेशपरियोजना से प्रेरित

sqlmap

यूएसबी - यूनिवर्सल सीरियल बस को बाह्य उपकरणों को जोड़ने के लिए एकल, सरल बस प्रदान करने के लक्ष्य के साथ कंपनियों के एक संघ द्वारा विकसित किया गया था।

यूएसबी डिज़ाइन उपकरणों को कनेक्शन के लिए मानक जैक का उपयोग करके तुरंत कनेक्ट करने की अनुमति देता है। USB उपकरणों में शामिल हैं: कीबोर्ड, चूहे, प्रिंटर, स्कैनर, हार्ड ड्राइव, फ्लैश ड्राइव, कैमरा, मोडेम, संचार अनुकूलकऔर कॉलम, और उनकी सूची लगातार बढ़ रही है।

यूएसबी उपकरणों के लिए लिनक्स समर्थन काफी व्यापक है, लेकिन कुछ उपकरणों के लिए विशेष ड्राइवरों की आवश्यकता होती है, और अन्य, मुख्य रूप से प्रिंटर और स्कैनर, समर्थित नहीं हो सकते हैं या केवल आंशिक रूप से समर्थित हो सकते हैं।

कंप्यूटर सिस्टम में डिज़ाइन किए गए एक या अधिक नियंत्रक या हब हो सकते हैं यूएसबी कनेक्शनउपकरण या अन्य (बाहरी) हब। हब 7 डिवाइसों को सपोर्ट कर सकता है, जिसके बदले में अतिरिक्त हब भी हो सकते हैं। अंदर हब सिस्टम इकाईरूट हब कहा जाता है. प्रत्येक स्टार टोपोलॉजी 127 हब या डिवाइस तक का समर्थन कर सकती है।

बोला जा रहा है यूएसबी पोर्ट, हमारा तात्पर्य कंप्यूटर में USB और कनेक्शन के लिए सॉकेट को सपोर्ट करने की क्षमता से है, नहीं आंतरिक पताडिवाइस द्वारा उपयोग किया जाने वाला पोर्ट.

बहु लेयरिंग यूएसबी सिस्टमहोस्ट को यूएसबी डिवाइस की विशेषताओं को निर्धारित करने की अनुमति देता है, जिसमें क्लास, निर्माता का नाम, डिवाइस का नाम, वोल्टेज आवश्यकताएं, गति, यूएसबी समर्थन स्तर और अन्य सुविधाएं शामिल हैं।

लिनक्स यूएसबी डिवाइस सपोर्ट मॉड्यूल

यूएसबी डिवाइस वर्तमान में लिनक्स पर पूरी तरह से समर्थित हैं। अधिकांश परिवर्तन 2.6 कर्नेल शाखा में दिखाई दिए, हालाँकि 2.2 कर्नेल में भी कुछ समर्थन था। Linux USB 2.0 और इससे पहले वाले विनिर्देशों दोनों का समर्थन करता है। यूएसबी की हॉट-प्लग प्रकृति के कारण, समर्थन आमतौर पर कर्नेल मॉड्यूल के माध्यम से किया जाता है जिसे आवश्यकतानुसार लोड या अनलोड किया जा सकता है।

Lspci कमांड आपको USB डिवाइस प्रदर्शित करने की अनुमति देता है:

Root@localhost:~:# lspci | grep -i USB 00:03.0 USB नियंत्रक: सिलिकॉन इंटीग्रेटेड सिस्टम USB 1.1 नियंत्रक (rev 0f) 00:03.1 USB नियंत्रक: सिलिकॉन एकीकृत सिस्टम USB 1.1 नियंत्रक (rev 0f) 00:03.3 USB नियंत्रक: सिलिकॉन एकीकृत सिस्टम USB 2.0 नियंत्रक

कमांड आउटपुट से पता चलता है कि सिस्टम में 3 यूएसबी नियंत्रक हैं।

lsmod कमांड का उपयोग करके आप लोड किए गए USB मॉड्यूल प्रदर्शित कर सकते हैं:

Root@localhost:~:# lsmod | egrep "usb|hci|hid|mouse|मॉड्यूल" मॉड्यूल आकार hid_microsoft द्वारा प्रयुक्त 3232 0 usbid 32992 0 hid 39040 2 hid_microsoft,usbid ohci_hcd 24332 0 psmouse 41644 0 ssb 38464 1 ohci_hcd ehci_ hcd 34 152 0

कनेक्टेड USB डिवाइस प्रदर्शित करना

वर्तमान में कनेक्टेड USB डिवाइसों का सारांश /proc/bus/usb/devices फ़ाइल में निहित है। आप इसे निम्न आदेश से प्रदर्शित कर सकते हैं:

Root@localhost:~:# cat /proc/bus/usb/devices T: Bus=03 लेव=00 Prnt=00 पोर्ट=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 3 B: Alloc= 0/900 हमें (0%), #Int= 0, #Iso= 0 D: Ver= 1.10 Cls=09(hub) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: विक्रेता=1d6b ProdID=0001 Rev= 2.06 एस: निर्माता=लिनक्स 2.6.29.6 ओएचसीआई_एचसीडी एस: उत्पाद=ओएचसीआई होस्ट नियंत्रक एस: सीरियलनंबर=0000:00:03.1 सी:* #आईएफएस= 1 सीएफजी#= 1 एटीआर=ई0 एमएक्सपीडब्ल्यूआर= 0एमए आई:* यदि#= 0 ऑल्ट = 0 #ईपी= 1 सीएलएस=09(हब) सब=00 प्रोट=00 ड्राइवर=हब ई: विज्ञापन=81(आई) एटीआर=03(इंट.) एमएक्सपीएस= 2 आईवीएल=255एमएस टी: बस=02 लेव=00 Prnt=00 पोर्ट=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 3 B: आवंटन= 28/900 us (3%), #Int= 2, #Iso= 0 D: Ver= 1.10 Cls=09( हब) सब=00 प्रोट=00 एमएक्सपीएस=64 #सीएफजीएस= 1 पी: विक्रेता=1डी6बी प्रोडीआईडी=0001 रेव= 2.06 एस: निर्माता=लिनक्स 2.6.29.6 ohci_hcd एस: उत्पाद=ओएचसीआई होस्ट नियंत्रक एस: सीरियलनंबर=0000:00: 03.0 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* यदि#= 0 Alt= 0 #EPs= 1 सीएलएस=09(हब) सब=00 प्रोट=00 ड्राइवर=हब ई: विज्ञापन =81(आई) एटीआर=03(इंट.) एमएक्सपीएस= 2 आईवीएल=255एमएस टी: बस=02 लेव=01 प्रिंट=01 पोर्ट=00 सीएनटी=01 देव#= 2 एसपीडी=1.5 एमएक्ससीएच= 0 डी: वेर= 2.00 Cls=00(>ifc) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: विक्रेता=045e ProdID=00db Rev= 1.73 S: निर्माता=Microsoft S: उत्पाद=प्राकृतिक - एर्गोनोमिक कीबोर्ड 4000 C:* #Ifs = 2 Cfg#= 1 Atr=a0 MxPwr=100mA I:* यदि#= 0 Alt= 0 #EPs= 1 Cls=03(HID) Sub=01 Prot=01 ड्राइवर=usbid E: Ad=81(I) Atr =03(इंट.) एमएक्सपीएस= 8 आईवीएल=10एमएस आई:* यदि#= 1 ऑल्ट= 0 #ईपीएस= 1 सीएलएस=03(एचआईडी) सब=00 प्रोट=00 ड्राइवर=यूएसबीआईडी ​​ई: विज्ञापन=82(आई) एटीआर =03(इंट.) एमएक्सपीएस= 8 आईवीएल=10एमएस टी: बस=01 लेव=00 प्रिंट=00 पोर्ट=00 सीएनटी=00 देव#= 1 एसपीडी=480 एमएक्ससीएच= 6 बी: आवंटन= 0/800 हमें (0% ), #Int= 0, #Iso= 0 D: Ver= 2.00 Cls=09(hub) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: विक्रेता=1d6b ProdID=0002 Rev= 2.06 S: निर्माता= Linux 2.6.29.6 ehci_hcd S: उत्पाद=EHCI होस्ट नियंत्रक S: सीरियलनंबर=0000:00:03.3 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* यदि#= 0 Alt= 0 #EPs = 1 सीएलएस=09(हब) सब=00 प्रोट=00 ड्राइवर=हब ई: विज्ञापन=81(आई) एटीआर=03(इंट.) एमएक्सपीएस= 4 आईवीएल=256एमएस

लिस्टिंग में, Spd=480 USB 2.0 बस से मेल खाता है, और Spd=12 USB 1.1 डिवाइस से मेल खाता है। सूची में आगे आप देख सकते हैं कि वर्तमान में सिस्टम से 1 यूएसबी डिवाइस जुड़ा हुआ है - माइक्रोसॉफ्ट नेचुरल एर्गोनोमिक कीबोर्ड 400 (एसपीडी=1.5)।

स्वाभाविक रूप से, मैं इस पाठ को इस कीबोर्ड पर टाइप करता हूं।

USB डिवाइस कनेक्शन के पदानुक्रम को -t विकल्प के साथ lsusb कमांड का उपयोग करके देखा जा सकता है:

Root@localhost:~:# lsusb -t Bus# 3 `-Dev# 1 विक्रेता 0x1d6b उत्पाद 0x0001 Bus# 2 `-Dev# 1 विक्रेता 0x1d6b उत्पाद 0x0001 `-Dev# 2 विक्रेता 0x045e उत्पाद 0x00db बस# 1 `-Dev# 1 विक्रेता 0x1d6b उत्पाद 0x0002

किसी विशिष्ट USB डिवाइस के बारे में जानकारी निम्नलिखित कमांड से प्राप्त की जा सकती है:

Root@localhost:~:# lsusb -vd 0x045e:0x00db Bus 002 डिवाइस 002: ID 045e:00db Microsoft Corp. प्राकृतिक एर्गोनोमिक कीबोर्ड 4000 V1.0 डिवाइस डिस्क्रिप्टर: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (इंटरफ़ेस स्तर पर परिभाषित) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x045e Microsoft Corp. idProduct 0x00db नेचुरल एर्गोनोमिक कीबोर्ड 4000 V1.0 bcdDevice 1.73 iनिर्माता 1 Microsoft iProduct 2 नेचुरल एर्गोनोमिक कीबोर्ड 4000 iSerial 0 bNumConfigurations 1 कॉन्फ़िगरेशन डिस्क्रिप्टर: bLength 9 bDescriptorType 2 wTotalLength 59 bNumInterfaces 2 bConfigurationValue 1 iकॉन्फ़िगरेशन 0 bmविशेषताएँ 0xa0 (बस संचालित) रिमोट वेकअप मैक्सपावर 100mA इंटरफ़ेस डिस्क्रिप्टर: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternetSetting 0 bNumEndpoints 1 bInterfaceClass 3 ह्यूमन इंटरफ़ेस डिवाइस bInterfaceSubClass 1 बूट इंटरफ़ेस सबक्लास bInterfaceProtocol 1 कीबोर्ड iInterface 0 ** अपरिचित: 09 21 11 01 00 01 22 3c 00 एंडपॉइंट डिस्क्रिप्टर: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 ट्रांसफर प्रकार इंटरप्ट सिंक प्रकार कोई नहीं उपयोग प्रकार डेटा wMaxPacketSize 0x0008 1x 8 बाइट्स bInterval 10 इंटरफ़ेस डिस्क्रिप्टर: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlterateSetting 0 bNumEndpoints 1 bInterfaceClass 3 ह्यूमन इंटरफ़ेस डिवाइस bInterfaceSubClass 0 कोई सबक्लास bInterfaceProto कॉलम 0 कोई नहीं आईइंटरफ़ेस 0 ** अपरिचित : 09 21 11 01 00 01 22 56 00 एंडपॉइंट डिस्क्रिप्टर: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 3 ट्रांसफर टाइप इंटरप्ट सिंक टाइप कोई नहीं उपयोग प्रकार डेटा wMaxPacketSize 0x0008 1x 8 बाइट्स bInterval 10 डिवाइस स्थिति: 0 x000 0 (बस संचालित)

किसी USB डिवाइस को तुरंत कनेक्ट करना

नए सिस्टम में यूएसबी डिवाइस को तुरंत कनेक्ट करने (हॉट प्लगिंग) के लिए समर्थन है, जिसका अर्थ है डिवाइस को एक रनिंग सिस्टम से कनेक्ट करना, जो होना चाहिए:

  • यूएसबी डिवाइस का प्रकार निर्धारित करें, ड्राइवर ढूंढें और उसे चलाएं;
  • ड्राइवर को डिवाइस के साथ संबद्ध करें;
  • USB डिवाइस के बारे में अन्य सबसिस्टम को सूचित करें।


मित्रों को बताओ