03 marzo 2015

No me toques la web, que me entero

Uno de los problemas de seguridad más comunes es la modificación de un website por parte de un atacante. Tanto en su versión 'deface' como en otras vertientes mucho peores.

Hoy día es muy común sufrir un ataque a un CMS como Joomla o Wordpress y que la web termine sirviendo para distribuir malware mediante la inyección de alguna suerte de código en HTML/Javascript.

Hace unos días leí en NIXCRAFT un interesante artículo donde reseñaban la herramienta incron. Una herramienta que, aprovechando Inotify(), permite detectar en tiempo real cuando se modifica un fichero o directorio y lanzar un comando.

Con esta herramienta resulta muy fácil crear un pequeño sistema HIDS para que nos avise en tiempo real si algún fichero del directorio que contiene nuestra web sufre algún cambio (o aparece un nuevo fichero)

Lo primero que hemos de hacer es instalar dicha herramienta. Vamos a usar Fedora como sistema base aunque trasladar el concepto a un entorno Debian resulta trivial.

# yum -y install incron

Con esto ya tendremos instalado el software base para poder configurar nuestro mini-HIPS.

Ahora vamos a instalar ciertos módulos Perl para poder generar correos electrónicos cuando se detecte un evento

# yum -y install perl-Email-MIME
# yum -y install perl-Email-Sender

Y usaremos este simple script para enviar correos:

#!/usr/bin/perl
use strict;
use warnings;
use Email::MIME;
 
my $message = Email::MIME->create(
  header_str => [
    From    => 'alerts@example.com',
    To      => 'yjesus@example.com',
    Subject => 'Alerta cambio WEB',
  ],
  attributes => {
    encoding => 'quoted-printable',
    charset  => 'ISO-8859-1',
  },

  body_str => "Cambio de tipo @ARGV[0] en fichero @ARGV[1]"
);

use Email::Sender::Simple qw(sendmail);
sendmail($message);

Tan solo hay que 'customizar' el correo origen y el destino.

Copiamos dicho script a /usr/local/bin y le damos el correspondiente chmod +x 

# cp sendalert.pl /usr/local/bin/
# chmod +x /usr/local/bin/sendalert.pl

Y arrancamos incrond

# service incrond start

Ahora vamos a crear la correspondiente entrada para monitorizar el directorio /var/www/html (donde típicamente se almacena un site web ...)

# incrontab -e

Y en el editor pulsamos 'a' para poder escribir y añadir:

/var/www/html IN_MODIFY,IN_ATTRIB,IN_CREATE,IN_DELETE /usr/local/bin/sendalert.pl "$% $#"

Luego pulsamos 'Esc' y :wq 

Con esto ya tendremos nuestro sistema de alerta temprana para cambios en el sitio web. Una vez algo se modifique recibiremos un correo parecido a este:

10 comments :

Jask dijo...

Muy interesante.


Gracias

Sanchez dijo...

al ser activo no es muy util, es mejor SALAMANDRA

Jesus T. dijo...

Hola.
Si en vez de Fedora o Debian, es Centos como en mi caso ¿es posible también poder instalarlo?
¿Y por SSH, Root o desde el panel Direct Admin?
Te agradezco la ayuda.
Gracias y saludos.

Yago Jesus dijo...

Claro que lo puedes instalar sin ningún problema. Si no está en el repositorio oficial, seguro que está empaqueado en EPEL o alguno parecido.

Yago Jesus dijo...

Muchas gracias !!

Yago Jesus dijo...

Disculpa, no entiendo lo que significa 'ser activo' ...

Iván G. G. dijo...

para páginas personales y cosas parecidas..puede tener un pase..
para páginas con mucho tráfico, en las que en ciertas carpetas se está generando constantemente contenido.. etc es inviable. aparte hay que tener en cuenta que no es necesario modificar ningun archivo ni crear nada en el filesystem para colar una shell o contenido malicioso en casi cualquier cms

no obstante es interesante conocer que por lo menos existen..

Javier dijo...

Buenas! Tu artículo es muy claro e interesante. Solo una nota, los "comandos" al editar, sirven solamente si tienes vi/vim como editor predeterminado, verdad? O sea, los que tengan otros, como nado, emacs, mcedit, puede que no se salga de ese modo. Corrígeme por favor si estoy equivocado. Gracias!

Maldito Nerd dijo...

Incron no es recursivo. Para el escenario al se hace mención en este artículo no sirve.

Yago Jesus dijo...

Efectivamente, si tienes vim por editor. Creo que es la opción más habitual