ADFS Extranet Lockout

Ein ADFS-Server ist in der Regel auch aus dem Internet erreichbar, damit Anwender überall auf der Welt sich am ADFS-Service authentifizieren können und Tokens für den Zugriff auf die jeweiligen Dienste bekommen kann. Damit öffnen wir natürlich wieder eine Tür, über den Angriffe auf Konten erfolgen können. Aber ADFS enthält einen Schutz, den viele andere Dienste nicht haben: ADFS kann zu viele Fehlversuche erkennen und blockieren.

Exchange ActiveSync, Exchange OWA und viele andere Webseiten haben so einen Schutz nicht und die Firmen haben daher in der Regel ein Portal oder einen Reverse Proxy mit "Pre Authentication" davor geschaltet.

Intranet und Extranet

Der ADFS-Server unterscheidet genau, ob ein Zugriff auf dem internen Netzwerk oder aus dem Internet kommt. Als Kriterium wird dazu der vorgeschaltete ADFS-Proxy genutzt, der einen HTTP-Header (Feld "X-MS-Proxy") in den Request addiert und so dem eigentlichen ADFS-Server mitteilt, dass der Zugriff über den Proxy und damit von extern gekommen ist.

Der gleiche Header wird übrigens auch genutzt, um die Authentifizierung zu bestimmen, die dem Client angeboten wird.

Clients, die im internen LAN sind, sollten daher nie den DNS-Namen auf den ADFS-Proxy auflösen oder über einen HTTP-Proxy auf den ADFS-Server von extern zugreifen. Nur beim direkten internen Zugriff funktioniert z.B.: auch die Windows Authentifizierung (Kerberos/NTLM)

Extranet Lockout konfigurieren

Aber selbst wenn der Zugriff nicht gelingt, weil das Kennwort sicher genug ist oder das Konto gesperrt wird, enthält der ADFS- 2012R2-Server mittlerweile eine Funktion, um zu viele externe Anmeldungen zu verhindern ohne das interne Konto zu sperren. Allerdings ist diese Funktion per Default nicht aktiv.

Get-AdfsProperties | fl ex*

ExtendedProtectionTokenCheck : Allow
ExtranetLockoutThreshold     : 2147483647
ExtranetLockoutEnabled       : False
ExtranetObservationWindow    : 00:30:00

Mein Ratschlag
Aktivieren Sie diese nützliche Funktion und blockieren Sie den Zugang für Konten über DFS , ehe das Konto intern gesperrt wird.

Die Werte für die Zeitdauer und die Anzahl kann einfach gesetzt werden. Der Parameter für die Aktivierung hingegen lautet etwas anders.

Set-AdfsProperties `
   -ExtranetLockoutThreshold 2 `
   -ExtranetObservationWindow 00:01:00 `
   -EnableExtranetLockout $true

Hier wird nach zwei Versuchen jeder weitere Versuch für weitere 1 Minute unterbunden.

Im Eventlog werden zwar die falschen Anmeldungen protokolliert aber es gibt keinen Eintrag, der ein so gesperrtes Konto identifiziert und damit weitere Anmeldeversuche protokolliert. Auch der Anwender bekommt keinen Hinweis darauf, dass sein Konto für ADFs aktuell gesperrt ist. Als Administrator könnte ich nur die Anzahl der "Failed Login" pro User auf dem ADFS-Server ermitteln und sehen, ob schon so viele fehlerhafte Anmeldungen erfolgt sind, wie im ExtranetLockoutThreshold konfiguriert sind.

Status von Benutzern abfragen

Wenn auf ein Konto ein Angriff gefahren wird, dann wird es nach der eingestellten Zeit an Fehlversuchen durch ADFS gesperrt. Der Anwender kann also nicht mehr über den ADFS-Proxy weitere Authentifizierungen versuchen. Wenn die Werte niedriger als die AD-Lockout-Ricihtlinien eingestellt sind, kann der Anwender weiterhin sich intern anmelden und arbeiten und auch alle Bestandstickets, die er aktuell nutzt, funktionieren natürlich weiter, wenn das Konto nicht gesperrt ist. Ein Angreifer kann auch nicht weiter neue Kennworte über den ADFS-Proxy ausprobieren.

Ob ein Konto nun aber durch ADFS aktuell eingeschränkt ist, sehen Sie einmal im Eventlog aber auch über die Powershell. Interessant sind hier die Werte zu "LastFailed" und "BadPasswordCount"

Get-AdfsAccountActivity `
   -UserPrincipalName <UPN>

LastFailed      : 
BadPasswordCount:  0

Aktuelle PS1 Ausgabe fehlt

Weitere Links