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 di 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 di risposta di sicurezza HTTP, ad eccezione delle intestazioni CORS, usando i cmdlet: Get-AdfsResponseHeaders
e Set-AdfsResponseHeaders
è stata resa disponibile anche in AD FS 2016. È possibile aggiungere la funzionalità ad AD FS 2016 installando KB4493473 e KB4507459.
Questo articolo illustra le intestazioni di risposta di sicurezza di uso comune per illustrare 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 necessità che gli amministratori debbano personalizzare le intestazioni di sicurezza.
- Un amministratore ha abilitato HTTP Strict-Transport-Security (HSTS) per proteggere gli utenti che potrebbero accedere all'app web utilizzando HTTP da una connessione Wi-Fi pubblica che potrebbe essere compromessa. HSTS forza tutte le connessioni tramite la crittografia HTTPS. Vogliono rafforzare ulteriormente la sicurezza abilitando HSTS per i sottodomini.
- Un amministratore ha configurato l'intestazione di risposta X-Frame-Options per proteggere le pagine web dall'essere soggette a clickjacking. 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 di cross scripting. X-XSS-Protection impedisce attacchi di cross scripting. Tuttavia, è necessario personalizzare l'intestazione per consentire al caricamento della pagina dopo la purificazione.
- Un amministratore deve abilitare Condivisione delle Risorse tra Origini Diverse (CORS)e deve impostare l'origine (dominio) in AD FS per consentire a un'applicazione a pagina unica di accedere a un'API web con un altro dominio.
- Un amministratore ha abilitato l'intestazione criteri di sicurezza del contenuto per prevenire attacchi di cross-site scripting e attacchi di iniezione di dati non consentendo richieste tra domini. Tuttavia, a causa di un nuovo requisito aziendale, è necessario personalizzare l'intestazione per consentire alla pagina Web di caricare immagini da qualsiasi origine e limitare i supporti a provider attendibili.
Intestazioni della risposta di sicurezza HTTP
AD FS include le intestazioni di 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.
L'attributo ResponseHeaders nello screenshot identifica le intestazioni di sicurezza incluse da AD FS in ogni risposta HTTP. AD FS invia le intestazioni di 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. Tuttavia, questa impostazione non è consigliata. È possibile impostare ResponseHeaders su False
con il comando seguente:
Set-AdfsResponseHeaders -EnableResponseHeaders $false
HTTP Strict-Transport-Security (HSTS)
HTTP Strict-Transport-Security (HSTS) è un meccanismo di criteri di sicurezza Web che consente di attenuare gli attacchi di downgrade del protocollo e il hijacking dei cookie per i servizi con endpoint HTTP e HTTPS. Consente ai server Web di dichiarare che i Web browser o altri agenti utente conformi devono interagire solo con esso usando HTTPS e mai tramite il protocollo HTTP.
Tutti gli endpoint AD FS per il traffico di autenticazione Web vengono aperti esclusivamente tramite HTTPS. Di conseguenza, AD FS riduce efficacemente le minacce fornite dal meccanismo dei criteri di sicurezza del trasporto HTTP Strict. Per impostazione predefinita, non c'è un declassamento a HTTP perché non ci sono listener in HTTP. L'intestazione può essere personalizzata impostando i parametri seguenti:
- max-age=<tempo di scadenza>. L'ora di 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. Questo parametro è facoltativo. Se specificato, la regola HSTS si applica anche a tutti i sottodomini.
Personalizzazione HSTS
Per impostazione predefinita, l'intestazione è abilitata e max-age
è impostata su un anno; Tuttavia, gli amministratori possono modificare il max-age
(la riduzione del valore di validità massima 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; Tuttavia, gli amministratori possono rimuovere l'intestazione tramite il cmdlet Set-AdfsResponseHeaders
.
Set-AdfsResponseHeaders -RemoveHeaders "Strict-Transport-Security"
X-Frame-Options
AD FS per impostazione predefinita non consente alle applicazioni esterne di usare iFrame quando si esegue l'accesso interattivo. Questa configurazione impedisce determinati stili di attacchi di phishing. L'accesso non interattivo può essere eseguito tramite iFrame a causa della sicurezza a livello di sessione precedente stabilita.
Tuttavia, in alcuni rari casi è possibile considerare attendibile un'applicazione specifica che richiede una pagina di accesso interattiva ad AD FS 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ò visualizzare una pagina in un frame <o iframe>/<>. L'intestazione può essere impostata su uno dei valori seguenti:
- negare. La pagina in una cornice 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 tutti i predecessori non si trovino anche nella stessa origine.
-
consentire-da <l'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; Tuttavia, gli amministratori possono 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; Tuttavia, gli amministratori possono 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 XSS (inserimento di codice dannoso tra siti). Questo approccio viene definito filtro XSS. L'intestazione può essere impostata su uno dei valori seguenti:
- 0 disabilita il filtro XSS. Non consigliato.
- 1 abilita il filtro XSS. Se viene rilevato un attacco XSS, il browser sanifica la pagina.
- 1; mode=block abilita il filtro XSS. Se viene rilevato un attacco XSS, il browser impedisce il rendering della pagina. Questa impostazione è l'impostazione predefinita e consigliata.
Personalizzazione di X-XSS-Protection
Per impostazione predefinita, l'intestazione è impostata su 1; mode=block;. Tuttavia, gli amministratori possono 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; Tuttavia, gli amministratori possono rimuovere l'intestazione tramite il cmdlet Set-AdfsResponseHeaders
.
Set-AdfsResponseHeaders -RemoveHeaders "X-XSS-Protection"
Intestazioni per la condivisione delle risorse tra origine diverse (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. Tuttavia, potrebbe essere necessario accedere alle risorse in altre origini (domini). Cross Origin Resource Sharing (CORS) è uno standard W3C che consente a un server di rilassare la politica della stessa origine. Usando CORS, un server può consentire in modo esplicito alcune richieste cross-origin mentre 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 SPA che API sono configurate in AD FS 2019 e AD FS ha CORS abilitato. 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 sezione Personalizzazione CORS. Il flusso di esempio seguente illustra lo scenario:
Un utente accede a SPA tramite il browser client e viene reindirizzato all'endpoint di autenticazione di AD FS per l'autenticazione. Poiché spa è configurato per il flusso di concessione implicita, la richiesta restituisce un token Access + ID al browser dopo l'autenticazione riuscita.
Dopo l'autenticazione dell'utente, il JavaScript del 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:
- Opzioni: 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. Tuttavia, la presenza di un'intestazione di origine segnala che la richiesta in ingresso è correlata a CORS.
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 origini attendibili, vedere Personalizzazione 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 all'intestazione Access-Control-Request-Method.
- Access-Control-Allow-Headers - valore uguale all'intestazione Access-Control-Request-Headers.
Il browser invia la richiesta effettiva, incluse le intestazioni seguenti:
- Metodo HTTP (ad esempio, DELETE).
- Origine: include l'origine dell'API Web.
- Tutte le intestazioni incluse nell'intestazione di risposta Access-Control-Allow-Headers.
Dopo la verifica, AD FS approva la richiesta includendo il dominio API Web (origine) nell'intestazione della risposta Access-Control-Allow-Origin.
L'inclusione dell'intestazione Access-Control-Allow-Origin consente al browser di chiamare l'API richiesta.
Personalizzazione CORS
Per impostazione predefinita, la funzionalità CORS non è abilitata; Tuttavia, gli amministratori possono 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 dalle origini https://example1.com
e https://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 scelgono di.
Criteri di sicurezza del contenuto (CSP)
Questa intestazione di risposta di sicurezza HTTP viene usata per impedire il cross-site scripting, il clickjacking e altri attacchi di iniezione dei dati impedendo ai browser di eseguire inavvertitamente contenuto dannoso. I browser che non supportano la Content Security Policy (CSP) ignorano le intestazioni di risposta CSP.
Personalizzazione 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 a quello del criterio 2.
Politica 1
Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'"
Politica 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 specificato per default-src. Nell'esempio seguente, img-src accetta il valore "*" (consentendo il caricamento delle immagini da qualsiasi origine) mentre altre direttive -src accettano il valore "self" (limitandosi alla stessa origine della pagina Web).
Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'; img-src *"
È possibile definire le seguenti origini per la politica default-src:
- 'self' - specificando questa origine, il caricamento del contenuto è limitato all'origine della pagina web.
- 'unsafe-inline': specificando questa origine nei criteri è possibile usare JavaScript e CSS inline.
- 'unsafe-eval': specificando questa origine nei criteri è possibile usare il testo nei meccanismi JavaScript, ad esempio eval.
- 'none': specificando questa origine, impedisce il caricamento di contenuti da qualsiasi origine.
- dati: - specificando i dati: 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" nella politica predefinita.
Intestazioni personalizzate
Oltre alle intestazioni di 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 la configurazione, la nuova intestazione viene inviata nella risposta AD FS, come illustrato nel frammento di Fiddler seguente.
Compatibilità del Web browser
Usare la tabella e i collegamenti seguenti per determinare quali Web browser sono compatibili con ognuna delle intestazioni di risposta di sicurezza.
Intestazioni della risposta di sicurezza HTTP | Compatibilità dei browser |
---|---|
HTTP Strict-Transport-Security (HSTS) | compatibilità del browser HSTS |
X-Frame-Options | X-Frame-Options compatibilità del browser |
X-XSS-Protection | X- compatibilità del browserXSS-Protection |
Condivisione di risorse tra le origini (CORS) | compatibilità del browser CORS |
Criteri di sicurezza del contenuto (CSP) | compatibilità del browser CSP |