Delen via


HTTP-beveiligingsantwoordheaders aanpassen met AD FS 2019

Active Directory Federation Services (AD FS) 2019 voegt de functionaliteit toe om de HTTP-beveiligingsantwoordheaders die door AD FS worden verzonden, aan te passen. Met deze hulpprogramma's kunnen beheerders zich beschermen tegen veelvoorkomende beveiligingsproblemen en kunnen ze profiteren van de nieuwste ontwikkelingen in browserbeveiligingsmechanismen. Deze functie is afkomstig van de introductie van twee nieuwe cmdlets: Get-AdfsResponseHeaders en Set-AdfsResponseHeaders.

Notitie

De functionaliteit voor het aanpassen van de HTTP-beveiligingsantwoordheaders (behalve CORS-headers) met behulp van cmdlets Get-AdfsResponseHeaders en Set-AdfsResponseHeaders is teruggeplaatst in AD FS 2016. U kunt de functionaliteit toevoegen aan uw AD FS 2016 door KB4493473 en KB4507459te installeren.

In dit artikel worden veelgebruikte headers voor beveiligingsantwoorden besproken om te laten zien hoe u headers kunt aanpassen die zijn verzonden door AD FS 2019.

Notitie

In het artikel wordt ervan uitgegaan dat u AD FS 2019 hebt geïnstalleerd.

Scenariën

In de volgende scenario's ziet u hoe beheerders mogelijk beveiligingsheaders moeten aanpassen.

  • Een beheerder heeft HTTP Strict-Transport-Security (HSTS) ingeschakeld om de gebruikers te beschermen die toegang hebben tot de web-app via HTTP vanaf een openbaar wifi-toegangspunt dat mogelijk wordt gehackt. HSTS dwingt alle verbindingen af via HTTPS-versleuteling. Ze willen de beveiliging verder versterken door HSTS in te schakelen voor subdomeinen.
  • Een beheerder heeft de X-Frame-Options reactieheader geconfigureerd om de webpagina's te beschermen tegen clickjacken. X-Frame-Options voorkomt dat webpagina's in een iFrame worden weergegeven. Ze moeten de headerwaarde echter aanpassen vanwege een nieuwe zakelijke vereiste om gegevens (in iFrame) van een toepassing met een andere oorsprong (domein) weer te geven.
  • Een beheerder heeft X-XSS-Protection- ingeschakeld om de pagina te opschonen en te blokkeren als browser aanvallen voor meerdere scripts detecteert. X-XSS-Protection voorkomt aanvallen met meerdere scripts. Ze moeten echter de koptekst aanpassen zodat de pagina kan worden geladen nadat deze is opgeschoond.
  • Een beheerder moet CORS -(Cross Origin Resource Sharing) inschakelen en ze moeten de oorsprong (domein) op AD FS instellen om een toepassing met één pagina toegang te geven tot een web-API met een ander domein.
  • Een beheerder heeft de CSP (Content Security Policy) header ingeschakeld om aanvallen op meerdere sites en aanvallen met gegevensinjectie te voorkomen door eventuele aanvragen tussen domeinen niet toe te wijzen. Vanwege een nieuwe bedrijfsvereiste moeten ze echter de koptekst aanpassen om webpagina's van elke oorsprong te kunnen laden en media te beperken tot vertrouwde providers.

HTTP-beveiligingsantwoordheaders

AD FS voegt de antwoordheaders toe aan het uitgaande HTTP-antwoord dat naar een webbrowser wordt verzonden. U kunt de headers weergeven met behulp van de cmdlet Get-AdfsResponseHeaders, zoals wordt weergegeven in de volgende schermopname.

Schermopname van de PowerShell-uitvoer van Get-AdfsResponseHeaders.

De ResponseHeaders kenmerk in de schermopname identificeert de beveiligingsheaders die zijn opgenomen door AD FS in elk HTTP-antwoord. AD FS verzendt de antwoordheaders alleen als ResponseHeadersEnabled is ingesteld op True (standaardwaarde). De waarde kan worden ingesteld op False om te voorkomen dat AD FS geen van de beveiligingsheaders in de HTTP-reactie opneemt. Deze instelling wordt echter niet aanbevolen. U kunt ResponseHeaders instellen op False met de volgende opdracht:

Set-AdfsResponseHeaders -EnableResponseHeaders $false

HTTP Strict-Transport-Security (HSTS)

HTTP Strict-Transport-Security (HSTS) is een mechanisme voor webbeveiligingsbeleid, dat helpt bij het beperken van protocol downgradeaanvallen en cookiekaping voor services met zowel HTTP- als HTTPS-eindpunten. Hiermee kunnen webservers declareren dat webbrowsers, of andere gebruikersagenten, er alleen mee moeten communiceren via HTTPS en nooit via het HTTP-protocol.

