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

Zbog promjena u zakonodavstvu koje se odnose na usluge povjerenja („O elektronskim uslugama povjerenja“ Ukrajina), kompanija ima potrebu za nekoliko odjela za rad s ključevima koji se nalaze na tokenima (trenutno je još uvijek otvoreno pitanje broja hardverskih ključeva ).

Kao alat sa najnižim troškovima (besplatan), izbor je odmah pao usbip. Server na Ubuntu 18.04 zaradio je zahvaljujući publikaciji Ukroćenje USB/IP-a i uspješno testiran na nekoliko fleš diskova (zbog nedostatka tokena u to vrijeme). U tom trenutku nisu identifikovani nikakvi posebni problemi osim ekskluzivnog vlasništva (rezervacije po korisniku). Jasno je da je za organizovanje pristupa za više korisnika (za početak barem dva), potrebno ih vremenski razdvojiti i naterati da rade redom.

Pitanje je glasilo: Kako učiniti da sve radi za svakoga uz najmanje plesove...

Dio nespretan

Mrežno dijeljenje kriptografskog tokena između korisnika na osnovu usbip-a
I opcija. Nekoliko prečica do bat fajlova, naime
a) Veza sa pristupnim ključem.
b) Namjerno gašenje.

paragraf "б” je kontroverzna, pa je odlučeno da se količina vremena za rad s ključem da za 3 minute.

Posebnost usbip klijenta je u tome što nakon pokretanja ostaje da visi u konzoli, bez prekida sesije konzole, možete zatvoriti vezu „grubo“ sa strane klijenta, ali i sa strane servera.

Evo šta nam je pošlo za rukom:

prvo: veza on.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

ne oslanjajući se na svijest korisnika, skripte su objedinjene u token.bat

on.bat | off.bat

Šta se dešava: svi fajlovi su u istom folderu, pokreću se pomoću datoteke token.bat, ako je veza prekinuta, korisnik odmah ima poruku o nedostupnosti ključa, inače tek nakon 180 pingova. Gornje linije koda mogu biti opremljene sa “@ECHO OFF” i smjerom konzole na “> nul” kako ne bi previše šokirali korisnika, ali nije potrebno pokrenuti testiranje. Prvobitno "trčanje" na USB drajvu pokazalo je da je sve bilo predvidljivo, pouzdano i jasno. A sa strane servera nisu potrebne nikakve manipulacije.

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

Naravno, kada se radi direktno sa tokenom, sve nije išlo kako se očekivalo: kada se fizički poveže u upravitelju uređaja, token se registruje kao 2 uređaja (WUDF i pametna kartica), a kada je povezan na mrežu, samo kao WUDF (iako ovo je dovoljno da zatražite PIN kod).

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

Ispostavilo se i da okrutni "taskkill" nije tako ozbiljan, a zatvaranje veze na klijentu je problematično, a čak i ako je uspjelo, ne garantuje mu zatvaranje na serveru.

Nakon što je žrtvovao sve konzole na klijentu, druga skripta je dobila 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 su njegove performanse manje od 50%, pošto je server tvrdoglavo nastavio da smatra vezu otvorenom.

Problemi sa vezom doveli su do razmišljanja o nadogradnji pozadi.

Serverski dio

Šta vam treba:

  1. Isključite neaktivne korisnike sa usluge.
  2. Pogledajte ko trenutno koristi (ili još drži) token.
  3. Pogledajte da li je token povezan sa samim računarom.

Ovi zadaci su riješeni korištenjem crontab i apache servisa. Diskretnost ponovnog pisanja stanja rezultata praćenja tačaka 2 i 3 koje nas zanimaju sugeriše da se sistem datoteka može nalaziti na ram drajvu. Dodata linija u /etc/fstab

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

Fascikla skripti sa skriptama je kreirana u korijenu: unmount-mount the token 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

dobijanje liste 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 liste aktivnih IP-ova (sa naknadnim preciziranjem za prikaz korisničkih ID-ova) 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 povezati, bez obzira na to ko je radio sa tokenom. Fascikla /ramdrive je povezana sa http serverom pomoću simbolične veze, u kojoj su sačuvane 2 tekstualne datoteke koje pokazuju status usbip servera.

Sljedeći dio: "Ružno u omotu"

II opcija. Da malo ugodim korisniku barem nekim manje zastrašujućim sučeljem. Zbunjeni činjenicom da korisnici imaju različite verzije Windowsa sa različitim okvirima, različitim pravima, manje problematičnim pristupom od Lazarus Nisam ga našao (naravno da sam za C#, ali ne u ovom slučaju). Možete pokrenuti bat fajlove iz interfejsa u pozadini, minimizirano, ali bez odgovarajućeg testiranja, ja sam lično mišljenja: morate vizualizirati da biste prikupili nezadovoljstvo korisnika.

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

Interfejs i softverski dio su riješili sljedeće zadatke:

  1. Prikazuje da li je token trenutno zauzet.
  2. Pri prvom startu, početno podešavanje sa generisanjem „ispravnih“ bat fajlova koji implementiraju pokretanje i prekid sesije sa token serverom. Prilikom narednih pokretanja, implementacija "servisnog" moda po lozinki.
  3. Provjera veze sa serverom, uslijed čega se provjerava zauzetost ili se prikazuju poruke o problemima. Kada se veza nastavi, program automatski počinje da radi u normalnom režimu.

Rad sa WEB serverom se realizuje uz pomoć dodatne opreme fphttpclient.


ovdje će biti link do trenutne verzije klijenta

tu je i nastavak razmatranja na temu članka, kao i djelomično početno oduševljenje VirtualHere proizvodom sa njegovim karakteristikama...

izvor: www.habr.com

Dodajte komentar