Réduction de l’empreinte du site

Nous allons vous montrer comment nous avons réduit l’empreinte du serveur. Par soucis de facilité, les exemples seront sur la version http du site, les éléments ont par la suite été transférés sur le site en https.

Config http sans réduire emprunte

server {
        listen 80;
       	server_name _;

        root /var/www/html/pageweb/ ; #Absolute path to where your hugo site is
        index index.html; # Hugo generates HTML

        location / {
          try_files $uri $uri/ =404;
       }  
        add_header Allow "GET, POST, PUT" always;
    
        if ( $request_method !~ ^(GET|POST|PUT)$ )
        {
          return 405;
        }
}

Lorsque l’ont test la page, sur la page d’erreur 404, nous pouvons voir que nous sommes sur un nginx de version 1.18.0, ce qui donne énormément d’indication à un potentiel attaquant, surtout si notre version n’est pas la dernière.

┌──(l01㉿L01)-[~]
└─$ curl http://192.168.3.2/test
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>

http en cachant emprunte numérique

Étape 1 : cacher la version

server {
        listen 80;
       	server_name _;

        root /var/www/html/pageweb/ ; #Absolute path to where your hugo site is
        index index.html; # Hugo generates HTML

        location / {
          try_files $uri $uri/ =404;
       }
        
        server_tokens off;
      
        add_header Allow "GET, POST, PUT" always;
    
        if ( $request_method !~ ^(GET|POST|PUT)$ )
        {
          return 405;
        }
}

Grâce à la ligne server_token off, nous voyons que maintenant, la version de nginx est caché


┌──(l01㉿L01)-[~]
└─$ curl http://192.168.3.2/test
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

┌──(l01㉿L01)-[~/DM4/nginx]
└─$ curl -I http://192.168.3.2/test                                      
HTTP/1.1 405 Not Allowed
Server: nginx
Date: Thu, 28 Apr 2022 10:33:02 GMT
Content-Type: text/html
Content-Length: 150
Connection: keep-alive
Allow: GET, POST, PUT

On peut voir que la version de nginx n’est plus précisé, ce qui rend légèrement plus difficile la recherche de faille. Cependant, nous pouvons toujours voir que le serveur est un nginx.

Cacher nginx

server {
        listen 80;
       	server_name _;

        root /var/www/html/pageweb/ ; #Absolute path to where your hugo site is
        index index.html; # Hugo generates HTML

        location / {
          try_files $uri $uri/ =404;
       }
           
        server_tokens off;	  
        more_clear_headers Server;
        add_header Allow "GET, POST, PUT" always;
    
        if ( $request_method !~ ^(GET|POST|PUT)$ )
        {
          return 405;
        }
}

On peut voir que dans le curl -I nous ne voyons plus le serveur que l’on utilise, cependant, nous pouvons toujours le voir sur la page erreur 404.

┌──(l01㉿L01)-[~/DM4/nginx]
└─$ curl  http://192.168.3.2/test
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

┌──(l01㉿L01)-[~/DM4/nginx]
└─$ curl -I http://192.168.3.2/test                                      
HTTP/1.1 405 Not Allowed
Date: Thu, 28 Apr 2022 10:35:41 GMT
Content-Type: text/html
Content-Length: 150
Connection: keep-alive
Allow: GET, POST, PUT

Une solution s’offre donc à nous, il faut créer notre propre page d’erreur. Nous générons quatre types d’erreurs, les erreurs 403, 404, 405 et 429.

Nous créons donc un fichier 44xx.html contenant le bon message d’erreur.

<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
</body>
</html>

Puis, dans le fichier de configuration, nous allons lui dire d’aller chercher les pages en question en cas d’erreur.

[...]

error_page 403 /403.html;
location = /403.html {
        root /var/www/html/pageweb/;
        internal;
}

error_page 404 /404.html;
location = /404.html {
        root /var/www/html/pageweb/;
        internal;
}

error_page 405 /405.html;
location = /405.html {
        root /var/www/html/pageweb/;
        internal;
}

error_page 429 /429.html;
location = /429.html {
        root /var/www/html/pageweb/;
        internal;
}
[...]

De cette façon, nous avons maintenant.

┌──(l01㉿L01)-[~/DM4/nginx]
└─$ curl -X PATCH  http://192.168.3.2                                          

<html>
<head><title>405 Not Allowed</title></head>
<body>
<center><h1>405 Not Allowed</h1></center>
</body>
</html>

┌──(l01㉿L01)-[~/DM4/nginx]
└─$ curl http://192.168.3.2/existepas 

<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
</body>
</html>

Le fait que l’on soit sur un nginx ainsi que sa version n’apparaît plus.