Alle AD FS-eindpunten voor webverificatieverkeer worden uitsluitend via HTTPS geopend. Als gevolg hiervan vermindert AD FS effectief de bedreigingen die het HTTP Strict Transport Security-beleidmechanisme biedt. Standaard is er geen downgrade naar HTTP omdat er geen listeners in HTTP zijn. De header kan worden aangepast door de volgende parameters in te stellen:

  • max-age=<verlooptijd>. De verlooptijd (in seconden) geeft aan hoe lang de site alleen moet worden geopend via HTTPS. De standaardwaarde en aanbevolen waarde zijn 31536000 seconden (één jaar).
  • includeSubDomains. Deze parameter is optioneel. Indien opgegeven, is de HSTS-regel ook van toepassing op alle subdomeinen.

HSTS-aanpassing

De koptekst is standaard ingeschakeld en max-age is ingesteld op één jaar; Beheerders kunnen echter de max-age wijzigen (de waarde voor maximale leeftijd verlagen wordt niet aanbevolen) of HSTS inschakelen voor subdomeinen via de Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -SetHeaderName "Strict-Transport-Security" -SetHeaderValue "max-age=<seconds>; includeSubDomains"

Voorbeeld:

Set-AdfsResponseHeaders -SetHeaderName "Strict-Transport-Security" -SetHeaderValue "max-age=31536000; includeSubDomains"

De header is standaard opgenomen in het kenmerk ResponseHeaders; Beheerders kunnen de header echter verwijderen via de cmdlet Set-AdfsResponseHeaders.

Set-AdfsResponseHeaders -RemoveHeaders "Strict-Transport-Security"

X-Frame-Options

AD FS staat standaard niet toe dat externe toepassingen iFrames gebruiken bij het uitvoeren van interactieve aanmelding. Deze configuratie voorkomt bepaalde phishingaanvallen. Aanmelding zonder interactie kan worden uitgevoerd via een iFrame dankzij de eerder ingestelde sessiebeveiliging.

In bepaalde zeldzame gevallen kunt u echter een specifieke toepassing vertrouwen waarvoor een interactieve AD FS-aanmeldingspagina met iFrame is vereist. De X-Frame-Options header wordt hiervoor gebruikt.

