Personalizzare le intestazioni della risposta di sicurezza HTTP con AD FS 2019

Active Directory Federation Services (AD FS) 2019 aggiunge la funzionalità per personalizzare le intestazioni della risposta di sicurezza HTTP inviate da AD FS. Questi strumenti aiutano gli amministratori a proteggersi da vulnerabilità di sicurezza comuni e consentono loro di sfruttare i miglioramenti più recenti nei meccanismi di protezione basati su browser. Questa funzionalità deriva dall'introduzione di due nuovi cmdlet: Get-AdfsResponseHeaders e Set-AdfsResponseHeaders.

Nota

La funzionalità per personalizzare le intestazioni della risposta di sicurezza HTTP, ad eccezione delle intestazioni CORS, usando i cmdlet: Get-AdfsResponseHeaders e Set-AdfsResponseHeaders è disponibile tramite backport in AD FS 2016. È possibile aggiungere la funzionalità ad AD FS 2016 installando KB4493473 e KB4507459.

Questo articolo illustra le intestazioni della risposta di sicurezza di uso comune per mostrare come personalizzare le intestazioni inviate da AD FS 2019.

Nota

L'articolo presuppone l'installazione di AD FS 2019.

Scenari

Gli scenari seguenti illustrano la potenziale necessità di personalizzazione delle intestazioni di sicurezza da parte degli amministratori.

  • Un amministratore ha abilitato HTTP Strict-Transport-Security (HSTS) per proteggere gli utenti che potrebbero accedere all'app Web usando HTTP da un punto di accesso Wi-Fi pubblico che potrebbe essere violato. HSTS impone la crittografia HTTPS per tutte le connessioni. L'amministratore vuole rafforzare ulteriormente la sicurezza abilitando HSTS per i sottodomini.
  • Un amministratore ha configurato l'intestazione della risposta X-Frame-Options per proteggere le pagine Web da clickjack. X-Frame-Options impedisce il rendering di qualsiasi pagina Web in un iFrame. È tuttavia necessario personalizzare il valore dell'intestazione a causa di un nuovo requisito aziendale per visualizzare i dati (in iFrame) da un'applicazione con un'origine diversa (dominio).
  • Un amministratore ha abilitato X-XSS-Protection per purificare e bloccare la pagina se il browser rileva attacchi cross-scripting. X-XSS-Protection impedisce attacchi cross-scripting. È tuttavia necessario personalizzare l'intestazione per consentire il caricamento della pagina dopo la purificazione.
  • Un amministratore deve abilitare CORS (Cross Origin Resource Sharing)e deve impostare l'origine (dominio) in AD FS in modo da consentire a un'applicazione a pagina singola di accedere a un'API Web con un altro dominio.
  • Un amministratore ha abilitato l'intestazione Criteri di sicurezza del contenuto per impedire attacchi di scripting intersito e attacchi di inserimento dei dati non consentendo richieste tra domini. A causa di un nuovo requisito aziendale, è tuttavia necessario personalizzare l'intestazione per consentire alla pagina Web di caricare immagini da qualsiasi origine e limitare i file multimediali a provider attendibili.

Intestazioni della risposta di sicurezza HTTP

AD FS include le intestazioni della risposta nella risposta HTTP in uscita inviata a un Web browser. È possibile elencare le intestazioni usando il cmdlet Get-AdfsResponseHeaders, come illustrato nello screenshot seguente.

Screenshot that shows the PowerShell output from Get-AdfsResponseHeaders.

L'attributo ResponseHeaders nello screenshot identifica le intestazioni di sicurezza incluse da AD FS in ogni risposta HTTP. AD FS invia le intestazioni della risposta solo se ResponseHeadersEnabled è impostato su True (valore predefinito). Il valore può essere impostato su False per impedire ad AD FS di includere qualsiasi intestazione di sicurezza nella risposta HTTP. Questa impostazione non è tuttavia consigliata. È possibile impostare ResponseHeaders su False con il comando seguente:

Set-AdfsResponseHeaders -EnableResponseHeaders $false

HSTS (HTTP Strict-Transport-Security)

