Netzwerkfreigabe eines kryptografischen Tokens zwischen Benutzern basierend auf USBIP

Im Zusammenhang mit Gesetzesänderungen zu Vertrauensdiensten („Über elektronische Vertrauensdienste“ in der Ukraine) besteht für das Unternehmen die Notwendigkeit, dass mehrere Abteilungen mit auf Tokens befindlichen Schlüsseln arbeiten (derzeit ist die Frage nach der Anzahl der Hardwareschlüssel noch offen). ).

Als Tool mit den niedrigsten Kosten (kostenlos) fiel die Wahl sofort auf usb. Dank der Veröffentlichung begann der Server unter Ubintu 18.04 zu arbeiten USB/IP zähmen und erfolgreich auf mehreren Flash-Laufwerken getestet (da es zu diesem Zeitpunkt noch kein Token gab). Außer dem Monopolbesitz (Reservierung für den Nutzer) wurden zu diesem Zeitpunkt keine besonderen Probleme festgestellt. Es ist klar, dass es zur Organisation des Zugriffs für mehrere Benutzer (zunächst mindestens zwei) notwendig ist, ihren Zugriff zeitlich aufzuteilen und sie zu abwechselndem Arbeiten zu zwingen.

Die Frage war: Wie schaffe ich es mit möglichst wenig Tanz, dass alles für alle funktioniert...

Das Teil ist ungeschickt

Netzwerkfreigabe eines kryptografischen Tokens zwischen Benutzern basierend auf USBIP
Option XNUMX. Mehrere Verknüpfungen zu Bat-Dateien, nämlich
a) Anschließen des Zugangsschlüssels.
b) Absichtliche Trennung.

Absatz "б» umstritten, daher wurde beschlossen, die Zeit zum Arbeiten mit dem Schlüssel auf 3 Minuten anzugeben.

Die Besonderheit des usbip-Clients besteht darin, dass er nach dem Start in der Konsole hängen bleibt; ohne Unterbrechung der Konsolensitzung kann man die Verbindung sowohl von der Client-Seite als auch von der Server-Seite „grob“ schließen.

Folgendes hat bei uns gut funktioniert:

Erstens: Verbindung on.bat

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

Zweitens: Herunterfahren off.bat

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

Ohne sich auf das Bewusstsein des Benutzers zu verlassen, wurden die Skripte zusammengefasst token.bat

on.bat | off.bat

Was passiert: Alle Dateien befinden sich im selben Ordner, der von der Datei token.bat gestartet wird. Wenn die Verbindung geschlossen wird, erhält der Benutzer sofort eine Meldung, dass der Schlüssel nicht verfügbar ist, in einem anderen Fall erst nach 180 Pings. Die obigen Codezeilen können mit „@ECHO OFF“ und der Konsolenrichtung auf „> nul“ ausgestattet werden, um den Benutzer nicht zu sehr zu schockieren, es ist jedoch nicht erforderlich, Tests durchzuführen. Der erste „Durchlauf“ auf einem USB-Laufwerk zeigte, dass alles vorhersehbar, zuverlässig und klar war. Darüber hinaus sind keine Manipulationen seitens des Servers erforderlich.

Netzwerkfreigabe eines kryptografischen Tokens zwischen Benutzern basierend auf USBIP

Bei der direkten Arbeit mit dem Token lief natürlich nicht alles wie erwartet: Bei einer physischen Verbindung im Gerätemanager wird der Token als 2 Geräte (WUDF und eine Smartcard) registriert, bei einer Netzwerkverbindung nur als WUDF (obwohl). dies reicht aus, um einen PIN-Code anzufordern).

Netzwerkfreigabe eines kryptografischen Tokens zwischen Benutzern basierend auf USBIP

Es stellt sich auch heraus, dass der brutale „Taskkill“ nicht so schwerwiegend ist und das Schließen der Verbindung auf dem Client problematisch ist und selbst wenn es erfolgreich war, es nicht garantiert, dass es für ihn auf dem Server geschlossen wird.

