USB/IP taltsutamine

Korrapäraselt tekib ülesanne ühendada USB-seade kaugarvutiga kohaliku võrgu kaudu. Lõike all on minu sellesuunaliste otsingute ajalugu ja tee avatud lähtekoodiga projektil põhineva valmislahenduseni USB/IP koos erinevate inimeste poolt sellele teele hoolikalt paigaldatud takistuste kirjeldusega ja nendest möödahiilimise viisidega.

Esimene osa, ajalooline

Kui masin on virtuaalne, on see kõik lihtne. VMWare 4.1-s ilmus USB-edastus hostist virtuaalmasinasse. Kuid minu puhul tuli turvavõti, mis on identifitseeritud kui WIBU-KEY, olema erinevatel aegadel ühendatud erinevate masinatega, mitte ainult virtuaalsetega.
2009. aasta esimene otsinguvoor viis mind riistvara nimetuse juurde TrendNet TU2-NU4
plussid:

  • mõnikord isegi töötab

miinuseid:

  • alati ei tööta. Oletame, et Guardant Stealth II kaitsevõti ei käivitu selle kaudu, vandudes veaga "seadet ei saa käivitada".
  • Tarkvara haldamiseks (loe: USB-seadmete paigaldamiseks ja lahtiühendamiseks) on äärmiselt kehv. Käsurea lülitid, automaatika – ei, me pole kuulnud. Kõik tehakse oma kätega. Õudusunenägu.
  • Juhttarkvara otsib riistvara ise võrgust leviedastuse teel, nii et see töötab ainult võrgu ühes levisegmendis. Riistvaraosa IP-aadressi ei saa käsitsi määrata. Kas riistvara on teises alamvõrgus? Siis on sul probleem.
  • Arendajad on seadmest loobunud, veateadete saatmine on kasutu.

Teine ring toimus mitte nii kaugel ajal ja viis mind artikli teema juurde - USB/IP projekt. Meelitab oma avatusega, eriti kuna kutid aastast ReactOS Nad allkirjastasid Windowsi draiveri, nii et nüüd töötab isegi x64-l kõik ilma karkudeta, nagu testrežiim. Selle eest suur tänu ReactOS meeskonnale! Kõik kõlab kaunilt, proovime seda tunda, kas see on tõesti nii? Kahjuks on projekt ise samuti maha jäetud ja te ei saa toele loota - aga seal, kus meie oma pole kadunud, on lähtekood olemas, me mõtleme selle välja!

Teine osa, server-Linux

USB-/IP-serverit, mis jagab USB-seadmeid võrgu kaudu, saab installida ainult Linuxi-põhises operatsioonisüsteemis. Noh, Linux on Linux, installige virtuaalmasinasse Debian 8 minimaalses konfiguratsioonis, tavalise käeliigutusega:

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

Asutatud. Siis pakub Internet, et peate alla laadima usbip-mooduli, kuid - tere, esimene reha. Sellist moodulit pole. Põhjus on selles, et enamik võrgus olevaid käsiraamatuid viitab vanemale harule 0.1.x ja uusimas versioonis 0.2.0 on usbip-moodulitel erinevad nimed.

Seetõttu:

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

Noh, lisame faili /etc/modules järgmised read, et need süsteemi käivitumisel automaatselt laadida:

usbip-core
usbip-host
vhci-hcd

Käivitame usbip-serveri:

sudo usbipd -D

Veelgi enam, universaalne tarkus ütleb meile, et usbip on varustatud skriptidega, mis võimaldavad meil serverit hallata – näidata, millist seadet see võrgu kaudu jagab, vaadata olekut jne. Siin ootab meid veel üks aiatööriist – need 0.2.x haru skriptid on jälle ümber nimetatud. Käskude loendi saate kasutada

sudo usbip