HSTS (HTTP Strict Transport Security) è un meccanismo di criteri di sicurezza Web che consente di attenuare gli attacchi di downgrade del protocollo e l'acquisizione del controllo dei cookie per i servizi che hanno endpoint sia HTTP che HTTPS. Consente ai server Web di dichiarare che i Web browser o altri agenti utente conformi devono interagire con esso solo usando HTTPS e mai tramite il protocollo HTTP.

Tutti gli endpoint AD FS per il traffico di autenticazione Web vengono aperti esclusivamente su HTTPS. Di conseguenza, AD FS riduce efficacemente le minacce correlate al meccanismo dei criteri di HSTS (HTTP Strict Transport Security). Per impostazione predefinita, non esiste alcun downgrade a HTTP perché non sono presenti listener in HTTP. L'intestazione può essere personalizzata impostando i parametri seguenti:

  • max-age=<expire-time>. La scadenza (in secondi) specifica per quanto tempo il sito deve essere accessibile solo tramite HTTPS. Il valore predefinito e consigliato è 31536000 secondi (un anno).
  • includeSubDomains. Il parametro è facoltativo. Se specificato, la regola HSTS si applica anche a tutti i sottodomini.

Personalizzazione di HSTS

Per impostazione predefinita, l'intestazione è abilitata e max-age è impostato su un anno. Gli amministratori possono tuttavia modificare il valore max-age (la riduzione del valore max-age non è consigliata) o abilitare HSTS per i sottodomini tramite il cmdlet Set-AdfsResponseHeaders.

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

Esempio:

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

Per impostazione predefinita, l'intestazione è inclusa nell'attributo ResponseHeaders. Gli amministratori possono tuttavia rimuovere l'intestazione tramite il cmdlet Set-AdfsResponseHeaders.

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

X-Frame-Options

Per impostazione predefinita, AD FS non consente alle applicazioni esterne di usare iFrame quando si esegue l'accesso interattivo. Questa configurazione impedisce determinati tipi di attacchi di phishing. L'accesso non interattivo può essere eseguito tramite iFrame a causa della sicurezza a livello di sessione precedente stabilita.

In alcuni rari casi è tuttavia possibile considerare attendibile un'applicazione specifica che richiede una pagina di accesso ad AD FS interattiva con supporto per iFrame. L'intestazione X-Frame-Options viene usata a questo scopo.

Questa intestazione della risposta di sicurezza HTTP viene usata per comunicare al browser se può eseguire il rendering di una pagina in un <frame>/<iframe>. Questa proprietà può essere impostata su uno dei valori seguenti:

  • deny. La pagina in un frame non viene visualizzata. Questa configurazione è l'impostazione predefinita e consigliata.
  • sameorigin. La pagina viene visualizzata nel frame solo se l'origine è uguale all'origine della pagina Web. L'opzione non è utile a meno che anche tutti i predecessori non si trovino nella stessa origine.
  • allow-from <origine specificata>. La pagina viene visualizzata nel frame solo se l'origine, ad esempio https://www.".com, corrisponde all'origine specifica nell'intestazione. Alcuni browser potrebbero non supportare questa opzione.

Personalizzazione di X-Frame-Options

Per impostazione predefinita, l'intestazione è impostata su deny. Gli amministratori possono tuttavia modificare il valore tramite il cmdlet Set-AdfsResponseHeaders.

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

Esempio:

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

Per impostazione predefinita, l'intestazione è inclusa nell'attributo ResponseHeaders. Gli amministratori possono tuttavia rimuovere l'intestazione tramite il cmdlet Set-AdfsResponseHeaders.

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

X-XSS-Protection

Questa intestazione della risposta di sicurezza HTTP viene usata per impedire il caricamento delle pagine Web quando i browser rilevano attacchi di scripting intersito (XSS). Questo approccio viene definito filtro XSS. Questa proprietà può essere impostata su uno dei valori seguenti:

  • 0 disabilita il filtro XSS. Opzione non consigliata.
  • 1 abilita il filtro XSS. Se viene rilevato un attacco XSS, il browser purifica la pagina.
  • 1; mode=block abilita il filtro XSS. Se viene rilevato un attacco di scripting intersito (XSS), il browser impedisce il rendering della pagina. Questa è l'impostazione predefinita e consigliata.

