Identificare la versione di un demone o di un applicativo è il primo passo che un cracker esegue prima di sferrare l’attacco.
Tengo a precisare che i vari test che andrò a mostrare sono stati effettuati su una CentOS 6 x86_64, ma con le dovute modifiche sono applicabili a qualsiasi distro Linux.
Vediamo quali informazioni di apache possiamo rilevare su una CentOS 6 con le impostazioni di default.
Come prima cosa andiamo su uno dei tantissimi siti che offrono un servizio online di Web Server Information.
Facendo una ricerca su google tra i primi possiamo trovare questo: http://browserspy.dk/webserver.php
Inseriamo l’url del server da controllare e consultiamo i risultati della ricerca:
Come si può notare è visibile sia la versione di Apache che quella di PHP.
Mi è stato chiesto di offuscare il più possibile queste informazioni e dopo varie ricerce (con relativi test) ho trovato almeno 4 metodi interessanti:
- Modifica dei paremetri ServerSignature e ServerTokens in httpd.conf
- Modifica parametro expose_php in php.ini
- Installazione modulo mod_security
- Personalizzazione messaggi errore 404 e 403
- ServerSignature e ServerTokens sono due opzioni che si trovano nel file di configurazione di apache.
ServerSignature è la firma che il server web Apache inserisce in fondo alle pagine d’errore insieme al nome del virtualhost,
quindi dovremo impostarla su Off.
ServerTokens è la direttiva che specifica in che modo deve essere visualizzata la versione di Apache all’interno dell’header, l’opzione meno “parlante” è Prod.
Per eseguire queste modifiche basta editare il file /etc/httpd/conf/httpd.conf , cercare le due opzioni e modificarle in questo
modo:ServerSignature Off
ServerTokens ProdChiudiamo il file e salviamo le modifiche.
- ServerSignature e ServerTokens sono due opzioni che si trovano nel file di configurazione di apache.
- Per nascondere la versione di PHP che stiamo utilizzando, basta editare il file /etc/php.ini e modificare l’opzione “expose_php = On” in “expose_php = Off”
A questo punto non ci resta che riavviare apache: service httpd restart
- Per nascondere la versione di PHP che stiamo utilizzando, basta editare il file /etc/php.ini e modificare l’opzione “expose_php = On” in “expose_php = Off”
Concluse le modifiche applicabili ai file di configurazione, eseguiamo di nuovo il test Web Server Information e controlliamo i risultati:
Sicuramente la situazone è migliorata ma ancora non abbiamo raggiunto il nostro scopo, si legge chiaramente che sul nostro server è presente il demone Apache. Per rimediare a questa mancanza passiamo al punto n°3
- Il modo migliore per offuscare la versione di Apache, è installare il modulo mod_security.
mod_security è un Web Application Firewall (Free) che opera a livello HTTP e si frappone tra le richieste del client browser e il server apache. Tra le sue mutlitudini di opzioni, c’è anche la possibilità di offuscare la richiesta header che fa riferimento ai ServerTokens di apache. Per qualsiasi info la pagina ufficiale è questa: http://www.modsecurity.org/
Il pacchetto mod_security per CentOS 6 lo possiamo trovare nel repository EPEL.Apriamo un terminale con utenza root e digitiamo:
- rpm -i http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
- yum install mod_security
Finita l’installazione, editiamo il file /etc/httpd/conf.d/mod_security.conf e aggiungiamo in fondo, prima dell’istruzione, la seguente riga:
SecServerSignature HTTP_Server
Chiudiamo il file e salviamo le modifiche.
Per far funzionare il tutto dovremo editare nuovamente il file /etc/httpd/conf/httpd.conf e modificare la direttiva“ServerTokens Prod” in “ServerTokens Full“.
Chiudiamo il file, salviamo le modifiche e riavviamo il servizio: service httpd restart
- Il modo migliore per offuscare la versione di Apache, è installare il modulo mod_security.
Eseguiamo per l’ultima volta il test Web Server Information…rullo di tamburi e…
Bene, abbiamo raggiunto lo scopo.
Rubo soltanto un altro minuto per una mia considerazione personale, ovvero il punto n°4
- A mio parere un’altra modifica importante da fare alla configurazione di apache è quella di sostituire le pagine di risposta 404, 402, 500, ecc.. di default con altre personalizzate.
Questo perchè dando un’occhiata alle pagine che forniscono i vari web server al momento dell’installazione, essendo sempre “formattate” allo stesso modo, è possibile capirne la provenienza (Nonostante l’offuscamento della versione).Inserisco tre immagini d’esempio che ho trovato facendo una ricerca su google:
Essendo sempre queste le pagine di default, il maleintenzionato potrebbe trarne informazioni e quindi vantaggio..
Ci sono vari modi di sostituire queste pagine su apache , potete trovare un articolo interessante QUI .- A mio parere un’altra modifica importante da fare alla configurazione di apache è quella di sostituire le pagine di risposta 404, 402, 500, ecc.. di default con altre personalizzate.
Chiudo e vi saluto scrivendo la configurazione della distro con cui ho fatto i test:
OS: CentOS 6.5
arch: x86_64
kernel: 2.6.32-431.1.2.0.1
apache: httpd-2.2.15-29
mod_security: 2.7.3-2
selinux: enforcing