WordPress: come prevenire il Clickjacking (Aggiornato)

| |

Doverosa introduzione:

Il clickjacking (“rapimento del clic”) è una tecnica informatica fraudolenta. Durante una normale navigazione web, l’utente clicca con il puntatore del mouse su di un oggetto (ad esempio un link), ma in realtà il suo clic viene reindirizzato, a sua insaputa, su di un altro oggetto, che può portare alle più svariate conseguenze: dal semplice invio di spam, al download di un file, fino all’ordinare prodotti da siti di e-commerce.

Oltre al rapimento del clic, possono essere intercettati i tasti premuti, ad esempio quando si inserisce la password dell’email o del conto bancario. Entrambe queste possibilità (rapimento del clic o dei tasti premuti sulla tastiera) vengono eseguite senza la cognizione dell’utente.
it.wikipedia.org/wiki/Clickjacking

Tutto parte da una segnalazione che ho ricevuto riguardo un possibile attacco di UI Redressing, più specificatamente la possibilità di includere questo blog all’interno di un iframe ospitato altrove (su un server / dominio differente) all’interno del quale iniettare volendo del codice malevolo, una pratica che è diventata comune ed è stata sfruttata in passato per siti web ben più importanti di questo modesto blog.

Nonostante ciò ho voluto investire un po’ di tempo per capire come fosse possibile evitare l’azione e mettere un po’ più in sicurezza questa installazione di WordPress. Esistono metodi, plugin e alternative delle più svariate, ho cercato di raccogliere quanti più riferimenti possibili in chiusura articolo (consulta “fonti” al termine dell’articolo). Per farla semplice potresti pensare di installare, attivare e configurare WP Anti-Clickjack che è disponibile nel repository ufficiale di WordPress.org:

WP Anti-Clickjack
WP Anti-Clickjack
Developer: Andy Feliciotti
Price: Free

Io però ho scelto un’alternativa: stavo per percorrere quella della modifica del functions.php del tema ma ho scoperto che Redirection, plugin che adoro e che utilizzo da tempo ormai immemore, consente di andare a modificare gli header che WordPress trasmette in fase di navigazione del sito web.

Tutto merito dell’articolo creativemotions.it/aggiungere-intestazioni-di-sicurezza-http-in-wordpress che ho parzialmente adottato regolando il funzionamento di questa installazione. Nello specifico, spostandomi nelle impostazioni del plugin e quindi in Site, in fondo alla pagina c’è il blocco HTTP Headers all’interno del quale è possibile pre-caricare delle configurazioni suggerite da Redirection (Add Security Presets e Add CORS Presets):

WordPress: come prevenire il Clickjacking

Andrà poi ripulito delle opzioni “non necessarie” (anche se in realtà lo sono potenzialmente tutte se le si va singolarmente ad approfondire utilizzando la documentazione del plugin e MDN Mozilla) per rimanere così con quelle che interessano la specifica segnalazione:

WordPress: come prevenire il Clickjacking 1

  • Location: Site
    Header: X-Frame-Options → sameorigin
  • Location: Site
    Header: X-XSS-Protection 1; mode=block

Un clic sul pulsante “Update” concluderà l’intervento. Il tuo WordPress risponde ancora correttamente, è visitabile e funziona esattamente come prima? Ottimo, potrai procedere con il prossimo paragrafo.

Attenzione

In caso di problemi o configurazione errata salvata in Redirection (che rende magari instabile o inaccessibile il tuo WordPress) potrai sempre fare riferimento a questo articolo che ti suggerisce come disabilitare temporaneamente il comportamento del plugin (senza disattivarlo per intero, magari rinominando la sua cartella via FTP): redirection.me/support/disable-redirection.

In breve: crea un file di testo chiamato redirection-disable.txt e salvalo nella cartella del plugin (wp-content/plugins/redirection), in alternativa modifica il tuo file wp-config.php e aggiungi questa istruzione nel blocco dei vari define:

