USB/IP тыюу

Жергиликтүү тармак аркылуу алыскы компьютерге USB түзмөгүн туташтыруу милдети дайыма келип чыгат. Төмөндө бул багыттагы менин издөөлөрүмдүн тарыхы жана ачык булактуу долбоордун негизинде даяр чечимге алып баруучу жол бар. USB/IP бул жолдо ар кандай адамдар тарабынан кылдаттык менен орнотулган тоскоолдуктарды, ошондой эле аларды айланып өтүү жолдорун сүрөттөп.

Биринчи бөлүк, тарыхый

Эгерде машина виртуалдык болсо, мунун баары оңой. Хосттан виртуалдык машинага USB багыттоо функциясы VMWare 4.1де пайда болгон. Бирок менин жагдайымда, WIBU-KEY деп аныкталган коопсуздук ачкычы виртуалдык гана эмес, ар кандай убакта ар кандай машиналарга туташтырылышы керек болчу.
2009-жылы издөөнүн биринчи айлампасы мени жабдыктын бир бөлүгүнө алып келди TrendNet TU2-NU4
артыкчылыктары:

  • кээде ал тургай иштейт

жактары:

  • дайыма иштебейт. Айталы, Guardant Stealth II коргоо ачкычы ал аркылуу башталбайт, "түзмөктү иштетүү мүмкүн эмес" деген ката менен ант берет.
  • Башкаруу үчүн программалык камсыздоо (окуңуз: USB түзмөктөрүн орнотуу жана чыгаруу) өтө начар. Буйрук сабынын которуштуруулары, автоматташтыруу - жок, биз уккан жокпуз. Баары сенин колуң менен жасалат. Nightmare.
  • Башкаруу программасы уктуруу аркылуу тармактын аппараттык жабдыктарынын өзүн издейт, ошондуктан ал тармактын бир уктуруу сегментинде гана иштейт. Аппараттык бөлүктүн IP дарегин кол менен көрсөтө албайсыз. Аппараттык бөлүк башка ички тармактабы? Анда сизде көйгөй бар.
  • Иштеп чыгуучулар аппараттан баш тартышты, мүчүлүштүктөр жөнүндө отчетторду жөнөтүү пайдасыз.

Экинчи раунд анчалык алыс эмес убакытта болуп, мени макаланын темасына алып келди - USB/IP долбоору. Өзүнүн ачыктыгы менен өзүнө тартат, айрыкча жигиттер ReactOS Алар Windows үчүн драйверге кол коюшту, андыктан азыр да x64те баары тест режими сыяктуу эч кандай балдаксыз иштейт. Бул үчүн ReactOS командасына чоң рахмат! Баары сонун угулат, келгиле аны сезүүгө аракет кылалы, чын эле ошондойбу? Тилекке каршы, долбоордун өзү да четке кагылды жана сиз колдоого ишене албайсыз - бирок биздики жок боло элек жерде баштапкы код бар, биз аны чечебиз!

Экинчи бөлүк, сервер-Linux

USB түзмөктөрүн тармак аркылуу бөлүшүүчү USB/IP серверин Linux негизиндеги ОСке гана орнотууга болот. Ооба, Linux бул Linux, Debian 8ди виртуалдык машинага минималдуу конфигурацияда орнотуңуз, стандарттуу кол кыймылы:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install usbip

Жайгашуу. Андан кийин Интернет сиз usbip модулун жүктөө керек деп сунуш кылат, бирок - салам, биринчи тырмоо. Мындай модулу жок. Себеби тармактагы колдонмолордун көбү 0.1.x эски бутагына тиешелүү, ал эми акыркы 0.2.0 версиясында usbip модулдары ар кандай аталыштарга ээ.

Ошондуктан:

sudo modprobe usbip-core
sudo modprobe usbip-host
sudo lsmod | grep usbip

Келиңиз, система башталганда аларды автоматтык түрдө жүктөө үчүн төмөнкү саптарды /etc/modules кошолу:

usbip-core
usbip-host
vhci-hcd

usbip серверин баштайлы:

sudo usbipd -D

Андан ары, универсалдуу акылмандык бизге usbip серверди башкарууга мүмкүндүк берген скрипттер менен келет деп айтат - ал тармак аркылуу кайсы түзмөктү бөлүшөрүн көрсөтүү, статусун көрүү жана башкалар. Бул жерде бизди дагы бир бакча куралы күтүп турат - 0.2.x бутагындагы бул скрипттер кайрадан аталды. Колдонуу менен сиз буйруктардын тизмесин ала аласыз

sudo usbip

Буйруктардын сүрөттөлүшүн окугандан кийин, талап кылынган USB түзмөктү бөлүшүү үчүн, usbip анын Bus ID билгиси келери айкын болот. Урматтуу көрүүчүлөр, аренадагы №3 рейк: автобустун ID-си бизге берет lsusb (бул эң айкын жол көрүнөт) - ага туура келбейт! Чындыгында, usbip USB хабдары сыяктуу жабдыктарды этибарга албайт. Ошондуктан, биз камтылган буйрукту колдонобуз:

user@usb-server:~$ sudo usbip list -l
 - busid 1-1 (064f:0bd7)
   WIBU-Systems AG : BOX/U (064f:0bd7)

