Dela via


Beskrivning av funktionen Extranet Smart Lockout i Windows Server 2016

I den här artikeln beskrivs funktionen För extranätssmart utelåsning i Windows Server 2016.

Gäller för: Windows Server 2016
Ursprungligt KB-nummer: 4096478

Översikt

Från och med mars 2018-uppdateringen för Windows Server 2016 har Active Directory Federation Services (AD FS) (AD FS) en ny funktion med namnetExtranet Smart Lockout (ESL). I en tid av ökade attacker på autentiseringstjänster gör ESL det möjligt för AD FS att skilja mellan inloggningsförsök från en giltig användare och inloggningar från vad som kan vara en angripare. Därför kan AD FS låsa ut angripare samtidigt som giltiga användare kan fortsätta att använda sina konton. Detta förhindrar överbelastning för användare och skyddar mot riktade attacker mot kända användarkonton.

ESL-funktionen är tillgänglig för AD FS i Windows Server 2016.

Installera och konfigurera ESL

Installera uppdateringar på alla noder i servergruppen

Kontrollera först att alla Windows Server 2016 AD FS-servrar är uppdaterade från och med Windows-uppdateringarna i mars 2018.

Uppdatera behörigheter för artefaktdatabas

Extranätssmart utelåsning kräver att AD FS-tjänstkontot har behörighet att skapa en ny tabell i AD FS-artefaktdatabasen. Logga in på valfri AD FS-server som AD FS-administratör och bevilja sedan den här behörigheten genom att köra följande kommandon i ett PowerShell-kommandotolkfönster:

$cred= Get-Credential
Update-AdfsArtifactDatabasePermission -Credential$cred

Kommentar

Platshållaren $cred är ett konto som har AD FS-administratörsbehörighet. Detta bör ge skrivbehörighet för att skapa tabellen.

Kommandona ovan kan misslyckas på grund av bristande behörighet eftersom AD FS-servergruppen använder SQL Server och autentiseringsuppgifterna ovan inte har administratörsbehörighet på SQL-servern. I det här fallet kan du konfigurera databasbehörigheter manuellt i SQL Server Database genom att köra följande kommando när du är ansluten till databasen AdfsArtifactStore.

ALTER AUTHORIZATION ON SCHEMA::[ArtifactStore] TO [db_genevaservice]

Konfigurera ESL

En ny parameter med namnet ExtranetLockoutMode läggs till för att stödja ESL. Den innehåller följande värden:

  • ADPasswordCounter – det här är det äldre läget för mjuk utelåsning i AD FS ,extranät, som inte skiljer sig åt baserat på plats. Detta är standardvärdet.
  • ADFSSmartLockoutLogOnly – Det här är Extranet Smart Lockout. I stället för att avvisa autentiseringsbegäranden skriver AD FS administratörs- och granskningshändelser.
  • ADFSSmartLockoutEnforce – Det här är Extranet Smart Lockout med fullständigt stöd för att blockera okända begäranden när tröskelvärden nås.

Vi rekommenderar att du först ställer in utelåsningsprovidern på log-only under en kort tidsperiod (1 till 3 dagar) genom att köra följande cmdlet. Granska granskningar (se nedan för mer information) under den här perioden för att fastställa antalet konton som potentiellt kan påverkas samt frekvensen för dessa händelser. När utvärderingen av granskningarna har slutförts ställer du in inställningen till läget "ADFSSmartLockoutEnforce":

Set-AdfsProperties -ExtranetLockoutMode AdfsSmartlockoutLogOnly

I det här läget utför ADFS analysen men blockerar inga begäranden på grund av utelåsningsräknare. Det här läget används för att verifiera att smart utelåsning körs innan det aktiverar läget "framtvinga".

För att det nya läget ska börja gälla startar du om AD FS-tjänsten på alla noder i servergruppen genom att köra följande kommando:

Restart-service adfssrv

Ange tröskelvärde för utelåsning och observationsfönster

Det finns två viktiga inställningar för ESL: tröskelvärde för utelåsning och observationsfönster.