Personalizzazione di X-XSS-Protection

Per impostazione predefinita, l'intestazione è impostata su 1; mode=block;. Gli amministratori possono tuttavia modificare il valore tramite il cmdlet Set-AdfsResponseHeaders.

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

Esempio:

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

Per impostazione predefinita, l'intestazione è inclusa nell'attributo ResponseHeaders. Gli amministratori possono tuttavia rimuovere l'intestazione tramite il cmdlet Set-AdfsResponseHeaders.

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

Intestazioni CORS (Cross Origin Resource Sharing)

La sicurezza del Web browser impedisce a una pagina Web di effettuare richieste tra le origini avviate dall'interno degli script. Potrebbe essere tuttavia necessario accedere alle risorse in altre origini (domini). Cross Origin Resource Sharing (CORS) è uno standard W3C che consente a un server di ridurre i criteri di corrispondenza dell'origine. Usando CORS, un server può consentire in modo esplicito alcune richieste tra le origini mentre ne rifiuta altre.

Per comprendere meglio una richiesta CORS, lo scenario seguente illustra un'istanza in cui un'applicazione a pagina singola deve chiamare un'API Web con un dominio diverso. Si consideri inoltre che sia l'applicazione a pagina singola che l'API sono configurate in AD FS 2019 e CORS è abilitato in AD FS. AD FS può identificare le intestazioni CORS nella richiesta HTTP, convalidare i valori di intestazione e includere le intestazioni CORS appropriate nella risposta. Per informazioni dettagliate su come abilitare e configurare CORS in AD FS 2019, vedere la sezione Personalizzazione di CORS. Il flusso di esempio seguente illustra lo scenario:

  1. Un utente accede a un'applicazione a pagina singola tramite il browser client e viene reindirizzato all'endpoint di autenticazione di AD FS per l'autenticazione. Poiché l'applicazione a pagina singola è configurata per il flusso di concessione implicita, la richiesta restituisce un token di accesso e ID al browser dopo l'autenticazione riuscita.

  2. Dopo l'autenticazione dell'utente, il codice JavaScript front-end incluso nell'applicazione a pagina singola effettua una richiesta di accesso all'API Web. La richiesta viene reindirizzata ad AD FS con le intestazioni seguenti:

    • Options: descrive le opzioni di comunicazione per la risorsa di destinazione.
    • Origin: include l'origine dell'API Web.
    • Access-Control-Request-Method: identifica il metodo HTTP, ad esempio, DELETE, da usare quando viene effettuata una richiesta effettiva.
    • Access-Control-Request-Headers: identifica le intestazioni HTTP da usare quando viene effettuata una richiesta effettiva.

    Nota

    Una richiesta CORS è simile a una richiesta HTTP standard. La presenza di un'intestazione di origine segnala tuttavia che la richiesta in ingresso è correlata a CORS.

  3. AD FS verifica che l'origine dell'API Web inclusa nell'intestazione sia elencata nelle origini attendibili configurate in AD FS. Per altre informazioni su come modificare le origini attendibili, vedere Personalizzazione di CORS. AD FS risponde quindi con le intestazioni seguenti:

    • Access-Control-Allow-Origin: valore uguale a quello dell'intestazione Origin.
    • Access-Control-Allow-Method : valore uguale quello dell'intestazione Access-Control-Request-Method.
    • Access-Control-Allow-Headers : valore uguale a quello dell'intestazione Access-Control-Request-Headers.
  4. Il browser invia la richiesta effettiva, incluse le intestazioni seguenti:

    • Metodo HTTP (ad esempio, DELETE).
    • Origin: include l'origine dell'API Web.
    • Tutte le intestazioni incluse nell'intestazione della risposta Access-Control-Allow-Headers.
  5. Dopo la verifica, AD FS approva la richiesta includendo il dominio dell'API Web (origine) nell'intestazione della risposta Access-Control-Allow-Origin.

  6. L'inclusione dell'intestazione Access-Control-Allow-Origin consente al browser di chiamare l'API richiesta.

Personalizzazione di CORS

