derwowusste
Goto Top

Echte 2FA mit TPM-VSC (virtuelle Smartcards)

Ich habe eine neue Methode erdacht, wie man die Authentifizierungsmöglichkeit TPM Virtual Smartcard („TPM-VSC“) verschärfen kann.
So wie Microsoft (siehe Doku) sich das denkt, hat man eine SmartCard an einen PC gebunden und erreicht somit schon etwas, was 2FA nahe kommt, denn die SmartCard kann nur der nutzen, der den PC hochfahren kann. Wer diesen Schutz verbessern möchte, lese weiter.

Ein Unterschied zwischen der virtuellen Smartcard und der physischen ist der, dass die virtuelle immer "gesteckt" ist und sich jemand, der die PIN kennt und den Computer angeschaltet vorfindet, anmelden kann. Meine Methode benutzt einen USB-Stick als weiteren Faktor.
Nur wer den Stick hat und die PIN weiß, kann die TPM-VSC benutzen, um sich anzumelden.

Um eine virtuelle SmartCard zu erzeugen und ein Zertifikat zu laden, geht man vor, wie unter Abschnitt 3 von https://download.microsoft.com/download/5/A/B/5ABDDED2-F56E-427D-88C1-41 ... verständlich beschrieben ist.
Ich setze also eine fertige VSC voraus.

Ich erstelle also einen geplanten Task, mit 3 Triggern, welcher als Systemkonto läuft und die VSC temporär deaktiviert
1 sobald ich den Computer sperre
2 wenn ich mich abmelde
3 wenn ich den Rechner neu starte, so dass die VSC selbst bei einem Rechnerabsturz/Reset sofort deaktiviert wird.
Screenshots dazu:

task1
task2
task3

Die Batch, welche ausgeführt wird:
devcon disable @ROOT\SMARTCARDREADER\0000
oder ab Win 10v2004 oder höher mit dem eingebauten pnputil:
pnputil /disable-device "ROOT\SMARTCARDREADER\0000"  

Dann erstelle ich einen zweiten Task, der getriggert wird, wenn ich einen bestimmten USB-Stick (die Device-ID wird ausgelesen) anstecke.
Achtung: das hierzu benötigte Logging ist per default deaktiviert. Einschaltbar per Skript über:
wevtutil sl Microsoft-Windows-DriverFrameworks-UserMode/Operational /e:true
Dieser Task macht, getriggert durch den passenden USB-Stick, die VSC wieder funktionsfähig, indem er das virtuelle Gerät wieder aktiviert.

Screenshots zum Task:

task01
task02
Hier noch im Detail:
taskdetail
task03

Das Powershellskript, welches ausgeführt wird (die Hardware-ID des Sticks kann man aus dem Gerätemanager auslesen):

$JustNow = (Get-Date).AddSeconds(-5)
$foundstick = Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-DriverFrameworks-UserMode/Operational'; starttime=$JustNow}| where message -match 'USBSTOR#DISK&VEN_CORSAIR&PROD_VOYAGER_SLIDERX2&REV_000A#02097C507420BD11&0'  
if ($foundstick -ne $null) {devcon enable @ROOT\SMARTCARDREADER\0000}
wahlweise letzte Skriptzeile ab win10 2004 wieder mit dem eingebauten pnputil:
if ($foundstick -ne $null) {pnputil /enable-device "ROOT\SMARTCARDREADER\0000"}  
Achtung: wie gesagt, wenn Euer Windows noch nicht einmal auf Windows 10 v2004 ist, benötigt ihr hierfür die devcon.exe, welche nicht zu Windows gehört, aber frei von Microsoft bezogen werden kann, siehe https://networchestration.wordpress.com/2016/07/11/how-to-obtain-device- ...

Content-Key: 638919

Url: https://administrator.de/contentid/638919

Printed on: April 19, 2024 at 03:04 o'clock

Member: emeriks
emeriks Jan 08, 2021 updated at 14:19:10 (UTC)
Goto Top
Hi DWW,
Danke für den Input.

Ich denke auch schon ne Weile darüber nach, ob und wie man VSC wirklich sinnvoll einsetzen könnte. Dein Hinweis mit diesem Ordner macht mich jetzt nachdenklich. Ich hatte bisher angenommen, dass alle relevanten Informationen für eine VSC in der TPM-Hardware gespeichert werden. So aber scheint es doch so zu sein, dass nach einer Neuinstallation des OS die bereits erstellten VSC nicht mehr nutzbar sind, es sei denn man weiß das mit diesen Ordnern und sichert diese vorher und stellt sie in der Neuinstallation wieder her.
Oder?

E.
Member: DerWoWusste
DerWoWusste Jan 08, 2021 updated at 14:34:11 (UTC)
Goto Top
Moin.

Sei versichert: das TPM alleine reicht nicht. Ob man die gesicherten Ordner in einem neu aufgesetzten PC einfach zurückspielen kann, habe ich noch nicht getestet.
Member: DerWoWusste
DerWoWusste Nov 29, 2023 updated at 20:13:54 (UTC)
Goto Top
29.11.2023
habe das Konzept geändert und einfacher gemacht. Es wird nun einfach der virtuelle Cardreader de- und ggf. reaktiviert. Ebenso habe ich die Syntax für das eingebaute pnputil eingefügt, welches man der externen devcon.exe vorziehen sollte. Zu guter Letzt noch eine weitere Skriptzeile (wevutil...), mit der man das USB-Logging aktivieren kann - mir scheint, das fehlte zuvor gänzlich face-plain