¿Cómo no ser un centro de control de malware? Guía de Hardening sobre WordPress 2019
Guía completa de hardening para WordPress con recomendaciones de seguridad, configuraciones de servidor, plugins y cabeceras para proteger sitios web.
Introducción [Actualización]
Entendiendo la necesidad de comenzar a proteger de mejor manera la seguridad sobre las plataformas WordPress, y otros CMS, según lo visto con la enorme cantidad de Indicadores de compromiso (IOC), en donde la plataforma usada como centro de control para ataques, son WordPress vulnerados, estos casos los cuales he visto de cerca, puesto nos llegan miles de ataques diarios, y es una responsabilidad entre los ciberatacantes y también las empresas que descuidan sus plataformas, es por esto, que me puse manos a la obra y he creado esta guía de libre uso, para que los “amigos” que implementan WordPress tomen las medidas mínimas de Seguridad, si desea que colabore en algún emprendimiento puede contactarme en sebastian.vargas@protonmail.com.
También es bueno que revise la seguridad de su Servidor, con este sencillo paso puede revisarlo: http://shodan.io/host/IP, así rápidamente sabrá si tiene vulnerabilidades conocidas y expuestas (CVE) que un atacante podría estar interesado en tratar de explotar.
Estimado lector, si no me cree la cantidad de sitios web vulnerables, puede investigar con fines educacionales con los siguientes google dork:
- “index of” inurl:wp-content/”
- “inurl:“/wp-content/wpclone-temp/wpclone_backup/”
- “inurl:“/wp-content/plugins/wp-shopping-cart/” intext:DB_PASSWORD
- intext:“MySQL hostname” ext:txt
- inurl:“-wp13.txt”
- inurl:“/wp-content/wpclone-temp/wpclone_backup/”
- inurl:log -intext:log ext:log inurl:wp-
- filetype:sql intext:wp_users phpmyadmin
- inurl:“/wp-content/uploads/levoslideshow/
- inurl:wp-config -intext:wp-config “‘DB_PASSWORD’”
- inurl:/wp-content/wpbackitup_backups
He creado una serie de recomendaciones que son la continuación de la guía de Hardening de Servidor Web que fue capítulo N1.
Regla n1: No le compre sitios web a cualquier persona, si tiene un bajo presupuesto utilice wordpress.com, y transfiera los riesgos.
Método de Hardening WordPress
La estructura propuesta consta de los siguientes puntos principales los cuales se debe poner énfasis en su correcto despliegue, para garantizar una menor exposición a riesgos tecnológicos.
- Control de acceso: Pueden existir riesgos de pérdidas de datos, debido a acceso de cuentas con configuración débil.
- Directorios: Riesgos de delito informático a través de inserción de webshell, con resultado de centros de controles, para distribución de malware con consecuencias phishing bancario.
- Componentes: Riesgo de disponibilidad del servicio mediante ataques de DDOS, o uso de exploit.
- Búsquedas: Riesgo reputación a través de mala configuración, con consecuencia de filtración de datos, acceso a carpetas privadas, a rutas de administración.
- Respaldo: Riesgo de pérdida de datos
- Ausencia de Seguridad: La sumatoria de todos los riesgos mencionados
Recomendaciones principales de seguridad
- Mantén actualizada la versión de WordPress, siempre a la última versión estable.
- Use HTTPS en el sitio completo con TLS 1.2 mínimo.
- Mantén actualizado los plugins a su última versión estable.
- No uses la cuenta admin, para publicar contenido.
- Ten solo un usuario con privilegios de administrador
- No uses claves débiles, mínimo sobre 12 caracteres alternados y jamás palabras adivinables.
- Usa el privilegio mínimo con los usuarios, para las acciones que necesitan solamente.
- No uses templates piratas, ni nada pirata. ¡Esto es clave!
- No uses plugins innecesarios, los minimos que necesite.
Cambiar prefijo de base de datos
No usar wp_ Reemplazar por algo aleatorio . vs31uaq3_
Permisos recomendados
- wp-config.php Deseable: 400
- uploads folder Deseable: 755
- htaccess files Deseable: 400
Plugins de seguridad recomendados
- Cerber Security & Antispam
- BulletProof Security
- All In One WP Security & Firewall
- Sucuri Security - Auditing, Malware Scanner and Security Hardening
- Acunetix WP Security & Acunetix Secure WordPress
- Wordfence Security Plugin
- All In One WP Security & Firewall
Plugins de cache recomendados
- W3 Total Cache
- Wp SuperCache
Deshabilitar edición de código de páginas
define( ‘DISALLOW_FILE_EDIT’, true );
Protege la navegación de directorios abiertos
Opciones -Indexes
Protege la llamada directa de archivos .php
<Files *.php>
deny from all
</Files>
Protege la subida de archivos
Order Allow,Deny
Deny from all
<FilesMatch "^[^.]+.(?i:jpe?g|png|gif)$">
Allow from all
Quitar la versión del wordpress de la cabecera
remove_action(‘wp_head’, ‘wp_generator’);
Reglas robots.txt
User-agent: *
Allow: /
# deshabilitar estos directorios, url & y tipos de archivos
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/
Disallow: /search/*/feed
Disallow: /search/*/*
Disallow: /readme.html
Disallow: /license.txt
Disallow: /*?*
Disallow: /*?
Disallow: /*.php$
Disallow: /*.js$
Disallow: /*.inc$
Disallow: /*.css$
Disallow: /*.gz$
Disallow: /*.wmv$
Disallow: /*.cgi$
Disallow: /*.xhtml$
Allow: /wp-content/uploads/
Allow: /*?page=*
User-agent: Mediapartners-Google
Allow: /
User-agent: Adsbot-Google
Allow: /
User-agent: Googlebot-Image
Allow: /
User-agent: Googlebot-Mobile
Allow: /
User-agent: ia_archiver*
Disallow: /
User-agent: duggmirror
Disallow: /
Sitemap: http://domain.com/sitemap.xml
Cabeceras de seguridad
Header set ServerSignature "Off"
Header set ServerTokens "Prod"
Cabecera X-Frame-Options
Header always append X-Frame-Options SAMEORIGIN
Habilitar HSTS
Header add Strict-Transport-Security “max-age=157680000”
Cabecera X-XSS-Protection para evitar ataques XSS en IE y Chrome
Header set X-XSS-Protection “1; mode=block”
Cabecera X-Content-Type-Options
Header set X-Content-Type-Options “nosniff”
Protección contra badbots
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(Baiduspider|HTTrack|Yandex).*$ [NC]
RewriteRule .* - [F,L]
SetEnvIfNoCase user-Agent ^Baiduspider [NC,OR]
SetEnvIfNoCase user-Agent ^Yandex [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^HTTrack [NC]
Order Allow,Deny
Allow from all
Deny from env=bad_bot
Protección contra peticiones maliciosas
RewriteCond %{REQUEST_METHOD} (HEAD|GET|POST|OPTIONS) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python|nikto|curl|whatweb|acunetix|uniscan|scan|java|winhttp|clshttp|netsparker|wappalyzer|loader) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|'|%0A|%0D|%27|%3C|%3E|%00)
Bloquear intentos de ataques a través de Timthumb wordpress
RewriteCond %{REQUEST_URI} (timthumb.php|phpthumb.php|thumb.php|thumbs.php) [NC] RewriteRule . - [S=1]
Bloquear readme.html
<files readme.html>
order allow,deny
deny from all
</files>
Bloquear xml-rpc
<Files xmlrpc.php>
order deny,allow
deny from all
</Files>
Auditar seguridad de WordPress
- https://securityheaders.com/ - Revisar cabeceras de seguridad
- https://www.wpdoctor.es - Auditoría de seguridad del sitio
- https://wpscans.com/ - Auditoría de seguridad
- https://developers.google.com/speed/pagespeed/insights/?hl=es - Auditoría de velocidad de sitio
Capa extra a través de CDN
Desea sacar A+ en securityheaders.io?
header('X-Frame-Options: SAMEORIGIN');
header( 'X-Content-Type-Options: nosniff' );
header( 'X-XSS-Protection: 1;mode=block' );
header("Strict-Transport-Security: max-age=31536000; includeSubDomains");
header("X-Content-Security-Policy: default-src 'self'; script-src https://apis.google.com https://platform.twitter.com; child-src https://plusone.google.com https://facebook.com https://platform.twitter.com");
header("Referrer-Policy: no-referrer-when-downgrade");
header("Feature-Policy: vibrate 'self'");