domingo, 14 de junio de 2009

TargetSearch v0.2

Hace unos días publiqué un post con una herramienta llamada TargetSearch que desarrollé para facilitarme la tarea de buscar en Google nombres de objetivos para test de intrusión. Tras publicarla, Pedro Laguna me notificó un problema al buscar dominios que contengan webs muy grandes, ya que Google te devuelve un número de resultados limitado y, si una de las webs encontradas es muy grande, es posible que sus resultados copen la gran mayoría de resultados, por lo que habrá otras webs que no serán encontradas.

Para solucionar esto, cambié ligeramente la manera en la que el script realizaba las búsquedas, de tal manera que en cada búsqueda toma el primer resultado encontrado, lo guarda como un resultado válido y añade la cadena "-site:resultado.dominio.es" a la cadena de búsqueda, y vuelve a repetirla, con lo que todos los resultados de esta web que ya hemos encontrado habrán desaparecido.

Se ha optado por usar site ya que las pruebas realizadas usando "-www" o "-mail" corrían el riesgo de eliminar cualquier resultado que contuviera la cadena "www" o "mail" en cualquier parte de la web, y no únicamente en la URL.

Aún así, se observan aún algunas anomalías en el funcionamiento de esta versión 0.2, como por ejemplo algunos nombres de host que desde la web se pueden encontrar pero que no son devueltos usando el API de Google. Este problema parece más un problema de Google que del script, pero en cualquier caso le pegaré una pensada a ver si se pudiera solucionar.

CORRECCIÓN: Según he mirado a posteriori, parece ser que estos nombres de hosts que no aparecen en el Script pero sí en la web de Google no existen, por lo que es altamente posible que sea el Script el que ofrece mejores resultados al atacar directamente al API de Google (La web accederá a una caché local?).

El segundo problema, en este caso teórico porque no he encontrado ningún sitio donde probarlo, es el problema en dominios que contengan varios niveles de subdominios, ya que el excluir "-site:resultado.dominio.es" eso va a excluir de la siguiente búsqueda también todos sus subdominios, es decir, "mail.resultado.dominio.es" también sería excluido, y por desgracia Google no proporciona ninguna palabra clave para hacer un "site exclusivo". Es algo sobre lo que también intentaré mejorar en futuras versiones.

Mientras tanto, acabo de colgar en tools.pentester.es la nueva versión, así que os animo a que la probeis y me mandeis cualquier otro problema que podais encontrar por correo electrónico (mirad en mi ficha personal, ahí se ve más o menos mi correo).

DESCARGA

Muchas gracias a todos por vuestro feedback :)

miércoles, 10 de junio de 2009

TargetSearch v0.1

Nota: Ya existe una nueva versión que corrige los problemas encontrados en esta versión.

Hace alguna semanas tomando un café con un colega profesional de la seguridad le comentaba que me había hecho un pequeño Script en Perl llamado TargetSearch que pretendía automatizar una tarea que realizaba yo anteriormente para descubrir objetivos sobre los que realizar un test de intrusión. Una tontería, según le comenté, pero su contestación diciéndome que a veces esas pequeñas tonterías son las más útiles me ha hecho decidirme a publicarlo.

Aparte de muchos otros métodos más "a lo bestia" como el escaneo del rango, la resolución inversa de cada IP del rango o el intento de transferencias de zona, búsqueda de nombres por fuerza bruta, obtener algunos mediante correos y luego buscar nombres relacionados con Google Sets (algo que ya comenté en otro momento), y un largo etcetera, una de las técnicas que suelo emplear es buscar en Google "sites:dominioabuscar.com", lo cual nos saca todas las webs que tiene cacheadas Google, de todos los nombres de ese dominio e inferiores que contengan alguna web, lo cual ya resulta muy útil para localizar objetivos sobre los que hace una auditoría de las webs que nos pueda servir como ayuda durante la realización del test de intrusión, y todo esto de forma totalmente invisible para los sistemas objetivo. Target Search hace esto, pero de forma automática y mostrándonos una única aparición de cada nombre de dominio.

Esto me ha resultado especialmente útil, sobretodo en empresas grandes y con un control descentralizado de los sistemas de información, porque siempre encuentras el sistema del año catapum sin actualizar, que entre unos y otros se ha quedado ahí, y que nadie encuentra ni sabe que está. Nadie... salvo Google, que lo sabe todo :)

El Script se puede desgargar de la nueva sub-web que acabamos de crear desde pentester.es: tools.pentester.es, una web en la que iremos poniendo estas pequeñas herramientillas (porque la verdad es que por el momento no tenemos tiempo de programarnos un gran suite, aunque nos gustaría) que nos vamos haciendo para facilitar nuestro trabajo diario. De momento sólo está la herramienta que os presento, pero poco a poco esperamos ir poniendo más, que por supuesto iremos publicando también en este blog.

Y como se suele decir, como a pentestear se aprende pentesteando... vamos con un ejemplo de lo que encuentra este script por ejemplo en mi Alma Máter, la Universidad de Valencia:

$ ./TargetSearch.pl uv.es
##############################
# TargetSearch v0.1 - 10/06/2009 #
# Buscador de nombres de dominio #
# Jose Selvi - http://www.pentester.es #
##############################

Buscando nombres de hosts victima.........

Objetivos encontrados:
eees.uv.es(147.156.222.65)
uvpress.uv.es(147.156.164.76)
www.uv.es(147.156.1.4)
alufis35.uv.es(147.156.98.243)
extensio.uv.es(147.156.1.29)
debian.uv.es(147.156.2.72)
auladeedicion.uv.es(147.156.5.7)
eee.uv.es(147.156.26.170)
edumic.uv.es(147.156.17.54)
ific.uv.es(147.156.163.23)
industrial.uv.es(147.156.26.134)
grev.uv.es(147.156.13.180)
parnaseo.uv.es(147.156.1.51)
mcuser.uv.es(147.156.28.38)

IPs encontradas:
Buscando nombres extra para 147.156.222.65
Buscando nombres extra para 147.156.164.76
Buscando nombres extra para 147.156.1.4
Buscando nombres extra para 147.156.98.243
Buscando nombres extra para 147.156.1.29
Buscando nombres extra para 147.156.2.72
Buscando nombres extra para 147.156.5.7
Buscando nombres extra para 147.156.26.170
Buscando nombres extra para 147.156.17.54
Buscando nombres extra para 147.156.163.23
Buscando nombres extra para 147.156.26.134
Buscando nombres extra para 147.156.13.180
Buscando nombres extra para 147.156.1.51
Buscando nombres extra para 147.156.28.38

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 :)