Senda Oscura

Linux y Seguridad

Archive for November, 2007


Un ssh troyanizado

Continuando con la estela del post anterior, en éste quiero hablaros de lo maravillosamente fácil que es ocultar un troyano en un sistema, si este no posee algún software de control de firmas tipo tripwire o similar. Lo único que hay que hacer en este caso es buscar algún programa legítimo que ofrezca servicios de red, descargar el código fuente, modificarlo para crear una bonita puerta trasera y tras compilarlo, poner el nuevo binario en lugar del original.

Como ya dije antes, este cambio es indetectable si el sistema no posee software de gestión de firmas (que por desgracia es la situación de la mayoría de los sistemas pequeños y medianos), por lo que la puerta trasera pasara oculta mucho tiempo antes de ser descubierta… si es que es decubierta. Desde mi punto de vista, uno de los mejores servicios para atacar por este sistema es el SSH ya que está pensado precisamente para controlar remotamente el equipo, por lo que es relativamente fácil de modificar para nuestros objetivos, y además nos ofrecerá una shell cifrada y cómoda de usar.

Modificar el SSH también nos ofrece otras ventajas, podemos modificarlo para obtener todas las contraseñas del sistema, lo que nos dará una importante base de datos de passwords, o podemos alterar el cliente SSH para que guarde toda la información de las conexiones hacia otros equipos (incluyendo contraseñas) con lo que conseguiremos comprometer múltiples equipos de una forma muy sencilla.

Todas estas modificaciones las realicé sobre el ssh-2.0.13, leed el TROJAN.txt que es donde he explicado todo lo necesario para manejar el troyano. El archivo trojan.h, se encuentra en apps/ssh/trojan.h, ahí es donde se configuran los parámetros que manejan la nueva ‘funcionalidad‘ del ssh .

Bueno, os resumo las características del troyano:

  • Contraseña maestra para acceder a todas las cuentas del sistema
  • Si se accede con la contraseña maestra, no se guardan registros en los logs UTMP/WTMP/Lastlog (el usuario es invisible)
  • Se almacenan todos los pares usuarios/contraseñas que accedan a este servidor SSH
  • Se almacenan las conexiones SSH hacia otros hosts, guardando el host de conexión, el usuario y la contraseña
  • Toda la información capturada por el troyano se guarda cifrada en Blowfish (también se puede seleccionar un cifrado XOR o ningún cifrado)


Descargar SSH 2.0.13 Troyanizado

TSZ: Una puerta trasera con estilo

Una vez que se compromete un sistema conectado en red, uno de los mayores retos por parte de los atacantes es mantener una vía de acceso al mismo independientemente de lo que hagan los administradores a posteriori. Se han estudiado multitud de formas de conseguir esto, algunas con mucho más éxito que otras. En este post quiero comentar una de esas vías de acceso: las puertas traseras o backdoors.

Por regla general, con este término nos referimos a un programa que se está ejecutando en la máquina víctima y que nos permite el acceso a ella de alguna manera. Las hay desde las más simples, aquellas que redireccionan los canales de entrada/salida a un socket, hasta las más complejas, aquellas que ocultan el diálogo en algún protocolo aparentemente inocuo (ver proyecto Loki). Después de pasar algún tiempo estudiando diferentes tipos de backdoors, así como los requisitos necesarios para que éstas sean difíciles de detectar, llegué a las siguientes conclusiones:

  • Deben ser cómodas de usar: si va a ser la principal vía de acceso al sistema víctima, debemos poder trabajar con ellas con cierta comodidad, esto implica poseer historial de comandos, paginación, etc. Una backdoor simple está bien como primer medio de acceso al host víctima, pero no para trabajar con él de manera continuada.
  • Deben cifrar la conexión: no sería bueno que después de tantas molestias un sniffer detecte que estamos ejectuando comandos en un host por una vía no habitual.
  • Deben ser difíciles de detectar: esto es, el administrador no debería poder encontrarlas haciendo un ‘netstat’ o un ‘nmap’.
  • Opcionalmente también sería interesante que contaran con la capacidad de evadir defensas perimetrales tales como cortafuegos. Esta medida es opcional porque una backdoor diseñada de esta manera difiere bastante de una backdoor clásica, es decir, las diseñadas para evadir cortafuegos sólo deberían usarse para esos casos concretos, ya que presentan limitaciones de uso respecto a las otras.

