Prevenir ataques en blogs WordPress y otros, seguridad básica

seguridadCasi todos los que tenemos un blog hemos enfrentado problemas de seguridad relacionados a ataques de terceros contra nuestra cuenta. Generalmente esos ataques son los llamados blind attacks, o ataques ciegos, ya que no son directamente dirigidos a nosotros, si no que a todos los sitios con determinadas características, por ejemplo, todas las instalaciones de WordPress 2.8 donde aun exista la vulnerabilidad X. Para evitar este tipo de ataques conviene tomar medidas básicas de seguridad, que si bien no frenarán el 100% de los ataques, un gran porcentaje será frenado.

1) Listado de directorios

No es para nada conveniente que dejes la opción de listar directorio en tu sitio web, algunos sitios tienen los directorios abiertos de modo que los archivos de un directorio están visibles y es posible ejecutar acciones sobre ellos. Por ejemplo, como experiencia personal, el sitio de una inmobiliaria para la que hacía un trabajo, tenía un directorio de scripts listado, donde se veían funciones del tipo: "deleteImages.php", o "deleteUser.php". Bastante peligroso, ¿Cierto?

Para evitar el listado de directorios, recomiendo modificar el archivo .htaccess en la raíz del sitio web, agregando la línea:

Options -Indexes

Esto no permitirá que los directorios muestren sus contenidos.

2) Redirige los resultados a una página de error amistosa y loguea los eventos de este tipo.

Esto es conveniente para que los sitios no den un feo error 403, si no que muestren algo mas descriptivo de lo que está pasando, a modo de ejemplo, dejo algo interesante para agregar a nuestro .htaccess

ErrorDocument 403 /403.html
ErrorDocument 404 "That page was <b>not found</b>."
ErrorDocument 401 /login/unauthorized.cgi

 

3) Evita caracteres especiales en la URL

Muchas veces los ataques son generados insertando parámetros a las peticiones http que genera nuestro sitio, o código para generar SQL Inyections. Podemos, y conviene ampliamente, evitar lo mas posible la introducción de estos caracteres en las URLs. Para ello podemos editar nuestro .htaccess con lo siguiente:

SetEnvIf Request_URI "’" bad_bot=1

SetEnvIf Request_URI ‘"’ bad_bot=1

SetEnvIf Request_URI ‘`’ bad_bot=1

SetEnvIf Request_URI ‘%22’ bad_bot=1

SetEnvIf Request_URI ‘%27’ bad_bot=1

SetEnvIf Request_URI ‘%60’ bad_bot=1

<Limit HEAD GET POST>

Order Allow,Deny

Allow from all

Deny from env=bad_bot

</Limit>

Con esto estamos evitando que se introduzcan los caracteres ", ‘ y `.

4) Evitar el hotlinking.

Muchas veces los blogs roban las imágenes de sitios sin pedir permiso, lo malo es que están robando ancho de banda del sitio en el que está la imagen, solo imaginate que tenes una imagen con el cartel de la última película de Brad Pitt, y un gil de taringa sube la película y linkea la imagen de tu sitio, seguro te quedas sin transferencia mensual en un rato.

# Con esto permitimos solo que las imagenes sean desde nuestro sitio 
#(Cambiar tulugar.com.uy por la url de tu sitio)

SetEnvIf Referer "^http://www.tulugar.com.uy/" from_me=1

SetEnvIf Referer "^http://www.tulugar.com.uy/" from_me=1

SetEnvIf Request_URI .jpg has_image=1

SetEnvIf Request_URI .gif has_image=1

SetEnvIf Request_URI .png has_image=1

SetEnvIf Request_URI .bmp has_image=1

RewriteEngine on

RewriteCond %{env:has_image} 1

RewriteCond %{env:from_me} !1

RewriteRule (.*) /block_image_theft.php [l]

5) Borra huellas digitales

Todos los sistemas que instalamos, sobre todo aquellos de uso masivo, tienen huellas digitales por las cuales pueden identificar nuestro sistema.

Con esto me refiero, a la versión de wordpress comentada en el html, un footer con la info del sitio, etc. Es conveniente que toda esta información sea removida por completo, a modo que los bots que buscan determinados sitios sigan de largo, y no nos marquen como posible sitio a atacar.

Un ejemplo, en WordPress podemos ver el meta:

<meta name="generator" content="WordPress 2.8.4" />

Lo cual deja al descubierto no solo que sistema usamos, si no que también, que versión del mismo.

6) Es mejor dejar información falsa, que no dejar información

Es preferible, dejar información que confunda a los atacantes, que no dejar nada, por ejemplo, en vez de Powered by WordPress, que diga, Powered by Panchito. Otra cosa, si por ejemplo evitamos el listado de directorios, es mejor mostrar un html con archivos falsos, que devolver un error 403.

7) Manten el sistema patcheado.

Este punto no necesita mayor explicación, todo el sistema debe estar con los parches actualizados, desde la versión de Php/Asp, MySql/Sql, el sistema operativo sea cual sea, el script que utilizamos, todo, en absoluto debe tener los parches al día. Personalmente recomiendo verificar la disponibilidad de parches todos los días, dependiendo la cantidad de visitas, en un blog como este, cada 7 días está Ok.