Citrix nFactor – Authentifizierung neu denken

Citrix nFactor bietet eine Möglichkeit Multi-Step-Authentifizierungen auf Basis verschiedener Techniken/Protokolle abzubilden. 

https://support.citrix.com/article/CTX220793 

Dieser Artikel beschäftigt sich damit, Tokenbasierte Authentifizierungsprozesse für bestimmte Geräte einfacher zu gestalten. Ganz nach dem Motto: Erhöhung der Usability, ohne die Sicherheit zu verringern. Diese Lösung soll einen Anreiz geben, das Thema Authentifizierung einmal neu zu betrachten.

Das Ziel ist eine Zertifikatsauthentifizierung für unternehmenseigene Geräte. Zugriffe von privaten Geräten sollen weiterhin der RADIUS Authentifizierung unterliegen. 

 

Anforderungen

 

Citrix ADC: 

  • Firmware: mindestens 11.1 
  • Lizenz: Advanced oder Premium 
  • Ein konfiguriertes Citrix Gateway mit verbundener Citrix VAAD Umgebung 

Private Key Infrastructure: 

  • Unternehmenseigene Geräte müssen mit Benutzerzertifikaten ausgestattet sein 

 

Erklärungen

 

Derzeitige Authentifizierungs-Architektur: 

 

 

 

 

 

Geplante Authentifizierungs-Architektur:

Im Zielszenario ist das Zertifikat für unternehmenseigene Geräte der erste Faktor und die darauffolgende LDAP-Authentifizierung der zweite. Im Video simuliert das “Canceln” der Zertifikatsabfrage das Fehlen eines Zertifikats.

Ein Überblick über die Komponenten von nFactor ist hier beschrieben: zum Artikel Citrix nFactor – Ablösung Classic Authentication

Im folgenden Verlauf sind die einzelnen Schritte zur Umsetzung beschrieben und durch ADC-CLI-Commands ergänzt.

 

Umsetzung

 

AAA vServer

Da ich plane, den vServer auch für Authentifizierungen am Content Switch zu nutzen, erstelle ich einen vServer mit IP-Adresse. Danach binde ich die Komponenten, die bereits auf dem ADC verfügbar sind: ein Portal Theme und ein für den AAA vServer erstelltes Zertifikat.

add authentication vserver sec_aaa_vs_nFACTOR SSL 100.100.100.167 443

bind authentication vserver sec_aaa_vs_nFACTOR -portaltheme RfWebUI_custom

bind ssl vserver sec_aaa_vs_nFACTOR -certkeyName ssl_cer_aaa

Damit der ADC nicht jedes Benutzerzertifikat als gültig ansieht, wird das Root-Zertifikat der ausstellenden Instanz gebunden. Damit lässt der vServer nur Benutzer-Zertifikate zu, die von dieser CA ausgestellt wurden.

bind ssl vserver sec_aaa_vs_nFACTOR -certkeyName ssl_cer_ROOT -CA -ocspCheck Optional

Im Anschluss erstelle ich die neuen Komponenten: Login Schema, Authentifizierungs-Policies, Policy Label und ein neues SSL-Profil.

Login Schema

In diesem Aufbau verwende ich zwei Authentifizierungs-Zweige. Der erste Zweig authentifiziert den Benutzer über LDAP, wenn das vorhandene Benutzerzertifikat gültig ist. Die Überprüfung auf Benutzerzertifikate wird ohne Login Schema durchgeführt.

Wenn das Zertifikat gültig ist, benötige ich ein Login Schema für die darauffolgende LDAP-Authentifizierung. Ich habe mich an dieser Stelle für ein „only Password“ Login Schema entschieden, da ich den Benutzernamen aus dem Zertifikat auslese. Daher erstelle ich folgendes Schema:

add authentication loginSchema sec_aaa_ls_prof_1Factor -authenticationSchema “/nsconfig/loginschema/OnlyPassword.xml” -userExpression HTTP.REQ.USER.NAME -userCredentialIndex 1 -passwordCredentialIndex 2 -SSOCredentials YES

Für den Zweig „ungültiges Zertifikat“ benötige ich ein Schema, welches die Zwei-Faktor-Authentifizierung übernimmt.

add authentication loginSchema sec_aaa_ls_prof_2Factor -authenticationSchema “/nsconfig/loginschema/DualAuth.xml” -userCredentialIndex 1 -passwordCredentialIndex 2 -SSOCredentials YES

add authentication loginSchemaPolicy sec_aaa_ls_pol_CERT_INVALID -rule HTTP.REQ.IS_VALID -action sec_aaa_ls_prof_2Factor

Authentication Policy

Die erste Policy, die ausgeführt wird, ist die Zertifikatsauthentifizierung. Mein Benutzerzertifikat enthält ein Feld Names „SubjectAltName“. Den Inhalt lese ich per Policy aus und benutze diesen als Benutzernamen.

