Tienda Wifi

Tienda Wifi
CiudadWireless es la tienda Wifi recomendada por elhacker.NET

Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon Cómo proteger correctamente la seguridad de WordPress


WordPress es el  gestor de contenidos CMS por excelencia y el más extendido entre la comunidad de desarrolladores, pero se calcula que 3 de cada 4 sitios hackeados utilizan WordPress. La seguridad en servidores y plataformas web es un aspecto muy importante, pero que no todos los administradores tienen en cuenta, o incluso no se toman el tiempo suficiente para configurarlos correctamente.







Fortalecer la seguridad en WordPress


Algunas buenas prácticas a la hora de configurar WordPress son:
  • Mover el directorio wp-content: esta acción ayuda a proteger al sitio contra ataques automatizados Zero Day.
    /** Permite mover el directorio wp-content **/
    define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/blog/wp-content' );
    define( 'WP_CONTENT_URL', 'http://example/blog/wp-content' );
  •  Cambiar el nombre de usuario admin: este usuario es el que viene por defecto, por lo que es uno de los primeros objetivos de un cibercriminal a la hora de realizar un ataque de fuerza bruta. En las versiones más recientes de WordPress, es posible seleccionar el nombre de usuario durante la instalación.
  • Mínima instalación de plugins: muchos de éstos son susceptibles a Cross-Site Scripting (XSS) e inyección de SQL; si se instalan pocos plugins se reducirán vectores de ataques.
  • Mover wp-config.php fuera del directorio raíz web: si movemos este archivo una carpeta más arriba del directorio web raíz, lograremos que no se vea la configuración de nuestro WordPress.
  • Quitar el listado de directorios en el servidor: WordPress sufre Full Path Disclosure lo que ayuda a realizar ataques como Path Transversal
  • Administración a través de SSL: a veces, el panel de administración se usa por protocolo sin cifrar HTTP, pero si ingresamos mediante HTTPS estamos enviando los datos encriptados, lo que dificulta la intercepción de información y evita ataques de tipo MITM.
    define( 'FORCE_SSL_ADMIN', true ); //Forzar inicio de sesión seguro administración
    define( 'FORCE_SSL_LOGIN', true ); //Forzar inicio de sesión seguro
  •  Usar la base de datos sin privilegios de administrador cuando no se requiere: por defecto WordPress solo usa una base de datos de usuarios para todos ellos. Pero con algunos ajustes de código se puede usar un usuario de una base con menos privilegios para usuarios anónimos, lo que reduce considerablemente los riesgos.
  • Mantener usuarios con privilegios mínimos: existe la posibilidad de que un usuario con privilegios de administrador tenga una contraseña débil. Concediendo a los usuarios los privilegios indispensables se reducen las posibilidades de que se vean comprometidas sus cuentas.
  • Sacar el “Powered by WordPress” del pie de página: los ciberdelincuentes usan este pie de página en buscadores para encontrar potenciales víctimas vulnerables. Para ocultar esa información, tienes que incluir la siguiente línea en el archivo functions.php de tu WordPress:
 Remove_action('wp_head', 'wp_generator');
  • Lista blanca de IP para acceder al wp-login.php: generalmente los administradores acceden a su blog desde la misma dirección IP, por lo que se configuran estas direcciones como “de confianza” para poder acceder.
  • Cambiar el prefijo de las tablas de las bases de datos  
    /** Prefijo de las tablas de la base de datos, cambiarlas
    siempre en lo posible
    por seguridad */
    $table_prefix  = 'ehn_'; //Sólo números, letras y guiones bajos por favor!


Evitar la ejecución de PHP 

Otra cosa que recomendamos hacer es fortalecer el directorio wp-content/uploads colocando un .htaccess con el siguiente código dentro:

<Files * .php>
deny from all
</Files>

Esto evitaría la ejecución de cualquier script PHP desde el directorio de uploads en un entorno Apache. Incluso si un atacante pudiera cargar su puerta trasera, no podría hacer mucho con él. 

Cómo saber si tu WordPress ha sido hackeado


No esperes ver un defacement en la portada de tu sitio web, eso no les interesa a los atacantes, prefieren que tu no puedas ver que has sido hackeado mientras ellos distribuyen usando tu blog todo tipo de malware.

Los principales indicadores que sitio web ha sido comprometido son:

Indicadores comunes de un sitio web hackeado WordPress

  • Advertencias lista negra de Google, Bing, McAfee
  • Comportamientos extraños o anormales navegador
  • Correo no deseado en el contenido del motor de búsqueda
  • La notificación de suspensión sitio web por parte de tu hosting
  • Las modificaciones del archivo o temas centrales de integridad
  • Advertencias en los resultados de búsqueda de Google (SEO envenenamiento)
  • Renombrar fichero wp-login.php para evitar ataques por fuerza bruta (logear intentos e instalar captcha)
