lunes, 1 de junio de 2009

NCat, el sucesor de NetCat

Hace algún tiempo leí en SecurityByDefault una entrada que se titulaba "La suite de herramientas de Fyodor". Como ya sabreis Fyodor es el desarrollador de la conocidísima herramienta NMAP, imprescindible en el "arsenal" de cualquiera que se dedique a la seguridad.

El caso es que Fyodor, como parte del Google Summer of Code, ha desarrollado algunas herramientas muy interesantes que "resucitan" herramientas ampliamente utilizadas pero no actualizadas desde hace mucho tiempo. Este es el caso de NETCAT, la llamada "navaja suiza de la seguridad en redes", cuya última versión data de Enero de 2004 y que los que la utilizamos frecuentemente nos encontramos con algunos problemas como el cifrado de las comunicaciones, el tener que crear un pipe para poder encadenar dos netcats, etc. Por ello, Fyodor ha desarrollado la herramienta NCAT, cuyo desarrollo tiene los siguientes objetivos:
  1. Mantener toda la funcionalidad de la última versión de netcat.
  2. Aprender de las contribuciones de diferentes versiones de netcat que han ido surgiendo (como por ejemplo cryptcat para cifrado).
  3. Realizar redirecciones de puertos sin necesidad de utilizar pipes intermedios.
  4. Poner a la escucha dos puertos y hacer que los que se conecten a ellos se conecten a su vez entre si.
  5. Cifrado SSL de una forma cómoda.
  6. Multihilo.
  7. Filtrado tipo TCP Wrappers.
  8. Soporte para cliente y servidor proxy HTTP y SOCKS.
Como se puede ver, NCAT va a mejorar algunos de los aspectos que siempre he echado de menos de NetCat y los va a hacer mucho más sencillos.

Veamos algunos ejemplos de las acciones en las que más útil nos va a resultar las nuevas capacidades de la herramienta NCAT:
  • Redirección de puertos NetCat: NetCat no implementa una manera cómoda de hacer una redirección de puertos, algo imprescindible muchas veces cuando estamos realizando un test de intrusión y hemos conseguido acceso a una máquina y desde ella queremos conseguir acceso a otras máquinas que en principio tenemos filtradas por medio de un Firewall, ACLs de un router, NULL routing o cualquier otro tipo de medida. Para hacerlo nos vemos obligado a usar la tubería típica de shell entre dos NetCats, pero a su vez utilizar un pipe adicional para que la respuesta de esa conexión llegue al primer NetCat. Veamos un ejemplo, imaginaros que tenemos acceso a una web abandonada y que desde ahí hemos comprodo que una máquina de la misma LAN a la que no tenemo acceso tiene una vulnerabilidad en los servicios de recursos compartidos que queremos explotar (los cochetes para los signos de redirección los pongo porque sino, no sé por qué, Blogger me interpreta algo raro y no he conseguido solucionarlo, si alguien tiene alguna sugerencia... :P):
# mknod tuberia p
# nc -l -p 80 0[<]tuberia | nc 192.168.1.100 445 1[>]tuberia
  • Redirección de puertos NCat: Con NCat la consa se simplifica, ya no es necesario crear una tubería adicional para realizar la redirección ni pararnos a pensar como tenemos que redirigir las entradas y las salidas de los dos comandos NetCat. Con NCat, dejariamos expuesto el puerto 445 de la otra máquina a través del puerto 80 al que sí que tenemos acceso de esta manera:
# ncat -l 80 --sh-exec "ncat 192.168.1.100 445"
  • Cifrado de comunicaciones NetCat: NetCat no incorpora ningún tipo de mecanismo de cifrado, por lo que es necesario tirar mano de Cryptcat para estas tareas, una modificación de NetCat que incorpora cifrado. Esto es en ocasiones necesario, bien sea en proyectos de análisis forense y gestión de incidentes para sacar de un equipo comprometido información sin que esta vaya por la red o bien sea porque estamos realizando un test de intrusión y queremos evitar que el IDS situado en el firewall detecte el exploit que lancemos contra el puerto 445 al ser lanzar hacia el puerto 80 que nos redirigirá. Veamos un ejemplo de como hariamos lo mismo de antes pero cifrando el tráfico que cruzará la red. Como ahora no tendremos el puerto a la excucha tal cual, tendremos que hacer 2 redirecciones, una en nuestro equipo y otra en el servidor, tunelizando el tráfico con cryptcat:
