domingo, 28 de febrero de 2010

Peligros en el e-Mail

Hoy vamos a ver uno de los "peligros" del correo electronico, y no, no me refiero a el malware, ni al spam ni a nada asi (aunque lleva tanto tiempo ahi como ellos, o aun mas) , sino a algo que incluso se utiliza en correos legitimos (o al menos eso parecen)

Esto es, los correos con HTML

En un principio se podria pensar que esto no tiene nada de malo, se usa HTML en paginas web y no hay ningun problema, ¿verdad?... el problema esta en que se puede utilizar para obtener informacion que no suele ser bueno hacer publica, como la direccion IP utilizada

Veamos como funciona:

Mandamos un correo electronico a una direccion... usuario@example.org , cuando se abra el correo se mostrara el contenido en HTML (a menos que se configure el cliente de correo para que no lo haga) y al mostrar una imagen (por ejemplo), el cliente se conecta al servidor donde esta la imagen, que puede capturar informacion interesante del cliente como la IP, el navegador/cliente utilizado, etc...

Vamos alla, para esto usamos dos archivos, uno PHP (o lo que se utilize en el servidor web que se va a utilizar) y una imagen (o cualquier cosa que haga que el cliente se comunique con nuestro servidor, la imagen es lo mas sencillo y encaja perfectamente en un correo)

El archivo PHP solo tiene que hacer una cosa, guardar los datos del cliente y mandarle la imagen, un ejemplo seria:

<?php
$fname="log.txt"; // archivo donde se guardan los logs

$f=fopen("$fname","a"); // Abrimos el archivo y lo preparamos
// para seguir escribiendo
fwrite($f,"IP: ".$_SERVER['REMOTE_ADDR']."\n"); // Guardamos la IP del cliente
fwrite($f,"Navegador: ".$_SERVER['HTTP_USER_AGENT']."\n"); // y tambien la
//informacion del cliente
fwrite($f,"---------------------\n"); // Para hacer el archivo mas facil de leer
fclose($f);
// Imagen a mostrar
$img="esfera.png";
// Redireccionamos al cliente a la imagen
header("Location: $img");
?>
Como se puede ver, el codigo es bastante simple, abrir un archivo, escribir un par de variables interesantes (en este caso, la IP y el cliente), y redireccionar el cliente a la imagen, se podria hacer que lea la imagen y la envie al cliente, que seria una solucion mas fiable (si alguien sigue la direccion de la imagen se dara cuenta del truco)

Y ya esta, le enviamos el correo a alguien y...

El primero es abriendolo con el Thunderbird (como se puede ver en Navegador), y la segunda con un webmail (el navegador es Firefox)
Y ya tenemos la IP de a quien se le envio el correo

La siguiente vuelta de tuerca es hacer que en los logs tambien aparezcan las direcciones asociadas a cada IP, solo hay que añadir otra variable

<?php
$fname="log.txt"; // archivo donde se guardan los logs

$f=fopen("$fname","a"); // Abrimos el archivo y lo preparamos
// para seguir escribiendo
fwrite($f,"Direccion: ".$_REQUEST['mail']."\n");
fwrite($f,"IP: ".$_SERVER['REMOTE_ADDR']."\n"); // Guardamos la IP del cliente
fwrite($f,"Navegador: ".$_SERVER['HTTP_USER_AGENT']."\n"); // y tambien la
//informacion del cliente
fwrite($f,"---------------------\n"); // Para hacer el archivo mas facil de leer
fclose($f);
// Imagen a mostrar
$img="esfera.png";
// Redireccionamos al cliente a la imagen
header("Location: $img");
?>

Ahora ademas no se puede simplemente usar la imagen como antes (simplemente indicando su URL) ahora ademas hay que añadir ?mail=usuario@correo.aaa, por ejemplo, para mandarselo a "joe@gmail.com", utilizando la imagen http://aaa.com/imagen.php, habria que indicar http://aaa.com/imagen.php?mail=joe@gmail.com en la direccion de la imagen, el resultado es este:


Y en los dos casos el email parece completamente inofensivo:

 Si, vale, no hay texto y la imagen que envie es de otro post, pero para mostrar la idea sirve

Tambien esta la opcion de incluir una imagen que solo tenga un pixel y que ademas es 100% transparente, asi que no se puede ver sin comprobar el codigo del mensaje

La solucion

La forma mas facil de evitar el problema (aparte de no abrir correos que no sean fiables) es deshabilitar el HTML en el cliente de correo (o en el webmail), Thunderbird, por ejemplo, pide confirmacion para leer HTML por defecto

Hasta otra!!

No hay comentarios:

Publicar un comentario