Una panoramica sul mondo della Sicurezza Informatica, del Networking, della Virtualizzazione e non solo. Blog particolarmente indicato per i reparti IT che comunque alterna articoli scritti per specialisti con articoli formulati con linguaggio semplice e comprensibile a tutti.

Ogni articolo di questo blog è stato integralmente scritto dall'autore. Il contenuto è completamente originale e la riproduzione, anche parziale, è vietata salvo autorizzazione.

giovedì 27 giugno 2013

Blacklistare gli scanner applicativi che intervengono sui WebServer

Su ogni webserver pubblicato su internet, dal più piccolo al più gettonato, riceveremo costantemente scansioni alla ricerca di servizi aperti o vulnerabili.
Chiunque abbia mai prestato un minimo di attenzione ai log del proprio webserver, non potrà non aver notato richieste a phpmyadmin o a wp-login, anche se tali servizi in realtà non ci risultano nè esposti nè presenti.
Come da sempre è stato e come sarà (almeno fin quando ipv6 non entrerà a regime, rendendo le scansioni almeno un minimo più difficoltose per via dell'enorme quantità di indirizzi ip allocabili), la tendenza è quella di trovare server che espongano servizi vulnerabili per poi tentare una serie di preset di vulnerabilità note.

Una forma di prevenzione potrebbe essere quella di iniziare a leggere i log e blacklistare chi cerca palesemente servizi che in realtà non esponiamo. Banalmente tramite uno script in bash potremmo mandare in iptable l'ip sorgente (ammesso che questo sia davvero quello dell'attaccante) e magari anche geolocalizzarlo per farci un'idea generica della provenienza:

#!/bin/bash
SCANNER="FOCA\|DirBuster\|Morfeus strikes again"
SERVIZI="awstats.pl\|wrnnro1.html\|DirectDownload.jsp\|caspadmin\|php.exe\|how_to_login.html\wp-login.php\|w00tw00t.at\|phpmyadmin\|blog\|wordpress\|manager\|CFIDE\|admin\|horde\|vtigercrm\|pbx\|freepbx\|Cgi-Bin\|sqlweb\|sqladmin\|phppath\|PMA\|pma\|whois.raw\|sqlmanager\|.passwd\|typo3\|order\|phpMyAdmin\|websql\|phpmy-admin\|php-myadmin\|piranha\|xampp\|php-my-admin"
while true; do
   LINE=$( grep "$SCANNER\|$SERVIZI" /var/log/apache2/access_log | grep -v blacklistedip.log | tail -n 1 )
    if [ "$LINE" != "" ]; then 
        IP=$( echo $LINE | awk '{ print $1 }' );
        date +%c >>  blacklistedip.log;
        echo "IP Address: $IP" >>  blacklistedip.log;
        geoiplookup $IP >>  blacklistedip.log;
        iptables -A INPUT -s $IP -j DROP; 
    fi
sleep 30
done


Intendiamoci:
  1. questo semplice script ha come scopo ultimo quello di dare un'idea: leggere, prestare attenzione e parsare i log. Può essere certamente affinato, migliorato, scritto in linguaggi più efficienti e più veloci. Non è intenzione di questo articolo trattare la sintassi o l'efficienza dello script;
  2. geoip deve essere scaricato e mantenuto aggiornato con geoip fetch, altrimenti avremo informazioni poco attendibili; al tempo stesso vanno verificati anche i percorsi dei log e se apache è configurato per scrivere anche in error_log;
  3. è opportuno creare dei meccanismi di whitelist, magari anteponendo in iptables classi e ip trust, onde evitare di essere blacklistati per errore;
  4. i servizi e gli scanner vanno attentamente rivisti, se utilizziamo awstat, ad esempio, non sarà una buona idea blacklistarlo!
E' bene ricordare, inoltre, che
  1. Questo tipo di operazione è solo la punta di un iceberg, mettere in sicurezza un webserver è un'operazione ben più articolata. Blacklistare gli scanner parsando i log è un "sofismo" accessorio, non certo alternativo a delle canoniche e tradizionali regole di sicurezza informatica. Se si espone phpmyadmin senza la dovuta attenzione, dedicarsi a parsare i log è l'ultimo dei problemi che l'amministratore di rete si deve porre.
  2. Altri programmi fanno già questo tipo di analisi, come il noto scanlogd che, unito a fail2ban, potrebbe fornire un'alternativa più userfriendly del crearsi uno script ad hoc.



Discaimer: Ogni articolo di questo blog è stato integralmente scritto dall'autore. Il contenuto è completamente originale e la riproduzione è vietata salvo autorizzazione.