تاریخچه اتصالات usb در لینوکس. پزشکی قانونی لینوکس در قالب ردیابی تاریخچه اتصال دستگاه های USB. برای تعمیر پورت USB لینوکس را مجددا راه اندازی کنید

به عنوان بخشی از غوطه ور شدن در یکی از رشته ها (در طول دوره تحصیلم در تخصص Compeza)، من روی یک پروژه جالب کار کردم که نمی خواهم به سادگی آن را در اعماق پوشه "یونیور" روی یک سخت خارجی دفن کنم. راندن.

این پروژه نام دارد

usbrip

و یک ابزار کنسول منبع باز کوچک برای پزشکی قانونی لینوکس است، یعنی برای کار با تاریخچه اتصالات دستگاه USB. این برنامه با پایتون 3 خالص (با استفاده از برخی از ماژول های شخص ثالث) نوشته شده است و به وابستگی های دیگری غیر از مفسر Python 3.x و چند خط از

الزامات. txt

با استفاده از pip3 در یک خط حل شد.

در این پست به شرح برخی از قابلیت های این نرم افزار می پردازم و راهنمای کوتاهی با لینک منبع دانلود می گذارم.

دانلود ID python3 usbrip.py $

پیوندها و پس اسکریپت

شما می توانید ابزار مفید را از

GitHub

تمام وابستگی ها برای راه اندازی و عملکرد صحیح در فهرست شده اند

الزامات. txt

از توجه شما متشکرم

P.S.

بله، سبک بنر و پیام های اطلاعاتی از پروژه الهام گرفته شده است

sqlmap

به عنوان بخشی از غوطه ور شدن در یکی از رشته ها (هنگامی که برای تخصص امنیت کامپیوتر تحصیل می کردم)، روی یک پروژه سرگرم کننده کار کردم که نمی خواهم به سادگی آن را در اعماق پوشه "یونیور" روی هارد اکسترنال دفن کنم.

این پروژه نام دارد usbripو یک ابزار کنسول منبع باز کوچک برای پزشکی قانونی لینوکس است، یعنی برای کار با تاریخچه اتصالات دستگاه USB. این برنامه با پایتون 3 خالص (با استفاده از برخی از ماژول های شخص ثالث) نوشته شده است و به وابستگی های دیگری به جز مفسر Python 3.x و چند خط از الزامات. txt، در یک خط با استفاده از پیپ حل شد.

در این پست به شرح برخی از قابلیت های این نرم افزار می پردازم و راهنمای کوتاهی با لینک منبع دانلود می گذارم.

برش! (...منظورم کات است!)

توجه داشته باشید. عملکرد توضیح داده شده در مقاله مربوط به نسخه ابزار است. پشت آخرین نسخهبا بسیاری از چیزهای جدید، پیشنهاد می کنم به مخزن بروید.

اسکرین شات ها

دریافت تاریخچه اتصال دستگاه های USB قابل جابجایی:


جستجو کردن اطلاعات اضافیدرباره یک دستگاه USB بر اساس شناسه مدل (PID):

شرح

همانطور که می دانید سیستم عامل های مبتنی بر گنو/لینوکس نسبت به ثبت انواع مختلف رویدادها بسیار حساس هستند و اتصال/قطع دستگاه های USB نیز از این قاعده مستثنی نیست. همراه با یکی از «جریان‌های متنی به‌عنوان رابط‌های جهانی» در فلسفه یونیکس، اطلاعات مربوط به مصنوعات چنین رویدادهایی (با درجات متفاوتی از جزئیات) بسته به توزیع، در یک یا چند فایل متنی زیر یافت می‌شود:
  • /var/log/kern.log*;
  • /var/log/syslog*;
  • /var/log/messages*;
  • /var/log/dmesg*;
  • /var/log/daemon.log*.
FORENSIC- PROOF حتی این تصویر را در این مورد به ما نشان می دهد (کمی ناقص، اما مهم نیست):