Con esto en mente, decidí buscar una backdoor que reuniera tantos requisitos como fuera posible, y me lleve una grata sorpresa al dar con TSH: Tiny Shell, actualmente el proyecto está alojado en http://tsh.thecostaricacondo.com/. Algunos dicen que este proyecto nunca fue desarrollado como una backdoor, sino como un clon ligero de otros programas de conexión remota, no lo sé, pero el hecho de que pueda funcionar en ‘reverse-mode’ (sin puertos a la escucha) es algo que da que pensar.

El TSH cumple todos los requisitos que estabamos buscando, es una shell cómoda de usar, con conexión cifrada y si se usa en ‘reverse-mode’ no tiene puertos a la escucha, lo que la hace indetectable a comandos como ‘netstat’ y ‘nmap’. Ahora bien, la conexión inversa implementada en el TSH no me acababa de gustar. Para que funcione es necesario configurar el servidor TSH (que va alojado en la máquina víctima) con una dirección IP prederminada. En esa dirección IP debe estar escuchando el cliente TSH. Cada cierto intervalo de tiempo se realiza una conexión del servidor al cliente, que en ese momento obtiene el control del sistema remoto. Resumiendo, debemos incluir la IP de la máquina atacante en el servidor TSH (lo que no es bueno en caso de que descubran el binario) y además sólo podemos obtener el control del sistema cada cierto tiempo.

Me gusta más el enfoque que realiza otra backdoor, ZAPPA. En este caso, en el host víctima se aloja un servidor sin puertos a la escucha que espera la llegada de un ping con un tamaño concreto. Cuando se da esa circunstancia, lanza una conexión hacia el host que ha generado el ping y le da el control del sistema.

Con estas dos backdoors en las manos decidí que lo mejor era hacer un hack sucio y rápido del TSH para incluirle las capacidades de ZAPPA, naciendo así TSZ, una puerta trasera que sin duda encontraréis interesante. Escribí un readme en el que explico como utilizarla, también es importante leer el readme.tsh en el que se detalla como configurar el tsh, que al fin y al cabo es el programa que hay detrás de todo esto.


Descargar TSZ

HOWTO: ARP Spoofing

Parece que mi post anterior ha generado ciertas dudas, en concreto nadie parece creer que se puedan escuchar las conversaciones de los demás usando el MsnSpy. Algunos incluso me han llegado a decir que sólo escuchan su propia conversación…

Para empezar, el MsnSpy (al igual que cualquier otro sniffer) permite capturar paquetes que viajen por nuestro mismo segmento de red, en otras palabras, sólo vamos a poder capturar conversaciones que ocurran en nuestra red local (y con ciertas limitaciones). Ya os podéis olvidar de saber que está diciendo ese amigo nuestro que vive en la otra parte del mundo.

Por otra parte, aunque nuestra única intención sea capturar las conversaciones de nuestra red local, es posible que el MsnSpy no nos haya funcionado tal como esperábamos y no nos muestre más que nuestros propios diálogos. Como ya dije antes, para capturar las conversaciones de los demás es totalmente imprescindible que éstas viajen por nuestro mismo segmento de red, de tal forma que nuestro equipo pueda acceder a tal información. En la actualidad, y siempre en aras de la eficiencia, lo habitual es que las redes se diseñen para que cada equipo tenga su propio segmento de red, lo que reporta muchas ventajas… pero nos impide capturar algo, excepto nuestro propio tráfico.

No quiero entrar en detalles técnicos acerca de cómo se consiguen aislar los equipos en segmentos físicos independientes, lo que si diré es que lo normal es usar switchs para esta tarea. Aún hoy en día algunos administradores piensan que esto es suficiente para evitar el sniffing (captura de datos) en sus redes, nada más lejos de la realidad. Existen multitud de técnicas para saltar las restricciones impuestas por los switchs, en este post quiero hablar de una de ellas en concreto, del ARP Spoofing o ARP Poisoning. Se trata de una técnica sencilla y bien conocida, pero no por ello deja de ser útil para el caso que nos ocupa.

No quiero cargar este post con excesivos datos técnicos, pero me niego a describir un ataque de ARP Spoofing sin explicar lo que hay detrás de los programas usados, seré breve pero se necesitan unos conocimientos mínimos de redes para entender lo que viene.

