Aller au contenu

length-hiding: Module de Filtrage de Masquage de Longueur NGINX

Installation

Vous pouvez installer ce module dans toute distribution basée sur RHEL, y compris, mais sans s'y limiter :

  • RedHat Enterprise Linux 7, 8, 9 et 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 et Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-length-hiding
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-length-hiding

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_length_hiding_filter_module.so;

Ce document décrit nginx-module-length-hiding v1.1.1 publié le 19 juillet 2017.


Module de Filtrage de Masquage de Longueur NGINX

Introduction

Dans le site BREACH, les mesures d'atténuation contre l'attaque BREACH sont données comme suit :

  1. Désactiver la compression HTTP
  2. Séparer les secrets des entrées utilisateur
  3. Randomiser les secrets par requête
  4. Masquer les secrets (en randomisant efficacement en XORant avec un secret aléatoire par requête)
  5. Protéger les pages vulnérables avec CSRF
  6. Masquage de longueur (en ajoutant un nombre aléatoire d'octets aux réponses)
  7. Limiter le taux des requêtes

BREACH repose sur la compression HTTP et il est raisonnable de la désactiver pour sécuriser votre site web. Cependant, sans compression, certains sites web peuvent subir une dégradation sévère des performances ou le coût peut augmenter si vous êtes facturé en fonction du volume de trafic comme AWS. Dans ce cas, il peut être difficile de désactiver la compression HTML pour l'ensemble des réponses de votre site web et il est nécessaire d'adopter d'autres méthodes appropriées.

Les autres mesures d'atténuation énumérées du 2ème au 5ème ci-dessus sont essentiellement applicables à votre application, mais la 6ème, le masquage de longueur, peut être réalisée sur nginx. Ce module de filtrage fournit une fonctionnalité pour ajouter un commentaire HTML généré aléatoirement à la fin du corps de la réponse afin de masquer la longueur de la réponse correcte et de rendre difficile pour les attaquants de deviner le jeton sécurisé.

L'exemple de commentaire HTML aléatoirement ajouté est ici.

<!-- random-length HTML comment: JnSLGWeWYWsoJ4dXS3ubLw3YOu3zfGTotlzx7UJUo26xuXICQ2cbpVy1Dprgv8Icj6QfOZx2Ptp9HxCVoevTxhKzMzV6xeYXao0oCngRWJRb4Tvive1iBAXLzrHlLg6jKwNKXrct0tJuA2TvWIRVIng6UoffIbCQLPbi63PwmWemOxVi6m3CPa6hCbAK2CaBR1jLux7UJa4WNN4H0yIDMElMglWWouY5m5FUqAn0afMmtErj0zkA2LMWxisZRES38XLoYycySmaBrIih5IixUsJFR0ei4uZ0IifgV5SnitoNzMusSQem9npObHuU2HKApneAjwnFdPSQZA9sRdSOE8agDI05P832mV1JIcOjsg0FgzxvSG7UEX0HdqBqp2jPOYYW0k5gGtmkiXWydRJfn9lGomxReUeqq2Aec69gplEM6a8aqH5TFgXrGK8jcaPISQlsKkMxJQ7Fp6fVDbmI59xCIvlk -->
Pour chaque réponse, la longueur des chaînes aléatoires variera dans une plage donnée.

Cette idée vient à l'origine de breach-mitigation-rails. Merci à l'équipe !

Avertissement

Comme indiqué dans breach-migration-rails, BREACH est une attaque complexe et étendue et ce module ne fournit qu'une protection PARTIELLE. Pour sécuriser complètement votre site web ou service, vous devez examiner le document sur BREACH et trouver la méthode appropriée selon votre propre site web ou service.

Directives de Configuration

length_hiding

  • syntaxe : length_hiding on | off
  • par défaut : off
  • contexte : http, serveur, location, if dans location

Active ou désactive l'ajout de commentaires HTML générés aléatoirement.

length_hiding_max

  • syntaxe : length_hiding_max size
  • par défaut : 2048
  • contexte : http, serveur, location

Définit la longueur maximale de la chaîne générée aléatoirement utilisée dans le commentaire HTML. La taille doit être comprise entre 256 et 2048.

Exemple de Configuration

Activez ce module pour une location spécifique ('/hiding'). Dans cet exemple, la longueur des chaînes aléatoires sera inférieure à 1024.

server {
    listen       443 default_server deferred ssl spdy;
    server_name  example.com;
    length_hiding_max 1024;

    location /hiding {
        length_hiding on;
    }
}

Si ce module est construit en tant que module dynamique, n'oubliez pas d'inclure la ligne load_module dans la configuration nginx.

load_module modules/ngx_http_length_hiding_filter_module.so;

Services utilisant ce module

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-length-hiding.