servidor# mknod tuberia p
servidor# cryptcat -k p4t4t4 -l -p 80 0[<]tuberia | nc 192.168.1.100 445 1[>]tuberia
pentester# mknod tuberia p
pentester# nc -l -p 445 0[<]tuberia | cryptcat 192.168.1.100 80 1[>]tuberia


  • Cifrado de comunicaciones NCat: NCat aporta la ventaja que se encuentra todo integrado en la misma herramienta, por lo que no hay que ir jugando con NetCats y Cryptcats, pero por contra el mecanismo de cifrado SSL se hace un poco más farragoso, ya que hay que generar el par de claves, lo cual puede ser incluso mejor para determinadas aplicaciones, pero cuando se refiere a la realización de un test de intrusión el uso de una shared key es claramente más cómodo. Espero que en las próximas versiones de NCat veamos la opción para realizar cifrado por medio de shared key (si es que no está ya y no he visto la opción, pero la he buscado bastante).
  • Multihilo y Persistencia en NetCat: NetCat no proporciona ningún tipo de capacidad multihilo ni de persistencia, salvo en su versión Windows en la que se añadió una opción "-L" mediante la que se puede obtener persistencia (que no multihilo). En linux David Pérez (Consultor Independiente y GIAC GSE) realizó otra modificación recientemente a la que llamo nc2 que también implementaba esta opción "-L". Sin embargo, seguía sin existir nada que dotara a NetCat de capacidades multihilo, algo molesto ya no tanto en proyectos de test de intrusión como en proyectos de análisis de malware, donde queremos usar NetCat para levantar servicios ficticios para que el bicho a analizar interactue con él y podamos ver que tipo de información intercambia, ya que es posible que este lance varias conexiones consecutivas, con lo que perderemos información. Veamos un ejemplo de como utilizariamos las capacidades de persistencia de las modificaciones de NetCat (clásicamente se hacía mediante un shellscript que lo iba lanzando infinitamente cada vez que se cerraba, pero ya que ha habido gente que ha trabajado para ahorrarnos este trabajo prefiero mostraros estas versiones, que son mucho más sencillas):
# nc2 -L -p 80
# nc 192.168.1.100 80
# nc 192.168.1.100 80
# nc 192.168.1.100 80
# nc 192.168.1.100 80
  • Multihilo y Persistencia en NCat: NCat es sencillamente multihilo y persistente de por si, es decir, cualquier NCat a la escucha que lances puede ser accedido desde tantos NCats clientes (o NetCats, o telnets, por supuesto) como quieras y conectar y desconectar infinitamente sin que este muera o haya que hacer ninguna acción adicional.
# ncat -l 80
# nc 192.168.1.100 80
# nc 192.168.1.100 80
# nc 192.168.1.100 80
# nc 192.168.1.100 80

Creo que estas son las opción que, al menos a mi, me han parecido más interesante de la nueva herramienta NCat, que la pone en clara ventaja con respecto a las otras herramienta, sobretodo porque viene todo en la misma herramienta.

Yo personalmente estoy empezando a utilizar NCat para todo, salvo para el cifrado de comunicaciones, en las que hago interactuar NCat con CryptCat, ya que me resulta mucho más cómodo en términos generales usar un shared key, pero supongo que es cuestión de tiempo hasta que Fyodor saque la opción.

Quizá le manda un correo con la sugerencia :)

5 comentarios:

Rafael Alfaro dijo...

La verdad es que hace la vida más fácil.

Un saludo.

Pedro Laguna dijo...

Quizas ya lo has hecho pero... ¿Has probado los equivalentes HTML? > y <

Jose Selvi dijo...

Sí, probé a editar el HTML y usar los and+gt/lt+puntoycoma en lugar de < y > pero no me los interpretaba, me ponía exactamente el and gt y el punto y coma :S

Quizá es porque de hacer pruebas metí mayores y menores por todas partes y luego el Blogger no lo reconoce bien.

Pero bueno, se entiende, no? :)

Por cierto, Pedro Laguna de Informatica64? o nada que ver? Encantado ;)

jrosell dijo...

Muy muy interesante! Tengo que probarlo!

Jose Selvi dijo...

Fyodor es un máquina! Deberían hacer una lista de estas como la de Chuck Norris pero con Fyodor :P

Hace tiempo me llegó que hicieron con Bruce Schneier, sencillamente genial :)

Gracias por tu comentario Jordi.