Inställning för tröskelvärde för utelåsning

Varje gång en lösenordsbaserad autentisering lyckas lagrar AD FS klient-IP-adresserna som välbekanta platser i kontoaktivitetstabellen.

Om lösenordsbaserad autentisering misslyckas och autentiseringsuppgifterna inte kommer från en bekant plats ökas antalet misslyckade autentiseringar.

När antalet misslyckade lösenordsförsök från okända platser når tröskelvärdet för utelåsning är kontot utelåst om lösenordsbaserad autentisering från en okänd plats misslyckas.

Kommentar

Utelåsningen fortsätter att gälla för välbekanta platser separat från den nya obekanta utelåsningsräknaren.

Tröskelvärdet anges med hjälp Set-AdfsPropertiesav .

Exempel:

Set-AdfsProperties -ExtranetLockoutThreshold 10

Inställning för observationsfönster

Inställningen för observationsfönstret gör att ett konto kan låsas upp automatiskt efter en stund. När kontot har låsts upp tillåts ett autentiseringsförsök. Om autentiseringen lyckas återställs antalet misslyckade autentiseringar till 0. Om det misslyckas väntar systemet på ett annat observationsfönster innan användaren kan försöka igen.

Observationsfönstret anges med hjälp Set-AdfsProperties av följande exempelkommando:

Set-AdfsProperties -ExtranetObservationWindow ( new-timespan -minutes 5 )

Aktivera utelåsning

Extranätsutelåsning kan aktiveras eller inaktiveras med hjälp av parametern EnableExtranetLockout som i följande exempel.

Om du vill aktivera utelåsning kör du följande kommando:

Set-AdfsProperties -EnableExtranetLockout $true

Om du vill inaktivera utelåsning kör du följande kommando:

Set-AdfsProperties -EnableExtranetLockout $false

Aktivera framtvingandeläge

När du är nöjd med tröskelvärdet för utelåsning och observationsfönstret kan ESL flyttas till "framtvinga" läge med hjälp av följande PSH-cmdlet:

Set-AdfsProperties -ExtranetLockoutMode AdfsSmartLockoutEnforce

För att det nya läget ska börja gälla startar du om AD FS-tjänsten på alla noder i servergruppen med hjälp av följande kommando:

Restart-service adfssrv

Hantera ESL

Hantera användarkontoaktivitet

AD FS innehåller tre cmdletar för att hantera användarkontoaktivitetsdata. Dessa cmdletar ansluter automatiskt till noden i servergruppen som innehåller huvudrollen.

Kommentar

Det här beteendet kan åsidosättas genom att parametern -Server skickas.

  • Get-ADFSAccountActivity

    Läs aktuell kontoaktivitet för ett användarkonto. Cmdleten ansluter alltid automatiskt till servergruppens huvudserver med hjälp av REST-slutpunkten för kontoaktivitet. Därför bör alla data alltid vara konsekventa.

    Get-ADFSAccountActivity user@contoso.com
    
  • Set-ADFSAccountActivity

    Uppdatera kontoaktiviteten för ett användarkonto. Detta kan användas för att lägga till nya välbekanta platser eller radera tillstånd för alla konton.

    Set-ADFSAccountActivity user@contoso.com -FamiliarLocation "1.2.3.4"
    
  • Reset-ADFSAccountLockout

    Återställer utelåsningsräknaren för ett användarkonto.

    Reset-ADFSAccountLockout user@contoso.com -Familiar
    

Felsökning

Uppdatera databasbehörigheter

Om några fel returneras från cmdleten Update-AdfsArtifactDatabasePermission kontrollerar du följande:

  • Verifieringen misslyckas om noderna finns i servergruppslistan men inte längre är medlemmar i servergruppen. Detta kan åtgärdas genom att köra remove-adfsnode <node name>.
  • Kontrollera att uppdateringen har distribuerats på alla noder i servergruppen.
  • Kontrollera att de autentiseringsuppgifter som skickas till cmdleten har behörighet att ändra ägaren till AD FS-artefaktdatabasschemat.

