WordPress, access.log e gli attacchi hacker più comuni

Impossibile raggiungere il sito.

Errore nello stabilire una connessione al database.

Errore 500.

Quelli citati all’inizio sono solo alcuni degli errori che in questi giorni hanno afflitto il sito blu. Restart del server e cambio di configurazione non hanno in alcuno modo risolto il problema. Così, appena ho trovato un po’ di tempo libero, ho deciso di capire cosa c’era che non andava.

Cominciamo dalle conclusioni. Il sito blu gira su WordPress, una delle piattaforme più famose per quanto riguarda la gestione e messa online di un sito. Essendo un pacchetto ben conosciuto, in rete esistono diversi strumenti e stratagemmi per “hackerare” il suo funzionamento, mandando offline tutti i suoi contenuti. Questo, in poche parole, è quanto accaduto al sito blu. È stato sotto attacco per diverse settimane; nonostante la macchina su cui gira sia comunque abbastanza potente e dotata di diversi sistemi cache, gli attacchi mirati riuscivano a metterla offline, “uccidendo” tutti i processi principali.

Dopo diversi restart, ho deciso di andare in fondo alla faccenda, per capire a cosa fosse dovuto il continuo down del sito. Fortunatamente non è stato difficile, basta sapere da dove e da cosa partire.

Ok, è ora di iniziare sul serio!

access.log e error.log

Ogni sito WordPress gira su un server e solitamente ogni server genera dei log (file con diverse informazioni relative agli accessi ed agli errori riscontrati). Sia Apache che Nginx, nella configurazione predefinita, salvano tutti gli eventi in due file separati. Il primo è chiamato access.log ed è il file dove vengono archiviati tutti gli accessi da parte delle risorse esterne. Il secondo, invece, è error.log e si occupa di archiviare gli accessi e tutte le informazioni relative agli errori riscontrati sul server. I log sono una miniera d’oro per ogni buon amministratore; è possibile trovarvi informazioni capaci di dare una risposta alla maggior parte dei problemi.

access.log e error.log generalmente sono posizionati nella cartella /var/log/{server_name}/

Supponendo di voler vedere in diretta cosa accade sul vostro server apache, potete utilizzare durante la sessione ssh il comando:

tail -f /var/log/apache2/access.log

Proteggere wp-login.php

Il file wp-login.php ricopre un ruolo di fondamentale importanza per WordPress. Esso, infatti, permette di accedere alla bacheca di amministrazione. Inoltre, andando più nel tecnico, è uno dei file più comuni che usufruisce dell’accesso al database. Ogni volta che proviamo a loggarci, il database riceve una qualche richiesta.

Questo, ovviamente, può far gola ai malintenzionati. Basta avviare un bot che effettui automaticamente delle richieste al file /wp-login.php per mandare su di giri il processo del database. E non solo! Con delle tecniche di forza bruta si potrebbe arrivare a scoprire la password di accesso al pannello di amministrazione.

logs

Ecco, il primo problema riscontrato riguarda proprio il file wp-login.php. Dall’access.log del mio server, che utilizza varnish come proxy e cache

tail -f /var/log/varnish/access.log | grep 'wp-login'

si nota che gli accessi a tale risorsa erano dell’ordine di uno ogni qualche minuto (nessun problema dal punto di vista dell’efficienza) ma, comunque, rappresentavano un problema di sicurezza. Non utilizzavo alcun plugin per proteggere il sito da questo tipo di attacco e qualcuno ha ben pensato di sfruttare il deficit.

Esistono diverse soluzioni al problema. Le migliori sono tutte elencate nella documentazione ufficiale di WordPress. Per i più curiosi, ho adottato la soluzione descritta nel paragrafo “Password Protect wp-login.php“. Provate ad aprire l’indirizzo http://www.ilsitoblu.com/wp-login.php e vedete cosa accade 😉

Proteggere xmlrpc.php

Qui il problema era simile. xmlrpc.php è un altro file di WordPress visibile all’esterno, cosa che lo rende vulnerabile ad altri tipi di attacchi. Anche in questo caso, qualcuno ha ben pensato di venire a farci visita con una certa frequenza, riuscendo a scaldare il database in momenti specifici della giornata.

logs-xmlrpc

Il problema è noto e, come tale, trova diverse risoluzioni in rete. Io, ad esempio, ho reso il file xmlrpc.php inaccessibile alle risorse esterne, restituendo un bel 403 a chi ne faccia richiesta.

DDOS

Il sito blu si fa voler bene ed oltre agli stratagemmi citati in precedenza è risultato positivo agli attacchi DDOS. Da diversi IP, infatti, arrivava un’ingente quantità di richieste capaci di risucchiare tutte le risorse del server e metterlo offline. Per giungere a tale conclusione è necessario avere qualche conoscenza aggiuntiva dei sistemi unix e della command line.

Sempre grazie al file access.log è possibile ottenere gli indirizzi IP più attivi sul server. Ad esempio, per estrarre i 10 indirizzi IP con più ricorrenze sul server apache, basta scrivere:

cat /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail

ip-count

Con tale comando, come si evince dall’immagine, viene visualizzato a schermo il numero di occorrenze per indirizzo IP. Utilizzando questa tecnica, più qualche tailgrep / zgrep qua e là si riesce a risalire alla radice degli attacchi DDOS, ovvero agli indirizzi IP delle risorse che attaccano il server. A quel punto, è possibile bloccare il traffico proveniente da tali risorse attraverso l’utilizzo di iptables. Continuando sulla scia degli esempi, per bloccare il traffico esterno da un determinato indirizzo IP basta digitare:

iptables -A INPUT -s [indirizzo-IP] -j DROP

Per visualizzare la lista di tutti gli indirizzi bloccati:

iptables -L

Quanto descritto risulta una soluzione temporanea al problema. Infatti, è possibile monitorare personalmente gli accessi per qualche minuto/ora dopodiché, viene naturale voler automatizzare il processo in modo da bloccare automaticamente gli attacchi DDOS.

In rete esistono tanti strumenti per gestire e bloccare gli attacchi di tipo DDOS. Una delle soluzioni più interessanti che ho trovato e adottato è file2ban. Tale strumento è capace di rilevare automaticamente gli indirizzi IP dai quali vengono effettuati gli accessi più frequenti e bloccarli in caso di abusi.

Conclusioni

Tappando le falle descritte, sono riuscito a riportare il server ad un funzionamento stabile. Ora, oltre ad avere un buon sistema cache basato sulla combo Apache + PHP + MySQL + APC +  Varnish è molto meno vulnerabile agli attacchi da parte di agenti esterni malintenzionati. Non sarà ancora il top della sicurezza ma, di certo, fa il suo buon lavoro.

0 Shares:
Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Potrebbero Interessarti
wordpress
Leggi

CMS Open Source Awards: WordPress il migliore

Finalmente gli sforzi degli sviluppatori vengono premiati e Wordpress si aggiudica il primo posto ai CMS Open Source Awards. Il gestore di contenuti è stato giudicato come il migliore nell'ambito Open Source davanti a concorrenti quali Joomla e Drupal.E' la prima volta, in quattro anni, che Wordpress riesce ad aggiudicarsi questo risultato, ottenendo anche il secondo posizionamento nella categoria per il miglior Content management system sviluppato in PHP.