Эскертүү: бул жерде жана андан ары тизмелерде мен өзүмдүн USB ачкычымдын мисалында бардыгын сүрөттөп берем. Аппаратыңыздын аталышы жана VID:PID жуптары ар кандай болушу мүмкүн жана башкача болот. Меники Wibu-Systems AG деп аталат: BOX/U, VID 064F, PID 0BD7.

Эми биз аппаратыбызды бөлүшө алабыз:

user@usb-server:~$ sudo usbip bind --busid=1-1
usbip: info: bind device on busid 1-1: complete

Ура, жолдоштор!

user@usb-server:~$ sudo usbip list -r localhost
Exportable USB devices
======================
 - localhost
        1-1: WIBU-Systems AG : BOX/U (064f:0bd7)
           : /sys/devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-1
           : Vendor Specific Class / unknown subclass / unknown protocol (ff/00/ff)

Уч салам, жолдоштор! Сервер тармак аркылуу аппараттык камсыздоону бөлүштү жана биз аны туташтыра алабыз! Болгону /etc/rc.local ичинде usbip демонунун автостартты кошуу гана калды

usbipd -D

Үчүнчү бөлүк, кардар тарап жана чаташкан

Мен дароо тармак аркылуу бөлүшүлгөн түзмөктү ошол эле серверде Debian иштеткен машинага туташтырууга аракет кылдым жана бардыгы эң сонун туташты:

sudo usbip attach --remote=localhost --busid=1-1

Келгиле, Windows'ко өтөбүз. Менин учурда бул Windows Server 2008R2 Standard Edition болчу. Расмий колдонмо сизден алгач драйверди орнотууну суранат. Процедура Windows кардары менен камтылган Readmeде эң сонун сүрөттөлгөн, биз бардыгын жазылгандай кылабыз, баары ойдогудай болот. Ал ошондой эле эч кандай кыйынчылыксыз XP иштейт.

Кардарды таңгактан чыгарып, биз ачкычыбызды орнотууга аракет кылабыз:

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip_windows.c: 756 (query_interface0) recv op_common
usbip err: usbip_windows.c: 829 (attach_device) cannot find device

Ой оо. Бир жерден ката кетти. Келиңиз, Google жөндөмүн колдонолу. Сервер бөлүгүндө константаларда бир нерсе туура эмес экендиги жөнүндө фрагменттүү белгилер бар, иштеп чыгуучулар 0.2.0 версиясына өтүүдө протоколдун версиясын өзгөртүшкөн, бирок Win кардарында муну унутуп коюшкан. Сунушталган чечим булак кодундагы константты өзгөртүү жана кардарды кайра куруу болуп саналат.

Бирок мен бул процедура үчүн Visual Studio жүктөп алгым келбейт. Бирок менде эски Хиу бар. Баштапкы коддо константа кош сөз катары жарыяланган. Келгиле, файлдан 0x00000106 менен алмаштырып, 0x00000111 издейли. Унутпаңыз, байт тартиби тескери. Натыйжада эки дал келүү, биз жамаачы:

[usbip.exe]
00000CBC: 06 11
00000E0A: 06 11

Ааа... ооба!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
new usb device attached to usbvbus port 1

Окуя ушуну менен бүтүшү мүмкүн эле, бирок музыка көпкө созулган жок. Серверди кайра жүктөгөндөн кийин, мен кардардагы түзмөк орнотулган эмес экенин билдим!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_windows.c: 829 (attach_device) cannot find device

Болду. Ал тургай, баарын билген Google мен үчүн бул жооп бере алган жок. Ошол эле учурда, серверде жеткиликтүү түзмөктөрдү көрсөтүү буйругу абдан туура көрсөтөт - бул жерде, ачкыч, сиз аны орното аласыз. Мен Linux'тан орнотууга аракет кылам - ал иштейт! Windowsтан азыр аракет кылсакчы? О, коркунучтуу - бул иштейт!

Акыркы тырмоо: сервердин кодунда бир нерсе жазылган эмес. Аппаратты бөлүшүүдө ал андагы USB дескрипторлорунун санын окубайт. Ал эми Linux'тан аппаратты орнотууда бул талаа толтурулат. Тилекке каршы, мен Linux'ту "жаса жана орнотууну орнотуу" деңгээлинде жакшы билем. Ошондуктан, көйгөй бир топ кир хакерликтин жардамы менен чечилди - /etc/rc.local файлына кошуу

usbip attach --remote=localhost --busid=1-1
usbip port
usbip detach --port=00

Жыйынтыктоочу бөлүгү

Кээ бир сыноолордон кийин, ал иштейт. Каалаган нерсеге жетишилди, эми ачкычты каалаган компьютерге орнотсо болот (жана, албетте, орнотулган эмес), анын ичинде тармактын уктуруу сегментинен тышкары. Кааласаңыз, муну командалык кабык скриптин колдонуп жасай аласыз. Эң жакшысы, ырахат толугу менен бекер.
Менин тажрыйбам хакерлерге маңдайыма жазылган тырмоону айланып өтүүгө жардам берет деп үмүттөнөм. Конул бурганын учун рахмат!

Source: www.habr.com

Комментарий кошуу