WordPress sous presse. Protégez de vos propres mains

14

WordPress – une plate-forme pratique pour la publication d'articles et de gestion, qui repose sur un grand nombre de sites différents. En raison de sa prévalence, ce CMS a longtemps été un morceau savoureux pour les pirates.

Malheureusement, les paramètres de base n'offrent pas un niveau de protection adéquat, laissant de nombreux trous non couverts par défaut de crédit. Dans cet article, nous allons passer en revue un site de piratage "modèle" typique sur WordPress et montrer comment corriger les vulnérabilités identifiées.

Aujourd'hui, le système de gestion de contenu WordPress est le plus populaire. Sa part est de 60,4% du nombre total de sites utilisant des moteurs CMS. Parmi ceux-ci, selon les statistiques, 67,3% des sites basés sur la dernière version du logiciel. Pendant ce temps, au cours des douze années du moteur Web, 242 vulnérabilités de toutes sortes ont été découvertes (à l'exclusion des vulnérabilités trouvées dans des plug-ins et des thèmes tiers). Une statistique de modules complémentaires tiers est encore plus triste. Ainsi, la société a procédé à une analyse de 2350 modèles russifiés Revisium pour WordPress, issus de différentes sources. En conséquence, ils ont découvert que plus de la moitié (54 %) étaient infectés par Web Shell, les portes dérobées, les liens blackhat seo ("spam") et les scripts contenant des vulnérabilités critiques. Alors asseyez-vous, nous allons maintenant comprendre comment réaliser un audit sur le site WordPress et éliminer les lacunes constatées. L'utilisation sera la version 4.

Site d'indexation

La première étape de tout test consiste généralement à collecter des informations sur la cible. Et puis très souvent cela aide à une mauvaise configuration Indexation du site qui permet à des utilisateurs non autorisés de consulter le contenu de certaines rubriques du site et, par exemple, d'obtenir des informations sur les plug-ins et thèmes installés, ainsi que d'accéder à des données confidentielles ou à des sauvegardes de bases de données. Pour vérifier quels répertoires sont visibles de l'extérieur, le moyen le plus simple de profiter de Google. Il suffit de lancer une requête de type Google Dorks site: example.com intitle: «index of» inurl: /wp-content/. L'opérateur inurl : Vous pouvez spécifier les répertoires suivants :

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

Si vous pouvez afficher le /wp-content/plugins/, l'étape suivante consiste à collecter des informations sur les plug-ins installés et leurs versions est grandement simplifiée. Naturellement, vous pouvez empêcher l'indexation en utilisant le fichier robots.txt. Donc par défaut il n'est pas inclus dans le package d'installation de WordPress, il faut le créer et se jeter dans le répertoire racine du site. Les manuels pour créer et travailler avec le fichier robots.txt sont assez nombreux, alors laissez ce sujet pour vous-même. Pour donner une seule des options possibles :

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: /

Si les fichiers stockés dans un dossier uploads, sont des informations confidentielles, ajoutez à cette liste la ligne: Disallow: /wp-content/uploads/. D'autre part, le fichier robots.txt n'est pas recommandé pour placer des liens vers des répertoires qui ont été créés spécifiquement pour le stockage d'informations sensibles. Sinon, vous facilitez ainsi la tâche de l'agresseur, car c'est le premier endroit où généralement tous regardent à la recherche de "yammy".

Plugins de sécurité pour WordPress
Connecter .htaccess

Pour restreindre l'accès aux informations sensibles, il est préférable d'utiliser le fichier .htaccess – c'est un fichier de configuration utilisé par Apache Web Server. Considérez la possibilité du fichier du point de vue de la sécurité. Avec lui, vous pouvez: refuser l'accès aux répertoires et aux fichiers, verrouiller divers scripts d'injection SQL et malveillants. Pour ce fichier .htaccess standard pour CMS WordPress 4.1, vous devez développer un peu. Pour fermer la liste des fichiers et dossiers, ajoutez :

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

Références de bloc contenant l'encodage Base64. Débarrassez-vous des liens contenant la balise <script>:

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

Pour contrecarrer les scripts essayant de définir des variables globales ou de modifier _REQUESTune variable via une URL :

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

Pour contrer les requêtes de blocage d'injection SQL à l'URL, contenant certains mots clés :

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]

Pour gâcher la vie des outils de piratage courants, filtre certains user-agents :

SetEnvIf user-agent «Indy Library» stayout=1
SetEnvIf user-agent «libwww-perl» stayout=1
SetEnvIf user-agent «Wget» stayout=1
deny from env=stayout
Protège les fichiers

Ce serait bien de limiter et d'accéder aux fichiers critiques qui stockent la configuration ou qui peuvent simplement donner des informations à un attaquant. Vous pouvez sélectionner les candidats suivants :

  • Wp-config.php, comprend un nom de base de données, un nom d'utilisateur, un mot de passe et un préfixe de table ;
  • .htaccess ;
  • Lisezmoi.html et ru_RU.po, qui contiennent une version de WordPress ;
  • Install.php.

Cela se fait comme suit:

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

Le fichier .htaccess, contenant ces lignes doit se trouver dans le même répertoire que le fichier protégé. Ensuite, n'autorisez pas la liste des utilisateurs (rappelez-vous, un peu plus haut, nous avons parlé de la facilité avec laquelle il est possible d'obtenir une liste d'utilisateurs ?) :

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

