WordPress sotto stampa. Proteggi con le tue stesse mani

11

WordPress – una comoda piattaforma per la pubblicazione di articoli e gestione, che si basa su un numero enorme di siti diversi. A causa della sua prevalenza, questo CMS è stato a lungo un gustoso boccone per gli hacker.

Sfortunatamente, le impostazioni di base non forniscono un livello di protezione adeguato, lasciando scoperti molti buchi di default del credito. In questo articolo esamineremo un tipico sito di hacking "modello" su WordPress e mostreremo come correggere le vulnerabilità identificate.

Oggi il sistema di gestione dei contenuti WordPress è il più popolare. La sua quota è del 60,4% del numero totale di siti che utilizzano motori CMS. Di questi, secondo le statistiche, il 67,3% dei siti basati sull'ultima versione del software. Nel frattempo, nei dodici anni di funzionamento del motore web sono state rilevate 242 vulnerabilità di varia natura (escluse le vulnerabilità riscontrate in plug-in e temi di terze parti). Una statistica di componenti aggiuntivi di terze parti è ancora più triste. Pertanto, la società ha condotto un'analisi su 2350 modelli russificati di Revisium per WordPress, presi da diverse fonti. Di conseguenza, hanno scoperto che oltre la metà (54%) era infetta da Web Shell, backdoor, link blackhat seo ("spam") e script che contenevano vulnerabilità critiche. Quindi siediti, ora andiamo a capire come effettuare un audit sul sito WordPress ed eliminare le mancanze riscontrate. L'uso sarà la versione 4.

Sito di indicizzazione

Il primo passo in qualsiasi test è di solito raccogliere informazioni sull'obiettivo. E poi molto spesso aiuta l'errata configurazione dell'indicizzazione del sito che consente agli utenti non autorizzati di visualizzare i contenuti di determinate sezioni del sito e, ad esempio, di ottenere informazioni su plug-in e temi installati, nonché l'accesso a dati riservati o backup di database. Per verificare quali directory sono visibili dall'esterno, il modo più semplice per sfruttare Google. È sufficiente eseguire una query di tipo Google Dorks site: example.com intitle: «index of» inurl: /wp-content/. L'operatore inurl: è possibile specificare le seguenti directory:

/wp-content/
/wp-content/languages/plugins
/wp-content/languages/themes
/wp-content/plugins/
/wp-content/themes/
/wp-content/uploads/

Se riesci a visualizzare / wp-content / plugins /, il passaggio successivo consiste nel raccogliere informazioni sui plug-in installati e le loro versioni sono notevolmente semplificate. Naturalmente, puoi impedire l'indicizzazione utilizzando il file robots.txt. Quindi per impostazione predefinita non è incluso nel pacchetto di installazione di WordPress, è necessario crearlo e lanciarsi nella directory principale del sito. I manuali per creare e lavorare con il file robots.txt sono parecchi, quindi lascia questo argomento per te stesso. Per dare solo una delle possibili opzioni:

User-Agent: *
Disallow: /cgi-bin
Disallow: /wp-login.php
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/
Disallow: /wp-content/plugins/
Disallow: /wp-content/themes/
Disallow: /?author=*
Allow: /

Se i file archiviati in una cartella di upload sono informazioni riservate, aggiungi a questa riga di elenco: Disallow: /wp-content/uploads/. D'altra parte, il file robots.txt non è consigliato per inserire collegamenti a directory che sono state create appositamente per l'archiviazione di informazioni sensibili. Altrimenti, faciliti così il compito dell'attaccante, perché questo è il primo posto dove di solito tutti guardano alla ricerca di "yammy".

Plugin di sicurezza per WordPress
Connetti .htaccess

