Categorie
security wordpress

WordPress Hardening – Light Version

In occasione dello scorso Meetup ho preparato un talk sulla sicurezza.

Si tratta di un versione “light” adatta anche a chi non vuole mettere le mani nel codice…

Qui trovate le slide.

Categorie
security wordpress

WordPress: preparare trappole per i furbetti

Se dopo esserti protetto dai tanti attacchi bruteforce continui a vedere nei log errori 404 a percorsi non convenzionali (es. phpmyadmin, phpinfo, test, cgi, register, admin, system, ecc…) è possibile che qualche BOT automatico stia facendo una scansione cercando potenziali falle.

Una delle possibili soluzioni è l’implementazione di una semplice blackhole in php. In pratica si tratta di una trappola che scatta ogni volta che si tenta di visitare alcune url.

Via .htaccess si effettua il redirect verso un specifico file php che si occupa tracciare l’ip e quante più informazioni possibili presentando poi una pagina in cui lo si informa che la cosa non ci è piaciuta.

Per chiudere il giro, ad ogni acesso controlleremo che l’IP non sia uno dei quelli precedentemente tracciatati e nel caso gli diremo che il suo IP è stato bloccato:

“You have been banned from this domain”

 

Per completezza devo dire che questa tecnica presenta dei problemi di perfomace nel caso, con il tempo, il numero di IP da controllare dovesse diventare molto grosso in quanto richiedere la lettura di una file ed il confronto di una stringa per ogni pageview.

Al momento l’unica alternativa che conosco è fail2ban ma non sempre è possibile chiedere al proprio servizio di hosting la sua implementazione.

Ecco come procedere:

  1. Scarichiamo dal sito di Perishable Press il file Blackhole.zip e scompattiamo in una directory nella root del nostro sito e modifichiamo le variabili che troviamo dentro index.php (mittente, destinatario,soggetto)
  2. Aggiungiamo le regole al nostro .htaccess per intercettare le url “maliziose”
  3. Facciamo in modo di caricare il file blackhole.php dentro il nostro fuctions.php

Se abbiamo fatto tutto bene, tentando di accedere ad una di quelle URL, dovremmo trovarci davanti a quella bella pagina rossa che vedete qui in alto e il nostro IP dovrebbe essere stato aggiunto al file blackhole.dat. (ricordatevi che poi è da togliere)

Qui sotto due piccoli snippets che spero possano esservi d’aiuto:

Nota: io aggiungo al soggetto della mail che ricevo anche il SERVER_NAME in modo che sappia su che sito è stato tentato l’accesso: $_SERVER['SERVER_NAME']

 

Categorie
security wordpress

WordPress: Evitare “brute force” via .htaccess

Sempre più spesso dando un’occhiata ai log di sistema vedo attacchi “brute force” sulle pagina di login standard (wp-login.php) di WordPress.
Su alcuni sito sono arrivato ad avere centinaia di tentativi al giorno ma fortunatamente avendo password alfanumeriche da 12 caratteri e non usando l’utente “admin” di default non mi sono mai preoccupato più di tanto.

 

Nel tempo però mi sono reso conto di due grossi problemi problemi:

  1. Banda e sovraccarico del server: in questo caso e stato semplice intervenire e plugin come Simple Login Lockdown hanno reso la cosa molto semplice. In pratica dopo un numero configurabile di tentativi falliti, per un periodo di tempo altrettanto configurabile, viene bloccato l’IP impedendo l’accesso alla pagina.
    Io lo avevo configurato in modo che dopo 3 tentativi venisse bannato per 4 ore.
  2. Utenti Utonti: Questo è stato il problema più grave. Dato che nella maggior parte dei casi non sono io l’utilizzatore del sito ma il mio lavoro termina creado le credenziali per gli utenti che andranno ad operare, succede che per alcuni una password alfanumerica sia troppo complicata. Ecco quindi che di loro iniziativa la modificano con delle robe tipo “la data di nascita del figlio” perchè così è più facile da ricordare. La soluzione a questa “esigenza imprescindibile” l’ho trovata modificando e nascondendo l’url della pagina di login.
    Inizialmente ho usato “hide login” e successivamente anche “better security” ma alla fine ho preferito preparare uno snippet (che trovatre qui sotto) da mettere manualmente nel file .htaccess evitando in questo modo che il plugin possa essere disattivato.

Se volte implementarlo nel nostra installazione vi lascio solo alcune avvertenze in quanto prima di usarlo vanno modificate alcune variabili che sono dipendenti dal vostra configurazione.

[key] = chiave di controllo per il login – es. “0agw7afK” (2 sostituzioni)
[custom-login-path] = nuovo url per la pagina di login – es. “custom-login” (2 sostituzioni)

Attenzione: Prima di metterlo in produzione vi consiglio di provarlo localmente e di fare un backup del vostro precedente .htaccess. (non mi assumo responsabilità).

Rimango comunque disponibile nel caso doveste avere problemi o vogliate segnalarmi come migliorarlo.


update: maggio 2015
ho aggionto il file riducendo il numero di variabili

Categorie
featured security tutorial

Controllo degli accessi su SSH

Questa mattina controllando i report di alcuni server relativi al traffico generato ho visto qualcosa di alquanto anomalo.

Il grafico che vedete rappresente l’attivita del protocollo ssh e come potete osservare dalle 4.30 alla 6.30 qualche simpatico amico a tentato un brute force.

Da una prima analisi non sembra essere successo nulla di grave in quanto dai log si può vedere un banale tentativo di dictionary attacks.

Sotto potete vedere una parte del log restituito da questo comando:

# cat /var/log/auth.log | grep ssh | grep “invalid user”

Nello stesso modo ho poi verificato gli accessi “autorizzati” e fortunatamente non ne risultano altri oltre a quelli fatti dal sottoscritto:

# cat /var/log/auth.log | grep ssh | grep Accepted

E’ anche vero che nel caso in cui il nostro hackers fosse riuscito ad accedere avrebbe potuto eliminare una parte dei log ma voglio pensare che avrebbe eliminato tutti i riferimenti al suo ip.

Anche se considero l’attacco fallito ho cercato in rete come evitare questo tipo di attacchi e come in tante altre occasioni la ricerca è durata meno di un minuto: Preventing SSH Dictionary Attacks With DenyHosts

DenyHosts è un tool di sicurezza scritto in Python per server SSH. È pensato per prevenire attacchi brute force verso server SSH monitorando i tentativi di login invalidi nel log di autenticazione e bloccando gli indirizzi IP. (via wikipedia)

Dopo aver verificato se il pacchetto fosse già presente nei repository debian ho provveduto al solito:

# apt-get install denyhosts

Una veloce occhiata al file di configurazione per modificare la mail a cui inviare gli avvisi sui nuovi hosts bloccati ed un controllo lo script fosse in funzione come servizio sono al momento sufficenti per <s>farmi dormire tranquillo</s> rimandare di 24 ore le prossime analisi.