Käskude kirjeldust lugedes selgub, et vajaliku USB seadme jagamiseks soovib usbip välja selgitada oma siini ID. Head vaatajad, reha number kolm areenil: bussi ID, mis meile annab lsusb (see tundub kõige ilmsem viis) - ei sobi talle! Fakt on see, et usbip ignoreerib riistvara nagu USB-jaoturid. Seetõttu kasutame sisseehitatud käsku:

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

Märkus: siin ja edasistes loendites kirjeldan kõike oma konkreetse USB-võtme näitel. Teie riistvara nimi ja VID:PID paar võivad ja on erinevad. Minu oma kannab nime Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

Nüüd saame oma seadet jagada:

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

Hurraa, seltsimehed!

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)

Kolm rõõmu, seltsimehed! Server on jaganud riistvara võrgu kaudu ja me saame selle ühendada! Jääb üle vaid lisada faili /etc/rc.local usbip-deemoni automaatkäivitus

usbipd -D

Kolmas osa, kliendipoolne ja segane

Proovisin kohe ühendada jagatud seadet üle võrgu samas serveris Debianiga töötava masinaga ja kõik ühendus ideaalselt:

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

Liigume edasi Windowsi juurde. Minu puhul oli see Windows Server 2008R2 Standard Edition. Ametlikus juhendis palutakse teil esmalt draiver installida. Protseduur on suurepäraselt kirjeldatud Windowsi kliendiga kaasasolevas readme-s, teeme kõik nii, nagu kirjutatud, kõik toimib. See töötab ka XP-ga ilma raskusteta.

Pärast kliendi lahtipakkimist proovime oma võtme paigaldada:

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

Oh oh. Midagi läks valesti. Kasutame Google'i oskust. Katkendlikult mainitakse, et konstantidega on midagi valesti, serveriosas muutsid arendajad versioonile 0.2.0 üleminekul protokolli versiooni, kuid Win kliendis unustasid nad seda teha. Pakutud lahenduseks on lähtekoodi konstanti muutmine ja kliendi taastamine.

Kuid ma tõesti ei taha selle protseduuri jaoks Visual Studiot alla laadida. Aga mul on vana hea Hiew. Lähtekoodis deklareeritakse konstant topeltsõnana. Otsime failist 0x00000106, asendades selle 0x00000111-ga. Ärge unustage, baitide järjekord on vastupidine. Tulemuseks on kaks vastet, parandame:

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

Aaaand... jah!

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

See oleks võinud olla loo lõpp, kuid muusika ei mänginud kaua. Pärast serveri taaskäivitamist avastasin, et kliendi seade ei olnud ühendatud!

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

See on kõik. Isegi kõiketeadev Google ei osanud sellele minu eest vastata. Ja samal ajal näitab serveris saadaolevate seadmete kuvamise käsk üsna õigesti - siin see on, võti, saate selle paigaldada. Proovin paigaldada Linuxist - see töötab! Mis siis, kui prooviksime nüüd Windowsist? Oh õudust – see töötab!

Viimane reha: midagi ei olnud serveri koodis kirjutatud. Seadet jagades ei loe see sealt välja USB deskriptorite arvu. Ja Linuxist seadme paigaldamisel täidetakse see väli. Kahjuks olen Linuxi arendusega kursis “make && make install” tasemel. Seetõttu lahendati probleem üsna räpase häkkimise abil – lisades faili /etc/rc.local

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

Lõpuosa

Pärast mõningaid katsumusi see töötab. Soovitud on saavutatud, nüüd saab võtme monteerida igale arvutile (ja muidugi ka lahti ühendada), sealhulgas väljaspool võrgu levisegmenti. Soovi korral saate seda teha käsukesta skripti abil. Tore on see, et rõõm on täiesti tasuta.
Loodan, et minu kogemus aitab häkkeritel minu otsaesisele jäljendatud rehast mööda saada. Täname tähelepanu eest!

Allikas: www.habr.com

Lisa kommentaar