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:

default_webcheck

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:

  1. Modifica dei paremetri ServerSignature e ServerTokens in httpd.conf
  2. Modifica parametro expose_php in php.ini
  3. Installazione modulo mod_security
  4. Personalizzazione messaggi errore 404 e 403
    1. 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.
    1. 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

Concluse le modifiche applicabili ai file di configurazione, eseguiamo di nuovo il test Web Server Information e controlliamo i risultati:

default_webcheck_2

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

    1. 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:
    1. rpm -i http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    2. 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

Eseguiamo per l’ultima volta il test Web Server Information…rullo di tamburi e…

default_webcheck_3

Bene, abbiamo raggiunto lo scopo.
Rubo soltanto un altro minuto per una mia considerazione personale, ovvero il punto n°4

    1. 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:

    Pagina 404 Apache
    apacheee_404_default

    Pagina 404 nginx
    404_Not_Found_nginxxx

    Pagina 404 lighttpd
    404_lighttpd

    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 .

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