Sicurezza di un sito WordPress: cosa fare?

Al giorno d’oggi, creare un nuovo sito web utilizzando WordPress è facile e veloce, ma proteggerlo adeguatamente non è così semplice ed immediato.

In questo articolo, tratteremo alcuni degli aspetti più importanti da considerare quando si imposta la sicurezza del proprio sito web realizzato tramite WordPress : in particolare, le considerazioni saranno effettuate su 3 elementi che riteniamo essere i maggiori potenziali vettori di utilizzo improprio e malevolo in ambito WordPress.

Impostazioni di WordPress

Durante la fase iniziale di installazione di WordPress è possibile effettuare, per migliorare la sicurezza,  la configurazione di diverse impostazioni. Analizziamole una per una…

Bloccare l’accesso alle directory
L’elenco delle directory (noto anche come directory browsing o indicizzazione) è una funzionalità del web server che permette di visualizzare il contenuto delle directory quando non è presente un file di indice predefinito.

Sebbene questa funzionalità possa essere necessaria per il corretto funzionamento di alcuni plugin e temi WordPress, esporre pubblicamente il contenuto delle directory può fornire agli aggressori informazioni preziose sulla struttura del sito e su files potenzialmente sensibili.

Nota : indipendentemente dalla scelta del server web, disabilitare la navigazione nelle directory è una pratica di sicurezza consigliata che dovrebbe essere sempre implementata insieme ad altre misure di sicurezza.

La modalità di disabilitazione dell’esplorazione delle directory dipende dal tipo di web server utilizzato:

per i server Apache e LiteSpeed​​, è possibile impedire l’elenco delle directory aggiungendo Options -Indexes al file .htaccess. Questo metodo semplice ed efficace funziona nella maggior parte delle configurazioni basate su Apache.

per i server Nginx, è necessario modificare la configurazione del blocco del server. È possibile disabilitare l’elenco delle directory rimuovendo l’istruzione autoindex on, se presente, o impostando esplicitamente autoindex off nel blocco location pertinente :
location / {
autoindex off;
}

Disabilitare l’esecuzione di PHP
Molti siti consentono agli utenti di caricare contenuti sui propri siti : tuttavia, questo può rappresentare un rischio per la sicurezza, poiché un aggressore potrebbe caricare uno script PHP con codice dannoso in grado di infettare il server. Disabilitare l’esecuzione di PHP in determinate directory di WordPress è  quindi un modo efficace per prevenire l’esecuzione di codice dannoso.

Disabilitazione XML-RPC
XML-RPC è una funzionalità di WordPress che consente l’esecuzione di codice da remoto e la trasmissione di dati tramite Internet : tale funzionalità oggi è diventata obsoleta ed è fortemente consigliata la sua disattivazione (se non strettamente necessaria) poiché può essere sfruttata per attacchi “brute-force”.

Seguire il principio dell’assegnazione del minimo privilegio
Implementare un adeguato controllo degli accessi utente è fondamentale per la sicurezza di WordPress, soprattutto perché molti exploit di vulnerabilità richiedono privilegi utente specifici per essere eseguiti correttamente (come l’accesso dell’amministratore).

La creazione di account utente individuali (con autorizzazioni limitate) in alternativa alla condivisione delle credenziali dell’amministratore, non solo garantisce una maggiore responsabilità del singolo utente, ma riduce anche significativamente il potenziale impatto di eventuali  account “compromessi”.

Il principio dell’assegnazione del minimo privilegio implica che ogni utente dovrebbe avere accesso alle sole funzionalità minime richieste per il suo ruolo specifico (ad esempio, gli editor di contenuti potrebbero aver bisogno solo dell’accesso per creare e modificare post, mentre gli sviluppatori potrebbero richiedere autorizzazioni aggiuntive per la gestione di plugin e temi…).

Questo aspetto è particolarmente importante perché molte vulnerabilità di WordPress possono essere sfruttate solo quando l’aggressore ottiene l’accesso a un account “privilegiato” (con privilegi elevati), come i diritti di amministratore.

