sábado, 11 de octubre de 2014

BSIDES COLOMBIA 2014


Esta es la primera vez que el evento de la franquicia abierta BSIDES se hace en Latinoamérica, después de conversaciones con las personas que coordinan las relaciones internacionales de la marca del evento, se logró empezar los preparativos para la primera versión de BSides Colombia.


El evento se realizó en la Cámara de Comercio de Bogotá la cual contaba con cómodos auditorios donde con un formato adaptado se le presentó al público durante todo el día tres tracks en simultanea, cada uno con una temática diferente.


Red Track: Charlas relacionadas con seguridad ofensiva. Lo que no significa charlas para aprender a hacer "maldades", sino mas bien, charlas que permiten generar una alerta general sobre lo que los ciberdelincuentes están haciendo en el mundo real y muchos aún no lo saben.


Blue track: Charlas relacionadas con seguridad defensiva. Lo que no significa instalar un firewall y un antivirus, por el contrario se busca conocer otros métodos aveces no tan ortodoxos sobre como defender nuestra seguridad y privacidad, este track esta creado para todos los Blue Team de las organizaciones y para todos los investigadores interesados en contribuir con herramientas y metodologías de seguridad enfocadas en protección y controles.


HandsON track: Esta expresión viene realmente de "Hands ON Lab", el espació esta diseñado para ir haciendo a medida que el expositor va explicando un proceso específico, se puede pensar como un taller donde se les guia paso a paso para lograr un objetivo específico, como puede ser, la implementación de una tecnología, vulnerar o reversar algo, escribir código, etc.


También se aprovecho el marco del evento entre el 8-10 de Octubre para realizar entrenamientos en seguridad de la información, los cuales tuvieron gran acogida y se organizaron en las instalaciones de intitec.


El evento inició muy temprano con la organización de las diferentes zonas, ya que como es costumbre en otros BSides, se organizan zonas de demostración a las cuales se pueden acercar las personas para conocer investigadores y actualizarse en las nuevas tendencias. El evento contó con zonas de demostración relacionadas con seguridad para las siguientes temáticas:







Se tuvo también un espacio para el patrocinador principal Fortinet.

Algo particular que quisiera mencionar es que cuando las personas salian a la zona de demostraciones no se animaban a hablar con los investigadores, al indagar cual era el motivo para esto me contaban que pensaban que esas personas estaban vendiendo algo y que no estaban interesados en comprar, yo pensé: Esta es nuestra cultura de seguridad.


En las zonas demo no se venden productos o servicios, se comparte información relacionada al tema específico y lo que se busca es que el público asistente se empape rápidamente del estado del arte en estas tecnologías. Con esta breve explicación las personas se animaban a preguntar e intercambiar ideas sobre lo que se estaba mostrando y quedaba claro el concepto de que BSIDES Colombia es un evento NO comercial.



El evento contó para sus charlas con profesionales en seguridad  nacionales e internacionales y pueden leer sus charlas en el sitio principal del evento www.b-sides.co, algunas de estas charlas ya se han presentado en otros eventos de seguridad internacionales, pero es muy diferente cuando tienes a los autores de las mismas en vivo y en directo y puedes aprovechar para hacer preguntas, compartir información y sentirte inspirado.






Finalizando el evento se realizó un panel donde se explicó el slogan del evento "Nuestra malicia indígena también es Hacking". En el mismo estuvieron presentes investigadores independientes con una gran trayectoria en el país e invitados internacionales como Alejandro Hernandez y James Pichardo, quienes también dieron sus opiniones sobre los diferentes temas de importancia global.



La malicia indígena en el contexto de seguridad de la información se plasmó como esa capacidad que tenemos los latinoamericanos de innovar y ser recursivos con los pocos recursos con los que aveces se cuentan, y el estigma que solo se tiene malicia para saltarse la fila en un banco o "tumbar/engañar" a otro en un negocio, se lleva a un contexto mucho mas interesante donde le permite a un investigador, encontrar bugs en aplicaciones, desarrollar nuevas herramientas de seguridad, solucionar problemas y crear o adaptar metodologías para contribuir al bien de una sociedad.


Lo mejor del evento es sin duda la participación en conjunto de un grupo de profesionales y comunidades que creyeron en esta iniciativa y la sacaron adelante, poniendo su granito de arena en cada una de las actividades desarrolladas durante el día y fortaleciendo de esta forma lo que conocemos como la comunidad de seguridad en Colombia.


Al terminar el evento y como es costumbre, los organizadores, conferencistas y algunos asistentes se reúnen en algún lugar para seguir conversando y compartiendo sobre el tema que los une: La pasión por la seguridad!

Bueno no es cierto, aveces se hablan de otras cosas ;)



Salud!

lunes, 4 de noviembre de 2013

