WordPress bajo prensa. Protege con tus propias manos

37

WordPress: una plataforma conveniente para la publicación de artículos y administración, que se basa en una gran cantidad de sitios diferentes. Debido a su prevalencia, este CMS ha sido durante mucho tiempo un sabroso bocado para los piratas informáticos.

Desafortunadamente, la configuración básica no brinda un nivel adecuado de protección, lo que deja muchos agujeros sin cubrir en caso de incumplimiento crediticio. En este artículo, revisaremos un sitio de piratería "modelo" típico en WordPress y mostraremos cómo corregir las vulnerabilidades identificadas.

Hoy en día, el sistema de gestión de contenido de WordPress es el más popular. Su participación es del 60,4% del número total de sitios que utilizan motores CMS. De estos, según las estadísticas, el 67,3% de los sitios se basan en la última versión del software. Mientras tanto, en los doce años del motor web se encontraron 242 vulnerabilidades de varios tipos (excluyendo las vulnerabilidades encontradas en complementos y temas de terceros). Una estadística de complementos de terceros es aún más triste. Así, la empresa realizó un análisis en 2350 plantillas Revisium Russified para WordPress, extraídas de distintas fuentes. Como resultado, descubrieron que más de la mitad (54%) estaban infectados Web Shell, backdoors, blackhat seo ("spam") enlaces y scripts que contenían vulnerabilidades críticas. Así que siéntate, ahora vamos a entender cómo realizar una auditoría en el sitio de WordPress y eliminar las deficiencias encontradas. El uso será la versión 4.

sitio de indexación

El primer paso en cualquier prueba suele ser recopilar información sobre el objetivo. Y luego, muy a menudo, ayuda a la configuración incorrecta del sitio de indexación que permite a los usuarios no autorizados ver el contenido de ciertas secciones del sitio y, por ejemplo, obtener información sobre los complementos y temas instalados, así como el acceso a datos confidenciales o copias de seguridad de bases de datos.. Para comprobar qué directorios son visibles desde el exterior, la forma más sencilla de aprovechar las ventajas de Google. Basta con ejecutar una consulta Google Dorks tipo site: example.com intitle: «index of» inurl: /wp-content/. El operador inurl: Puede especificar los siguientes directorios:

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

Si puede ver el /wp-content/plugins/, el siguiente paso es recopilar información sobre los complementos instalados y sus versiones se simplifica enormemente. Naturalmente, puede evitar la indexación utilizando el archivo robots.txt. Entonces, por defecto, no está incluido en el paquete de instalación de WordPress, es necesario crearlo y lanzarse al directorio raíz del sitio. Los manuales para crear y trabajar con el archivo robots.txt son bastantes, así que deja este tema para ti. Para dar sólo una de las opciones posibles:

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 los archivos almacenados en una carpeta se cargan, son información confidencial, agregue a esta línea de lista: Disallow: /wp-content/uploads/. Por otro lado, no se recomienda el archivo robots.txt para colocar enlaces a directorios que se han creado específicamente para el almacenamiento de información confidencial. De lo contrario, facilitas la tarea del atacante, porque este es el primer lugar donde generalmente todos miran en busca de "yammy".

Complementos de seguridad para WordPress
Conectar .htaccess

Para restringir el acceso a información confidencial, es mejor usar el archivo .htaccess: es un archivo de configuración utilizado por Apache Web Server. Considerar la posibilidad del archivo desde el punto de vista de la seguridad. Con él puede: denegar el acceso a directorios y archivos, bloquear varios scripts de inyección SQL y maliciosos. Para este archivo .htaccess estándar para CMS WordPress 4.1, debe expandirse un poco. Para cerrar la lista de archivos y carpetas, agregue:

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

Bloquear referencias que contengan la codificación Base64. Deshágase de los enlaces que contengan la etiqueta <script>:

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

Para contrarrestar los scripts que intentan establecer variables globales o cambiar la _REQUESTvariable a través de la URL:

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

Para contrarrestar las solicitudes de bloqueo de inyección de SQL a la URL, que contienen ciertas palabras clave:

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]

Para estropear las herramientas de piratería comunes de la vida, filtra ciertos agentes de usuario:

SetEnvIf user-agent «Indy Library» stayout=1
SetEnvIf user-agent «libwww-perl» stayout=1
SetEnvIf user-agent «Wget» stayout=1
deny from env=stayout
Protege archivos

Sería bueno limitar y acceder a los archivos críticos que almacenan la configuración o simplemente pueden brindar información a un atacante. Puede seleccionar a los siguientes candidatos:

  • Wp-config.php, incluye un nombre de base de datos, nombre de usuario, contraseña y prefijo de tabla;
  • .htaccess;
  • Readme.html y ru_RU.po, que contienen una versión de WordPress;
  • Instalar.php.

Esto se hace de la siguiente manera:

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

