“Sparare per la pace è come trombare per la verginità”
Icona RSS Icona home
  • Server Jessie Apache2 2.4 Hardening (libapache2-mod-security2)

    Pubblicato il giugno 6th, 2015 Erode Nessun commento

    Proprio la settimana scorsa stavo pistolando con il server, il caldo era alle porte così prima di fare la sauna mi sono lanciato nell’aggiornamento verso la nuova stable , il grande passo quando non si possono interrompere dei servizi per molto tempo.

    Wheezy ---> Jessie

    Sulla macchina ho un Raid1 così prima di lanciarmi nell’avventura ho pensato di rimuovere un disco e tenerlo come backup,in caso di problemi lo rimontavo e tutto tornava come prima,  poi con un disco pulito che avevo pronto, ho risistemato con mdadm il Raid1.

    Dopo aver fatto rullare per bene la macchina con apt-get, tra le cose su cui ho dovuto più lavorare, c’è stato apache2 che passando dalla versione 2.2 alla 2.4 é cambiato  (in meglio ).

    Aggiusto qualche cosa quà e là e mi trovo libapache2-mod-security2 installato, ma se pur attivo non sembra fare il suo lavoro.

    Vediamo ora come fare alcuni test e attivare il modulo dormiente.

    jesus

    Partiamo ora nell’avventura

    Dai primi passi ho preferito tenere i miei file di configurazione perché avevano modifiche consistenti, e qui devo indagare meglio su cosa è stato messo di nuovo, così in fase di aggiornamento trovo subito qualche errore

    Setting up libapache2-mod-security2 (2.8.0-3) ...
    Installing new version of config file /etc/modsecurity/modsecurity.conf-recommended ...
    apache2_invoke: Enable module security2
    apache2_reload: Your configuration is broken. Not restarting Apache 2
    apache2_reload: apache2: Syntax error on line 185 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/spdy.load: Cannot load /u
    sr/lib/apache2/modules/mod_spdy.so into server: /usr/lib/apache2/modules/mod_spdy.so: undefined symbol: ap_log_cerror

    azz rimuoviamo il modulo mod-spdy (ottimizzato per apache 2.2) (https://code.google.com/p/mod-spdy/) e proseguiamo .

    [....] Restarting web server: apache2[Wed May 27 23:56:56.718733 2015] [core:warn] [pid 29388] AH00117: Ignoring deprecated use of DefaultType in line 159 of /etc/apache2/apache2.conf.
    AH02559: The SSLCertificateChainFile directive (/etc/apache2/conf.d/ssl.conf:4) is deprecated, SSLCertificateFile should be used instead
     failed!

    un problema di certificati per HTTPS, commentiamo la riga 4, #SSLCertificateChainFile ssl/root.crt ora non é più necessario e proseguiamo.

    [warn] The apache2 instance did not start within 20 seconds. Please read the log files to discover problems ... (warning).

    Qui c’è qualcosa di nuovo che mi son perso, infatti in /etc/apache2/apache2.conf occorre impostare come sotto :

    Mutex file:${APACHE_LOCK_DIR} default
    PidFile ${APACHE_PID_FILE}
    #LockFile /var/lock/apache2/accept.lock - disable this, old value
    #PidFile /var/run/apache2.pid

    proviamo a riavviare apache2

    #/etc/init.d/apache2 start

    se abbiamo qualche problema nell’ avviare (start/restart/reload) troviamo la lista dei processi

    #pidof /usr/sbin/apache2

    e uccidiamo

    #kill -9 pid segnalati

    Per finire sui server virtuali una nuova direttiva : https://httpd.apache.org/docs/2.4/upgrading.html

    * AllowOverride now defaults to None

    Con questo ho chiuso con gli errori nel log di apache2, mi resta qualche applicazione che avevo installato con qualche problema ad esempio mediawiki 1.16 da un’errore php e consegna le pagine bianche, ma avendo aggiornato tutto quel che riguarda il web (apache2, php e mysql) qualcosa non ha retto.

    Ne approfittiamo per fare pulizia di roba che si usava poco o solo provata.

    Partiamo ora con la parte della sicurezza e se libapache2-mod-security2 non è ancora installato andiamo a installarlo.

    NOTA : per jessie la nuova versione è libapache2-mod-security2, su wheezy cercate in backports altrimenti la vecchia versione è libapache2-modsecurity,

    #aptitude install libapache2-mod-security2

    per vedere se il modulo è caricato:

    # apachectl -M | grep --color security
     security2_module (shared)

     

    per la configurazione dobbiamo editare il file modsecurity.conf che potrebbe essere disattivato

    cd /etc/modsecurity
    mv modsecurity.conf-recommended modsecurity.conf
    nano /etc/modsecurity/modsecurity.conf

    cerchiamo questa riga

    SecRuleEngine DetectionOnly

    e cambiamo con

    SecRuleEngine On

    riavviare il servizio apache2

    per maggiori info anche se riferite alla vecchia versione del modulo potete leggere questo articolo : LINK

    ora troveremo anche un nuovo file di log

    # ls -l /var/log/apache2/modsec_audit.log
    -rw-r----- 1 root root 27196808 Jun  6 01:06 /var/log/apache2/modsec_audit.log

    Consiglio di inserire manualmene la rotazione del log

    nano /etc/logrotate.d/modsecurity
    /var/log/modsec_audit.log {
        rotate 1
        compress
        missingok
        notifempty
        sharedscripts
        postrotate
            /sbin/service httpd reload > /dev/null 2>/dev/null || true
        endscript
    }

    more info : modsecurity-logrotate-script

    Ora che il modulo è attivo per funzionare ha bisogno di regole così cominciamo a mettere qualche link

    #ln -s /usr/share/modsecurity-crs/modsecurity_crs_10_setup.conf /etc/modsecurity/modsecurity_crs_10_setup.conf

    Ora mettiamo le regole base_rules e come optional per i paranoici optional_rules

    #cd /usr/share/modsecurity-crs/base_rules
    #for f in * ; do ln -s /usr/share/modsecurity-crs/base_rules/$f /etc/modsecurity/$f ; done
    #cd /usr/share/modsecurity-crs/optional_rules
    #for f in * ; do ln -s /usr/share/modsecurity-crs/optional_rules/$f /etc/modsecurity/$f ; done

    per rendere effettive le modifiche è necessario riavviare il servizio

    #service apache2 restart

    volendo fare un test possiamo andare sul nostro server e :

    http://www.example.com/?test=MY_UNIQUE_TEST_STRING

    la risposta dovrebbe essere : 503 “Service Temporarily Unavailable” 

    more info : LINK

    Facendo un po di prove ho trovato che usando le mie applicazioni avevo qualche problema, modsecurity bloccava troppo !!!

    Parto dalla consultazione dei log mentre provo ad accedere ai miei servizi

    #tail -f /var/log/apache2/modsec_audit.log

    il log parla chiaro e mi indica la regola e la riga esatta in modo che la posso disabilitare commentandola (#) e dopo ogni modifica ricarichiamo il servizio

    #service apache2 reload

    Volendo fare alcune prove possiamo usare nikto, basta scaricare e scompattare l’archivio ed infine eseguire :

    $ perl nikto.pl 
    - Nikto v2.1.5
    ---------------------------------------------------------------------------
    + ERROR: No host specified
    
           -config+            Use this config file
           -Display+           Turn on/off display outputs
           -dbcheck            check database and other key files for syntax errors
           -Format+            save file (-o) format
           -Help               Extended help information
           -host+              target host
           -id+                Host authentication to use, format is id:pass or id:pass:realm
           -list-plugins       List all available plugins
           -output+            Write output to this file
           -nossl              Disables using SSL
           -no404              Disables 404 checks
           -Plugins+           List of plugins to run (default: ALL)
           -port+              Port to use (default 80)
           -root+              Prepend root value to all requests, format is /directory 
           -ssl                Force ssl mode on port
           -Tuning+            Scan tuning
           -timeout+           Timeout for requests (default 10 seconds)
           -update             Update databases and plugins from CIRT.net
           -Version            Print plugin and database versions
           -vhost+             Virtual host (for Host header)
                    + requires a value
    
            Note: This is the short help output. Use -H for full help text.

    mettiamo i dati interessanti come ad esempio

    $perl nikto.pl -host xxx.xxx.xxx.xxx -port 443 -output puppa.txt
    - Nikto v2.1.5
    ---------------------------------------------------------------------------
    + Target IP:          xxx.xxx.xxx.xxx
    + Target Hostname:    host***-***-*******.***-***-b.*******.*********.it
    + Target Port:        443
    + Start Time:         2015-06-05 23:01:06 (GMT2)
    ---------------------------------------------------------------------------
    + Server: Apache
    + The anti-clickjacking X-Frame-Options header is not present.
    + No CGI Directories found (use '-C all' to force check all possible dirs)
    + 6544 items checked: 13 error(s) and 1 item(s) reported on remote host
    + End Time:           2015-06-05 23:24:39 (GMT2) (1413 seconds)
    ---------------------------------------------------------------------------
    + 1 host(s) tested

     

    su una macchina dove non è abilitato the sound is different

    - Nikto v2.1.5
    ---------------------------------------------------------------------------
    + Target IP: xxx.xxx.xxx.xxx
    + Target Hostname: host***-***-****.***-***-b.******.********.it
    + Target Port: 443
    ---------------------------------------------------------------------------
    + SSL Info: Subject: /CN=*******.****
     Ciphers: ECDHE-RSA-AES256-GCM-SHA384
     Issuer: /O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
    + Start Time: 2015-06-06 10:43:23 (GMT2)
    ---------------------------------------------------------------------------
    + Server: Apache
    + Retrieved x-powered-by header: PHP/5.4.39-0+deb7u2
    + The anti-clickjacking X-Frame-Options header is not present.
    + Cookie PHPSESSID created without the secure flag
    + Cookie PHPSESSID created without the httponly flag
    + OSVDB-3268: /cgi-bin/: Directory indexing found.
    + Server leaks inodes via ETags, header found with file /favicon.ico, inode: 3235957, size: 1968, mtime: 0x3ee45eb6bda00
    + DEBUG HTTP verb may show server debugging information. See http://msdn.microsoft.com/en-us/library/e8z01xdh%28VS.80%29.aspx for details.
    + Cookie p7token created without the secure flag
    + Cookie TenantHash created without the secure flag
    + Cookie TenantHash created without the httponly flag
    + /index.php/\"><script><script>alert(document.cookie)</script><: eZ publish v3 and prior allow Cross Site Scripting (XSS). 
    + OSVDB-682: /webalizer/: Webalizer may be installed. Versions lower than 2.01-09 vulnerable to Cross Site Scripting (XSS).
    + OSVDB-12184: /index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings.
    + OSVDB-3268: /img/: Directory indexing found.
    + OSVDB-3092: /img/: This might be interesting...
    + Uncommon header 'x-frame-options' found, with contents: DENY
    + Uncommon header 'x-ob_mode' found, with contents: 1
    + Uncommon header 'x-content-security-policy' found, with contents: default-src 'self' ;options inline-script eval-script;img-src 'self' data: ;
    + Uncommon header 'content-security-policy' found, with contents: default-src 'self' ;script-src 'self' 'unsafe-inline' 'unsafe-eval' ;style-src 'self' 'un
    safe-inline' ;img-src 'self' data: ;
    + Uncommon header 'x-webkit-csp' found, with contents: default-src 'self' ;script-src 'self' 'unsafe-inline' 'unsafe-eval';style-src 'self' 'unsafe-inline
    ' ;img-src 'self' data: ;
    + Cookie phpMyAdmin created without the httponly flag
    + OSVDB-3268: /temp/: Directory indexing found.
    + OSVDB-3092: /temp/: This might be interesting...
    + OSVDB-3092: /cgi-bin/: This might be interesting... possibly a system shell found.
    + OSVDB-3093: /.bash_history: A user's home directory may be set to the web root, the shell history was retrieved. This should not be accessible via the web.
    + OSVDB-3268: /icons/: Directory indexing found.
    + OSVDB-3233: /icons/README: Apache default file found.
    and more
    more
    more

    😉
    ora non resta che passare a nuove esperienze

    Lascia un commento

    *