Otra opción para proteger wp-login de ataques de fuerza bruta (muy habituales) sería utilizando el WAF (Web Aplication Firewall) de CloudFlare que es totalmente gratuito e incluye reglas habituales para el CMS WordPress a parte de reglas genéricas "CloudFLare Specials" de funciones PHP.

Ataques Fuerza Bruta WordPress wp-login.php


Podemos crear una sencilla regla en el firewall de CloudFlare para prevenir ataques de fuerza bruta de la página de login del CMS Wordpress

También en el plan gratuito podemos hasta 5 reglas del Firewall (en el plan de pago pro 20 reglas.

Ejemplo regla:

(http.request.uri.path contains "/wp-login.php" and ip.geoip.country ne "ES") 

Si el request URI (si la URL) incluye wp-login.php y la IP no sea de España pues podemos mostrar un captcha Challenge (Captcha) o bloquear (Block) directamente.

O instalar plugins gratuitmos como:

  • Limit Login Attempts Reloaded
  • WP Limit Login Attempts

Proteger - Securizar - Hardening - WordPress



  • Mantener actualizada la versión Core (Núcleo) de WordPress
  • Mantener actualizados los Plugins
  • Mantener actualizados los Themes (temas de diseño)
  • Usar themes y plugins con buena reputación
  • Evitar usar contraseñas y/o usuarios por defecto (admin) y/o contraseñas débiles 
 Sentencia SQL para cambiar el usuario Admin por nuestro usuario
UPDATE wp_users SET user_login = 'elhacker' WHERE user_login = 'admin';

 Estructura interna de WordPress

/ 
The root WordPress directory: all files should be writable only by your user account, except .htaccess if you want WordPress to automatically generate rewrite rules for you.
/wp-admin/ 
The WordPress administration area: all files should be writable only by your user account.
/wp-includes/ 
The bulk of WordPress application logic: all files should be writable only by your user account.
/wp-content/ 
User-supplied content: intended to be writable by your user account and the web server process.
Within /wp-content/ you will find:
/wp-content/themes/ 
Theme files. If you want to use the built-in theme editor, all files need to be writable by the web server process. If you do not want to use the built-in theme editor, all files can be writable only by your user account.
/wp-content/plugins/ 
Plugin files: all files should be writable only by your user account.

En el fichero de configuración: wp-config.php

// automatic wordpress updates
//https://codex.wordpress.org/Configuring_Automatic_Background_Updates
define( 'WP_AUTO_UPDATE_CORE', true );

# Disables all core updates:
define( 'WP_AUTO_UPDATE_CORE', false );
# Enables all core updates, including minor and major:
define( 'WP_AUTO_UPDATE_CORE', true );
# Enables core updates for minor releases (default):
define( 'WP_AUTO_UPDATE_CORE', 'minor' );



Para los Themes y plugins añadir:

add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
Recuerda también cambiar las "secret keys" (security keys) en el fichero de configuración:
Introducido por primera vez en WordPress versiones 2.5, 2.6 y 2.7
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
 Usar SSL/TLS, es decir, https si tu hosting lo soporta o lo implementa:

define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

Otra opción no recomendada sería evitar todo tipo de cambios desde el escritorio

Si quieres evitar que desde la administración de WordPress se pueda modificar el código de ficheros, puedes añadir la siguiente línea al fichero wp-config.php
define( ‘DISALLOW_FILE_EDIT’, true );

Si la web ya está creada y no necesitas añadir nuevos plugins o plantillas, también puedes deshabilitar la instalación de temas y plantillas añadiendo:


define(‘DISALLOW_FILE_MODS’,true)

También sería útil cambiar el prefijo (prefix) por defecto de las tablas de wp:

 
$table_prefix = 'wp_';

Plugins de Seguridad en WordPress


Usar algún plugin de seguridad como el de Sucuri , iThemes o Acunetix:


El plugin de Sucuri se encarga de:

  • Security Activity Auditing
  • File Integrity Monitoring
  • Remote Malware Scanning
  • Blacklist Monitoring
  • Effective Security Hardening
  • Post-Hack Security Actions
  • Security Notifications
  • Website Firewall (add on)

Ocultar la versión de WordPress:

Por defecto WordPress tiene una meta etiqueta con el número de la versión:

meta name="generator" content="WordPress " /
 Una opción sería:

remove_action('wp_head', 'wp_generator');

Pero sigue apareciendo en el feed de RSS.

Así que es mejor usar una función en el fichero functions.php para ocultar la versión en todas partes:

function wpversion_remove_version() {
return '';
}
add_filter('the_generator', 'wpversion_remove_version');

Actualizaciones de seguridad programadas automáticas 


 O puedes usar un cliente en línea de comandos como wp-cli

Puedes programar para actualizar WordPress con una sencilla tarea programa si la necesidad de usar el navegador.

Ejemplo actualización del WordPress hwagm.elhacker.net

Core:
/usr/local/bin/php /home/hwagm.elhacker.net/wp-cli.phar --path=/home/hwagm.elhacker.net/public_html/hwagm-elhacker-net core update 
Plugins

/usr/local/bin/php /home/hwagm.elhacker.net/wp-cli.phar --path=/home/hwagm.elhacker.net/public_html/hwagm-elhacker-net plugin update --all
Themes

/usr/local/bin/php /home/hwagm.elhacker.net/wp-cli.phar --path=/home/hwagm.elhacker.net/public_html/hwagm-elhacker-net theme update --all

Permisos


Following is a list of desired permissions on sensitive items and fallback options:
  • wp-config.php
    • Desired: 400
    • Fallback: 440, 600, 640
  • uploads folder
    • Desired: 755
    • Fallback: 766, 777 (not recommended)
  • .htaccess files
    • Desired: 400
    • Fallback: 440, 444, 600, 640
 Podemos también proteger WordPress usando ficheros .htaccess

Protegiendo el fichero wp-config.php para que no sea visible vía el navegador
<files wp-config.php>
order allow,deny
deny from all
</files>

O restringir el acceso vía ip (si tenemos una ip fija) del fichero wp-login.php

order deny,allow
Deny from all
# allow access from my IP address
allow from 192.168.5.1
Deshabilitar XML-RPC

Si te decides a deshabilitar XMLRPC, puedes hacerlo manualmente o utilizando el plugin XMLRPC Disable.

Para hacerlo manualmente has de añadir esta línea en el fichero functions.php:
 
 add_filter('xmlrpc_enabled', '__return_false'); 

O usar un fichero htaccess:

## block any attempted XML-RPC requests

order deny,allow
deny from all
allow from 123.123.123.123
Y si usamos ngninx en vez de Apache.


## block any attempted XML-RPC requests
location = /xmlrpc.php {
    deny all;
}

Los backdoors  suelen usar las siguientes funciones de PHP:

Funciones para deshabilitar en PHP
  • base64
  • str_rot13
  • gzuncompress
  • eval
  • exec
  • create_function
  • system
  • assert
  • stripslashes
  • preg_replace (with /e/)
  • move_uploaded_file

 Avanzado - Cabeceras de Seguridad en WordPress


La mejor forma de añadir esta cabecera sería añadiendo unas líneas de código al archivos functions.php del tema de WordPress que estemos usando. Este archivo se encuentra en la ruta wp-content/themes/NOMBRE_TEMA, en donde NOMBRE_TEMA es el nombre del tema que tenemos activado. En primer lugar, haremos una copia de seguridad del archivo functions.php. Después lo editamos y añadimos el siguiente código al final del mismo:

add_action( 'send_headers', 'add_header_xframeoptions' );
function add_header_xframeoptions() {
header( 'X-Frame-Options: SAMEORIGIN' );
}
add_action( 'send_headers', 'add_header_seguridad' );
function add_header_seguridad() {
header( 'X-Content-Type-Options: nosniff' );
header( 'X-Frame-Options: SAMEORIGIN' );
header( 'X-XSS-Protection: 1;mode=block' );
}


Existen otras maneras de poner añadir esta cabecera . Si tenemos Apache como servidor web podremos usar el fichero .htaccess, agregando el código que se indica a continuación:

Header always append X-Frame-Options SAMEORIGIN


En el caso de usar Nginx, habría que introducir el siguiente código en el fichero de configuración de Nginx:
 
add_header X-Frame-Options SAMEORIGIN;

Ver más opciones de cabeceras de seguridad:
https://blog.elhacker.net/2016/03/cabeceras-http-opciones-de-seguridad-hardering-en-el-servidor-web-apache-nginx.html

3 comentarios :

DayZ dijo...

renombrar archivos del core no es buena idea ya que frente a una actualización vuelven al original como es el caso de wp-login.php es recomendable usar un plugin como el siguiente que ademas permite un maximo de logins:
https://wordpress.org/plugins/rename-wp-login/

Tambien logear logins exitosos y fallidos para detectar ataques no previstos
https://wordpress.org/plugins/user-login-log/

Por ultimo el post habla de RPC pero versiones nuevas usan UNA API REST que deberiamos bloquear si no pensamos usarla:
https://wordpress.org/plugins/disable-json-api/

PatyMovies dijo...

ya solucionaron varios fallos en wordpress, aunque no está de mal aprender todo esto, gracias, aunque no entiendo un carajo. pero es interesante todo lo que aportan aquí. gracias mis panas. saludos de dominicana.

Unknown dijo...

How to print your own checks (1).pdf

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.