define( 'REDIRECTION_DISABLE', true );

Una modifica andata a buon fine

Potrai verificare ora che il sito web sia protetto da Clickjacking utilizzando lo strumento messo a disposizione all’indirizzo clickjacker.io. Inserisci l’URL della tua installazione WordPress per verificare che questa sia protetta dal possibile attacco.

WordPress: come prevenire il Clickjacking 2

Ho volutamente segnalato con la prima freccia che uno dei controlli non è andato a buon fine (seppur la seconda freccia in immagine indichi che il sito web è comunque protetto già da Clickjacking) perché in realtà puoi ancora affinare la configurazione e prevedere un ulteriore header che rispetti lo standard dettato e descritto nel documento MDN di Mozilla. Puoi infatti tornare alla configurazione di Redirection e aggiungere un ulteriore header:

WordPress: come prevenire il Clickjacking 3

  • Location: Site
    Header: Content-Security-Policy  frame-ancestors ‘self’;

Ottenendo così luce verde totale secondo lo strumento di self-test (al quale basterà un colpo di refresh pagina per scatenare un nuovo controllo):

WordPress: come prevenire il Clickjacking 4

L’alternativa .htaccess

.htaccess è un formato di file di configurazione utilizzato dai server web, utilizzato per ordinare i contenuti di un sito web.
Il file .htaccess, inserito nell’albero delle directory del server, è in grado di sovrascrivere alcune impostazioni normalmente regolate all’interno della configurazione globale del server. Nelle situazioni di hosting condiviso raramente gli utenti hanno modo di manipolare i file di configurazione del server: in questo caso è possibile utilizzare .htaccess per personalizzare, per quanto possibile, la configurazione del server stesso.
Lo scopo originale dei file .htaccess era quello di consentire il controllo dell’accesso alle cartelle (per esempio, chiedendo una password per accedere al contenuto di una cartella). Oggi i file .htaccess possono sovrascrivere molte altre impostazioni della configurazione, la maggior parte relative al controllo dei contenuti (per esempio: tipo di contenuti e character set, gestione degli URL, handler CGI, ecc.).
it.wikipedia.org/wiki/.htaccess

Andrea ha iniziato a lavorare qualche tempo fa su un progetto (htpw, disponibile su GitHub) per plasmare un file .htaccess in grado di proteggere al meglio un’installazione WordPress. Puoi intercettare diverse richieste in ingresso e bloccarle senza necessità di plugin o modifica ai file PHP alcuna.

Attenzione però: tu quasi sicuramente avrai già un file .htaccess sul tuo spazio FTP (nella cartella principale della tua installazione WordPress). Quello che puoi fare è, dopo aver effettuato un backup di sicurezza del tuo file .htaccess, aggiungere le regole di protezione disponibili in htpw al tuo file già esistente. In caso di problemi e/o errori del server ti basterà ripristinare il tuo vecchio file .htaccess e riprovarci, integrare le regole di protezione facendo maggiore attenzione a non commettere errori.

Per eventuali altri dubbi non esitare a utilizzare l’area commenti.
A me non resta che ringraziare chi ha segnalato il possibile problema (Arslan Kabeer) e chi ha messo a disposizione le varie informazioni consultate per arrivare al risultato finale.

#StaySafe


fonti:
creativemotions.it/aggiungere-intestazioni-di-sicurezza-http-in-wordpress
stackoverflow.com/a/44573750/2220346
github.com/iandunn/WordPress-Functionality-Plugin-Skeleton/blob/1fb281b8b0478e4f5453f43a3b44a525dac415ff/functionality-plugin-skeleton.php#L47
themeskills.com/prevent-clickjacking-wordpress-x-frame-options
geekflare.com/csp-frame-ancestors-configuration
wholesomecode.ltd/stop-clickjacking-by-preventing-your-wordpress-site-from-loading-in-a-frame

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

8 Commenti
Oldest
Newest Most Voted
Inline Feedbacks
View all comments