Para que un paquete pueda viajar de una máquina a otra, es necesario que la máquina que lo manda conozca la dirección física (MAC) de la máquina receptora. Esto en sí ya es un problema, porque lo único que tiene esa máquina de su destino es una dirección IP, que en modo alguno nos da pistas sobre la dirección MAC del receptor. Para solucionar este problema nació el protocolo ARP, que permite establecer a que máquina pertence una determinada dirección IP.

¿Cómo lo hace? Pues nada más sencillo, cuando una máquina quiere enviar un paquete a otra, lo que hace es simplemente lanzar una pregunta ARP del estilo: ¿Quién tiene esta dirección IP?. La máquina poseedora de la misma responde con un paquete en el que se relaciona su IP con su MAC, con lo que ya la conversación puede ser establecida. Por temas de rendimiento, cada máquina va guardando las respuestas obtenidas, de tal forma que no sea necesario volver a hacer la pregunta la próxima vez que se necesite mandar un paquete a una máquina ya interrogada (también existe un tiempo de expiración de esta información, como en cualquier cache convencional).

Algo muy importante es el hecho de que el protocolo ARP no tiene estado de la conexión, en otras palabras, se pueden recibir respuestas sin haber sido hechas las preguntas, una vez más se trata de una decisión que afecta positivamente al desempeño del protocolo, pero que sin embargo nos deja la puerta abierta al ataque que comentabamos, el ARP Poisoning. Éste consiste simplemente en enviar paquetes a todas las máquinas de la red en la que relacionamos una IP que no es la nuestra, con nuestra MAC. Esta relación será almacenada en la cache de las máquinas víctimas (de ahí el nombre del ataque, envenenamiento de la cache ARP), de tal forma que cuando quieran enviar un paquete a ese equipo, lo enviarán al nuestro. Normalmente, se mapea la IP de la pasarela con la MAC del equipo atacante, de tal forma que todos los paquetes que quieran ir fuera de la red, pasen primero por nuestro equipo, con lo que tendremos acceso a toda la información.

¿Cómo puedo llevar a cabo este ataque?

Se acabó la teoría, pongámonos manos a la obra. Supondré que tienes un sistema Debian o similar, si no, adapta las instrucciones según convenga. Lo primero será hacernos con el conjunto de herramientas Dsniff:

# apt-get install dsniff

Ahora debemos asegurarnos que nuestra máquina sea capaz de reenviar paquetes, si no es así, cortaremos todas las comunicaciones interceptadas, lo que no nos interesa en manera alguna.

# echo 1 > /proc/sys/net/ipv4/ip_forward

Luego debemos obtener la ip de la pasarela, que será la máquina a la que queremos interceptar todos los paquetes.

# route | grep default

Por útlimo pondremos a funcionar la utilidad arpspoof encargada de realizar el ataque:

# arpspoof ip_pasarela

Y listo, en otra terminal ponemos a escuchar el msnspy y a disfrutar.

MsnSpy: un sniffer para el Microsoft MSN

Ésta es otra de esas utilidades que escribí hace mucho tiempo y que aún no había liberado, lo cierto es que apenas he liberado nada de lo que he escrito… espero poder redimirme mediante este blog.

Creo que el título es bastante autoexplicativo, se trata de un pequeño sniffer enfocado a capturar las conversaciones de nuestro querido messenger. Actualmente el protocolo del Microsoft Messenger tiene algunos cambios significativos respecto al que existía cuando escribí el programa, sin embargo las conversaciones se siguen capturando sin problemas (aunque no así los zumbidos, emoticonos personales, etc.). Es el programa ideal para cotillear, ni os imagináis de todo lo que me enteré usándolo (jejeje).

Se ejecuta bajo linux en modo consola… lo siento, pero soy una de esas personas a las que sólo les preocupa la utilidad de sus programas y no lo bonito que parezcan. Sé que es un problema y que si un programa no es bonito y fácil de usar, no se usa. Pero normalmente soy el único que usa mis programas, así que hasta ahora no me he preocupado por esto. De todas formas no es complicado de usar, si tenéis linux, lo usaréis sin problemas.

En el tgz hay una versión binaria del programa compilada estáticamente, para que no tengáis problemas buscando liberías. Si queréis compilarlo necesitareis las liberías PCAP de desarrollo (en sistemas Debian y similares podéis obtener estas liberías mediante apt-get install libpcap-dev).

Escribiendo:

# ./msnspy -h

obtendréis una pequeña ayuda, que espero sea suficiente. En cualquier caso podéis hacerme todas las preguntas que queráis vía comentarios.

¡Feliz Cotilleo!


Descargar MsnSpy