RETO 27 - "HI? Are you alive?

HI? ARE YOU ALIVE? 


Despues de terminado el CTF EKOPARTY (Argentina) y el CTF CAMPUS PARTY (Colombia), quedamos con unos cuantos retos que aún no se han resuelto, por lo que hemos decidido publicarlos independientemente para que se concentren en cada uno a la vez.

El famoso reto 27 del CTF tiene como título "HI? Are you alive?" , el titulo de este reto ha variado en los diferentes CTF pero sigue siendo el mismo archivo para analizar. ¿En que consiste?

Pueden descargar el siguiente archivo y analizarlo, la idea es que a partir de este archivo construyan una herramienta y puedan obtener la respuesta (la flag), esta vez, el ganador será el que desarrolle la mejor herramienta para solucionarlo. La respuesta la pueden enviar a mi correo personal o por el twitter @nonroot.

El plazo para resolver el RETO 27 es el próximo Lunes 25 de Noviembre de 2013 at 8:00AM.

Durante una investigación forense se identificó un archivo sospechoso que al parecer estaba siendo usado para realizar ataques informáticos. Su misión si decide aceptarla, es identificar al posible atacante y descubrir su guarida.

La flag tiene el siguiente formato:

FLAG=SHA1("Attack Vector|Attacker name|Attacker Age(aprox)")
Ejemplo: SHA1(SQL INJECTION|Nikita|39")  = 55a345333a4205755f0062eb4a07dd4530ae3d58
 
¿PREMIOS?

Bueno, no siempre esperen premios,  pero esta vez gracias a @4v4t4r (http://www.sec-track.com/) tenemos la donación del libro "¡Mucho Hacker!" que será enviado al lugar donde vivan.

Adicional a este premio tendrán una entrada gratuita para asistir al evento descentralizado mas grande de seguridad de la información que se esta organizando para el próximo 30 de Noviembre.  


Un saludo para todos, mucho ánimo con el reto!, lo importante es aprender en el proceso. Cualquier duda que tengan pueden buscar las pistas que se dieron durante los eventos mencionados y si no es suficiente pueden escribir a la lista CTF COLOMBIA para recibir apoyo.

Hasta la próxima!

[ RETO CERRADO - SIN GANADORES ] 

jueves, 24 de enero de 2013

Keygen for AppZapper (just for fun)

Esta entrada esta relacionada con el post de AppZapper que hice algún tiempo, donde usando el comando strings se pueden ver usuarios y seriales válidos. Me dio por revisar el algoritmo de generación de las claves y lo ví  como una oportunidad para explicar un poco el uso de IDA PRO como desensamblador "mágico" que nos ayuda a crear keygens. Esto se hace con fines académicos, realmente el AppZapper es una muy buena aplicación, así que si tiene los 13 dolares que cuesta el producto, mejor páguelos, usar seriales falsos? es ilegal.

Para empezar cargamos la aplicación en el IDA (file --> open)


Lo primero que se piensa es como llegar rápidamente a la rutina de validación de los seriales, la forma mas rápida es buscar los strings de validación que ya hemos encontrado como válidos, por ejemplo, busquemos la palabra "Pablo", para esto generamos los strings de la aplicación (view --> open subviews --> strings) y buscamos (Alt+t) la palabra "Pablo".


Para seguir la rutina hacemos doble click sobre el nombre y esto nos lleva a la rutina donde aparece el nombre buscaod, la "nueva vista" de la versión 6.3 de IDA permite ampliar o expandir solo las zonas que deseemos ver, para entrar o salir de las rutinas podemos usar las teclas + y -.


Al entrar a la rutina vemos que realmente estamos en la sección de definiciones de strings, esto es porque los nombres están definidos explícitamente en el sistema, así que tenemos que ubicar el punto desde donde este nombre es referenciado. Para esto nos paramos sobre el nombre (resaltado en amarillo) y presionamos la tecla "x", con esto aparece una ventana donde se muestra los lugares desde donde se invoca el nombre, como se puede ver en la siguiente imagen solo hay un solo punto.


Hacemos click sobre esta referencia y llegamos a la rutina verdadera.


Aquí se puede ver que la rutina se llama a_validatenameA, lo que nos esta indicando que efectivamente es la rutina donde se valida el serial de la aplicación. Algunas veces estos nombres no van a aparecer, todo depende de si la aplicación fue compilada con los símbolos reales y la depuración (debugging) habilitada.

Si aún no están acostumbrados a esta vista pueden regresar a la vista tradicional presionando la barra espaciadora.


Esta imagen nos muestra una hilera de condicionales anidados, del estilo, si este es el usuario válido entonces OK, sino es, entonces verifique el siguiente usuario ...


Si recorremos la función podemos encontrar cada uno de los usuarios válidos que hayamos con el comando string. Esto nos indica que efectivamente antes de generar el serial para un usuario particular, la rutina valida que el usuario no sea uno de los predefinidos, realmente no entiendo porque tienen todos estos usuarios ahí, seguramente tendrá algo que ver con las aficiones de los desarrolladores.

El último usuario que se valida es  "Pablo Sanchez", de modo que si ninguno de los usuarios fue el que se ingreso en el proceso de registro del software empieza una rutina de validación real sobre los datos ingresados.


En este punto entramos a la rutina que nos interesa.

Podemos ver que se carga el offset_3F788 que corresponde con la función lowercaseString(), porque lo primero que se hace es pasar el nombre de usuario a minúsculas. Podemos ir renombrando los offsets presionando la tecla "n" sobre el nombre y escribiendo algo que podamos recordar mas fácil.




El siguiente offset cargado es 3FA50, que apunta a la función mutableCopy(), esta función me genera una copia del valor entrado (con miras a modificarlo) de modo que el valor original no se vea alterado.

El siguientes es 3F530 que apunta a length() que como su nombre lo indica encontrará la longitud de la cadena ingresada.

3FEE4 apunta a la función replaceOccurrencesOfString:withString:o, esta rutina eliminará los espacios en el string que se ingresa .

Luego se carga el offset 3F754 que apunta a la función componentsSeparatedByString:, esta rutina permite dividir un string usando un delimitador. En este caso el delimitador es el carácter "-".

Una vez que el string se ha dividido se empieza a evaluar cada parte, según lo que conocemos de los seriales válidos el formato debe ser: APZP-XXX-XXX-XXX-XXX.

A cada una de las partes le llamaremos bloques, entonces el serial válido tendrá 5 bloques (APZP-Bloque1-Bloque3-Bloque4-Bloque5) como se ve en los ejemplos: APZP-101-109-198-114, APZP-105-108-206-110.

En el offset 3F528 se apunta a la rutina objectAtIndex que se encarga de seleccionar cada uno de los componentes, el primer componente empieza en cero.




BLOQUE 1

El offset 3F4C8 apunta a la función isEqualToString: que se encarga de comparar el valor del primer bloque. Para el primer bloque se compara la palabra "APZP" por lo que entendemos que el serial válido necesariamente tiene  que empezar con ese string.


Si el bloque uno es correcto se evalúa el bloque 2 y así con cada uno de los 5 bloques.

BLOQUE 2

En este punto aparecen dos rutinas mas:

3F9C0 --> intValue  , que se usa para validar que el bloque ingresado sea un número entero.
EFEE8 --> characterAtIndex: , se usa para convertir un carácter a un entero de 16 bits.

Lo que hace este bloque es tomar el usuario ingresado y convertir a un entero corto la letra que esta en la penúltima posición del usuario. Esa penúltima posición se alcanza restándole dos a la posición final del string, para restarle este valor lo que se hace es sumarle -2.

Código en ASM:   add     eax, 0FFFFFFFEh  =   add eax, -2


BLOQUE 3

Aquí se toma el primer carácter del usuario y se convierte a entero, este valor se compara con el valor ingresado en el serial.


BLOQUE 4

En este bloque se toma el segundo carácter del usuario y se convierte a entero, luego se toma el penúltimo valor y se hace lo mismo (se obtiene el mismo resultado del bloque 2), y finalmente se suman los dos valores (add     eax, ebx) para obtener el entero final que debe estar en esa posición.

BLOQUE 5
El último bloque toma la última letra del string de usuario y la convierte a un entero, la búsqueda la hace decrementando el valor  (dec eax) del registro que apunta al tamaño del string.



Al comparar este último bloque solo pueden haber dos caminos, el correcto que registra el programa o el incorrecto que hace que el programa genere un error de serial invalido.



Para automatizar este proceso generamos un script que funcione como keygen, el código es el siguiente:

[Hax0r@HOST] ~ $ cat keygen.py 
##
## Keygen for AppZapper by nonroot (c) 2013
##

import sys

def main():
  usuario=sys.argv[1]
  cusuario=usuario.lower().replace(' ','')
  lusuario=len(cusuario)
  B1="APZP"
  B2=ord(cusuario[lusuario-2])
  B3=ord(cusuario[0])
  B4=ord(cusuario[1])+B2          
  B5=ord(cusuario[lusuario-1])
  print "*********************"
  print usuario
  print str(B1)+"-"+str(B2)+"-"+str(B3)+"-"+str(B4)+"-"+str(B5)
  print "*********************"
if __name__ == '__main__':
  main()
[Hax0r@HOST] ~ $ 


Comprobemos con los usuarios por defecto (hardcoded) que trae el binario.

[Hax0r@HOST] ~ $ python keygen.py "Pablo Sanchez"
*********************
Pablo Sanchez
APZP-101-112-198-122
*********************
[Hax0r@HOST] ~ $ python keygen.py "Stephanie Lee"
*********************
Stephanie Lee
APZP-101-115-217-101
*********************
[Hax0r@HOST] ~ $ python keygen.py "MacZapper"
*********************
MacZapper
APZP-101-109-198-114
*********************
[Hax0r@HOST] ~ $ 

OK funciona, solo queda ingresar los datos generados en la ventana de registro.

[Hax0r@HOST] ~ $ python keygen.py "Intro a IDA PRO con AppZapper"
*********************
Intro a IDA PRO con AppZapper
APZP-101-105-211-114
*********************
[Hax0r@HOST] ~ $ 


Esto es todo, recuerden que la intención de crear este post no es otra que explicar un poco el uso de esta excelente herramienta usada en el mundo del reversing. En ningún momento se busca incentivar el registro de software de forma ilegal, por supuesto yo pagué mi versión de AppZapper ;)

Saludos.

domingo, 2 de diciembre de 2012

Barcamp Security Edition v3.0 (BCSE 2012)


En Colombia se viene realizando un evento de seguridad de la información desde hace tres años, la última versión se realizó el pasado 1ro de Diciembre de 2012 en diferentes ciudades de la país.

A diferencia de otros eventos el Barcamp Security Edition es un evento descentralizado organizado por profesionales en seguridad y cuyo objetivo es reunir a la comunidad en torno a actividades que se realizan durante todo un día. Entre las actividades comunes se tienen charlas, talleres, concursos y retos informáticos orientados a todos los temas de seguridad de la información que por lo general tienen un impacto local (ciudad, departamento, país).

Básicamente lo que hemos logrado es que se realice el evento de forma simultanea en cada ciudad un día del año (mes de Diciembre), tal como ocurre con el FLISOL en el ámbito del software libre. De esta forma se promueve la cultura de la seguridad en todas las ciudades teniendo un impacto mayor que si centralizáramos el evento en alguna ciudad específica.

Obviamente esto tiene sus problemas de logística que se han ido solucionando años tras año.


La versión 3.0 del evento en la ciudad de Medellín se realizó en los auditorios de la Universidad Eafit y como novedad tuvimos un par de concursos diferentes gracias al apoyo de las empresas Dsteam y Kronux que se comprometieron con diferentes premios.

El concurso @warcamp que se hace anualmente tuvo 5 retos informáticos en diferentes categorías, el reto estuvo publicado durante 8 horas sin que alguien se proclamara como ganador, pues no se recibieron solucionarios para ninguno de los retos. (Recuerden que pueden apoyarse para los temas de retos informáticos en la lista de CTF Colombia).

Uno de los nuevos concursos fue un juego de ciberdefensa que se jugó en el intermedio de las charlas con 20 personas, en este concurso algunos simulaban ser whitehats y otros blackhats  y cada uno realizaba su jugada por turnos para obtener puntos. La ganadora recibió un lapicero espía ;)