برای کار خود، usbrip موارد جهانی را برای تمام بیلدهای لینوکس مبتنی بر دبیان (اوبونتو، لینوکس مینتو RPM (CentOS، Fedora، openSUSE، و غیره)، فایل های گزارش، یعنی: /var/log/syslog* یا /var/log/messages*، آنها را در جستجوی اطلاعات لازم تجزیه می کند و ردیابی های یافت شده را آشکار می کند. اتصال دستگاه های USB به صفحات زیبا (یا لیست - هر آنچه که دوست دارید).

USBrip همچنین می تواند:

  • ایجاد لیستی از دستگاه های مجاز (معتمد) در قالب فایل های JSON.
  • جستجوی "رویدادهای توهین آمیز" بر اساس لیست دستگاه های مورد اعتماد: رویدادهایی (اتصال/قطع اتصال USB) که شامل دستگاه های USB است که به عنوان مورد اعتماد علامت گذاری نشده اند.
  • با استفاده از VID (شناسه فروشنده) و/یا PID (شناسه محصول) اطلاعات اضافی درباره دستگاه USB را جستجو کنید.

ارجاع

لیستی از ماژول های موجود را دریافت کنید:

$ python3 usbrip.py -h
لیستی از زیر ماژول های موجود برای یک ماژول خاص را دریافت کنید:

$python3 usbrip.py<модуль>-h
دریافت لیست گزینه های موجودبرای یک زیر ماژول خاص:

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

نحو

بنر $ python3 usbrip.py بنر ابزار کاربردی را روی صفحه نمایش می دهد. تاریخچه رویدادهای $ python3 usbrip.py [-q] [-t | -l] [-e] [-n تعداد رویدادها] [-d DATE [DATE...]] [-c COLUMN [COLUMN...]] [-f LOGFILE [LOGFILE...]] مشاهده اتصال USB تاریخ . $ python3 usbrip.py رویدادها gen_auth<ВЫХОДНОЙ_ФАЙЛ.JSON>[-a SIGN [SIGN...]] [-q] [-e] [-n NUMBER_EVENTS] [-d DATE [DATE...]] [-f LOG_FILE [LOG_FILE...]] تشکیل فهرست دستگاه های USB مجاز (معتمد). نقض رویدادهای $ python3 usbrip.py<ВХОДНОЙ_ФАЙЛ.JSON>[-a CHARACTER [CHARGET...]] [-q] [-t | -l] [-e] [-n تعداد رویدادها] [-d DATE [DATE...]] [-c COLUMN [COLUMN...]] [-f LOGFILE [LOGFILE...]] جستجو برای " رویدادهای توهین آمیز" " بر اساس لیستی از دستگاه های قابل اعتماد. $ python3 usbrip.py جستجوی شناسه [-q] [ --vid VID] [--pid PID] [--آفلاین] اطلاعات اضافی درباره دستگاه را با استفاده از VID و/یا PID آن در پایگاه داده شناسه جستجو کنید. $ python3 usbrip.py IDs دانلود [-q] پایگاه داده شناسه دستگاه USB محلی را به روز کنید (دانلود کنید).

گزینه ها

گزینه‌های پشتیبانی شده توسط زیرماژول‌های "تاریخچه رویدادها"، "رویدادها gen_auth"، "تخلفات رویدادها"، "جستجوی ID"، "دانلود ID": -q، --quiet نمایش بنرها، پیام‌های اطلاعاتی (سبز) را حذف کنید و انجام دهید. در حین اجرا سوال نپرسید ########################################### ## ###################################### گزینه های پشتیبانی شده توسط "تاریخچه رویدادها"، " رویدادهای gen_auth" submodules "، "events نقض": -e، --جستجوی خارجی فقط برای دستگاه‌های USB قابل جابجایی (که اطلاعات قطع ارتباط دارند) -n تعداد رویدادها، --number NUMBER OF EVENTS تعداد آخرین رویدادها بر اساس تاریخ نمایش داده می شود -d DATE [DATE ..]، --date DATE [DATE...] فهرست تاریخ هایی که رویدادها بر اساس آن ها هنگام جستجوی -f LOG_FILE [LOG_FILE...]، -- فایل LOG_FILE [LOG_FILE] فیلتر می شوند. ..] لیست فایل های گزارش (اگر مشخص نشده باشد، تاریخچه رویداد با استفاده از فایل های گزارش پیش فرض جستجو می شود: /var/log/syslog* یا /var/log/messages* بسته به نسخه سیستم عامل) ##### ############################################### ############################## گزینه های پشتیبانی شده توسط زیرماژول های "تاریخچه رویدادها"، "تخلفات رویدادها": -t، -- جدول خروجی را به شکل جدول تولید می کند (اگر اندازه پنجره ترمینال برای نمایش صحیح جدول کافی نباشد، خروجی به صورت خودکار در قالب یک لیست تولید می شود. هنگام مشخص کردن پرچم -t، خروجی به صورت اجباری به شکل جدول تولید می شود) -l، --list خروجی را به صورت لیست تولید می کند -c COLUMN [COLUMN...]، --column COLUMN [COLUMN.. .] لیستی از ستون هایی که هنگام ساخت جدول استفاده می شوند (فقط هنگام تولید خروجی به شکل جدول تأثیر می گذارد). کلیدهای مجاز: "conn"، "user"، "vid"، "pid"، "prod"، "manufact"، "serial"، "port"، "disconn". ############################################### ################################### گزینه های پشتیبانی شده توسط زیرماژول های "events gen_auth"، "events نقض": - a SIGN [SIGN...]، --ویژگی SIGN [SIGN...] فهرستی از ویژگی هایی که هنگام ساخت فهرستی از دستگاه های مجاز (و همچنین هنگام جستجوی «رویدادهای نقض کننده» در مورد زیر ماژول "نقض رویدادها")؛ کلیدهای مجاز: "vid"، "pid"، "prod"، "manufact"، "serial". ############################################### ################################### گزینه های پشتیبانی شده توسط زیرماژول های "ids search"، "ids download": - -شناسه فروشنده vid VID یا شناسه سازنده دستگاه USB (معمولاً 4 رقم هگزادسیمال) -- شناسه محصول vid PID یا شناسه مدل دستگاه USB (معمولاً 4 رقم هگزادسیمال) -- در صورت مشخص بودن آفلاین، اطلاعات اضافی درباره دستگاه USB را در پایگاه داده جستجو کنید داده های شناسه بدون به روز رسانی اولیه تولید می شوند (پایگاه داده)

نمونه هایی از استفاده

نمایش تاریخچه اتصال همه دستگاه‌های USB، حذف بنر، پیام‌های اطلاعاتی (سبز) و همچنین بدون پرسیدن سوال در حین اجرا (-q, --quite) و تولید خروجی در قالب یک لیست (-l, -- لیست)، از جمله در آن شامل 100 رویداد اخیراً یافت شده است (-n NUMBER OF EVENTS, --number NUMBER OF EVENTS):
تاریخچه رویدادهای $ python3 usbrip.py -ql -n 100
نمایش تاریخچه اتصال دستگاه های USB قابل جابجایی (-e، --external)، تولید خروجی به شکل جدول با فیلدهای (ستون ها) "Connected"، "VID"، "PID"، "Disconnected" و "Serial Number" ” (-c COLUMN [COLUMN...]، --column COLUMN [COLUMN...])، فیلتر کردن جستجو بر اساس تاریخ (-d DATE [DATE...]، --date DATE [DATE...] ، گرفتن اطلاعات از فایل های گزارش خارجی (-f LOG_FILE [LOG_FILE...]، -- فایل LOG_FILE [LOG_FILE...]):
$ python3 usbrip.py تاریخچه رویدادها -et -c conn vid pid disconn serial -d "9 دسامبر" "10 دسامبر" -f /var/log/syslog.1 /var/log/syslog.2.gz
جدولی از تاریخچه اتصال همه دستگاه های USB بسازید و خروجی را برای تجزیه و تحلیل بیشتر به یک فایل هدایت کنید. در صورتی که جریان خروجی استاندارد stdout نباشد (مثلاً «|» یا «>»)، موارد خاص در داده‌های خروجی وجود نخواهد داشت. کاراکترهای مسئول رنگ فونت در ترمینال، بنابراین فایل متنیپر از کاراکترهای ناخوانا نخواهد بود. همچنین لازم به ذکر است که usbrip از برخی از ثابت های یونیکد استفاده می کند، بنابراین ایده خوبی است که بلافاصله رمزگذاری را تبدیل کنید. فایل ایجاد شدهدر UTF-8 برای نمایش صحیح آنها (مثلاً با استفاده از encov) و همچنین از کاراکترها استفاده کنید خط جدیدبه سبک ویندوز برای حمل بهتر (به عنوان مثال استفاده از awk):
رویدادهای تاریخچه $ python3 usbrip.py -t | awk "( sub("$"، "\r"); print )" > usbrip.txt && enconv -x UTF8 usbrip.txt
توجه داشته باشید:خلاص شدن از شر خاص اگر خروجی قبلاً به stdout ارسال شده باشد، کاراکترهای مسئول رنگ نیز ممکن است. برای انجام این کار، باید داده های دریافتی را در یک فایل جدید usbrip.txt کپی کنید و یک دستورالعمل awk دیگر اضافه کنید:
$ awk "( sub("$"، "\r"); gsub("\\x1B\\[*[ -/]*[@-~]"، ""); print )" usbrip.txt && enconv -x UTF8 usbrip.txt
فهرستی از دستگاه‌های مورد اعتماد را در قالب یک فایل JSON (trusted/auth.json) که حاوی فیلدهای «VID» و «PID» اولین است، ایجاد کنید. سهدستگاه‌های متصل در 26 سپتامبر:
رویدادهای $ python3 usbrip.py gen_auth trusted/auth.json -a vid pid -n 3 -d "26 سپتامبر"
«رویدادهای متخلف» را در بین تاریخچه اتصال دستگاه‌های USB قابل جابجایی بر اساس فهرست دستگاه‌های قابل اعتماد (trusted/auth.json) با استفاده از فیلد «PID» پیدا کنید و خروجی را در قالب یک جدول با «متصل»، «تولید کنید. فیلدهای VID و PID:
$ python3 usbrip.py نقض رویدادها trusted/auth.json -a pid -et -c conn vid pid
اطلاعات اضافی درباره یک دستگاه USB بر اساس VID و PID آن پیدا کنید:
$ python3 usbrip.py جستجوی شناسه --vid 0781 --pid 5580
دانلود/به‌روزرسانی پایگاه داده شناسه دستگاه USB (منبع):
دانلود ID python3 usbrip.py $

پیوندها و پس اسکریپت

می‌توانید این ابزار را از Github دریافت کنید، همه وابستگی‌ها برای راه‌اندازی و عملکرد صحیح در فهرست شده‌اند الزامات. txt.

از توجه شما متشکرم

P.S.بله، سبک بنر و پیام های اطلاعاتی از پروژه الهام گرفته شده است sqlmap (*^.^*)

UPD 2018/06/13.تحقیقاتی در مورد یک پرونده واقعی (؟) مربوط به ابزار من از طرف شخصی با Codeby انجام شد (راستش را بخواهید من شوکه شدم).

USB - Universal Serial Bus توسط کنسرسیومی از شرکت ها با هدف ارائه یک گذرگاه واحد و ساده برای اتصال وسایل جانبی توسعه داده شد.

طراحی USB به دستگاه‌ها اجازه می‌دهد تا با استفاده از جک‌های استاندارد برای اتصال به یکدیگر متصل شوند. دستگاه های USB عبارتند از: صفحه کلید، موس، چاپگر، اسکنر، هارد دیسک ها، فلش مموری، دوربین، مودم، آداپتورهای شبکهو ستون ها، و لیست آنها به طور مداوم در حال رشد است.

پشتیبانی لینوکس برای دستگاه‌های USB کاملاً جامع است، اما برخی از دستگاه‌ها به درایورهای خاصی نیاز دارند و برخی دیگر، عمدتاً چاپگرها و اسکنرها، ممکن است پشتیبانی نشوند یا فقط تا حدی پشتیبانی شوند.

سیستم های رایانه ای ممکن است حاوی یک یا چند کنترلر یا هاب باشند که برای اتصال دستگاه های USB یا هاب (خارجی) دیگر طراحی شده اند. این هاب می تواند تا 7 دستگاه را پشتیبانی کند که به نوبه خود می توانند هاب های اضافی داشته باشند. هاب داخل واحد سیستمریشه هاب نامیده می شود. هر توپولوژی ستاره می تواند تا 127 هاب یا دستگاه را پشتیبانی کند.

وقتی می گوییم پورت USB، منظور پشتیبانی و پورت USB کامپیوتر برای اتصال است، نه آدرس پورت داخلی استفاده شده توسط دستگاه.

لایه بندی سیستم USB به میزبان اجازه می دهد تا ویژگی های یک دستگاه USB، از جمله کلاس، نام سازنده، نام دستگاه، ولتاژ مورد نیاز، سرعت، سطح پشتیبانی USB و سایر عملکردها را تعیین کند.

ماژول پشتیبانی دستگاه USB لینوکس

دستگاه های USB در حال حاضر به طور کامل در لینوکس پشتیبانی می شوند. اکثر تغییرات در شاخه هسته 2.6 ظاهر شد، اگرچه حتی در هسته های 2.2 نیز پشتیبانی وجود داشت. لینوکس از USB 2.0 و مشخصات قبلی پشتیبانی می کند. به دلیل ماهیت اتصال داغ USB، پشتیبانی معمولاً از طریق ماژول‌های هسته انجام می‌شود که می‌توانند در صورت نیاز بارگیری یا تخلیه شوند.

دستور 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 کنترلر USB در سیستم وجود دارد.

با استفاده از دستور lsmod می توانید ماژول های USB بارگذاری شده را نمایش دهید:

Root@localhost:~:# lsmod | egrep "usb|hci|hid|mouse|Module" اندازه ماژول مورد استفاده hid_microsoft 3232 0 usbhid 32992 0 hid 39040 2 hid_microsoft,usbhid ohci_hcd 24332 0 psmouse 4164 41644 4152 0

نمایش دستگاه های USB متصل

خلاصه ای از دستگاه های USB متصل فعلی در فایل /proc/bus/usb/devices موجود است. با دستور زیر می توانید آن را نمایش دهید:

Root@localhost:~:# cat /proc/bus/usb/devices T: Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 3 B: Alloc= 0/900 us (0%)، #Int= 0، #Iso= 0 D: Ver= 1.10 Cls=09(hub) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0001 Rev= 2.06 S: Manufacturer=Linux 2.6.29.6 ohci_hcd S: Product=OHCI Host Controller S: SerialNumber=0000:00:03.1 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* If#= 0 = 0 #EPs= 1 Cls=09(hub) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 3 B: Alloc= 28/900 us (3%), #Int= 2, #Iso= 0 D: Ver= 1.10 Cls=09( هاب) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0001 Rev= 2.06 S: Manufacturer=Linux 2.6.29.6 ohci_hcd S: Product=OHCI Host Controller S:SerialNumber0=0 03.0 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub) Sub=00 Prot=00 Driver=hub E: Ad =81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=045e ProdID=00db Rev= 1.73 S: سازنده=Microsoft S: Product=Natural� صفحه کلید ارگونومیک 4000 C:* #Ifs = 2 Cfg#= 1 Atr=a0 MxPwr=100mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID) Sub=01 Prot=01 Driver=usbhid E: Ad=81(I) Atr =03(Int.) MxPS= 8 Ivl=10ms I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID) Sub=00 Prot=00 Driver=usbhid E: Ad=82(I) Atr =03(Int.) MxPS= 8 Ivl=10ms T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 6 B: Alloc= 0/800 us (0% )، #Int= 0، #Iso= 0 D: Ver= 2.00 Cls=09(hub) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0002 Rev= 2.06 S: Manufacturer= Linux 2.6.29.6 ehci_hcd S: Product=EHCI Host Controller S: SerialNumber=0000:00:03.3 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* If#= 0 Alt= 0 #EPs = 1 Cls=09(hub) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms

در لیست، Spd=480 مربوط به گذرگاه USB 2.0 و Spd=12 مربوط به دستگاه های USB 1.1 است. در ادامه لیست می توانید ببینید که در حال حاضر 1 دستگاه USB به سیستم متصل است - صفحه کلید طبیعی ارگونومیک Microsoft 400 (Spd=1.5).

طبیعتا این متن را روی این کیبورد تایپ می کنم.

سلسله مراتب اتصالات دستگاه USB را می توان با استفاده از دستور lsusb با گزینه -t مشاهده کرد:

Root@localhost:~:# lsusb -t Bus# 3 `-Dev# 1 Vendor 0x1d6b Product 0x0001 Bus# 2 `-Dev# 1 Vendor 0x1d6b Product 0x0001 `-Dev# 2 Vendor 0x045e Db Product 0x#ev#0 1 فروشنده 0x1d6b محصول 0x0002

نمایش اطلاعات در مورد یک خاص دستگاه USBبا دستور زیر می توان به دست آورد:

Root@localhost:~:# lsusb -vd 0x045e:0x00db Bus 002 Device 002: ID 045e:00db Microsoft Corp. صفحه کلید ارگونومیک طبیعی 4000 V1.0 توصیفگر دستگاه: طول 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (تعریف شده در سطح رابط) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVend. idProduct 0x00db Natural Ergonomic Keyboard 4000 V1.0 bcdDevice 1.73 iManufacturer 1 مایکروسافت iProduct 2 Natural Ergonomic Keyboard 4000 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength bLengthBT2TLpeengter 9 ConfigurationVal ue 1 iConfiguration 0 bmAttributes 0xa0 (Bus Powered) Remote Wakeup MaxPower 100mA توصیفگر رابط: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface InterfaceSubClass 1 Boot Interface Subclass bInterfaceProtocol 10 UNG0 01 00 01 22 3c 00 توصیفگر نقطه پایانی : طول 7 bDescriptor نوع 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 نوع انتقال وقفه نوع همگام سازی هیچکدام نوع استفاده داده wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateN دستگاه bInterfaceSubClass 0 بدون زیر کلاس bInterfaceProtocol 0 هیچ iInterface 0 ** ناشناخته: 09 21 11 01 00 01 22 56 00 توصیفگر نقطه پایانی: طول 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 3 نوع انتقال وقفه Synch نوع داده ها 0x10x1 terval 10 وضعیت دستگاه: 0x0000 (Bus Powered)

اتصال یک دستگاه USB در حال پرواز

سیستم‌های جدید از اتصال دستگاه‌های USB در حال پرواز پشتیبانی می‌کنند (اتصال داغ)، که به معنای اتصال دستگاه به یک سیستم در حال اجرا است، که باید:

  • نوع دستگاه USB را تعیین کنید، درایور را پیدا کنید و آن را اجرا کنید.
  • درایور را با دستگاه مرتبط کنید.
  • سایر سیستم های فرعی را در مورد دستگاه USB مطلع کنید.



به عنوان بخشی از غوطه ور شدن من در یکی از رشته ها (در مرحله تحصیل در تخصص امنیت کامپیوتر)، من روی یک پروژه سرگرم کننده کار کردم که نمی خواهم به سادگی آن را در اعماق پوشه "یونیور" در یک خارجی دفن کنم. هارد دیسک

این پروژه نام دارد usbripو یک ابزار کنسول منبع باز کوچک برای پزشکی قانونی لینوکس است، یعنی برای کار با تاریخچه اتصالات دستگاه USB. این برنامه با پایتون 3 خالص (با استفاده از برخی از ماژول های شخص ثالث) نوشته شده است و به وابستگی های دیگری غیر از مفسر Python 3.x و چند خط از الزامات. txt، با استفاده از pip3 در یک خط حل شد.

در این پست به شرح برخی از قابلیت های این نرم افزار می پردازم و راهنمای کوتاهی با لینک منبع دانلود می گذارم.

برش! (...منظورم کات است!)

اسکرین شات ها

دریافت تاریخچه اتصال دستگاه های USB قابل جابجایی:


یافتن اطلاعات اضافی در مورد یک دستگاه USB بر اساس شناسه مدل (PID):

شرح

همانطور که می دانید سیستم عامل های مبتنی بر گنو/لینوکس نسبت به ثبت انواع مختلف رویدادها بسیار حساس هستند و اتصال/قطع دستگاه های USB نیز از این قاعده مستثنی نیست. همراه با یکی از «جریان‌های متنی به عنوان رابط‌های جهانی» فلسفه یونیکس، اطلاعات مربوط به مصنوعات چنین رویدادهایی (با درجات مختلف جزئیات) بسته به توزیع، در یک یا چند فایل زیر یافت می‌شود:
  • /var/log/kern.log* ;
  • /var/log/syslog* ;
  • /var/log/messages* ;
  • /var/log/dmesg* ;
  • /var/log/daemon.log*.
FORENSIC- PROOF حتی این تصویر را در این مورد به ما نشان می دهد (کمی ناقص، اما مهم نیست):

usbrip برای کار خود، فایل‌های گزارشی را پیدا می‌کند که برای همه بیلدهای لینوکس مبتنی بر Debian (Ubuntu، Linux Mint و غیره) و RPM (CentOS، Fedora، openSUSE و غیره) جهانی هستند، یعنی: /var/log/syslog* یا /var/log/messages*، آنها را در جستجوی اطلاعات لازم تجزیه می کند و آثار یافت شده از اتصالات دستگاه USB را به صفحات زیبا (یا لیست - هر آنچه که دوست دارید) تبدیل می کند.

USBrip همچنین می تواند:

  • ایجاد لیستی از دستگاه های مجاز (معتمد) در قالب فایل های JSON.
  • جستجوی "رویدادهای توهین آمیز" بر اساس لیست دستگاه های مورد اعتماد: رویدادهایی (اتصال/قطع اتصال USB) که شامل دستگاه های USB است که به عنوان مورد اعتماد علامت گذاری نشده اند.
  • با استفاده از VID (شناسه فروشنده) و/یا PID (شناسه محصول) اطلاعات اضافی درباره دستگاه USB را جستجو کنید.

ارجاع

لیستی از ماژول های موجود را دریافت کنید:

$ python3 usbrip.py -h
لیستی از زیر ماژول های موجود برای یک ماژول خاص را دریافت کنید:

$python3 usbrip.py<модуль>-h
لیستی از گزینه های موجود برای یک زیر ماژول خاص را دریافت کنید:

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

نحو

تاریخچه رویدادهای $ python3 usbrip.py بنر $ python3 usbrip.py [-q] [-t | -l] [-e] [-n تعداد رویدادها] [-d DATE [تاریخ...]] [-c COLUMN [COLUMN...]] [-f LOGFILE [LOGFILE...]] $ python3 usbrip رویدادهای .py gen_auth<ВЫХОДНОЙ_ФАЙЛ.JSON>[-q] [-e] [-n تعداد رویدادها] [-d تاریخ [تاریخ...]] [-f LOGFILE [LOGFILE...]] نقض رویدادهای $ python3 usbrip.py<ВХОДНОЙ_ФАЙЛ.JSON>[-q] [-t | -l] [-e] [-n تعداد رویدادها] [-d DATE [تاریخ...]] [-c COLUMN [COLUMN...]] [-f LOGFILE [LOGFILE...]] $ python3 usbrip جستجوی شناسه .py [-q] [--vid VID] [--pid PID] [--آفلاین] $ python3 usbrip.py دانلود شناسه [-q]

گزینه ها

گزینه‌های پشتیبانی شده توسط زیرماژول‌های "تاریخچه رویدادها"، "رویدادها gen_auth"، "تخلفات رویدادها"، "جستجوی ID"، "دانلود ID": -q، --quiet نمایش بنرها، پیام‌های اطلاعاتی (سبز) را حذف کنید و انجام دهید. در حین اجرا سوال نپرسید ########################################### ## ###################################### گزینه های پشتیبانی شده توسط "تاریخچه رویدادها"، " رویدادهای gen_auth" submodules "، "events نقض": -e، --جستجوی خارجی فقط برای دستگاه‌های USB قابل جابجایی (که اطلاعات قطع ارتباط دارند) -n تعداد رویدادها، --number NUMBER OF EVENTS تعداد آخرین رویدادها بر اساس تاریخ نمایش داده می شود -d DATE [DATE ..]، --date DATE [DATE...] فهرست تاریخ هایی که رویدادها بر اساس آن ها هنگام جستجوی -f LOG_FILE [LOG_FILE...]، -- فایل LOG_FILE [LOG_FILE] فیلتر می شوند. ..] لیست فایل های گزارش (اگر مشخص نشده باشد، تاریخچه رویداد با استفاده از فایل های گزارش پیش فرض جستجو می شود: /var/log/syslog* یا /var/log/messages* بسته به نسخه سیستم عامل) ##### ############################################### ############################## گزینه های پشتیبانی شده توسط زیرماژول های "تاریخچه رویدادها"، "تخلفات رویدادها": -t، -- جدول خروجی را به شکل جدول تولید می کند (اگر اندازه پنجره ترمینال برای نمایش صحیح جدول کافی نباشد، خروجی به صورت خودکار در قالب یک لیست تولید می شود. هنگام مشخص کردن پرچم -t، خروجی به صورت اجباری به شکل جدول تولید می شود) -l، --list خروجی را به صورت لیست تولید می کند -c COLUMN [COLUMN...]، --column COLUMN [COLUMN.. .] لیستی از ستون هایی که هنگام ساخت جدول استفاده می شوند (فقط هنگام تولید خروجی به شکل جدول تأثیر می گذارد). کلیدهای مجاز: "conn"، "user"، "vid"، "pid"، "prod"، "manufact"، "serial"، "port"، "disconn". ############################################### ################################### گزینه های پشتیبانی شده توسط زیرماژول های "ids search"، "ids download": - -شناسه فروشنده vid VID یا شناسه سازنده دستگاه USB (معمولاً 4 رقم هگزادسیمال) -- شناسه محصول vid PID یا شناسه مدل دستگاه USB (معمولاً 4 رقم هگزادسیمال) -- در صورت مشخص بودن آفلاین، اطلاعات اضافی درباره دستگاه USB را در پایگاه داده جستجو کنید داده های شناسه بدون به روز رسانی اولیه تولید می شوند (پایگاه داده)

نمونه هایی از استفاده

نمایش تاریخچه اتصال همه دستگاه‌های USB، حذف بنر، پیام‌های اطلاعاتی (سبز) و همچنین بدون پرسیدن سوال در حین اجرا (-q, --quite) و تولید خروجی در قالب یک لیست (-l, -- لیست)، از جمله در آن شامل 100 رویداد اخیراً یافت شده است (-n NUMBER OF EVENTS, --number NUMBER OF EVENTS):
تاریخچه رویدادهای $ python3 usbrip.py -ql -n 100
نمایش تاریخچه اتصال دستگاه های USB قابل جابجایی (-e، --external)، تولید خروجی به شکل جدول با فیلدهای (ستون ها) "Connected"، "VID"، "PID"، "Disconnected" و "Serial Number" ” (-c COLUMN [COLUMN...]، --column COLUMN [COLUMN...])، فیلتر کردن جستجو بر اساس تاریخ (-d DATE [DATE...]، --date DATE [DATE...] ، گرفتن اطلاعات از فایل های گزارش خارجی (-f LOG_FILE [LOG_FILE...]، -- فایل LOG_FILE [LOG_FILE...]):
$ python3 usbrip.py تاریخچه رویدادها -et -c conn vid pid disconn serial -d "9 دسامبر" "10 دسامبر" -f /var/log/syslog.1 /var/log/syslog.2.gz
جدولی از تاریخچه اتصال همه دستگاه های USB بسازید و خروجی را برای تجزیه و تحلیل بیشتر به یک فایل هدایت کنید. در صورتی که جریان خروجی استاندارد stdout نباشد (مثلاً «|» یا «>»)، موارد خاص در داده‌های خروجی وجود نخواهد داشت. کاراکترهایی که مسئول رنگ فونت در ترمینال هستند، بنابراین فایل متنی پر از کاراکترهای ناخوانا نخواهد بود. همچنین لازم به ذکر است که usbrip از برخی از ثابت های یونیکد استفاده می کند، بنابراین بهتر است بلافاصله رمزگذاری فایل ایجاد شده را به UTF-8 تبدیل کنید تا به درستی نمایش داده شود (مثلاً با استفاده از encov) و همچنین از سبک ویندوز استفاده کنید. کاراکترهای خط جدید برای حمل بهتر (مثلاً با استفاده از awk):
رویدادهای تاریخچه $ python3 usbrip.py -t | awk "( sub("$"، "\r"); print )" > usbrip.txt && enconv -x UTF8 usbrip.txt
توجه داشته باشید:خلاص شدن از شر خاص اگر خروجی قبلاً به stdout ارسال شده باشد، کاراکترهای مسئول رنگ نیز ممکن است. برای انجام این کار، باید داده های دریافتی را در یک فایل جدید usbrip.txt کپی کنید و یک دستورالعمل awk دیگر اضافه کنید:
$ awk "( sub("$"، "\r"); gsub("\\x1B\\[*[ -/]*[@-~]"، ""); print )" usbrip.txt && enconv -x UTF8 usbrip.txt
فهرستی از دستگاه‌های مورد اعتماد را در قالب یک فایل JSON (trusted/auth.json) که حاوی اولین فایل است ایجاد کنید. سهدستگاه‌های متصل در 26 سپتامبر:
رویدادهای $ python3 usbrip.py gen_auth trusted/auth.json -n 3 -d "26 سپتامبر"
«رویدادهای نقض» را در تاریخچه اتصال دستگاه‌های USB قابل جابجایی بر اساس فهرست دستگاه‌های قابل اعتماد (trusted/auth.json) جستجو کنید و خروجی را در قالب جدول با «متصل»، «VID» و «PID» تولید کنید. " زمینه های:
$ python3 usbrip.py نقض رویدادها trusted/auth.json -et -c conn vid pid
یافتن اطلاعات اضافی در مورد یک دستگاه USB بر اساس VID و PID آن:
$ python3 usbrip.py جستجوی شناسه --vid 0781 --pid 5580
دانلود/به‌روزرسانی پایگاه داده شناسه دستگاه USB (منبع

شما یک درایو فلش USB یا یک صفحه کلید یا ماوس را به رایانه لینوکس خود وصل کرده اید. اما هیچ اتفاقی نمی افتد.

موضوع چیه؟ چرا کامپیوتر لینوکس شما دستگاه را شناسایی نمی کند؟ آیا لینوکس است یا دستگاه USB شما کار نمی کند؟

USB در اوبونتو کار نمی کند؟

درایوهای دیسک، کارت خوان های حافظه، گوشی ها، پخش کننده های رسانه و لوازم جانبیچند رسانه ای...همه مفید هستند اما اگر مشکلی در پورت USB یا درایورهای سیستم شما باشد کار نمی کنند. اگر از صفحه‌کلید یا ماوس بلوتوث (با دانگل USB) استفاده می‌کنید، این می‌تواند ناامیدکننده باشد، زیرا به معنای پیدا کردن جایگزین‌های USB سیمی است.

با این حال، ممکن است یک بندر مرده نباشد. ممکن است دستگاه USB مورد استفاده شما معیوب باشد و قابل شناسایی نباشد.

حل مشکلات USB می تواند چالش برانگیز باشد، اما تشخیص این مشکلات و انجام اصلاحات لازم غیرممکن نیست.

برای حذف مشکلات USBدر لینوکس پنج مرحله باید دنبال شود:

  1. مطمئن شوید که پورت USB شناسایی شده است
  2. لازم را تولید کنید کار بازسازیبه بندر
  3. دستگاه های USB را تعمیر یا تعمیر کنید
  4. راه اندازی مجدد سیستم عامللینوکس
  5. در دسترس بودن درایورهای دستگاه را تأیید کنید

بیایید به نوبه خود به هر یک از آنها نگاه کنیم و نحوه کار با دستگاه های USB دشوار در لینوکس را بیاموزیم.

1. آیا دستگاه شما توسط لینوکس شناسایی شده است؟

اولین چیزی که هنگام قرار دادن دستگاه USB خود در رایانه لینوکس خود باید بررسی کنید این است که آیا شناسایی شده است یا خیر. تشخیص دستگاه USB معمولاً شفاهی یا شنیدنی نیست (در لینوکس Deepin اینطور نیست) مانند ویندوز یا macOS، به این معنی که اغلب باید تأیید کنید که دستگاه توسط سیستم عامل ضبط شده است.

خوشبختانه، ساده است.

ابتدا دستگاه های USB مورد نظر را از برق جدا کنید. سپس یک پنجره ترمینال را باز کنید و دستور » لیست USB را وارد کنید:

دستور dmesg دستگاه های USB متصل شده را در سیستم شما لیست می کند. همچنین شامل سخت افزارهای غیر USB خواهد بود و متاسفانه حجم عظیمی از اطلاعات را ارائه می دهد. برای مقابله با این می توانید امتحان کنید:

این به نظر می رسد تلاقی بین دستورات dmesg و lsusb است که سخت افزار USB متصل را با اطلاعات کافی برای شناسایی آنها فهرست می کند.

بنابراین، آیا USBی که وصل کردید در اینجا فهرست شده است؟ در غیر این صورت ممکن است پورت آسیب دیده باشد یا دستگاه مشکل داشته باشد. به همین ترتیب، دستگاه ممکن است با لینوکس سازگار نباشد.

2. نحوه بررسی پورت USB

اگر دستگاه USB نمایش داده نمی شود، ممکن است به دلیل مشکل در پورت USB باشد.

بهترین راه برای آزمایش این است که به سادگی از یک پورت USB متفاوت در رایانه خود استفاده کنید. اگر اکنون سخت افزار USB شناسایی شده است، پس می دانید که با یکی از پورت های USB مشکل دارید.

اگر درگاه USB دیگری در دسترس نیست، باید دستگاه USB را روی رایانه شخصی یا لپ تاپ دیگری امتحان کنید. با این حال، ممکن است این نباشد گزینه ایده آل، زیرا می توانید از رایانه ویندوز یا macOS استفاده کنید و در این حالت، برخی از دستگاه های USB در لینوکس قابل استفاده نیستند. بنابراین تعیین اینکه دقیقاً چه چیزی باعث این مشکل شده است، دستگاه USB یا پورت USB، دشوار خواهد بود.

برای بهترین نتایج، هنگام عیب‌یابی دستگاه‌های USB، هر زمان که ممکن است از سخت‌افزار سازگار با لینوکس استفاده کنید.

3. تعمیر سخت افزار آسیب دیده USB

اگر سخت افزار USB شما معیوب است، دو گزینه دارید: آن را تعمیر کنید یا آن را برگردانید.

رفع معمولاً شامل بررسی است پورت USBو همچنین دستگاه هایی که در حال حاضر کار نمی کنند. اصلاحات تقریباً همیشه حول محور هستند کابل یو اس بیو بر روی کامپیوتر خود پورت کنید. کابل‌های USB معمولاً قابل تعویض هستند، اما پورت‌های USB قابل تعمیر هستند.

بررسی فیزیکی سخت افزار USB ایده خوبی است. کابل ها باید محکم و بدون شکستگی باشند و قسمت فلزی باید محکم بسته شود.

در عین حال، پورت‌های USB باید با خاموش و جدا بودن رایانه آزمایش شوند. بررسی کنید که پورت ها ایمن و لرزان باشند پورت های USBنشانه فرسودگی تجهیزات هستند.

اگر پورت USB شل شد، می توانید آن را در جای خود لحیم کنید. البته، شما باید از قبل بدانید که چگونه لحیم کاری کنید، هرگز بدون تجربه قبلی یک کار DIY را امتحان نکنید.

همچنین پورت‌های USB را از نظر گرد و غبار و کثیفی بررسی کنید، مخصوصاً در پشت رایانه، جایی که گرد و غبار مرتباً در آن جمع می‌شود. گرد و غبار دشمن رایانه شخصی است، بنابراین بهتر است سیستم خود را در محیطی عاری از گرد و غبار نگه دارید. گرد و غبار می تواند از طریق درگاه های USB به رایانه شما راه پیدا کند، برای تمیز نگه داشتن این پورت ها وقت بگذارید. از هوای فشرده برای پخش گرد و غبار و کثیفی استفاده کنید.

آیا می توانید دستگاه USB خود را برگردانید؟ اگه جدید باشه احتمالش زیاده مشکل این است که اگر به‌طور واضح به‌عنوان لینوکس در حال اجرا علامت‌گذاری نشده باشد، بعید است فروشگاه بازگردانی را بپذیرد.

4. برای تعمیر پورت USB، لینوکس را راه اندازی مجدد کنید

در برخی موارد - برای مثال، اگر از لپ‌تاپ استفاده می‌کنید - مشکلات برق می‌تواند بر توانایی آن در تشخیص دستگاه‌های USB تأثیر بگذارد. گزینه autosuspend برای کاهش مصرف برق در لپ تاپ های لینوکس در نظر گرفته شده است، اما می تواند معکوس باشد.

پس چه کاری می توانید انجام دهید؟

ابتدا بررسی کنید که آیا تعلیق خودکار باعث ایجاد مشکل شده است یا خیر. با راه اندازی مجدد کامپیوتر می توانید این کار را انجام دهید. اگر دستگاه USB در حال اجرا باشد، آن درگاه USB برق را دریافت می کند.

قدم بعدی این است که مطمئن شوید این اتفاق دوباره تکرار نمی شود. ترفندهای بعدی خط فرمانبرای اوبونتو 18.10 هستند، بنابراین رویه صحیح را در توزیع لینوکس ترجیحی خود بررسی کنید.

یک پنجره ترمینال را باز کنید و تایپ کنید:

cat /sys/module/usbcore/parameters/autosuspend

اینجا را نگاه کن:

GRUB_CMDLINE_LINUX_DEFAULT="آرام پاشیدن"

GRUB_CMDLINE_LINUX_DEFAULT = "آرام پاشیدن"