In questo articolo mostreremo come nascondere alcune informazioni che vengono fornite a causa delle configurazioni base dei vari software normalmente utilizzati per un sito web. Queste informazioni possono essere enumerate da un possibile aggressore per attuare un attacco informatico.
Versione di bind
Se stiamo utilizzando bind come server autoritativo per i nostri domini, è possibile raccogliere le informazioni circa la versione del server ed il sistema operativo utilizzato con una semplice query come questa, dove serverdns è l’indirizzo del nostro server bind
1 2 3 4 5 6 |
$ dig @serverdns version.bind chaos txt ... ;; ANSWER SECTION: version.bind. 0 CH TXT "9.11.5-P4-5.1-Debian" ... |
Per nascondere questa informazione, editiamo il file di configurazione di bind contenente la sezione options inserendo la direttiva version
1 2 3 4 5 6 |
options { // Nascondo versione di Bind version "42"; } |
Fatto questo riavviamo bind
1 |
# systemctl restart bind9 |
Eseguiamo il test
1 2 3 4 5 6 |
$ dig @serverdns version.bind chaos txt ... ;; ANSWER SECTION: version.bind. 0 CH TXT "42" ... |
Versione di Apache
Nella configurazione base, apache inserisce informazioni sulla versione del server in calce a vari documenti e negli header http. Ci sono due direttive che permettono di includere queste informazioni:
- ServerSignature: Permette di inserire nel footer di vari documenti la versione di apache
- ServerTokens: Permette di inserire informazioni sul sistema operativo e sulla versione del server nel campo Server Response
Per rimuovere queste informazioni, basta editare il file di configurazione di apache inserendo queste due righe
1 2 3 |
# Nascondo informazioni su versione OS e Apache ServerTokens Prod ServerSignature Off |
Riavviamo apache
1 |
# systemctl restart apache2 |
Versione di PHP
La configurazione base di PHP inserisce il campo X-Powered-By nell’ Header server HTTP response contenente informzioni sulla versione di PHP installata sul server.
Il file di configurazione attualmente caricato lo possiamo scoprite invocando php
1 2 |
# php -i | grep "Loaded Configuration File" Loaded Configuration File => /etc/php/xxx/cli/php.ini |
Effettuiamo una copia di backup del file ini
1 |
# cp /etc/php/xxx/cli/php.ini /etc/php/xxx/cli/php.ini.bkp |
Ora editiamo il file ini, cerchiamo la direttiva expose_php e cambiamo On in Off
1 |
expose_php = Off |
Riavviamo apache
1 |
# systemctl restart apache2 |
Le informazioni nell’header relative al nostri sito web
1 2 3 4 5 6 7 |
# lynx -head -mime_header https://dominio HTTP/1.0 200 OK Date: Sun, 10 May 2020 13:43:46 GMT Server: Apache Cache-Control: max-age=0, no-cache Connection: close Content-Type: text/html; charset=UTF-8 |
Versione di Nginx
Nginx inserisce le informazioni sulla versione ad esempio nei documenti relativi alle pagine di errore. Per rimuovere tali informazioni, editiamo il file di configurazione, cerchiamo la direttiva server_tokens che sarà commentata e decommendiamola
1 2 3 4 5 |
http { server_tokens off; } |
Riavviamo il proxy
1 |
# systemctl restart nginx |