WindowsHello Pin automatisiert Testen mit Chrome, Selenium und Java

Hier eine kurze Zusammenfassung über meine Erfahrungen mit diesem Thema.

Da immer mehr Logins glücklicherweise auf den Fido-Standard wechseln, als Alternative zu OTP, Authenticator-App oder auch SMS oder bewahre noch Passwort, stellt sich die Frage, wie man das Ganze am besten testet. Mit Selenium ist es möglich, sich einen Chrome-/Firefox-/Edge-Browser zu öffnen und automatisiert UI-Buttons zu drücken. Allerdings hilft uns das nicht bei der Windows-Hello-PIN, da es sich hierbei um ein Betriebssystem-Popup handelt.

Vorwort

Das hier ist keine Anleitung, nur ein kleiner Einblick in die eine Möglichkeit, es aufzusetzen.
Und es ist zwar möglich, auch einen virtuellen Authenticator (browserintern) zum Testen zu verwenden, ich möchte allerdings auch wirklich die Hardware testen!

Problematiken

Verschiedene Probleme sind mir beim Aufsetzen des Setups aufgefallen:

  • Betriebssystem-Popups lassen sich nicht mit Selenium betätigen

  • Windows 11 verhindert seit neuestem das Drücken von „Sicherheits-UI-Elementen“ wie z. B. das Windows-Security-Fido-Popup (Java Robots/Sikuli nicht möglich)

  • Windows-Hello-Popup in automatisiertem Selenium-Browser nicht angezeigt (Bug)

Setup und Lösungen

Das finale funktionierende Setup sieht wie folgt aus: ein Linux-Host-Rechner mit VirtIO und QEMU, welcher wiederum eine Windows 11 und 10 VM hostet. Hier wird ein TPM-Chip für Windows Hello PIN emuliert. (Ich hatte extra Secure Boot eingerichtet, um den TPM durchzureichen, was ich aber am Ende gar nicht gebraucht habe.)

Nun zu den Problematiken:

Betriebssystem-Popups

Hierfür wurde anstelle eines Selenium-Remote-Web-Drivers der Pipeline-Agent direkt auf der Windows-VM installiert und hat somit auch Zugriff auf die Betriebssystem-Popups. z. B. mit Sikuli und Robots. Ausnahme Windows 11, siehe nächster Punkt.

Windows 11-Sicherheitspopups

Um das Problem mit den Popups zu umgehen, wurde ein Python-Skript auf dem Hostcontroller eingerichtet. Es ermöglicht, von den Client-VMs Tastenanschläge an sich selber zu emulieren (VM → RestRequest → HOST → virtio Commandline Tastendruck → VM). Damit kann die Windows 11-Security-Sperre umgangen werden. TODO! Das muss ich mal noch auf GitHub packen.

Windows-11-Popup taucht nicht auf

Nachdem ich dann theoretisch alles fertig hatte und es manuell auch funktioniert hat, wollte mein automatisierter Test aber einfach nicht laufen. Sobald ich auf „Anmelden mit Fido“ in meiner Anwendung klicke, kommt einfach das Betriebssystem-Overlay nicht und nach einigen Sekunden bricht der Prozess im Browser ab.

Auch im Internet habe ich nichts gefunden… Daher auch dieser Beitrag hier!

Es scheint gerade einen Bug in Selenium zu geben (getestet mit Chrome). Durch Zufall hatte ich einen Test in unserer Testlandschaft, der immer lief, im Gegensatz zu allen anderen!

Hier nur der Workaround: Öffne einen zweiten Tab und führe den Test dort aus. Dann wird Windows Hello ohne Probleme angezeigt!

z. B. so:

driver.switchTo().newWindow(WindowType.TAB);

Ich hoffe, das hilft dem ein oder anderen, um nicht wie ich mehrere Tage bei der Suche nach einem Fehler wahnsinnig zu werden…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.