Nachdem alle Konsolen auf dem Client geopfert wurden, nahm das zweite Skript die Form an:

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

obwohl seine Effektivität weniger als 50 % beträgt, da der Server die Verbindung hartnäckig weiterhin als offen betrachtete.

Probleme mit der Verbindung führten zu Überlegungen über ein Upgrade auf der Serverseite.

Serverteil

Was Sie brauchen:

  1. Trennen Sie inaktive Benutzer vom Dienst.
  2. Sehen Sie, wer den Token derzeit nutzt (oder noch leiht).
  3. Überprüfen Sie, ob das Token mit dem Computer selbst verbunden ist.

Diese Probleme wurden mithilfe der Dienste crontab und apache gelöst. Die diskrete Natur des Umschreibens des Status der Überwachungsergebnisse der Punkte 2 und 3, die uns interessieren, weist darauf hin, dass sich das Dateisystem auf dem RAM-Laufwerk befinden kann. Zeile zu /etc/fstab hinzugefügt

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

Im Stammverzeichnis wurde ein Skriptordner mit Skripten erstellt: Aushängen/Einhängen des Tokens 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

Abrufen einer Liste der aktiven Geräte 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

Abrufen einer Liste aktiver IPs (mit anschließender Änderung zur Anzeige von Benutzer-IDs) usbip_client_ip.sh

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

Die Crontab selbst sieht so aus:

*/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)

Wir haben also: Alle 5 Minuten kann sich ein neuer Benutzer verbinden, unabhängig davon, wer mit dem Token gearbeitet hat. Der Ordner /ramdrive ist über einen Symlink mit dem http-Server verbunden, in dem zwei Textdateien gespeichert sind, die den Status des USBIP-Servers anzeigen.

Nächster Teil: „Hässlich in einer Hülle“

Option II. Um den Benutzer mit einer zumindest weniger einschüchternden Benutzeroberfläche ein wenig zu erfreuen. Verwirrt durch die Tatsache, dass Benutzer unterschiedliche Windows-Versionen mit unterschiedlichen Frameworks und unterschiedlichen Rechten haben, ein weniger problematischer Ansatz als Lazarus Ich habe es nicht gefunden (ich bin natürlich für C#, aber in diesem Fall nicht). Sie können Bat-Dateien über die Benutzeroberfläche im Hintergrund starten, minimiert, aber ohne ordnungsgemäße Tests bin ich persönlich der Meinung: Sie müssen es visualisieren, um die Unzufriedenheit der Benutzer zu sammeln.

Netzwerkfreigabe eines kryptografischen Tokens zwischen Benutzern basierend auf USBIP

Folgende Aufgaben wurden durch die Schnittstelle und Software gelöst:

  1. Zeigt an, ob der Token derzeit belegt ist.
  2. Beim ersten Start umfasst die Ersteinrichtung die Generierung der „richtigen“ Bat-Dateien, die den Start und die Unterbrechung einer Sitzung mit dem Token-Server implementieren. Bei späteren Starts erfolgt die Implementierung des „Service“-Modus über ein Passwort.
  3. Es wird überprüft, ob eine Verbindung zum Server besteht. Dabei wird abgefragt, ob dieser ausgelastet ist, oder Meldungen über Probleme angezeigt. Wenn die Kommunikation wieder aufgenommen wird, beginnt das Programm automatisch im Normalmodus zu arbeiten.

Die Arbeit mit dem WEB-Server wird über das zusätzliche fphttpclient-Snap-In realisiert.


Hier wird ein Link zur aktuellen Version des Clients angezeigt

Darüber hinaus gibt es weitere Überlegungen zum Thema des Artikels sowie teilweise anfängliche Begeisterung für das VirtualHere-Produkt mit seinen Funktionen ...

Source: habr.com

Kommentar hinzufügen