Per limitare l'accesso alle informazioni sensibili è meglio utilizzare il file .htaccess – è un file di configurazione utilizzato da Apache Web Server. Considerare la possibilità del file dal punto di vista della sicurezza. Con esso puoi: negare l'accesso a directory e file, bloccare varie iniezioni SQL e script dannosi. Per questo file .htaccess standard per CMS WordPress 4.1 è necessario espandersi un po'. Per chiudere l'elenco di file e cartelle, aggiungi:

Options +FollowSymLinks -Indexes
 
RewriteCond %{QUERY_STRING} base64_encode[^(]*([^)]*) [OR]

Riferimenti di blocco contenenti la codifica Base64. Sbarazzati dei link che contengono il tag <script>:

RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]

Per contrastare gli script che tentano di impostare variabili globali o modificare _REQUESTla variabile tramite URL:

RewriteCond %{QUERY_STRING} GLOBALS (=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST (=|[|%[0-9A-Z]{0,2})

Per contrastare le richieste di blocco dell'iniezione SQL all'URL, contenente determinate parole chiave:

RewriteCond %{query_string} concat.*( [NC,OR]
RewriteCond %{query_string} union.*select.*( [NC,OR]
RewriteCond %{query_string} union.*all.*select [NC]
RewriteRule ^(.*)$ index.php [F,L]

Per rovinare la vita strumenti di hacking comuni, filtra alcuni user-agent:

SetEnvIf user-agent «Indy Library» stayout=1
SetEnvIf user-agent «libwww-perl» stayout=1
SetEnvIf user-agent «Wget» stayout=1
deny from env=stayout
Protegge i file

Sarebbe bello limitare e accedere a file critici che memorizzano la configurazione o semplicemente possono fornire alcune informazioni a un utente malintenzionato. Puoi selezionare i seguenti candidati:

  • Wp-config.php, include un nome del database, nome utente, password e prefisso della tabella;
  • .htaccess;
  • Readme.html e ru_RU.po, che contengono una versione di WordPress;
  • Installa.php.

Questo viene fatto come segue:

<Files file_name>
Order Allow,Deny
Deny from all
</Files>

Il file .htaccess, contenente queste righe, dovrebbe trovarsi nella stessa directory in cui il file è protetto. Quindi non consentire l'elenco degli utenti (ricordate, poco più in alto, abbiamo parlato di quanto sia facile ottenere un elenco di utenti?):

RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]

Quindi cos'altro? È possibile consentire l'accesso solo da indirizzi IP specificati. Per fare ciò, crea un file .htaccess nel tuo wp-admin con le seguenti regole:

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "Access Control"
AuthType Basic
order deny,allow
deny from all
allow from 178.178.178.178  # IP Home computer
allow from 248.248.248.248  # IP Work computer

Il metodo non è molto flessibile ed è applicabile solo se si lavora con un numero limitato di indirizzi IP fissi. Altrimenti si consiglia di impostare una password per la cartella wp-admin panel tramite l'hosting (se questa funzionalità).

WWW

Un insieme di regole 5G Blacklist e 6G Blacklist beta di Perishable Press, che ti consente di gestire le richieste di URL dannose prevalenti per WordPress.

Ulteriori misure

Oltre a quanto detto sopra, si possono aggiungere le seguenti raccomandazioni. Innanzitutto, usa solo le versioni più recenti di WordPress e dei suoi componenti: questo eliminerà le vulnerabilità note. In secondo luogo, rimuovi i plugin e i temi, che possono anche essere proeksplutirovat. Terzo, scarica i temi e i plugin di WordPress da fonti affidabili, come i siti degli sviluppatori e il sito ufficiale di WordPress. Oltre al PC di casa, è necessario controllare periodicamente la risorsa Web Web Antivirus, ad esempio AI-Bolit. Se hai accesso al server web, l'umore dei diritti di accesso a file e directory. Tipicamente, WordPress imposta i diritti completi in fase di installazione, ma se necessario può essere impostato manualmente chmod. Per directory – chmod 755 per file – chmod 644. Assicurati che i diritti di 777 vengano assegnati solo a quelle strutture che ne hanno bisogno (a volte è necessario per il normale funzionamento di alcuni plug-in). Se WordPress ha smesso di funzionare normalmente, sperimenta i diritti di accesso: prima prova 755, poi 766 e infine 777. Per tutto il file htaccess esporre chmod 444 (sola lettura). Se il sito non funziona più, prova a sperimentare con valori di 400, 440, 444, 600, 640, 644.

Sposta il file wp-config.php. Questo file contiene informazioni sulle impostazioni, MySQL, il prefisso della tabella, le chiavi segrete e altro. Pertanto, è necessario trasferire al file non era disponibile da Internet. Se il sito non si trova nella cartella public_html, trascina il file wp-config.php nella cartella di livello superiore e WordPress lo troverà automaticamente nella directory principale (si applica se esiste un solo sito di hosting su questo CMS).

Per complicare la shell di casting, disabilita la possibilità di modificare i thread della console WordPress. Per fare ciò, inserisci la seguente riga nel file wp-config.php:

define ('DISALLOW_FILE_EDIT', true) ;

Un altro punto debole è il file install.php (nella cartella wp-admin). Pertanto, è meglio rimuovere, bloccare o modificare. Eseguire una delle seguenti operazioni:

  1. Basta eliminare questo file: dopo l'installazione non è più necessario.
  2. Negare l'accesso al file tramite .htaccess.
  3. Rinomina il file originale install.php (es. install.php.old) e crea un nuovo file install.php con i seguenti contenuti:
<?php header("HTTP/1.1 503 Service Temporarily Unavailable"); ?>
<?php header("Status 503 Service Temporarily Unavailable"); ?>
<?php header("Retry-After 3600"); // 60 minutes ?>
<?php mail("[email protected]", "Database Error", "There is a problem with teh database!"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="en"xmlns="http://www.w3.org/1999/xhtml"lang="en">
<head>
<meta http-equiv="Content-Type"content="text/html; charset=utf-8" />
<title>Error Establishing Database Connection</title>
</head>
<body>
<h1>Error Establishing Database Connection</h1>
<p>We are currently experiencing database issues. Please check back shortly. Thank you.</p>
</body>
</html>

Oltre a notificare i visitatori del sito, questo script esegue le seguenti operazioni:

  • Invia al cliente e ai motori di ricerca il codice di stato 503 (“Servizio non disponibile");
  • Specifica l'intervallo di tempo attraverso il quale i clienti ei motori di ricerca possono tornare sul sito (parametro regolabile);
  • Notifica via e-mail di un problema con il database per l'azione appropriata.

Il fatto che nelle versioni precedenti di WordPress (< = 2.7.1) con errori MySQL (ad esempio, attacco DDoS) CMS consente di reinstallare. Inoltre, può capitare e guasto/danneggiamento di una delle tabelle WordPress. In particolare, l'attacco è possibile quando la tabella danneggiata ks29so_options (in WordPress 2.6.2) o ks29so_users (in WordPress 2.0.3 e 2.0.11). Cioè, in diverse versioni di WP tabelle diverse al controllo principale nel programma di installazione: può essere la tabella ks29so_options o ks29so_users.

Infine, disconnettere la registrazione di nuovi utenti, se ciò non è necessario. Se, tuttavia, fornisce la registrazione online, fai attenzione che i nuovi utenti dopo la registrazione abbiano ricevuto privilegi minimi.

Link utili
Chiusura

WordPress – un prodotto abbastanza grande e complesso, con i suoi vantaggi e svantaggi. Sfortunatamente, nella configurazione predefinita, la sua sicurezza è discutibile, poiché anche in presenza di normali skriptkidis mano dritta e Internet sarà in grado di sfondare la protezione. Pertanto, consigliamo vivamente di controllare la risorsa nello stesso modo in cui abbiamo fatto nell'articolo. E se trovi difetti, correggili per ridurre al minimo le possibilità che un utente malintenzionato comprometta una risorsa.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More