Per impostazione predefinita, la funzionalità CORS non è abilitata. Gli amministratori possono tuttavia abilitare la funzionalità tramite il cmdlet Set-AdfsResponseHeaders.

Set-AdfsResponseHeaders -EnableCORS $true

Dopo l'abilitazione, gli amministratori possono enumerare un elenco di origini attendibili usando lo stesso cmdlet. Ad esempio, il comando seguente consente le richieste CORS provenienti dalle origini https&#58;//example1.com e https&#58;//example1.com.

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

Nota

Gli amministratori possono consentire le richieste CORS da qualsiasi origine includendo "*" nell'elenco di origini attendibili, anche se questo approccio non è consigliato a causa di vulnerabilità di sicurezza e viene fornito un messaggio di avviso se viene scelta questa opzione.

Criteri di sicurezza del contenuto (CSP)

Questa intestazione della risposta di sicurezza HTTP viene usata per impedire scripting intersito, clickjacking e altri attacchi di inserimento dei dati impedendo ai browser di eseguire inavvertitamente contenuto dannoso. I browser che non supportano i criteri di sicurezza del contenuto ignorano le intestazioni di risposta CSP.

Personalizzazione dei criteri di sicurezza del contenuto (CSP)

La personalizzazione dell'intestazione CSP comporta la modifica dei criteri di sicurezza che definiscono le risorse che il browser è autorizzato a caricare per la pagina Web. I criteri di sicurezza predefiniti sono:

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

La direttiva default-src viene usata per modificare le direttive -src senza elencare in modo esplicito ogni direttiva. Ad esempio, nell'esempio seguente il criterio 1 è uguale al criterio 2.

Criterio 1

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

Criterio 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';"

Se una direttiva è elencata in modo esplicito, il valore specificato sostituisce il valore fornito per default-src. Nell'esempio seguente img-src accetta il valore come '*' (consentendo il caricamento delle immagini da qualsiasi origine) mentre altre direttive -src accettano il valore come "self" (limitandosi alla stessa origine della pagina Web).

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

Per i criteri default-src è possibile definire le origini seguenti:

  • 'self': se si specifica questa origine, si limita l'origine del contenuto da caricare solo all'origine della pagina Web.
  • 'unsafe-inline': se si specifica questa origine nei criteri, si consente l'uso di JavaScript e CSS inline.
  • 'unsafe-eval': se si specifica questa origine nei criteri, si consente l'uso di testo nei meccanismi JavaScript, ad esempio eval.
  • 'none': se si specifica questa origine, viene limitato il caricamento di contenuto da qualsiasi origine.
  • data: - se si specifica data, gli URI consentono agli autori di contenuti di incorporare file di piccole dimensioni inline nei documenti. Utilizzo non consigliato.

Nota

AD FS usa JavaScript nel processo di autenticazione e quindi abilita JavaScript includendo le origini "unsafe-inline" e "unsafe-eval" nei criteri predefiniti.

Custom headers

Oltre alle intestazioni della risposta di sicurezza elencate in precedenza (HSTS, CSP, X-Frame-Options, X-XSS-Protection e CORS), AD FS 2019 consente di impostare nuove intestazioni.

È ad esempio possibile impostare una nuova intestazione "TestHeader" e "TestHeaderValue" come valore.

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

Dopo l'impostazione, la nuova intestazione viene inviata nella risposta di AD FS, come illustrato nel frammento di Fiddler seguente:

Screenshot of Fiddler on the headers tab that highlights TestHeader: TestHeaderValue under Miscellaneous.

Compatibilità del Web browser

Usare la tabella e i collegamenti seguenti per determinare quali Web browser sono compatibili con ognuna delle intestazioni della risposta di sicurezza.

Intestazioni della risposta di sicurezza HTTP Compatibilità dei browser
HSTS (HTTP Strict-Transport-Security) Compatibilità del browser per HSTS
X-Frame-Options Compatibilità del browser per X-Frame-Options
X-XSS-Protection Compatibilità del browser per X-XSS-Protection
Condivisione risorse tra le origini (CORS) Compatibilità del browser per CORS
Criteri di sicurezza del contenuto (CSP) Compatibilità del browser per CSP

Avanti