In aggiunta, è consigliato condurre controlli regolari dei permessi e dei ruoli degli utenti per garantire che i livelli di accesso rimangano aggiornati e coerenti nel tempo (rimuovendo o “declassando” gli account amministratore non necessari, revocando l’accesso agli utenti inattivi e mantenendo un chiaro elenco degli utenti attivi con i relativi livelli di accesso).

Oltre ai privilegi relativi agli utenti e fondamentale considerare i privilegi su files e cartelle di tutto l’ambiente (compresi i files di installazione WordPress) in quanto sebbene possa essere allettante impostare permessi eccessivamente permissivi (come 777) per risolvere rapidamente i problemi di accesso, questa pratica aumenta significativamente i rischi per la sicurezza consentendo a qualsiasi processo sul server di leggere, scrivere o eseguire files.

Anche in questo caso è necessario attenersi al il principio dell’assegnazione del minimo  privilegio sui permessi del file system: i files dovrebbero in genere essere impostati su 644 (il proprietario può leggere/scrivere, il gruppo e gli altri possono solo leggere) e le directory su 755 (il proprietario può leggere/scrivere/eseguire, il gruppo e gli altri possono solo leggere/eseguire), con permessi più restrittivi ove possibile. I file critici come wp-config.php dovrebbero essere controllati ancora più rigorosamente, idealmente impostandoli su 600 o 640.

Usare password o passkey complesse
Sembra un’ovvietà ma ancora oggi, per diversi motivi tra cui emerge la “facilità di memorizzazione”, vengono utilizzate password (o passkey) molto semplici basate su nomi di persone, animali domestici, date, città o loro combinazioni… Quanto tempo pensi che ci voglia a un hacker per decifrare password semplici? Un giorno? Un’ora? Purtroppo la realtà è un’altra : con i moderni strumenti di hacking e gli algoritmi avanzati gli attaccanti possono effettuare milioni di tentativi in un brevissimo intervallo di tempo in modo tale che una password semplice possa essere decifrata in meno di un secondo!

