Mrežno dijeljenje kriptografskog tokena između korisnika temeljenih na usbip-u

U vezi s promjenama u zakonodavstvu u vezi s uslugama povjerenja („O elektroničkim uslugama povjerenja” Ukrajina), poduzeće ima potrebu za nekoliko odjela za rad s ključevima koji se nalaze na tokenima (trenutačno je pitanje broja hardverskih ključeva još uvijek otvoreno) ).

Kao alat s najnižom cijenom (besplatan), izbor je odmah pao usbip. Poslužitelj na Ubintu 18.04 počeo je raditi zahvaljujući objavi Kroćenje USB/IP i uspješno testiran na nekoliko flash pogona (zbog nedostatka tokena u to vrijeme). U tom trenutku nisu identificirani nikakvi posebni problemi osim monopolskog vlasništva (rezervacija za korisnika). Jasno je da je za organiziranje pristupa za nekoliko korisnika (najmanje dva, za početak) potrebno vremenski podijeliti njihov pristup i prisiliti ih da rade naizmjenično.

Pitanje je bilo: Kako to učiniti s najmanje plesa tako da sve funkcionira za sve...

Dio je nespretan

Mrežno dijeljenje kriptografskog tokena između korisnika temeljenih na usbip-u
opcija 1. Nekoliko prečaca do bat datoteka, naime
a) Spajanje pristupnog ključa.
b) Namjerno prekidanje veze.

Paragraf "б» kontroverzno, pa je odlučeno dati količinu vremena za rad s ključem od 3 minute.

Posebnost usbip klijenta je da nakon pokretanja ostaje visjeti u konzoli, bez prekidanja sesije konzole, vezu možete zatvoriti “grubo” sa strane klijenta, ali i sa strane servera.

Evo što nam je dobro funkcioniralo:

prvo: veza na.bat

usbip -a 172.16.12.26 4-1
msg * "Подпись/токен недоступны или заняты "

drugo: gašenje off.bat

ping 127.0.0.1 -n 180
taskkill /IM usbip.exe /F

Bez oslanjanja na svijest korisnika, skripte su kombinirane u žeton.šišmiš

on.bat | off.bat

Što se događa: sve su datoteke u istoj mapi, pokreće ih datoteka token.bat, ako se veza prekine korisnik odmah dobiva poruku o nedostupnosti ključa, u drugom slučaju tek nakon 180 pingova. Gornji redovi koda mogu biti opremljeni s “@ECHO OFF” i smjerom konzole na “> nul” kako ne bi previše šokirali korisnika, ali nije potrebno izvoditi testiranje. Početni "progon" na USB pogonu pokazao je da je sve predvidljivo, pouzdano i jasno. Štoviše, sa strane poslužitelja nisu potrebne nikakve manipulacije.

Mrežno dijeljenje kriptografskog tokena između korisnika temeljenih na usbip-u

Naravno, kod izravnog rada s tokenom nije sve išlo kako se očekivalo: kod fizičke veze u upravitelju uređaja token je registriran kao 2 uređaja (WUDF i pametna kartica), a kod mrežne veze samo kao WUDF (iako to je dovoljno za traženje PIN koda).

Mrežno dijeljenje kriptografskog tokena između korisnika temeljenih na usbip-u

Također se pokazalo da brutalni "taskkill" nije tako težak, a zatvaranje veze na klijentu je problematično i čak i ako je bilo uspješno, ne jamči ga zatvaranje za njega na poslužitelju.

Žrtvujući sve konzole na klijentu, druga skripta je poprimila oblik:

ping 127.0.0.1 -n 180 > nul
taskkill /IM usbip.exe /F /T  > nul
ping 127.0.0.1 -n 10 > nul
taskkill /IM conhost.exe /F /T  > nul

iako je njegova učinkovitost manja od 50%, budući da je poslužitelj tvrdoglavo nastavio vezu smatrati otvorenom.

