Inhalt

Die Azure MFA RADIUS Challenge!

Ich habe mich die letzten Tage ein wenig mit dem Azure MFA Plugin für den Network Protection Server beschäftigt und bin relativ schnell bei dem(!) Artikel bzgl. NPS, Azure MFA und Netscaler von Christiaan Brinkhoff gelandet. Für meinen Aufbau habe ich mich für eine verkleinerte Variante seiner Anleitung ohne Proxy und komplexe Request Policies entschieden.

 

NPS Konfiguration

Die Konfiguration des NPS sieht dann wie folgt aus:

  • Radius-Clients
    • Mit welcher IP Adresse (NSIP oder SNIP) hängt vom Netscaler ab. (die Logs helfen hier schnell)
    • Vorsicht! der Netscaler kann nur Shared Secrets bis zu 31 Zeichen verarbeiten (Link); der NPS erzeugt jedoch bei einem Klick auf Generate eine Shared Secret mit 64 Zeichen.
  • Es braucht nur mindestens eine Connection Request Policy die auf Localhost zeigt
    • hier nehmen wir die Default-Policy
  • Zusätzlich wird eine Network Policy wie bei Christiaan beschrieben benötigt die folgendes enthält:
    • Condition: NAS Identifier -> MFA (damit wir auch noch andere Services authentisieren können)
    • MS-CHAPv2
  • Die anderen Network Policies können weiter bestehen bleiben solange keine andere Policy vor unserer trifft (NPS arbeitet mit First Match)

[gallery size=“medium” ids=“634,636,635”]

Am Netscaler habe ich mich für die Anlage des Radius Servers sehr dicht an der Anleitung von Christiaan entlang gearbeitet:

  • Radius Server anlegen mit
    • NAS Identifier -> MFAanlegen
    • Timeouts hochsetzen.
    • MS-CHAPv2 konfigurieren.
  • Policy anlegen mit dem Radius Server

Netscaler Konfiguration

Bei der Einbindung am Virtual Server ist es jedoch deutlich einfacher den RADIUS als primäre Authentisierungsmethode zu binden und die bisherige rauszuwerfen, da der RADIUS Server ja bereits ebenfalls eine Authentisierung gegen das AD macht. Damit ist dann auch das Problem mit den Password Feldern gelöst.

[gallery size=“medium” ids=“638”]

Wenn alles glatt läuft dann sollte man sich nun anmelden können - aber bei mir wollte es einfach nicht klappen. Also gut: Debugging!

Als erstes schauen wir uns das Accounting an. Das liegt im Default unter C:\Windows\System32\LogFiles

und ich empfehle an dieser Stelle die Nutzung von z.B. Baretail.

Als nächstes brauchen wir mehr Logging:

auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enable
Warnung
Das wird gerne durch GPOs wieder überschrieben - also besser per GPO konfigurieren (siehe unten)

Nun sehen wir Events vom NPS und vom Plugin. In meinem Fall beschuldigen die beiden sich gegenseitig den Request abgelehnt zu haben:

[gallery size=“medium” ids=“639,640”]

Um der Sache auf den Grund zu gehen versuche ich es mit “Deaktivierung des Plugin” - also einer Deinstallation. Nun sehe ich, dass ich bereits bei der Authentisierung des Users Probleme habe:

[gallery ids=“641,642”]

Da ich mir ganz ganz sicher bin, dass meine Credentials okay sind gehe ich noch ein wenig tiefer, werfe Wireshark an und entdecke einen MS-CHAP-Error

[gallery size=“medium” ids=“643”]

Zum Thema MS-CHAP-Error und NPS spuckt dann zum Glück das Internet etwas aus und ich stoße auf einen Eintrag vom MS-Support.

Dort wird beschrieben, dass Server 2003 und 2008 im Default NTLM verwenden um Passwörter zu hashen wenn MS-CHAP zum Einsatz kommt. Ich kann an dieser Stelle klar bestätigen, dass Server 2012R2 das auch tut. (2016 wahrscheinlich auch). Da wir selbst in unserer Testumgebung NTLMv1 deaktiviert haben lehnt der DC die Anfrage ab und es kommt zu diesem Fehlerbild.

Dem kann jedoch mit folgendem Regkey Abhilfe geschaffen werden:

[gallery size=“medium” ids=“644”]

Danach läuft es auch mit NTLMv2! Also kann das Plugin wieder installiert werden und bei mir lief dann alles sauber.

[gallery size=“medium” ids=“645”]

Richtig großartig ist auch, dass der Netscaler Out-of-the-box die verschiedenen Varianten des Azure MFA unterstützt. Ich habe mal zwei Beispiele rausgesucht.

Nutzung des Telefonanrufs

In diesem Szenario habe ich für meinen Testuser konfiguriert, dass ein Anruf auf meinem Mobiltelefon erfolgen soll. Diese sehr langsame Variante zeigt mir auf wo ich noch etwas verbessern kann.

[gallery size=“medium” ids=“654,663”]

Nutzung einer PIN-Eingabe

In diesem Szenario muss der Anwender einen PIN eingeben den er aus der App oder per SMS erhalten hat. Der Netscaler verarbeitet die Radius Challenge direkt ohne dass eine spezielle Konfiguration notwendig ist.

[gallery size=“medium” ids=“652,653”]

Viel Spaß damit!

Netscaler & MFA:

https://www.christiaanbrinkhoff.com/2017/02/17/how-to-configure-azure-mfa-for-citrix-netscaler-gateway-radius-by-using-the-new-nps-extension/

http://www.acloudabove.com/2017/10/17/integrating-citrix-netscaler-nps-extension-azure-mfa/

https://jkindon.com/2018/03/05/azure-mfa-nps-extensions-with-netscaler-nfactor-authentication/

https://www.carlstalhood.com/radius-load-balancing-netscaler-12/

https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/multi-factor-authentication/nps-extension-vpn.md )

MFA:

https://learn.microsoft.com/en-us/azure/multi-factor-authentication/multi-factor-authentication-get-started-user-states

http://jtpedersen.com/index.php/2017/02/13/setup-vpn-to-use-mfa-with-nps-extension/

https://learn.microsoft.com/en-us/azure/multi-factor-authentication/nps-extension-vpn

Netscaler

https://docs.citrix.com/en-us/netscaler/12/load-balancing/load-balancing-persistence/radius-persistence.html