Sul sito Password Monster (https://www.passwordmonster.com) è possibile avere un’indicazione sui tempi di individuazione di una specifica password : prova e rimarrai sorpreso…

Utilizza password complesse e univoche per tutti i tuoi account, in particolare per l’account di amministrazione di WordPress, gli account FTP e gli account del database : una password complessa dovrebbe essere composta da una combinazione di lettere maiuscole e minuscole, numeri e caratteri speciali.

Inoltre, ove possibile, si consiglia di utilizzare l’autenticazione a più fattori per ridurre il rischio di furto dell’account in caso di compromissione delle credenziali.

Rinominare l’account amministratore con un nome univoco
E’ buona norma modificare il nome utente di accesso predefinito dell’amministratore con un nome univoco, poiché il nome utente predefinito “admin” è spesso preso di mira dagli attaccanti. Con la modifica del nome utente “admin” con un nome meno prevedibile, è possibile ridurre il rischio di attacchi brute-force.

Cambiare l’URL di accesso predefinito a WordPress
In modo pressoché costante,  centinaia di procedure automatizzate (bot) esplorano Internet alla ricerca di un semplice errore di configurazione o di una password non sicura su un sito web tentando ripetutamente di accedere al server inviando credenziali errate alla pagina predefinita /wp-login : può quindi essere molto utile, per evitare o almeno limitare tali attacchi, effettuare il cambio dell’URL (indirizzo web) di accesso predefinito all’area amministrativa di WordPress (modifica che può essere effettuata tramite Plug-In specifici).

Inoltre, limitando il numero di tentativi di accesso, si può proteggere il proprio sito dagli attacchi brute-force : il metodo migliore utilizza il blocco degli IP e può  essere eseguito con vari strumenti ma, tramite  funzionalità aggiuntive, si possono effettuare varie configurazioni secondarie tra cui :

  • personalizzazione del numero di tentativi falliti prima che un IP venga bloccato
  • inserimento di determinati indirizzi IP nella whitelist indipendentemente dai tentativi falliti
  • personalizzazione del periodo di attesa dopo il blocco di un indirizzo IP
  • limitazione di tutti gli accessi in determinate fasce orarie

Proteggere con password i percorsi a cartelle con files “sensibili”
Sebbene sia fortemente consigliato di bloccare l’accesso, tramite firewall, a tutte le informazioni sensibili, non sempre è possibile farlo : in tali casi, se è strettamente necessario fornire informazioni sensibili (ad esempio sulla rete), è possibile aggiungere un ulteriore livello di sicurezza aggiungendo l’autenticazione HTTP a questi percorsi presenti sul proprio sito web.

Ad esempio, tramite l’utilizzo della funzione phpinfo è possibile effettuare diagnostica e risoluzione di alcuni problemi di configurazione, esponendo però anche altre informazioni sensibili (come ad esempio i dati sull’architettura del sito web e sui moduli attivi). Si consiglia pertanto di limitare l’accesso a questa pagina utilizzando l’autenticazione HTTP.

Spostare wp-config.php nella directory principale
Il file wp-config.php è un file di configurazione fondamentale di WordPress e contiene informazioni altamente sensibili, tra cui credenziali del database, chiavi di autenticazione e salt di sicurezza.

Per impostazione predefinita, questo file si trova nella directory principale di WordPress, che potrebbe essere accessibile pubblicamente in molte configurazioni del server : spostare wp-config.php in una directory non accessibile pubblicamente aumenta notevolmente la sicurezza, impedendo l’accesso diretto tramite URL a questo file, anche nel caso in cui altri meccanismi di sicurezza possano fallire.

È importante notare che il semplice spostamento del file in una directory principale non è il fattore chiave per la sicurezza: ciò che conta è posizionarlo in una posizione non raggiungibile tramite l’interfaccia pubblica del web server.

Sebbene la prassi standard sia quella di spostarlo di un livello sopra la directory principale di WordPress, il requisito essenziale è che la posizione scelta sia esterna a qualsiasi directory pubblica (al di sopra della “cartella root” del web server) pur rimanendo leggibile dai processi PHP. Questa configurazione aiuta a proteggere sia dai tentativi di accesso diretto che da alcuni tipi di attacchi di inclusione di file locali.

Disabilitazione della modifica dei file
Per impostazione predefinita, WordPress consente agli amministratori di modificare i file PHP di plugin e temi all’interno della dashboard di WordPress. Questo semplifica la modifica immediata dell’aspetto e delle funzionalità del sito, ma a volte gli hacker possono abusare di questo privilegio per inserire codice dannoso nel sito web. La disabilitazione della modifica dei files aiuta quindi a prevenire modifiche non autorizzate a tali files.

Utilizzare un prefisso di database personalizzato
Modificare il prefisso predefinito “wp_” del database WordPress è spesso suggerito come misura di sicurezza, anche se questo approccio non risolve vulnerabilità di sicurezza fondamentali né fornisce una protezione solida contro gli attacchi di tipo SQL injection. Piuttosto, rende semplicemente le tabelle del database leggermente più difficili da identificare da parte di script automatici o tentativi manuali di sfruttare strutture note di database WordPress.

L’efficacia della modifica del prefisso di tabella è limitata a due scenari specifici:

  • negli ambienti in cui coesistono più database, un prefisso non standard costringe gli aggressori a dedicare più tempo all’identificazione delle tabelle WordPress corrette rispetto ai vari ambienti
  • in situazioni in cui un aggressore ha acquisito la capacità di eseguire comandi SQL ma non ha accesso diretto al database, i prefissi personalizzati possono complicare gli attacchi automatici che si basano sulla previsione dei nomi di tabella standard

Si ribadisce che la modifica del prefisso della tabella non sostituisce le opportune misure di sicurezza : una vera sicurezza del database si basa su pratiche fondamentali come la corretta sanificazione degli input, l’utilizzo di query “sicure” parametrizzate, l’implementazione di controlli di accesso rigorosi e l’aggiornamento costante del core, dei temi e dei plugin di WordPress. La modifica del prefisso della tabella dovrebbe essere considerata come una misura complementare minore rispetto ad un controllo di sicurezza primario.

Aggiornamenti regolari
Anche se potrebbe non sembrare molto utile, effettuare costantemente gli aggiornamenti disponibili è uno dei modi più semplici per proteggere il sito web dalle vulnerabilità note : si consiglia quindi di aggiornareregolarmente il core, i temi e i plugin di WordPress alle versioni più recenti, poiché gli aggiornamenti più recenti spesso includono patch di sicurezza per le vulnerabilità note.

Utilizzare solo plugin affidabili
“WordPress è sicuro?” La risposta è “Sì”, ma a condizione di porre attenzione nell’utilizzo di componenti “esterni” :  il core di WordPress è open source e regolarmente verificato da esperti di sicurezza, ma i plugin di terze parti non lo sono! Oltre il 95% delle vulnerabilità proviene da plugin e temi e quindi è necessario porre molta attenzione ad utilizzare  plugin provenienti da fonti affidabili, poiché plugin mal codificati possono rendere il sito vulnerabile agli attacchi.

Configurazione SSH

Sebbene la configurazione delle impostazioni di WordPress sia molto importante, non è l’unico modo in cui gli hacker possono attaccare il sito web.

Secure Shell (SSH) è un protocollo di rete crittografico utilizzato per la comunicazione sicura dei dati :  se un aggressore riesce ad accedere tramite SSH ad un server, può assumerne il controllo completo e bloccare l’accesso al sito web.

Inutile evidenziare che è fondamentale rafforzare le impostazioni SSH per impedire accessi non autorizzati : tuttavia, non tutti i provider di hosting consentono l’accesso tramite SSH ai propri server, quindi se sei assolutamente certo che il tuo provider di hosting non consenta l’accesso tramite SSH al tuo server, puoi ignorare questa sezione.

Bloccare il servizio SSH pubblico
Il primo e probabilmente il più importante passaggio è bloccare le connessioni SSH provenienti da computer sconosciuti. Esistono diversi modi per farlo:

  1. Utilizzare un firewall: se il tuo provider di hosting ha configurato un firewall di rete, puoi definire regole per consentire il traffico SSH solo da determinati indirizzi IP, come la tua rete domestica o aziendale. Tuttavia, non tutti gli utenti hanno accesso a un indirizzo IP statico, il che rende questo metodo difficile da implementare
  2. Utilizzare un Bastion Host: un bastion host è un computer dedicato su una rete, progettato e configurato specificamente per resistere agli attacchi. Con le opportune competenze tecniche, si può bloccare l’accesso SSH pubblico ai server da Internet e consentire le connessioni SSH solo dal bastion host. In questo modo, si possono dedicare tutte le tue risorse alla protezione e al monitoraggio di un server specifico : questo aggiunge un ulteriore livello di sicurezza poiché il bastion host è l’unico sistema esposto a Internet e gli altri sistemi si trovano all’interno di una rete privata
  3. Utilizzare il Session Manager fornito dal tuo provider cloud: molti provider cloud, come AWS, offrono servizi per connettersi automaticamente a un’istanza tramite SSH in modo sicuro. Puoi disattivare completamente tutto il traffico SSH sul tuo firewall e utilizzare servizi completamente gestiti come AWS Session Manager per gestire le tue istanze Amazon EC2, tramite una shell interattiva basata su browser con un clic o tramite l’AWS CLI

 
Cambiare la porta SSH
Di default, il servizio SSH è in ascolto sulla porta 22, quindi un modo semplice per ridurre il rischio di attacchi è cambiare la porta predefinita con una porta non standard (casuale) rendendo difficile per gli attaccanti prendere di mira il server e la maggior parte dei bot, di basso livello, non proverà nemmeno ad attaccare.

Utilizzare le chiavi SSH
Come già detto in precedenza le password possono essere scoperte!
Tuttavia, le chiavi SSH sono quasi impossibili da decifrare, quindi se hai abilitato l’accesso SSH sul tuo server, ti consigliamo di disattivare l’autenticazione tramite password e di utilizzare solo l’autenticazione basata su chiave.

Non utilizzare l’account root
Quando si accede al server tramite SSH, si consiglia di utilizzare un account utente normale con accesso limitato.
L’account root su qualsiasi server ha il livello di accesso più elevato: questi privilegi consentono di eseguire comandi che richiedono l’accesso come amministratore (come installare software ed eseguire modifiche a livello di sistema). Un utilizzo improprio può causare perdita di dati, crash del sistema e violazioni della sicurezza.

Intestazioni HTTP

Le intestazioni HTTP (headers) sono elementi testuali che consentono al client e al server di passare informazioni aggiuntive ad una richiesta o risposta HTTP. Possono essere utilizzate per aumentare la sicurezza del tuo sito web abilitando determinate funzionalità di sicurezza e disabilitando determinati tipi di comportamento.

Per migliorare la sicurezza del tuo sito web, dovresti assolutamente configurare le seguenti intestazioni (in base alle proprie esigenze) :

Content Security Policy (CSP): è uno standard di sicurezza introdotto per prevenire gli attacchi XSS. Consente di creare una whitelist di fonti di contenuto attendibili e indica al browser di eseguire o visualizzare solo risorse provenienti da tali fonti. Anche se un aggressore riuscisse ad iniettare un tag script, il browser non eseguirà lo script se la fonte non è inclusa nella whitelist.

Cross-Site Scripting (XSS): è un tipo di vulnerabilità di sicurezza tipica delle applicazioni web. Gli attacchi XSS consentono agli aggressori di iniettare script lato client nelle pagine web visualizzate da altri utenti. Per prevenire gli attacchi XSS, è necessario sanificare l’input dell’utente, utilizzare CSP e intestazioni HTTP come X-XSS-Protection.

Cross-Origin Resource Sharing (CORS): è un meccanismo che consente a molte risorse di una pagina web (ad esempio, font, JavaScript, ecc.) di essere richieste da un dominio esterno a quello da cui la risorsa ha origine. È una funzionalità di sicurezza utile, ma può essere sfruttata. Pertanto, è importante consentire solo ai siti attendibili di richiedere le tue risorse.

Considerazioni finali

In questo articolo abbiamo illustrato alcuni modi per rafforzare un sito web realizzato tramite WordPress e proteggerlo da attacchi esterni : tuttavia, si dovrebbe sempre ricordare che la sicurezza non è un’azione una tantum, ma un processo continuo mantenendosi sempre aggiornati sulle ultime pratiche di sicurezza e monitorando regolarmente il proprio sito per individuare eventuali attività sospette.

I nostri servizi di Vulnerability Assessment per siti WordPress consentono di identificare e valutare le potenziali vulnerabilità presenti nella piattaforma, nei plugin, nei temi e nella configurazione del server.

Utilizzando metodologie avanzate e strumenti specializzati, possiamo eseguire un controllo approfondito delle componenti del sito per individuare:

  • plugin o temi obsoleti o vulnerabili,
  • configurazioni deboli o non sicure,
  • problemi di permessi e autenticazione,
  • potenziali punti di ingresso sfruttabili da attacchi esterni.

Al termine dell’analisi, forniamo un report con la descrizione delle vulnerabilità rilevate, la valutazione del rischio e le raccomandazioni operative per la loro risoluzione.

Vuoi mantenere il tuo sito WordPress sicuro, stabile e conforme alle migliori pratiche di cybersecurity, riducendo il rischio di compromissione dei dati o interruzioni di servizio?

👉 Contattaci per richiedere, senza nessun impegno, maggiori dettagli sul nostro Servizio di Verifica Sicurezza WordPress