Problemi s vezom doveli su do razmišljanja o nadogradnji poslužiteljske strane.

Serverski dio

Što vam je potrebno:

  1. Isključite neaktivne korisnike iz usluge.
  2. Pogledajte tko trenutno koristi (ili još uvijek posuđuje) token.
  3. Provjerite je li token povezan sa samim računalom.

Ovi problemi su riješeni korištenjem servisa crontab i apache. Diskretna priroda prepisivanja stanja rezultata praćenja točaka 2 i 3 koji nas zanimaju ukazuje na to da se datotečni sustav može nalaziti na ramdriveu. Dodan redak u /etc/fstab

tmpfs   /ram_drive      tmpfs   defaults,nodev,size=64K         0       0

Stvorena je mapa skripti sa skriptama u korijenu: demontaža-montaža tokena usb_restart.sh

usbip unbind -b 1-2
sleep 2
usbip bind -b 1-2
sleep 2
usbip attach --remote=localhost --busid=1-2
sleep 2
usbip detach --port=00

dobivanje popisa aktivnih uređaja usblist_id.sh

usbip list -r 127.0.0.1 | grep ':' |awk -F ":" '{print $1}'| sed s/' '//g | grep -v "^$" > /ram_drive/usb_id.txt

dobivanje popisa aktivnih IP-ova (s naknadnim izmjenama za prikaz ID-ova korisnika) usbip_client_ip.sh

netstat -an | grep :3240 | grep ESTABLISHED|awk '{print $5}'|cut -f1 -d":" > /ram_drive/usb_ip_cli.txt

sam crontab izgleda ovako:

*/5 * * * * /!script/usb_restart.sh > /dev/null 2>&1
* * * * * ( sleep 30 ; /!script/usblist_id.sh > /dev/null)
* * * * * (sleep 10 ; /!script/usbip_client_ip.sh > /dev/hull)

Dakle imamo: svakih 5 minuta novi korisnik se može spojiti, bez obzira na to tko je radio s tokenom. Mapa /ramdrive povezana je s http poslužiteljem pomoću simboličke veze u kojoj su spremljene 2 tekstualne datoteke koje prikazuju status usbip poslužitelja.

Sljedeći dio: “Ružno u omotu”

Opcija II. Da malo ugodi korisniku s barem nekim manje zastrašujućim sučeljem. Zbunjen činjenicom da korisnici imaju različite verzije sustava Windows s različitim okvirima, različitim pravima, manje problematičnim pristupom od Gubav čovjek Nisam ga našao (naravno, ja sam za C#, ali ne u ovom slučaju). Možete pokrenuti bat datoteke sa sučelja u pozadini, minimizirane, ali bez odgovarajućeg testiranja, osobno sam mišljenja: morate to vizualizirati da biste prikupili nezadovoljstvo korisnika.

Mrežno dijeljenje kriptografskog tokena između korisnika temeljenih na usbip-u

Sučeljem i softverom riješeni su sljedeći zadaci:

  1. Prikazuje je li token trenutno zauzet.
  2. Pri prvom pokretanju, početno postavljanje uključuje generiranje "ispravnih" bat datoteka koje provode pokretanje i prekid sesije s poslužiteljem tokena. Pri sljedećim pokretanjima, implementacija "servisnog" načina rada pomoću lozinke.
  3. Provjerava prisutnost veze s poslužiteljem, zbog čega provjerava je li zauzet ili prikazuje poruke o problemima. Kada se komunikacija nastavi, program automatski počinje raditi u normalnom načinu rada.

Rad s WEB poslužiteljem implementiran je pomoću dodatnog fphttpclient snap-ina.


ovdje će biti poveznica na trenutnu verziju klijenta

postoje i dodatna razmatranja o temi članka, kao i djelomično početno oduševljenje proizvodom VirtualHere sa svojim značajkama...

Izvor: www.habr.com

Dodajte komentar