JoomlaDays 2019 : HTTPHeaders

1 1 1 1 1
Vote 5.00 (3 Votes)

Présentation effectuée le samedi 9 mars 2019.

Sécurisation des sites par les headers http

Retours d'expériences

Pascal Leconte (pmleconte)pmleconte.jpg

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

CSP_erreurs

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 CSP_F


Après activation du plugin et ajout de quelques règles

CSP_A1


CSP_A2


CSP_A3

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