Loggning/granskning

När en autentiseringsbegäran avvisas eftersom kontot överskrider tröskelvärdet för utelåsning skriver AD FS en ExtranetLockoutEvent till säkerhetsgranskningsströmmen.

Exempel på loggad händelse

En extranätsutelåsningshändelse har inträffat. Information om fel finns i XML.
Aktivitets-ID: 172332e1-1301-4e56-0e00-0080000000db
Ytterligare data
XML: <?xml version="1.0" encoding="utf-16"?><AuditBase xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ExtranetLockoutAudit"><AuditType>ExtranetLockout</AuditType>
<AuditResult>Failure</AuditResult>
<FailureType>ExtranetLockoutError</FailureType>
<ErrorCode>AccountRestrictedAudit</ErrorCode>
<ContextComponents>
<Komponent xsi:type="ResourceAuditComponent">
<RelyingParty>http://contoso.com /adfs/services/trust</RelyingParty>
<ClaimsProvider>N/A</ClaimsProvider>
<UserId>TQDFTD\Administrator</UserId>
</Komponent>
<Komponent xsi:type="RequestAuditComponent">
<Server>N/A</Server>
<AuthProtocol>WSFederation</AuthProtocol>
<NetworkLocation>Intranet</NetworkLocation>
<IpAddress>4.4.4.4</IpAddress>
<VidarebefordradIpAddress />
<ProxyIpAddress>1.2.3.4</ProxyIpAddress>
<NetworkIpAddress>1.2.3.4</NetworkIpAddress>
<ProxyServer>N/A</ProxyServer>
<UserAgentString>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, som Gecko) Chrome/63.0.3239.132 Safari/537.36</UserAgentString>
<Slutpunkt>/adfs/ls</slutpunkt>
</Komponent>
<Komponent xsi:type="LockoutConfigAuditComponent">
<CurrentBadPasswordCount>5</CurrentBadPasswordCount>
<ConfigBadPasswordCount>5</ConfigBadPasswordCount>
<LastBadAttempt>2018-02-07 21:47:44</LastBadAttempt>
<LockoutWindowConfig>00:30:00</LockoutWindowConfig>
</Komponent>
</ContextComponents>
</AuditBase>

Avinstallera

SQL Server-databasgrupper kan avinstallera uppdateringen med hjälp av inställningsprogrammet utan problem.

WID-databasgrupper måste följa dessa steg på grund av den uppdaterade wid-databasverifieringen binär:

  1. Kör psh-skriptet Uninstall som stoppar tjänsten och tar bort kontoaktivitetstabellen.

    Stop-Service adfssrv -ErrorAction Stop
    
    $doc = new-object Xml
    $doc.Load("$env:windir\ADFS\Microsoft.IdentityServer.Servicehost.exe.config")
    $connString = $doc.configuration.'microsoft.identityServer.service'.policystore.connectionString
    
    if ( -not $connString -like "*##wid*" )
    {
        Write-Error "SQL installs don't require DB updates, skipping DB table drop"
    }
    else
    {
            $connString = "Data Source=np:\\.\pipe\microsoft##wid\tsql\query;Initial Catalog=AdfsArtifactStore;Integrated Security=True"
            stop-service adfssrv
            $cli = new-object System.Data.SqlClient.SqlConnection
            $cli.ConnectionString = $connString
            $cli.Open()
            try
            {
            $cmd = new-object System.Data.SqlClient.SqlCommand
            $cmd.CommandText = "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[ArtifactStore].[AccountActivity]') AND type in (N'U')) DROP TABLE [ArtifactStore].[AccountActivity]"
            $cmd.Connection = $cli
            $cmd.ExecuteNonQuery()
        }
        finally
        {
            $cli.CLose()
        } write-warning "Finish removing the patch using the Settings app and then restart the complete to complete the uninstall"
    }
    
  2. Avinstallera uppdateringen med hjälp av inställningsprogrammet.

  3. Starta om datorn.