Alors quoi d'autre? Vous pouvez autoriser l'entrée uniquement à partir d'adresses IP spécifiées. Pour cela, créez un fichier .htaccess dans votre wp-admin avec les règles suivantes :

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

La méthode n'est pas très flexible et n'est applicable que si vous travaillez avec un nombre limité d'adresses IP fixes. Sinon, il est recommandé de définir un mot de passe pour le dossier wp-admin panel via l'hébergement (si cette fonctionnalité).

WWW

Un ensemble de règles 5G Blacklist et 6G Blacklist beta de Perishable Press, qui vous permet de traiter les demandes d'URL malveillantes courantes pour WordPress.

Mesures supplémentaires

Outre ce qui a été dit ci-dessus, les recommandations suivantes peuvent être ajoutées. Tout d'abord, utilisez uniquement les dernières versions de WordPress et de ses composants – cela éliminera les vulnérabilités connues. Deuxièmement, supprimez les plugins et les thèmes, qui peuvent également être proekspluatirovat. Troisièmement, téléchargez les thèmes et plugins WordPress à partir de sources fiables, telles que les sites de développeurs et le site officiel de WordPress. En plus du PC domestique, vous devez vérifier périodiquement votre antivirus Web, par exemple AI-Bolit. Si vous avez accès au serveur Web, l'humeur des droits d'accès aux fichiers et répertoires. En règle générale, WordPress définit tous les droits lors de la phase d'installation, mais si nécessaire, il peut être défini manuellement chmod. Pour le répertoire – chmod 755 pour les fichiers – chmod 644. Assurez-vous que les droits de 777 sont attribués uniquement aux installations qui en ont besoin (parfois, il est nécessaire pour le fonctionnement normal de certains plug-ins). Si WordPress a cessé de fonctionner normalement, expérimentez avec les droits d'accès: Essayez d'abord 755, puis 766 et enfin 777. Pour tous les fichiers htaccess à exposer chmod 444 (lecture seule). Si le site ne fonctionne plus, essayez d'expérimenter avec des valeurs de 400, 440, 444, 600, 640, 644.

Déplacez le fichier wp-config.php. Ce fichier contient des informations sur les paramètres, MySQL, le préfixe de table, les clés secrètes, etc. Par conséquent, il est nécessaire de transférer le fichier n'était pas disponible sur Internet. Si le site ne se trouve pas dans le dossier public_html, alors faites glisser le fichier wp-config.php dans le niveau de dossier au-dessus, et WordPress le trouvera automatiquement dans le répertoire racine (s'applique s'il n'y a qu'un seul site d'hébergement de ce CMS).

Pour compliquer le casting shell, désactivez la possibilité d'éditer les threads de la console WordPress. Pour cela, insérez la ligne suivante dans le fichier wp-config.php :

define ('DISALLOW_FILE_EDIT', true) ;

Un autre point faible – le fichier install.php (dans le dossier wp-admin). Par conséquent, il est préférable de supprimer, de bloquer ou de modifier. Effectuez l'une des opérations suivantes :

  1. Supprimez simplement ce fichier – après l'installation, il n'est plus nécessaire.
  2. Refuser l'accès au fichier via .htaccess.
  3. Renommez le fichier d'origine install.php (par exemple, install.php.old) et créez un nouveau fichier install.php avec le contenu suivant :
<?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>

En plus d'avertir les visiteurs du site, ce script effectue les opérations suivantes :

  • Envoie au client et aux moteurs de recherche le code d'état 503 ("Service indisponible");
  • Spécifie l'intervalle de temps pendant lequel les clients et les moteurs de recherche peuvent revenir sur le site (paramètre réglable) ;
  • Avertir par e-mail d'un problème avec la base de données pour une action appropriée.

Le fait que dans les versions antérieures de WordPress (< = 2.7.1) avec des défauts MySQL (par exemple, DDoS-attaque) CMS permet de réinstaller. De plus, il peut arriver et faute/endommagement d'une des tables WordPress. En particulier, l'attaque est possible lorsque la table endommagée ks29so_options (dans WordPress 2.6.2) ou ks29so_users (dans WordPress 2.0.3 et 2.0.11). Autrement dit, dans différentes versions de WP, différentes tables lors de la vérification principale du programme d'installation – il peut s'agir soit de la table ks29so_options, soit de la table ks29so_users.

Enfin, déconnectez l'enregistrement des nouveaux utilisateurs, si cela n'est pas nécessaire. Si, toutefois, fournit l'enregistrement en ligne, prendre soin de ce que les nouveaux utilisateurs après l'enregistrement ont reçu des privilèges minimaux.

Liens utiles
Fermeture

WordPress – un produit assez volumineux et complexe, avec ses avantages et ses inconvénients. Malheureusement, dans la configuration par défaut, sa sécurité est discutable, car même en présence d'une main droite normale de skriptkidis et Internet pourra percer la protection. Par conséquent, nous vous recommandons fortement de consulter la ressource de la même manière que nous l'avons fait dans l'article. Et si vous trouvez des failles, corrigez-les pour réduire au minimum les chances qu'un attaquant compromette une ressource.

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