Deze HTTP-beveiligingsantwoord-header wordt gebruikt om aan te geven aan de browser of een pagina in een <frame>/<iframe>mag worden weergegeven. De header kan worden ingesteld op een van de volgende waarden:

  • weigeren. De pagina in een frame wordt niet weergegeven. Deze configuratie is de standaardinstelling en aanbevolen instelling.
  • sameorigin. De pagina wordt alleen weergegeven in het frame als de oorsprong gelijk is aan de oorsprong van de webpagina. De optie is niet nuttig, tenzij alle voorouders zich ook in dezelfde oorsprong bevinden.
  • toestaan van de opgegeven oorsprong <>. De pagina wordt alleen weergegeven in het frame als de oorsprong (bijvoorbeeld https://www.".com) overeenkomt met de specifieke oorsprong in de koptekst. Sommige browsers bieden mogelijk geen ondersteuning voor deze optie.

X-Frame-Options aanpassing

De koptekst is standaard ingesteld op weigeren; Beheerders kunnen de waarde echter wijzigen via de cmdlet Set-AdfsResponseHeaders.

Set-AdfsResponseHeaders -SetHeaderName "X-Frame-Options" -SetHeaderValue "<deny/sameorigin/allow-from<specified origin>>"

Voorbeeld:

Set-AdfsResponseHeaders -SetHeaderName "X-Frame-Options" -SetHeaderValue "allow-from https://www.example.com"

De header is standaard opgenomen in het kenmerk ResponseHeaders; Beheerders kunnen de header echter verwijderen via de cmdlet Set-AdfsResponseHeaders.

Set-AdfsResponseHeaders -RemoveHeaders "X-Frame-Options"

X-XSS-Protection

Deze HTTP-beveiligingsresponsheader wordt gebruikt om te voorkomen dat webpagina's worden geladen wanneer browsers cross-site scripting (XSS)-aanvallen detecteren. Deze benadering wordt XSS-filtering genoemd. De header kan worden ingesteld op een van de volgende waarden:

  • 0 schakelt XSS-filtering uit. Niet aanbevolen.
  • met 1 kunt u XSS-filters inschakelen. Als er een XSS-aanval wordt gedetecteerd, wordt de pagina door de browser opgeschoond.
  • 1; mode=block maakt XSS-filtering mogelijk. Als er een XSS-aanval wordt gedetecteerd, voorkomt de browser dat de pagina wordt weergegeven. Deze instelling is de standaardinstelling en de aanbevolen instelling.

X-XSS-Protection aanpassing

De koptekst is standaard ingesteld op 1; mode=block;. Beheerders kunnen de waarde echter wijzigen via de Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -SetHeaderName "X-XSS-Protection" -SetHeaderValue "<0/1/1; mode=block/1; report=<reporting-uri>>"

Voorbeeld:

Set-AdfsResponseHeaders -SetHeaderName "X-XSS-Protection" -SetHeaderValue "1"

De header is standaard opgenomen in het kenmerk ResponseHeaders; Beheerders kunnen de header echter verwijderen via de Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -RemoveHeaders "X-XSS-Protection"

CORS-headers (Cross Origin Resource Sharing)

Beveiliging van webbrowsers voorkomt dat een webpagina cross-origin-aanvragen maakt die vanuit scripts worden geïnitieerd. Mogelijk wilt u echter toegang krijgen tot resources in andere origins (domeinen). Cross Origin Resource Sharing (CORS) is een W3C-standaard waarmee een server hetzelfde origin-beleid kan versoepelen. Door CORS te gebruiken, kan een server expliciet bepaalde cross-origin-aanvragen toestaan terwijl andere aanvragen worden geweigerd.

Als u meer inzicht wilt krijgen in een CORS-aanvraag, wordt in het volgende scenario stapsgewijs uitgelegd hoe een toepassing met één pagina (SPA) een web-API met een ander domein moet aanroepen. Houd er bovendien rekening mee dat zowel SPA als API zijn geconfigureerd op AD FS 2019 en dat AD FS CORS heeft ingeschakeld. AD FS kan CORS-headers identificeren in de HTTP-aanvraag, headerwaarden valideren en de juiste CORS-headers opnemen in het antwoord. Zie sectie CORS aanpassenvoor meer informatie over het inschakelen en configureren van CORS op AD FS 2019. De volgende voorbeeldstroom begeleidt u door het scenario:

  1. Een gebruiker opent een SPA via de clientbrowser en wordt omgeleid naar het AD FS-authenticatie-eindpunt voor authenticatie. Omdat de Single Page Application is geconfigureerd voor impliciete machtigingsstroom, retourneert de aanvraag een Access + ID-token naar de browser na een geslaagde authenticatie.

  2. Na gebruikersverificatie doet de front-end JavaScript die is opgenomen in de Single Page Application een aanvraag voor toegang tot de web-API. De aanvraag wordt omgeleid naar AD FS met de volgende headers:

    • Opties: beschrijft de communicatieopties voor de doelresource.
    • Origin: bevat de oorsprong van de web-API.
    • Access-Control-Request-Method - identificeert de HTTP-methode (bijvoorbeeld DELETE) die moet worden gebruikt wanneer een werkelijke aanvraag wordt gedaan.
    • Toegangsbeheer-Request-Headers - identificeert de HTTP-headers die moeten worden gebruikt wanneer een werkelijke aanvraag wordt gedaan.

    Notitie

    Een CORS-aanvraag lijkt op een standaard HTTP-aanvraag. De aanwezigheid van een origin-header geeft echter aan dat de binnenkomende aanvraag CORS-gerelateerd is.

  3. AD FS controleert of de web-API-oorsprong die is opgenomen in de header wordt vermeld in de vertrouwde origins die zijn geconfigureerd in AD FS. Raadpleeg CORS-aanpassingvoor meer informatie over het wijzigen van vertrouwde bronnen. AD FS reageert vervolgens met de volgende headers:

    • Access-Control-Allow-Origin - waarde hetzelfde als in de origin-header.
    • Toegangsbeheer-Allow-Method - dezelfde waarde als in de header Access-Control-Request-Method.
    • Toegangsbeheer-Allow-Headers - dezelfde waarde als in de header Access-Control-Request-Headers.
  4. De browser verzendt de werkelijke aanvraag, inclusief de volgende headers:

    • HTTP-methode (bijvoorbeeld DELETE).
    • Origin: bevat de oorsprong van de web-API.
    • Alle headers die zijn opgenomen in de Access-Control-Allow-Headers responskop.
  5. Nadat deze is geverifieerd, keurt AD FS de aanvraag goed door het web-API-domein (origin) op te geven in de Access-Control-Allow-Origin antwoordheader.

  6. Door de opname van de header Access-Control-Allow-Origin kan de browser de aangevraagde API aanroepen.

aanpassing van CORS-instellingen

CORS-functionaliteit is standaard niet ingeschakeld; Beheerders kunnen de functionaliteit echter inschakelen via de Set-AdfsResponseHeaders cmdlet.

Set-AdfsResponseHeaders -EnableCORS $true

Nadat deze is ingeschakeld, kunnen beheerders een lijst met vertrouwde origins inventariseren met behulp van dezelfde cmdlet. Met de volgende opdracht kunnen BIJVOORBEELD CORS-aanvragen van de oorsprongen https&#58;//example1.com en https&#58;//example1.comworden toegestaan.

Set-AdfsResponseHeaders -CORSTrustedOrigins https://example1.com,https://example2.com

Notitie

Beheerders kunnen CORS-aanvragen van elke oorsprong toestaan door *op te geven in de lijst met vertrouwde origins, hoewel deze aanpak niet wordt aanbevolen vanwege beveiligingsproblemen en als ze ervoor kiezen een waarschuwingsbericht op te geven.

Beleid voor inhoudsbeveiliging (CSP)

Deze HEADER van het HTTP-beveiligingsantwoord wordt gebruikt om scripting op meerdere sites, clickjacking en andere aanvallen met gegevensinjecties te voorkomen door te voorkomen dat browsers onbedoeld schadelijke inhoud uitvoeren. Browsers die inhoudsbeveiligingsbeleid (CSP) niet ondersteunen, negeren de CSP-antwoordheaders.

CSP-aanpassing

Aanpassing van de CSP-header omvat het wijzigen van het beveiligingsbeleid waarmee de resources worden gedefinieerd die door de browser mogen worden geladen voor de webpagina. Het standaardbeveiligingsbeleid is:

Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:;

De standaard-src- richtlijn wordt gebruikt om -src-instructies te wijzigen zonder dat elke richtlijn expliciet wordt vermeld. In het volgende voorbeeld is het beleid 1 bijvoorbeeld hetzelfde als beleid 2.

Beleid 1

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'"

Beleid 2

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "script-src 'self'; img-src 'self'; font-src 'self';
frame-src 'self'; manifest-src 'self'; media-src 'self';"

Als een richtlijn expliciet wordt vermeld, overschrijft de opgegeven waarde de opgegeven waarde voor default-src. In het volgende voorbeeld neemt de img-src de waarde als '*' (zodat afbeeldingen vanaf elke oorsprong kunnen worden geladen) terwijl andere -src instructies de waarde als 'zelf' aannemen (beperkend tot dezelfde oorsprong als de webpagina).

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'; img-src *"

De volgende bronnen kunnen worden gedefinieerd voor het standaard-src-beleid:

  • 'self': als u deze bron opgeeft, wordt de oorsprong van de inhoud beperkt tot de oorsprong van de webpagina.
  • 'unsafe-inline': als u deze bron in het beleid opgeeft, kan inline JavaScript en CSS worden gebruikt.
  • 'onveilig-eval': door deze bron in het beleid op te nemen, wordt het gebruik van mechanismen zoals eval, die tekst naar JavaScript omzetten, toegestaan.
  • 'none': als u deze bron opgeeft, wordt voorkomen dat de inhoud van om het even welke oorsprong wordt geladen.
  • gegevens: - gegevens opgeven: MET URI's kunnen makers van inhoud kleine bestanden inline insluiten in documenten. Gebruik wordt niet aanbevolen.

Notitie

AD FS maakt gebruik van JavaScript in het verificatieproces en staat JavaScript daarom toe door 'unsafe-inline' en 'unsafe-eval' bronnen in het standaardbeleid op te nemen.

Aangepaste kopteksten

Naast de eerder vermelde beveiligingsantwoordheaders (HSTS, CSP, X-Frame-Options, X-XSS-Protection en CORS), kunt u met AD FS 2019 nieuwe headers instellen.

U kunt bijvoorbeeld een nieuwe header als "TestHeader" instellen en "TestHeaderValue" als de waarde.

Set-AdfsResponseHeaders -SetHeaderName "TestHeader" -SetHeaderValue "TestHeaderValue"

Nadat deze is ingesteld, wordt de nieuwe header verzonden in het AD FS-antwoord, zoals weergegeven in het volgende Fiddler-fragment:

Schermopname van Fiddler op het tabblad Kopteksten waarin TestHeader: TestHeaderValue onder Diversen is gemarkeerd.

Webbrowsercompatibiliteit

Gebruik de volgende tabel en koppelingen om te bepalen welke webbrowsers compatibel zijn met elk van de headers voor beveiligingsantwoorden.

HTTP-header voor beveiligingsantwoord Browsercompatibiliteit
HTTP Strict-Transport-Security (HSTS) compatibiliteit van HSTS-browser
X-Frame-Options X-Frame-Options browsercompatibiliteit
X-XSS-Protection X-XSS-Protection browsercompatibiliteit
Cross Origin Resource Sharing (CORS) CORS-browsercompatibiliteit
Beleid voor inhoudsbeveiliging (CSP) compatibiliteit van CSP-browser

Volgende