"Porque la seguridad no sólo depende de WordPress, sino del que lo usa"
Mi nombre es José J. Peleato Pradel.
Seguridad (del latín securitas) es definido como la cualidad de seguro. Ausencia de riesgo o la confianza en algo o en alguien.
Conjunto de medidas preventivas y reactivas de las organizaciones y de los sistemas tecnológicos que permiten resguardar y proteger la información buscando mantener la confidencialidad, la disponibilidad, integridad y autenticación (autentificación) de la misma.
El concepto de seguridad de la información no debe ser confundido con el de seguridad informática, ya que este último solo se encarga de la seguridad en el medio informático, pero la información puede encontrarse en diferentes medios o formas, y no solo en medios informáticos.
Más conocido cómo ciberseguridad o seguridad de tecnologías de la información, es definido como el área de la informática que se enfoca en la protección de la infraestructura computacional y su almacenamiento (información), para garantizar su confidencialidad, integridad y disponibilidad.
"El objetivo de la seguridad informática consiste en minimizar los riesgos en una infraestructura computacional"
Existen varios tipos de amenazas, debido a que no solo son amenazas las que surgen de la programación y el funcionamiento de un dispositivo de almacenamiento, también hay otras circunstancias que deben ser tomadas en cuenta e incluso “no informáticas”. Muchas son a menudo imprevisibles o inevitables.
Existen infinidad de modos de clasificar un ataque y cada ataque puede recibir más de una clasificación.
"El concepto de crackers y hackers no debe ser confundido, ya que su comportamiento y ética es diferente"
Término que hace referencia a las personas que “rompen” algún sistema de seguridad. Los crackers pueden estar motivados por una multitud de razones, incluyendo fines de lucro, protesta, o por el desafío. Acciones desautorizadas contra sistemas de seguridad.
Termino que hace referencia a todo individuo que se dedica a programar de forma entusiasta, o sea un experto de cualquier tipo y que considera que poner la información al alcance de todos constituye un bien mayor.
La motivación de estas personas es desarrollar software en su tiempo y después distribuirlo de forma gratuita con la comunidad. También incluye a aquellos que encuentran, depuran y arreglan errores en los sistemas (vulnerabilidades).
Malicius software, también llamado, badware, código maligno, software malicioso o software malintencionado, es un tipo de software que tiene como objetivo infiltrarse o dañar una infraestructura computacional o sistema de información sin el consentimiento de su propietario.
"Malware, no es lo mismo que software defectuoso"
Explotar o aprovechar, fragmento de software, fragmento de datos o secuencia de comandos y/o acciones, utilizada con el fin de aprovechar una vulnerabilidad de seguridad de un sistema de información para conseguir un comportamiento no deseado del mismo.
Se considera exploit un ataque de ingeniera social, que consiste en convencer o sonsacar a una víctima cierta información.
Un virus informático es un malware que tiene como objetivo el alterar el funcionamiento normal del ordenador, sin el permiso o el conocimiento del usuario.
El primer virus de la historia atacó a un equipo IBM Serie 360. Fue llamado Creeper, creado en 1972. Este software creaba periódicamente en pantalla el mensaje “I’m a creeper… catch me if you can!” (Soy una enredadera… atrápame si puedes!). Para eliminar este problema se creó el primer programa antivirus denominado “Reaper” (Segador).
Malware que tiene la propiedad de duplicarse a sí mismo. Los gusanos se propagan de ordenador en ordenador, pero a diferencia de un virus, tiene la capacidad de propagarse sin la ayuda del factor humano.
El primer gusano informático de la historia data de 1988, cuando el gusano Morris infectó una gran parte de los servidores y se dieron cuenta que los gusanos informáticos se reproducen asexualmente. Su creador, Robert Tappan Morris, fue sentenciado a tres años en prisión y obtuvo libertad condicional, 400 horas de servicios a la comunidad y una multa de 10.050 dólares, gracias a su familia que pagó la fianza. Fue este hecho el que alertó a las principales empresas involucradas en la seguridad de tecnologías tales como Nirdesteam que fue uno de los primeros en desarrollar el primer cortafuegos (firewall).
Troyano o caballo de Troya, es un software malicioso que se presenta al usuario como un programa aparentemente legitimo e inofensivo, pero que, al ejecutarlo, le brinda al atacante acceso remoto al equipo infectado con todos sus privilegios.
Un troyano no es un virus informático. La diferencia consiste en su finalidad.
En sus origines fueron utilizados como arma de sabotaje por los servicios de inteligencia como la CIA, cuyo caso más emblemático fue el sabotaje al gasoducto Siberiano en 1982.
Puerta trasera es una secuencia especial dentro del código de programación, mediante la cual se pueden evitar los sistemas de seguridad del algoritmo (autentificación) para acceder al sistema.
Un rootkit consiste en un acceso de privilegio continuo a un ordenador pero que mantiene su presencia oculta al control de los administradores al corromper el funcionamiento normal del sistema operativo o de otras aplicaciones.
Tipo de software o dispositivo hardware especifico que se encarga de registrar las pulsaciones que se realizan en el teclado, para posteriormente almacenar la información en un archivo o ser enviadas a través de Internet.
Sistemas de publicidad basados en programación computacional. Un programa de clase adware es cualquier programa que automáticamente muestra u ofrece publicidad web ya sea incrustada en una página web mediante gráficos, carteles, ventanas flotantes o durante la instalación de algún programa al usuario con el fin de generar lucro a sus autores.
Programa espía que consiste en un malware que recopila información de un ordenador y después transmite esta información a una entidad externa sin el conocimiento del propietario del ordenador.
Tipo de software diseñado para la ejecución de delitos financieros en entornos en línea.
Diseñado mediante técnicas de ingeniera social para generar fraude en línea, con el fin de conseguir el robo de identidades para acceder a los datos de usuario de las cuentas de compañías de servicios financieros.
Método de infiltración de código que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de entradas para realizar operaciones sobre una base de datos.
SELECT * FROM user WHERE name = '" + nombreUsuario + "';
SELECT * FROM user WHERE name = 'jjpeleato';
SELECT * FROM user WHERE name = 'jjpeleato';DROP TABLE user;SELECT * FROM record WHERE name LIKE '%';
Cross-site scripting es un tipo de inseguridad informática o agujero de seguridad típico en las aplicaciones Web.
Permite a una tercera persona inyectar en páginas web visitadas por el usuario código JavaScript o en otro lenguaje de script.
http://www.example.com/home.php?frame=menu.php
javascript:while(1)alert("Mensaje infinito");
DoS (Denial of Service) o DDoS (Distributed Denial of Service (Ataques de denegación de servicios).
Consiste en un ataque a un sistema (ordenadores, servidores o red) que causa que un servicio o recurso sea inaccesible a los usuarios.
Anonymous utiliza mucho este recurso para realizar sus ataques contra sus objetivos.
Termino que hace referencia a un conjunto o red de robots informáticos o bots, que se ejecutan de manera autónoma y automática. El atacante puede controlar todos los ordenadores/servidores infectados de forma remota.
Usos habituales:
Parte de código insertado intencionalmente en un programa informático que permanece oculto hasta cumplirse una o más condiciones preprogramadas, en ese momento se ejecuta una acción maliciosa.
Explotación de una vulnerabilidad en el software de los servidores DNS (Domain Name System) o en el de los equipos propios de los usuarios, que permite a un atacante redirigir un nombre de dominio a otra dominio distinto.
Suplantación de identidad, termino informático que denomina un modelo de abuso informático y que se comete mediante el uso de un tipo de ingeniería social, caracterizado por intentar adquirir información confidencial (contraseñas, número de tarjetas de crédito, información bancaria, etc.) de forma fraudulenta.
El método más conocido es suplantar un correo electrónico y redirigir mediante pharming a la víctima para reinicie la contraseña en una página anzuelo.
Modificación y falsificación de los paquetes enviados en una comunicación para suplantar la identidad y descifrar información confidencial como claves privadas para autentificaciones contra servicios o servidores.
WordPress, es un sistema de gestión de contenidos que ha alcanzado una gran relevancia con una cuota del 30.6% de uso a nivel mundial, 1 de cada 4 páginas web esta creada en WordPress.
Dada la importancia de ser una de las plataformas más utilizadas, a diario se convierte en objetivo de múltiples ciberataques.
Ver estadísticas W2Techs
Tabla | Definición |
---|---|
wp_commentmeta | Meta datos que incorporan cada comentario almacenado en wp_comments. |
wp_comments | Almacenamiento de comentarios. |
wp_links | Información relativa a los enlaces añadidos en la funcionalidad de enlaces de WordPress. Obsoleta actualmente. |
Tabla | Definición |
---|---|
wp_options | Almacenamiento de todos los ajustes de configuración de WordPress y plugins gestionado a través del panel de administración. |
wp_postmeta | Meta datos que incorporan cada posts almacenado en wp_posts. |
wp_posts | Almacenamiento de entradas, páginas y elementos de menú. |
Tabla | Definición |
---|---|
wp_termmeta | Meta datos que incorporan cada categoría/etiqueta. |
wp_terms | Almacenamiento de categorías, tanto de las entradas como de enlaces y las etiquetas de las entradas. |
wp_term_relationships | Asociación de las entradas y enlaces que hacen referencia a categorías y/o etiquetas. |
Tabla | Definición |
---|---|
wp_term_taxonomy | Describe la taxonomía (categoría, enlace o etiqueta) de cada línea de la tabla wp_terms. |
wp_usermeta | Almacenamiento de la información denominada data que cada usuario contiene. |
wp_users | Lista de usuarios. |
La estructura de archivos y carpetas de una instalación WordPress es muy sencilla. Consta de tres carpetas principales: wp-admin, wp-content y wp-includes y el conjunto de archivos de la carpeta raíz y subdirectorios, de los cuales destacamos los ficheros wp-config.php y .htaccess situados en el directorio base.
Directorio donde se almacena los ficheros de backend del core de WordPress.
Directorio donde se almacenan los contenidos específicos de nuestro proyecto.
Directorio donde se almacenan los plugins de terceros.
Directorio donde se almacenan los themes que hay en nuestra aplicación. Puedes haber un número indeterminado de themes pero solo uno de ellos estará activo. Existe la metodología de trabajo basada en una estructura de theme padre y theme hijo (usando el hijo como theme activo).
Directorio principal donde se almacenan todos los ficheros que se suban a la aplicación. Es el único directorio que va a tener permisos de escritura.
Directorio principal core de WordPress.
Fichero de configuración de WordPress, donde se almacenan las credenciales para conectar contra la base de datos, sistema de autentificación Uniques Keys y Salts, pefijo de las tablas de las base de datos, WordPress Debug, etc.
Recomendado tener permisos de solo escritura 444.
Fichero de configuración de servidor, que genera WordPress de forma automática con la instalación de la aplicación. Tiene como función mejorar la seguridad de WordPress. Ciertos plugins escriben en este fichero para aplicar seguridad u optimización al sitio web.
Recomendado tener permisos de solo escritura 444.
Siempre existe un riesgo. Nada garantiza que sea 100% seguro. Y a lo que te preguntaras “Si nunca voy a estar seguro ¿entonces para qué hacer algo?”.
Lo que se trata con las buenas prácticas es minimizar el riesgo, blindar WordPress.
La seguridad en WordPress depende en cómo se ha instalado y configurado.
Uno de los pasos más importantes es elegir un buen proveedor de alojamiento web.
Es recomendable buscar una solución que encaje dentro de nuestra horquilla de presupuesto, pero sin olvidar contratar un servicio con buenas políticas de seguridad y backups.
Debemos crear un procedimiento de forma manual o a través de plugins y crear un sistema de backups semanal.
Plugins recomendados:
Un usuario solo puede tener permisos de interactuar con la base de datos que trabajamos en nuestro proyecto WordPress y no tener acceso a ninguna más.
Utilización de un único usuario por base de datos y sitio.
Uso de contraseñas robustas
WordPress permite tener la instalación en un subdirectorio y trabajar desde la URL del dominio.
Es muy peligroso tener instalados plugins y temas inactivos. Cada tema o plugin puede llegar a ser una nueva puerta de acceso. Cuantos más haya, mas tendremos que supervisar. Y por lo tanto, aumenta la posibilidad de vulnerabilidades.
Insertar contenido en el fichero functions.php del theme activo.
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0);
Es recomendado ocultar los directorios de los plugins, dado que a través de la ruta http://www.example.com/wp-content/plugin/nombre_plugin podemos ver la estructura del esqueleto de estos mismos.
Para evitar este problema solo es necesario crear/copiar un fichero index.php tal y como tenemos en la carpeta raíz de plugins o themes.
Modificar prefijo "wp_" en el proceso de instalación para la creación de tablas en la base de datos.
Modificar los valores AUTH/SALT en el fichero wp-config.php
Modificar siempre valores AUTH/SALT si existe alguna vulnerabilidad en nuestra página web.
Fichero de configuración de servidor, que genera WordPress de forma automática con la instalación de la aplicación.
Tiene como función mejorar la seguridad de WordPress. Ciertos plugins escriben en este fichero para aplicar seguridad u optimización al sitio web.
# Proteger fichero wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>
# Proteger fichero .htaccess
<files .htaccess>
order allow,deny
deny from all
</files>
Es muy importante definir los permisos de escritura, lectura y ejecución en el sitio web.
Lo que nos recomienda WordPress:
Lo que te recomiendo:
Una versión obsoleta, es síntoma de un fallo de seguridad o algún otro bug, además, no solo WordPress, sino también los plugins y los temas tienen que actualizarse, ya que también pueden tener algún fallo de seguridad.
Si no estás utilizando un theme o plugin y lo tienes desactivado, eso no significa que estés libre de amenaza.
Practica obligatoria. Instalar cualquiera de los siguientes plugins de Seguridad WordPress, que proporcionan una capa extra de protección a tu web.
El sistema de usuarios de WordPress, es un sistema complejo en programación pero sencillo en su gestión.
NO dar permisos sobredimensionados a usuarios que solo desempeñan papel de editor.
Es una práctica no recomendada el uso de un nombre común como acceso a la aplicación, nombres como admin, Admin, administrador, root, etc son nombres que nunca se han de utilizar, ya que son los primeros que comprobara un cracker mediante ataques de fuerza bruta.
Mediante técnicas de escáner contra un proyecto WordPress si un usuario modifica el Alias o Mostrar este nombre públicamente con un nombre diferente al usuario de login, no evitamos que puedan encontrar nuestro nombre de acceso, ya que user_nicename mantendrá el mismo nombre.
user_login: c2Ia_jjpeleato
user_nicename: jjpeleato
Alias (Zona administración): jjpeleato
display_name: jjpeleato
Si se permiten los registros de usuario se debe proteger contra los usuarios que se registrar masivamente para intentar acceder a su configuración, añadir comentarios spam o incluso inyectar malware.
Para detectar y eliminar la amenaza de sploggers una correcta práctica es la instalación del plugin.
WangGuard: https://wordpress.org/plugins/wangguard/
Brute force o ataque de fuerza bruta es un método utilizado para obtener contraseñas. Consiste en ir probando diferentes combinaciones comunes hasta dar con la correcta. Si utilizas contraseñas poco seguras como “123456”, “admin”, etc o contraseñas con relación a tu vida, con ataques de fuerza bruta e ingeniería social las probabilidades de que consigan obtener tu contraseña son altas.
Utiliza contraseñas de 9 caracteres como mínimo, recomendable 12. Nunca utilices la misma contraseña en más de una web y utiliza combinaciones de números, letras minúsculas, mayúsculas y caracteres especiales. Además nunca utilices contraseñas que tengan relación con tu vida.
Anular los errores de la página de Login y mostrar cualquier mensaje informativo genérico, de esta forma evitamos que WordPress de información importante, como que el ERROR: Nombre de usuario inválido o ERROR: La contraseña que introdujo para el usuario “x” no sea correcta.
function login_errors_message() {
return 'Error: Nombre de usuario o contraseña incorrectos';
}
add_filter('login_errors', 'login_errors_message');
Inhabilitar el registro de usuarios, añadir un sistema de comprobación humano como reCaptcha o WP Captcha e instalar un plugin para evitar y bloquear acceso masivos como Limit login attempts.
Limit Login Attempts: https://es.wordpress.org/plugins/wp-limit-login-attempts/
WP Captcha: https://es.wordpress.org/plugins/wp-captcha/
Por defecto, WordPress dispone de un sistema de rutas de login para acceder al panel de administración http://example.com/wp-admin y accedes a través de http://example.com/wp-login.php
Rename wp-login.php: https://wordpress.org/plugins/rename-wp-login/
Una de las tareas habituales de cualquier administrador de un gestor de contenidos es controlar el SPAM en los comentarios. Evitar contenido innecesario, enlaces no deseados y posible inyección de código.
Plugins recomendados:
Agregar en el fichero .htaccess
# Proteger XMLRPC
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
#END Proteger XMLRPC
Eliminar el archivo xml-rpc.php de la carpeta raíz.
Prevenir y desactivar el código HTML en los comentarios. No borra el código, sino que lo procesa para que no se ejecute.
add_filter('pre_comment_content', 'wp_specialchars');
Dar de alta tu sitio en la aplicación Google Search Console para que Google te informe de:
¿Tod@s bien?
Instalación desde 0 y backup
jjpeleato.com/download/wp_install.pdfInstalación entorno AMP en local.
Poner sitio web en modo mantenimiento. Una vez que dispongamos de una copia de seguridad con la última versión, eliminamos todo el proyecto y base de datos.
Descargar todo el código y exportar base de datos.
Crear fichero 503.php
<?php
header("HTTP/1.1 503 Service Temporarily Unavailable");
header("Status: 503 Service Temporarily Unavailable");
header("Retry-After: 3600");
?>
<html>
Página web en mantenimiento
</html>
Crear fichero .htaccess
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^111\.111\.111\.111
RewriteCond %{REQUEST_URI} !/503.php$ [NC]
RewriteRule .* /503.php [R=302,L]
Si disponemos de una copia de seguridad estable y con la mínima perdida de información. La opción más rápida y a la vez segura, es restaurar WordPress desde la copia de seguridad.
SELECT *
FROM wp_options
WHERE (
option_id LIKE '%base64_decode%'
OR option_name LIKE '%base64_decode%'
OR option_value LIKE '%base64_decode%'
OR autoload LIKE '%base64_decode%'
OR option_id LIKE '%edoced_46esab%'
OR option_name LIKE '%edoced_46esab%'
OR option_value LIKE '%edoced_46esab%'
OR autoload LIKE '%edoced_46esab%'
OR option_name LIKE 'wp_check_hash'
OR option_name LIKE 'class_generic_support'
OR option_name LIKE 'widget_generic_support'
OR option_name LIKE 'ftp_credentials'
OR option_name LIKE 'fwp'
OR option_name LIKE 'rss_%'
AND option_name != 'rss_language'
AND option_name != 'rss_use_excerpt'
AND option_name != 'rss_excerpt_lenght'
)
ORDER BY option_id;
SELECT *
FROM wp_posts
WHERE (
post_content LIKE '%iframe%'
OR post_content LIKE '%script%'
OR post_content LIKE '%noscript%'
OR post_content LIKE '%display: none%'
OR post_content LIKE '%visibility: hidden%'
OR post_content LIKE '%position: absolute%'
OR post_content LIKE '%hidden%'
OR post_content LIKE '%top: -%'
OR post_content LIKE '%bottom: -%'
OR post_content LIKE '%right: -%'
OR post_content LIKE '%left: -%'
OR post_content LIKE '%-9999px%'
)
ORDER BY ID;
Descargamos la versión exacta de nuestra página web desde la página oficial de WordPress.
https://wordpress.org/download/release-archive/
Eliminar todos los directorios y archivos de WordPress, menos la carpeta wp-content y wp-config.php
Descomprimir en otra ruta, nunca hacerlo en la carpeta raíz, ya que no queremos sobrescribir nada de wp-content y copiar todos los ficheros de la carpeta raíz y los directorios wp-admin y wp-includes.
Nunca se debe descargar otra versión, puede generar problemas de incompatibilidad.
Verificar versión exacta de todos los plugins instalados.
https://wordpress.org/plugins/wordfence/developers/Nota: Esta sección no aparece en la página web en castellano.
No siempre será posible restaurar en producción una copia estable dada la actividad de nuestra página web o si se trata de un e-commerce.
Una de las tareas más difíciles y complicadas, es realizar una búsqueda manual del código malicioso. Para ello, disponemos de herramientas las cuales nos pueden ayudar a esta ardua tarea.
Google Search Console: https://www.google.com/webmasters/tools
Google informe de transparencia: https://goo.gl/u3bR0x
Sucuri Check: https://sitecheck.sucuri.net/
Crawler: https://www.screamingfrog.co.uk/
DiffMerge: https://sourcegear.com/diffmerge/
Notepad++: https://notepad-plus-plus.org/
Sublime: https://www.sublimetext.com/
Para la búsqueda de código malicioso, trabajaremos con la carpeta wp-content/themes, dado que el resto de archivos y directorios deberían estar limpios al restaurar el core y plugins.
Ejemplos patrones de búsqueda:
Una vez finalizado todo el proceso de limpieza de malware en nuestro portal web. El último paso es aplicar buenas prácticas a nuestra página.
Descargar práctica:
jjpeleato.com/download/wp_error.zip
Guía limpiar WordPress:
END!
Thank you very much!