El archivo .htaccess, que contiene estas líneas, debe estar en el mismo directorio en el que se protege el archivo. Luego, no permita la lista de usuarios (recuerde, un poco más arriba, hablamos sobre lo fácil que es obtener una lista de usuarios):

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

Entonces, ¿qué más? Puede permitir la entrada solo desde direcciones IP específicas. Para ello, crea un archivo .htaccess en tu wp-admin con las siguientes reglas:

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

El método no es muy flexible y es aplicable solo si está trabajando con un número limitado de direcciones IP fijas. De lo contrario, se recomienda establecer una contraseña para la carpeta wp-admin panel a través del alojamiento (si esta funcionalidad).

WWW

Un conjunto de reglas 5G Blacklist y 6G Blacklist beta de Perishable Press, que le permite lidiar con las solicitudes de URL maliciosas predominantes para WordPress.

Medidas adicionales

Además de lo dicho anteriormente, se pueden añadir las siguientes recomendaciones. Primero, use solo las últimas versiones de WordPress y sus componentes; esto eliminará las vulnerabilidades conocidas. En segundo lugar, elimine los complementos y temas, que también pueden ser proekspluatirovat. En tercer lugar, descargue los temas y complementos de WordPress de fuentes confiables, como los sitios de desarrolladores y el sitio oficial de WordPress. Además de la PC doméstica, debe verificar periódicamente su recurso web Web Antivirus, por ejemplo, AI-Bolit. Si tiene acceso al servidor web, el estado de ánimo de los derechos de acceso a archivos y directorios. Por lo general, WordPress establece todos los derechos en la fase de instalación, pero si es necesario, se puede configurar manualmente chmod. Para directorio – chmod 755 para archivos – chmod 644. Asegúrese de que los derechos de 777 asignados solo a aquellas instalaciones que lo necesiten (a veces es necesario para el funcionamiento normal de algunos complementos). Si WordPress dejó de funcionar normalmente, experimente con los derechos de acceso: primero intente 755, luego 766 y finalmente 777. Para que todo el archivo htaccess exponga chmod 444 (solo lectura). Si el sitio ya no funciona, intente experimentar con valores de 400, 440, 444, 600, 640, 644.

Mueva el archivo wp-config.php. Este archivo contiene información sobre la configuración, MySQL, el prefijo de la tabla, las claves secretas y más. Por lo tanto, es necesario transferir el archivo que no estaba disponible en Internet. Si el sitio no está ubicado en la carpeta public_html, arrastre el archivo wp-config.php en el nivel de carpeta superior y WordPress lo encontrará automáticamente en el directorio raíz (se aplica si solo hay un sitio de alojamiento en este CMS).

Para complicar el shell de casting, deshabilite la capacidad de editar hilos de la consola de WordPress. Para hacer esto, inserte la siguiente línea en el archivo wp-config.php:

define ('DISALLOW_FILE_EDIT', true) ;

Otro punto débil: el archivo install.php (en la carpeta wp-admin). Por lo tanto, es mejor eliminar, bloquear o cambiar. Realice uno de los siguientes:

  1. Simplemente elimine este archivo; después de la instalación, ya no es necesario.
  2. Denegar el acceso al archivo a través de .htaccess.
  3. Cambie el nombre del archivo original install.php (por ejemplo, install.php.old) y cree un nuevo archivo install.php con los siguientes contenidos:
<?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>

Además de notificar a los visitantes del sitio, este script hace lo siguiente:

  • Envía al cliente y a los buscadores el código de estado 503 (“Servicio no disponible");
  • Especifica el intervalo de tiempo a través del cual los clientes y los motores de búsqueda pueden regresar al sitio (parámetro ajustable);
  • Notificar por correo electrónico sobre un problema con la base de datos para la acción correspondiente.

El hecho de que en versiones anteriores de WordPress (< = 2.7.1) con fallas MySQL (por ejemplo, DDoS-ataque) CMS hace que sea posible reinstalarlo. Además, puede ocurrir y fallar/dañar una de las tablas de WordPress. En particular, el ataque es posible cuando la tabla dañada ks29so_options (en WordPress 2.6.2) o ks29so_users (en WordPress 2.0.3 y 2.0.11). Es decir, en diferentes versiones de WP, diferentes tablas en la comprobación principal del instalador: puede ser la tabla ks29so_options o ks29so_users.

Finalmente, desconecte el registro de nuevos usuarios, si esto no es necesario. Sin embargo, si proporciona registro en línea, tenga cuidado de que los nuevos usuarios después del registro reciban privilegios mínimos.

Enlaces útiles
Clausura

WordPress: un producto bastante grande y complejo, con sus ventajas y desventajas. Desafortunadamente, en la configuración predeterminada, su seguridad es cuestionable, ya que incluso en presencia de skriptkidis normales, la mano derecha e Internet podrán romper la protección. Por lo tanto, recomendamos encarecidamente consultar el recurso de la misma manera que lo hicimos en el artículo. Y si encuentra fallas, arréglelas para reducir al mínimo las posibilidades de que un atacante comprometa un recurso.

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