add authentication certAction auth_srv_cert_nFACTOR -twoFactor ON -userNameField SubjectAltName:PrincipalName

add authentication Policy ag_auth_pol_cert_nFACTOR -rule CLIENT.SSL.CLIENT_CERT.IS_VALID -action auth_srv_cert_nFACTOR

Wenn das Zertifikat nicht gültig ist, benötige ich eine Policy für die RADIUS Authentifizierung. Der RADIUS Server besteht laut Anforderung bereits.

add authentication Policy ag_auth_pol_RADIUS -rule true -action ag_auth_srv_RADIUS

Zu guter Letzt benötige ich für beide Wege die LDAP-Authentifizierung, um den Benutzer zu verifizieren. Auch hier verwende ich den bestehenden LDAP Server.

add authentication Policy ag_auth_pol_ldap_nFACTOR -rule HTTP.REQ.IS_VALID -action ag_auth_srv_ldap_upn

Policy Label

Bei beiden Authentifizierungswegen gibt es ein Policy Label. Das erste wird verwendet, um nach erfolgreicher Zertifikatsüberprüfung ein „only Password“ Schema anzuzeigen und den Benutzer mit LDAP zu authentifizieren.

add authentication policylabel sec_aaa_pl_CERT_VALID -loginSchema sec_aaa_ls_prof_1Factor

bind authentication policylabel sec_aaa_pl_CERT_VALID -policyName ag_auth_pol_ldap_nFACTOR -priority 100 -gotoPriorityExpression NEXT

Das zweite Policy Label hat das Login Schema LSCHEMA_INT gebunden, da der RADIUS Token vom Standard Schema übertragen wird. (LSCHEMA_INT = kein Schema)

add authentication policylabel sec_aaa_pl_RADIUS -loginSchema LSCHEMA_INT

bind authentication policylabel sec_aaa_pl_RADIUS -policyName ag_auth_pol_RADIUS -priority 90 -gotoPriorityExpression NEXT

SSL Profil

Die Zertifikatsauthentifizierung ist eine Sonderlocke. Um zu funktionieren nutze ich serverseitige SSL-RenegotiationDas ermöglicht dem AAA vServer, in einer neu aufgebauten Verbindung zum Client ein Benutzerzertifikat zu verlangen.

add ssl profile ssl_prof_fe_Secure_Renegotiation -eRSA DISABLED -sessReuse ENABLED -sessTimeout 120 -clientAuth ENABLED -clientCert Optional -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -denySSLReneg FRONTEND_CLIENT -maxage 157680000

bind ssl profile ssl_prof_fe_Secure_Cert -cipherName ssl_cg_fe_Sec -cipherPriority 1

In dem SSL-Profil, welches am Citrix Gateway gebunden ist, aktiviere ich lediglich die Option „Client Authentication“ und stelle es auf optional ein. So kann das Zertifikat über das Gateway an den AAA vServer weitergegeben werden.

Bindings

Nachdem alle nötigen Komponenten erstellt wurden, kann der AAA vServer konfiguriert werden. Das neue SSL-Profil wird gebunden.

set ssl vserver sec_aaa_vs_nFACTOR -sslProfile ssl_prof_fe_Secure_Renegotiation

Das Login Schema für die Zwei-Faktor-Authentifizierung wird gebunden.

bind authentication vserver sec_aaa_vs_nFACTOR -policy sec_aaa_ls_pol_CERT_INVALID -priority 100 -gotoPriorityExpression END

Mit der höchsten Priorität wird die Policy für die Zertifikatsauthentifizierung hinzugefügt. Als nächster Faktor wird das Policy Label “Cert Valid” angegeben.

bind authentication vserver sec_aaa_vs_nFACTOR -policy ag_auth_pol_cert_nFACTOR -priority 90 -nextFactor sec_aaa_pl_CERT_VALID -gotoPriorityExpression NEXT

Wenn kein Zertifikat zur Überprüfung übermittelt wurde, oder das Zertifikat ungültig ist, übernimmt die nächste Authentifizierungs-Policy. Der zweite Faktor beinhaltet das Policy Label für die RADIUS Authentifizierung.

bind authentication vserver sec_aaa_vs_nFACTOR -policy ag_auth_pol_ldap_nFACTOR -priority 100 -nextFactor sec_aaa_pl_RADIUS_mgmt_verify -gotoPriorityExpression NEXT

Damit das Gateway weiß, welcher AAA vServer die Authentifizierung durchführt, wird ein Authentication Profile erstellt… 

add authentication authnProfile auth_pro_ext_nFactor –authnVsName sec_aaa_vs_nFACTOR 

…und anschließend an den Gateway vServer gebunden. 

set vpn vserver nsg_vs_GW_https_443 –authnprofile auth_pro_ext_nFactor