Présentation effectuée le samedi 9 mars 2019.
Sécurisation des sites par les headers http
Retours d'expériences
Pascal Leconte (pmleconte)
Les headers de sécurité HTTP ?
Message post-installation Joomla! 3.9.3
Depuis Joomla 3.9.3, Joomla est livré avec des durcissement de sécurité supplémentaires par défaut dans les fichiers htaccess.txt et web.config.txt. Ces durcissements désactivent la fonctionnalité de détection de type MIME dans les navigateurs Web. Le sniffing mène à des vecteurs d’attaque spécifiques, dans lesquels des scripts dans des formats de fichier normalement inoffensifs (images, par exemple) sont exécutés, ce qui conduit à des vulnérabilités de type Cross-Site-Scripting....
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
</IfModule>
Pourquoi cet intérêt soudain?
- De quoi s'agit-il ?
- HTTP headers ?
- HTTP Strict Transport Security (HSTS)
- Content-Security-Policy (CSP)
- Le plugin HttpHeaders
De quoi s'agit-il ?
- Sécurisation des données reçues par l'explorateur web des utilisateurs de vos sites.
- Empêcher des attaques Cross Site Scripting (XSS)
- CSP 1.0 depuis 2012
HTTP Headers ?
HTTP Request par explorateur WEB (Edge, Chrome, Firefox, Safari,...) : je veux accéder à votre site....
GET / HTTP/1.1
Host: conseilgouz.com
User-Agent: My Browser
HTTP Response par votre site WEB : Oui, j'écoute....
HTTP/1.1 200 OK
Date: Tue, 1 Apr 2014 19:58:49 GMT
Server: Apache
Content-Type: text/plain
===> le contenu de votre page
Des attaques XSS ?
- XSS : Cross-Site scripting
- scripts malfaisants inclus dans les pages web
- En 2017, XSS : major threat vector (source HackerOne )
- 2017 : Joomla! 3.7.1 & 3.7.3 : 2 failles XSS corrigées
- 2018 : Joomla! 3.8.8 : 1 faille corrigée
- Exemples d'utilisation des ces failles FortiNet 2017 et FortiNet 2018
- Joomla! Security Center : attention aux erreurs moderate et high
Les headers de sécurité
- Headers de sécurité simples
- Strict Transport Security (HSTS)
- Content Security Policy (CSP)
Les headers de sécurité simples
- X-Frame-options (SAME-ORIGIN)
- X-XSS-Protection (1;mode=block)
- X-Content-Type-Options (nosniff)
- Referrer-Policy (no-referrer-when-downgrade)
- headers supplémentaires (Feature-Policy, par ex.)
Le HSTS : HTTP Strict Transport Security
- Force le HTTPS pour tous les liens
- Bloque les attaques "homme du milieu"
- Interdit les "mixed contents"
- Possibilité d'enregistrer dans HSTS preload list : force utilisation HTTPS si enregistré
- Performance : pas de redirection HTTP vers HTTPS
- Commande "standard"
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content Security Policy (CSP)
- Protection contre les attaques XSS
- Contrôler les ressources chargées par vos pages dans l'explorateur
- Défini au niveau de votre serveur dans .htaccess , httpd.conf, via des \<meta>, par plugin
- CSP idéal : on bloque tout ce qui ne nous appartient pas :
Content-Security-Policy: default-src 'self'
Mise en oeuvre du CSP et du HSTS
- .htaccess/httpd.conf (serveur Apach)
- commandes meta
<meta http-equiv="Content-Security-Policy" content="default-src https:">
- Le plugin HTTPHeaders
Les directives CSP
- default-src
- style-src
- script-src
- font-src
- img-src
- media-src
- frame-src
Expressions CSP
doc. de Peter Freitag (2014)
Source Value | Meaning |
---|---|
* | Wildcard, allows all origins |
'self' | Allow same origin |
'none' | Don't allow any resources of this type to load |
domain.example.com | Allow a domain |
*.example.com | Allow all subdomains on a domain |
https://example.com | Scheme specific |
https: | Require https |
data: | Allow data uri schemes |
Exemple directives + expressions
Dans .htaccess
<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self';
style-src 'self' 'unsafe-inline' maxcdn.bootstrapcdn.com fonts.googleapis.com fonts.gstatic.com www.gstatic.com www.meteofrance.com ;
font-src 'self' 'unsafe-inline' fonts.googleapis.com fonts.gstatic.com maxcdn.bootstrapcdn.com ;
script-src 'self' 'unsafe-inline' ajax.googleapis.com www.google-analytics.com services.my-meteo.com www.google.com www.gstatic.com ajax.cloudflare.com;
img-src 'self' blob: www.google-analytics.com stats.g.doubleclick.net www.meteofrance.com s.yimg.com icons.wxug.com logs.xiti.com;
frame-src 'self' www.meteoblue.com www.infoclimat.fr services.my-meteo.com www.gstatic.com www.google.com"
Header set Referrer-Policy same-origin
Header set X-XSS-Protection "1; mode=block"
Header always append X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff
</IfModule>
Les contraintes du CSP
- vérifier vos extensions/modules/plugins/templates compatibles avec votre "Policy" ?
- à chaque mise à jour, vérifier qu'ils le sont toujours
- vérifier les erreurs dans la console
Les erreurs dans la console
Le plugin HTTPHeaders
- HttpHeaders par Tobias Zulauf (alias zone 24)
- inclus dans Joomla 4.0
- gère HSTS et CSP
- mais aussi
- X-Frame-options (SAMEORIGIN)
- X-XSS-Protection (1;mode=block)
- X-Content-Type-Options (nosniff)
- Referrer-Policy (no-referrer)
- Headers supplémentaires (Feature-Policy)
Avant activation du plugin
Après activation du plugin et ajout de quelques règles
Avantages du plugin
- indépendant du serveur (Apach/Nginx/IIS...)
- appliqué sur site ou admin ou les deux
- paramétrage par le plugin (pas besoin FTP)
- mode "Report only"
Limites du plugin
- Le plugin fait des "Set", pas des "Unset"
- Header unset X-Powered-By
- Header unset ETag
- FileEtag None
ETags : version de page pour éviter de recharger une page. Yahoo conseille de les désactiver pour des raisons de performance.
Les tips
- Se débarrasser de script 'unsafe-line' par 'sha256-...' (console donne les sha256 qui vous manquent)
- Google Analytics
- frame-src 'self' www.gstatic.com www.google.com
- script-src 'self' www.google-analytics.com www.gstatic.com
- img-src 'self' www.google-analytics.com stats.g.doubleclick.net
{up icon=check | prefix=fa fa-} Google Fonts
- style-src 'self' fonts.googleapis.com fonts.gstatic.com
- font-src 'self' fonts.googleapis.com fonts.gstatic.com
- script-src 'self' ajax.googleapis.com
{up icon=check | prefix=fa fa-} Google Captcha
- frame-src 'self' www.google.com
- img-src 'self' data:
{up icon=check | prefix=fa fa-} Youtube
- script-src 'self' www.youtube.com
- frame-src 'self' www.youtube.com
- Referrer-Policy no-referrer-when-downgrade
Tests
- Création d'un site de test sur joomla.com
- Installation de quelques extensions
- Installation du plugin HttpHeaders (version 1.0.5)
- Tests
Références
- Référence CSP : https://content-security-policy.com/
- La documentation Mozilla
- CSP Cheat Sheet
- Vérifier votre site : https://securityheaders.io/
- HSTS Preload
- Le plugin Joomla! HttpHeader
- AlsaCréations et le HTTPS
- Joomla! Security Center
- Discussions Plugin HttpHeader et HSTS