El segundo concurso fue mas técnico y permitió la participación de jugadores a nivel nacional, consistió en vulnerar la seguridad de un portal web (joomla) y hacer un defacement. El reto estuvo activo durante 5 horas y si bien se recibieron una tonelada de ataques no hubo ganador. El "truco" para resolver el reto era saltarse el sistema WAF que estaba delante del portal. Lo que se pudo observar de la mayoría de los ataques es que fueron automatizados usando herramientas de "pentesting" que no siempre lograrán el objetivo. El premio para el ganador de este reto era un servidor y al no tener uno, la empresa patrocinadora decidió sortearlo entre las personas que estaban inscritos y asistieron al BCSE en cualquiera de las ciudades.

En fin, el evento estuvo bueno y cada vez toma mas fuerza, este año se realizó en las ciudades de Barranquilla, Bogotá, Cali, Cartagena, Ibague, Popayán, Neiva y Medellín. Esperamos que para la próxima versión mas ciudades se unan y podamos mantener lo que hasta ahora se considera el evento descentralizado mas grande de seguridad de la información organizado por la comunidad colombiana.

Por último quiero darle un agradecimiento a todas las empresas de Medellín que siguen creyendo que apoyar este tipo de eventos ayuda a mejorar el ecosistema de seguridad, Defero, Kronux, Adcosy, DSteam y en general a todo el listado de patrocinadores que se encuentra en el sitio oficial del evento.

Un agradecimiento también para todos los desconferencistas y organizadores del BCSE a nivel nacional y en especial para los de Medellín que este año trabajamos como un gran equipo y aunque parezca que siempre somos los mismos haciendo las cosas, año a año son muchos los que se suman al esfuerzo de difundir y aportarle a los temas comunidad. 

Algunas FOTOS aquí.

Entradas populares