Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Interceptando
conversaciones Messenger
David Puente Castro
Analizar hasta qu punto un protocolo puede considerarse como vulnerable, es algo que conlleva un gran esfuerzo, pero muy por encima podemos agruparlos en dos grupos: Los que ofrecen cifrado, y los que no. Aquellos que no lo hacen, deben de atenerse a las consecuencias.
A quien le puede interesar capturar conversaciones? No encontrar respuesta a esta pregunta resulta francamente complicado. Que sea o no ticamente correcto es un tema tratado ya en demasa y que depende nicamente de los fines de la persona que lo realiza. Capturar conversaciones realizadas a travs del software Messenger, aMSN, o todo que trabaje bajo el mismo protocolo, puede ser algo interesante. Y aqu no nos referimos a la accin en si, sino al ambiciado: Cmo hacerlo?. Los programas son criaturas extraas, la mayora de las veces complejas y algunas veces son obras demasiado personales. Cuando uno deja de ser un simple novato y comienza a interesarse en cmo funciona lo que le rodea, e incluso decide meter su cabeza en el cdigo fuente, no todo es color de rosa. Y todo ello no es porque el Programador sea una entidad retorcida cuya nica intencin sea hacer su cdigo indescifrable (aunque podra serlo, y ms bonito todava sera descifrarlo). La razn es que cuando uno consigue una base lo suficientemente slida como para mantenerse por si misma, el programador no puede evitar la incesante necesidad de aadir nuevas funciones, introducir nuevas variables,
linux@software.com.pl
y reestructurar el cdigo hasta tal punto que la idea original para el que fue creado se torne ilegible (a pesar de que siga funcionando igual o mejor que antes).
En una primera fase veremos cmo capturar conversaciones de Messenger con menos de 200 lneas de cdigo fuente en lenguaje C (no contabilizando comentarios). El mtodo que utilizaremos puede ser reutilizado para capturar conversaciones de IRC, AIM, Yahoo!, ICQ e incluso para capturar direcciones URL en peticiones HTTP. Finalmente estudiaremos cmo este problema de seguridad puede ser evadido con la aplicacin de ciertas medidas de cifrado de protocolo gracias al uso SIMP.
Ideas
Plantar un sniffer en su propio ordenador para capturar conversaciones puede parecer intil, no obstante, cuando lo sita en los PC's de sus empleados y espera a saber a qu se dedican realmente en horario de trabajo, el asunto se vuelve ms interesante. Debo aclarar que espiar a su pareja es ms inmoral todava.
50
Linux+ 3/2009
Aplicacin de monitorizacin y anlisis de trfico de una red que detecta en los paquetes individuales pratones especficos seleccionados por el usuario. Pueden ser utilizados ilegalmente para interceptar trfico y por norma general suelen ser silenciosos.
Requisitos
Los requisitos indispensables son los siguientes: LibPcap (version 0.8) (http:// sourceforge.net/projects/libpcap/), LibNet (version 1.1 o superior) (http:// libnet.sourceforge.net).
LibPcap es una pequea maravilla que nos proporciona todas las funciones necesarias para capturar paquetes y controlar la informacin en ellos contenida. LibNet, es todo lo contrario, su objetivo es facilitar un API de programacin orientado a la inyeccin de paquetes. No se entrar en detalles acerca de la implementacin y argumentos de las funciones de la librera libpcap, sin embargo, se mostrar el cometido de cada una de ellas, pues para eso estamos aqu, para comentar el cdigo. Libnet, por su parte, podra ser evitado pero utilizaremos sus estructuras de cabecera para protocolos debido a que son verdaderamente intuitivas y facilitan nuestra tarea.
Anteriormente conocido como Ethereal, es la herramienta ms destacada en Linux para el estudio de lo que sucede en las capas ms bajas de nuestras conexiones de red. Su principal capacidad es la de capturar todos los paquetes que entran y salen de nuestra red, y generar una estructura muy intuitiva con toda la informacin legible que una persona con ciertos conocimientos puede interpretar. Lo mejor que se puede decir de l, es que es de cdigo abierto. Podramos decir y decimos que el protocolo Messenger, al igual que por ejemplo IRC y FTP tal vez, funciona por medio de comandos. Estos son dirigidos a un servidor central que se encarga de hacer las gestiones necesarias segn los parmetros indicados. Este servidor es un intermediario entre emisor y receptor. En realidad todo el proceso es un poco ms complicado, pero esta idea sirve perfectamente a nuestros fines. Nota: Ahora detngase a pensar un momento. Si nuestra informacin viaja sin cifrar y circula por una mquina que no es de nuestra confianza, hasta qu punto est seguro de que sus mensajes no son inspeccionados en busca de informacin peligrosa? Bien, continuemos. Lo que hemos dicho del servidor central y de la interactuacin a travs de comandos es tan cierto, que puede establecer una comunicacin con toda naturalidad mediante una clsica sesin de telnet. Puede seguir este estudio aqu (http://65.23.158.196/ nitz/nitz/protocolo_msn.pdf). Describamos ahora los comandos bsicos, para posteriormente centrarnos en el que ms interesa en nuestra investigacin:
Existen algunos otros comandos, pero estn orientados a control y establecimiento de parmetros de conexin. Ha llegado el momento de que veamos el comando ms importante en nuestra investigacin.
Comando MSG
Vemoslo en directo. Inicie Wireshark con permisos de administrador root. Una vez se encuentre delante de la pantalla principal siga el men Capture -> Options. Una vez aqu escogeremos como interfaz de red aquella con la que obtenemos nuestra conexin normal a internet (en mi caso ath0) y en el campo Capture Filter escribiremos lo siguiente:
tcp and src port 1863 or dst port 1863
Si hacemos click en el botn Start estaremos iniciando una captura de red filtrando nicamente el trafico TCP que entra y sale del puerto 1863, que precisamente es el que Messenger utiliza para las comunicaciones. Inicie su software aMSN habitual en Linux, y comience una conversacin. Despus de un breve intercambio de frases puede cerrar la sesin y detener Wireshark. Veamos qu hemos obtenido en nuestro ejemplo (Figura 3). Esto es un inicio de sesin clsico. En el marco superior, hacia la derecha, podemos
El mtodo utilizado para crear el cdigo que veremos en la siguiente seccin se basa en algo tan sencillo como interpretar las capturas de uno de los mejores sniffer de redes que disponemos desde nuestro Sistema Operativo Linux: Wireshark.
VER: Establece la versin del protocolo Messenger. USR: Comando de identificacin de usuario. SYN: Obtener la lista de contactos. CHG: Comando de cambio de estado. CAL: Invitar a un contacto a una conversacin. Figura 2. Logo de Wireshark BYE: Comando de cierre de sesin.
www.lpmagazine.org
51
#define FILTRO_MSN "tcp and src port 1863 or dst port 1863" // Declaraciones de funciones static char * get_ident(char *); void print_msg(char *, int, char *, char *); void handle_msg(char *, char, int); void read_msn(u_char *, const struct pcap_pkthdr *, const u_char *); int main(int argc, char *argv[]) { int rc; char *device; char errbuf[PCAP_ERRBUF_SIZE]; struct bpf_program filtro; bpf_u_int32 netp, maskp; pcap_t* sniffmsn; if (argc < 2) exit(0); device = argv[1]; // nico parmetro: interfaz de red. Ex.: eth1, ath0, etc. // Abrimos el dispositivo para captura en modo promiscuo sniffmsn = pcap_open_live(device, 1600, 1, 20, errbuf); if (sniffmsn == NULL) { fprintf(stderr, "pcap_open_live(): %s\n",errbuf); exit(-1); } if (pcap_lookupnet(device, &netp, &maskp, errbuf) == -1) {
52
Linux+ 3/2009
www.lpmagazine.org
53
ver remarcado un comando USR con ciertos parmetros de identificacin para mi usuario. Encima ver algunos referentes a la versin. Todo esto es ms o menos comn a cada implementacin, pero veamos ahora qu comandos MSG son relevantes y cules no (Figura 4). Slo las lneas 23 y 33 son relevantes. Podemos ver varios comandos MSG, pero no todos son de inters y no todos contienen mensajes. Echemos un vistazo al marco inferior de nuestro paquete nmero 23 que hemos seleccionado intencionadamente. Al final de todo se observa el mensaje que hemos enviado (aqu, hola, mi nombre es David), pero se preguntar que es toda esa informacin previa. Una breve descripcin:
MSG 58 A 146 \rn: Nombre del comando, Parmetro no importante, Debemos saber que solo A, N y U sirven a nuestros intereses,
Longitud en bytes de todo lo que vie- ne a continuacin de este parmetro hasta el final del mensaje enviado. MIME-Version: 1.0\rn: Por defecto.
Content-Type: text/plain; charset=UTF8\rn: El parmetro text/plain indica que el paquete lleva texto legible.Este es uno de los puntos ms relevantes, solo los paquetes que contengan este campo llevarn mensajes de conversacin consigo. Los dems podemos desecharlos. Formato de codificacin de caracteres. X-MMS-IM-Format: FN=Helvetica; EF=; CO=000000; CS=0; PF=22\rn: Fuente de la letra, Cursiva, Negrita o Subrayado, Color del texto, Codificacin de caracteres, ... \rn: Adicional, ser de mucha ayuda en la codificacin del programa, hola, mi nombre es David: Requiere alguna explicacin?
User-Agent que identifique el software desde el que se est realizando la conexin, como ocurre con los navegadores.
Figura 4. Comprobando la relevacin de comandos MSG
54
Linux+ 3/2009
se activa en el ordenador del atacante y no en las vctimas). No es que sea muy ortodoxo, pero para no complicar ms el cdigo que acabamos de ver hace un momento, tomaremos de la mano las facilidades que nos aporta Linux en la lnea de comandos. Los objetivos son, ocultar el sniffer visualmente y redireccionar los mensajes hacia un archivo de salida que har las veces de log o archivo de grabacin. Esto puede conseguirse fcilmente con la siguiente instruccin:
# nohup ./smsn [dev] > log_msn.log &
o
$ sudo nohup ./smsn [dev] > log_ msn.log &
Con nohup usted desengancha el siguiente comando del shell y as puede cerrarlo sin preocuparse. El carcter final & enva el proceso al segundo plano. Solo nos queda verlo en accin (Figura 5).
Habamos mencionado al principio del artculo que un sniffer debe de ser un programa silencioso. Y esto debe cumplirse tanto en el hecho de no interferir en el trfico que circula por la red, como en el hecho de que no Paso a paso sea visible localmente (si estuvisemos traPara la realizacin de nuestro programa segui- bajando bajo un ataque Man in The Middle remos una estructura paso a paso que facilitar esto no sera necesario puesto que el sniffer
Hemos visto que es posible capturar conversaciones realizadas por medio del protocolo MSN. Hemos visto que es posible crear una pequea utilera como prueba de concepto. Pero todava no hemos visto que es posible defenderse. SIMP es capaz de proteger el contenido de nuestras conversaciones mendiante algoritmos de encriptacin. El programa trabaja clasificando las conversaciones segn 3 niveles de seguridad: No encriptado, encriptado, y encriptado/autentificado. SIMP fue principalmente diseado en forma de una aplicacin llamada SimpLite para entornos Windows, que dispone de cuatro versiones distintas segn nuestro deseo sea cifrar una de estos servicios de mensajera instantnea: MSN, Yahoo!, ICQ/AIM, Jabber/Google.
Afortunadamente para nosotros, la empresa SecWay dise una versin para Unix, SimpServer, que puede correr en los siguientes sistemas: Linux x86 (libstdc++ 5 required), MacOS X, FreeBSD 5.
www.lpmagazine.org
55
Sobre el autor
David Puente Castro, alias blackngel, es un gran aficionado a la programacin y la seguridad informtica . Original de Ourense (Galicia) y viviendo actualmente en la provincia de Salamanca dedica la mayor parte de su tiempo libre a disfrutar de la experiencia Linux. Asiduo escritor de artculos bsicos sobre temas de seguridad informtica en el E-Zine electrnico S.E.T. (Saqueadores Edicin Tcnica), ampliamente conocido en el Underground Hispano. Actualmente mantiene su segunda pgina oficial en: http:// set.diazr.com/, cuyo principal objetivo, radica en ocupar el lugar que en su momento cubri la web de Hackemate como repositorio de material sobre temas de hacking. Su primer encuentro con Linux data ya de hace unos 8 aos y fue poco ms adelante que descubri el fantstico mundo de la programacin y la subcultura hacker. Participa activamente en wargames como: yoire.com, warzone (elhacker.net) y otros. Aunque trabaja con ordenadores, la mayor parte de sus tareas diarias no tienen una relacin directa con esta temtica. Auxiliar administrativo, obligado a utilizar el sistema operativo Windows, tiene la costumbre de llevarse su ltima Distribucin Live a la oficina para seguir disfrutando de su SO favorito, Linux, y desarrollar sus pequeos proyectos. Dedica el artculo a su pareja y familia por la paciencia que demuestran cuando intenta explicarles haciendo. Por lo dems, puede encontrarlo online, prcticamente las 24 horas del da, en las siguientes direcciones: blackngel1@ gmail.com y black@set-ezine.org
Descomprimir en /usr/local:
$ cp simpserver-2.1.5c-linuxx86.tgz /usr/local $ tar -xvzf simpserver-2.1.5clinux-x86.tgz
get_ident(...).
SimpServer trabaja como un proxy, utilizando SOCKS 4 para tal fin. Por ello debemos configurar nuestro cliente de mensajera para utilizarlo. Por desgracia aMSN solo soporta SOCKS 5, pero los usuarios de Linux siempre tenemos una solucin para todo y en este caso el cliente Pidgin nos viene de perlas. Dando por supuesto que sabe como instalarlo en su sistema ($ sudo apt-get isntall pidgin), veamos como configurarlo (Figura 6): Cuentas->Gestionar Cuentas->Modificar ->Avanzadas, Tipo de proxy: SOCKS 4, Servidor: localhost, Puerto: 11863.
do es el pequeo administrador de memoria Con l podemos aprender prcticas de programacin bastante ms adecuadas en la actualidad. Debemos evitar caer en las tentaciones del Programacin en Linux: Casos Prcticos (http://www.anayamultimedia.es), podra ser una buena lectura si pretendes que tu visin ante la programacin cambie de forma notable. Espero que esto haya sido lo suficientemente interesante como para llegar hasta el final. La idea que subyace a todo este asunto radica en que debemos ser precavidos con todo aquello en lo que confiamos. En todas las actividades es saludable, de vez en cuando, poner un signo de interrogacin sobre aquellas cosas que por mucho tiempo se han dado como seguras. [Bertrand Russell]. Hasta la prxima, y feliz hacking.
Es muy importante notar que la comunicacin es cifrada punto a punto, y la persona con la que deseemos establecer una comunicacin tambin debe tener instalada esta misma herramienta, de otro modo los mensajes seguiran viajando en texto claro. SimpServer es un servicio que aprenderemos a instalar y configurar a continuacin (lo haremos bajo un sistema Ubuntu Linux):
Hasta aqu tiene configurado SimpServer totalmente en su sistema y disponible para ser utilizado con Pidgin. Cualquier futura comunicacin que implique a dos usuarios con este software funcionando (SimpServer), producir un mensaje informando acerca de un intercambio de claves. Claves que han sido generadas tanto de forma automtica como de forma manual en anteriores versiones. Tiene deberes, compruebe ahora con Wireshark en que formato fluyen los datos cuando Descargar el programa desde esta direc- atraviesan la red. Ya puede sentirse un poco cin: http://download.secway.com/public/ ms seguro. products/simpserver/simpserver-2.1.5cConclusin linux-x86.tgz Instalar librera dependiente: $ sudo apt- Aunque no lo parezca, una de las partes ms get install libstdc++5 interesantes del cdigo que hemos desarrolla-
En la red
LibPcap: http://sourceforge.net/ projects/libpcap/ LibNet: http://libnet.sourceforge.net Protocolo MSN: http://65.23.158.196/nitz/nitz/ protocolo_msn.pdf Programacin en Linux: Casos Prcticos ISBN: 978-84-415-1839-1: http://www.anayamultimedia.es SimpServer para Unix: http://www.secway.fr/us/products/ simpserver/
56
Linux+ 3/2009