It should work…

Cuando cualquier trasto es útil

It should work… header image 1

Breaking LFSR-based pseudo-random number generators

January 22nd, 2011 · 14 Comments · hacking

Another english post? Yes because this is related to the first Security By Default Wargame that took place a few days ago. Congratulations to Int3pids!

Nowadays, I think most security related people know the importance of random numbers in cryptography. We need to generate IVs, session keys, challenges, tokens, etc. that make our crypto systems secure, if the PRNG is predictable the whole system is shattered (right Sony? btw, remember the “Crypto Tales” talk? check the slide 29 xD)

PRNGs… that’s what made me think about crypto03 for the contest. I hate all those crypto levels which are just a matter of luck, iluminated ideas or non realistic scenarios, so I tried to avoid all of those and show something new.

[Read more →]

→ 14 CommentsTags:·········

Campus Party 2010 – Wargame Leftovers winner!

August 30th, 2010 · No Comments · hacking, programming

Just a quick note and I’ll be back to my regular spanish written crappy blog.

Uri from Int3pids won the challenge. Congratulations! Eloi, dreyer, earada, kachakil and roman_soft did a great job too, thanks to all the participants.

Now you can find online the solution of Crypto02

→ No CommentsTags:····

Campus Party 2010 – Wargame Leftovers

August 2nd, 2010 · 4 Comments · hacking, programming

Campus Party is over now, it was a great week. Here are two unsolved levels from the hacking wargame, they were available in the contest so we wanted to release them.

Go, get them and have fun! First to solve both gets a $30 gift card for Amazon. All the info available at

http://vierito.es/cp2010wargame/

→ 4 CommentsTags:··

Historias de la cripta

July 10th, 2010 · 1 Comment · hacking, programming

El Maligno me lió para dar una charla en el III Curso de Verano de Seguridad en Valencia. El curso ha estado genial, tanto las ponencias como la gente que acudió, sin duda una gran oportunidad para pasar un buen rato con conocidos y nuevas caras.

Mi charla la quise enfocar como una recopilación de fallos comunes (algunos de ellos famosos) cuando nos toca tratar con criptografía. Es un tema un poco denso así que para darle un toque más curioso y divertido en la parte final incluí puntos decisivos a la hora de implementar criptografía en dispositivos embebidos en los que, debido a factores como el side channel, tenemos que tener en cuenta todo tipo de nuevas medidas.

Gracias a Eloi y Bea por echarme una mano :)

Aquí os dejo la presentación de Historias de la cripta

Si tenéis dudas o preguntas podéis dejar comentarios aquí o usar twitter con el tag #cripta.

Keep hacking!
[Read more →]

→ 1 CommentTags:····

Explota al máximo tu IDA Pro: los mejores plugins

June 3rd, 2010 · 3 Comments · hacking

Es indudable que IDA Pro se ha convertido en una de las herramientas indispensables para todo el que quiera hacer ingeniería inversa de binarios de diversas plataformas y gracias a todo tipo de plugins podremos llevar sus capacidades más allá. Ya sé que hay por ahí varias listas como la de OpenRCE pero me parece que se limitan un poco a listar plugins y no a recopilar los que, al final, la gente termina usando porque son los más útiles.

Así que aquí va una lista de los mejores plugins que te ayudarán tu tarea de pwning. Gracias a todos los que me habéis recomendable alguno de ellos.

  • Hex-Rays:  Creo que este era evidente. Uno de los mayores atractivos de IDA Pro.
  • IDAPython: para poder manejar IDA desde scripts en python
  • Turbodiff: para comparar cambios en binarios, comunmente llamado diffing. Otras opciones con el mismo propósito con Darungrim, Patchdiff y BinDiff
  • Adobe Flash Disassembler: el nombre habla por sí mismo
  • IDADWARF: para importar símbolos DWARF de binarios ELF. Nos facilita así conocer nombres y tipos, arregla algunos tipos y renombra variables y registros para una comprensión más sencilla. Vamos la pareja perfecta con Hex-Rays cuando es un binario de este tipo.
  • Findcrypt: útil para reconocer algoritmos de cifrado, funciones hash y algoritmos de compresión usados dentro del binario. Está claro que algunos son fácilmente reconocibles según las pasadas que den u otras características pero no esta nada mal ahorrarte un buen rato intentando descubrir qué algoritmo es. Este plugin intenta buscar constantes típicas usadas en los algoritmos, ya sea en las famosas S-Boxes, como inicialización u otros.
    [Link to FindCrypt2]
  • IDAStealth: para poder evitar y manejar las técnicas anti-debug más comunes
  • COM Helper: busca GUIDs
  • mIDA: extra las interfaces RPC y reconstruye su IDL
  • ms_rtti: información de los Run-time Type Information para binarios C++
  • PDB: proporciona información extra sobre los símbolos en binarios de Windows.
  • Importar infomación de MSDN: podéis ver como hacerlo en este post de Zynamics, quizá incluso agobiante tanta información pero útil si vas perdido.
  • Class Informer: más de lo mismo, más información sobre vftables, RTTI y RTCI
  • BinNavi: para visualizar la estructura de un programa, ver el camino que sigue una ejecución, ver como llegar a ciertos puntos del código, etc.
  • MyNav: el hermano pequeño pero de código libre de BinNavi. Se publicará en julio, mientras podréis ver una muestra en este post. Promete mucho :)

Además, en breve tendremos hoy 3 de junio ha salido una suculenta nueva característica que será el soporte para decompilación para ARM, como se nota que esta arquitectura está creciendo mucho :)

Seguro que hay algun plugin que usas de normal y no está en esta lista así que espero vuestros comentarios.

→ 3 CommentsTags:·····

Crypto04 challenge write-up from Campus Party Europe

April 19th, 2010 · 7 Comments · hacking, programming

Hey there! I usually write in spanish here but as the attendance at Campus Party Europe was pretty international I’ll do this one in english so anyone can understand it.

All the information to try the challenge is at Eloi’s blog since he released it as challenge a couple of days ago. Before continuing I guess you either have played in the hacking contest at Campus Party Europe or already have read that post, if not… you are being late!

So, we receive 3 files: an AES encrypted file, a  public key file and a readme with some instructions and data.

From the readme, this are some hints to understand what’s going on here:

  • It uses a cryptographic device that contains a 1024 bit modular exponentiation accelerator
  • A pair of RSA signatures over the same data, one of these signatures contains a fault injection

From those hints we get that it is actually using the RSA-CRT algorithm, which is a RSA variation to reduce computational costs using the Chinese Remainder Theorem. The point is that instead of using the 2048 bit modular exponentation it splits them into two modular operations, aproximately half the size, make the calculations and then recombine the results as needed to obtain the regular RSA result. But here’s the trick, if we inject a fault in one of these two exponentiations, via power glitching for example, there’s a way to recover the private RSA key. The use of RSA-CRT is common in embedded devices such as smart cards, mainly because of the hardware limitations. You can read a post about it at Eloi’s blog, it’s in spanish though: RSA-CRT Fault Injection.

RSA signs a message doing:

  • s = m^d (mod n)

RSA-CRT does:

  • s1 = m^dq (mod q)
  • s2 = m^dp (mod p)
  • s = a*s1 + b*s2  (mod n) = m^d (mod n)
  • a being congruent to one modulo p and zero modulo q
  • b being congruent to zero modulo p and one modulo q

Using the faulty signatures:

  • s – s’ = a*s1 – a*s1′ will be congruent to zero modulo q
  • s – s’ = b*s2 – b*s2′ will not be congruent to zero modulo p

[Read more →]

→ 7 CommentsTags:········

Rooted CON 2010 – All your base are belong to us

April 15th, 2010 · 8 Comments · hacking


Más vale tarde que nunca, varias semanas después encuentro un rato para poder escribir este post. El cansancio acumulado hizo que gran parte de la semana siguiente fuera a medio gas y desde entonces he ido hasta arriba de cosas.

¿Qué puedo decir? Sin duda ha sido una gran experiencia, de una vez por todas, poder poner caras a tanta que gente que sólo puedes tratar por e-mail, IRC, foros, twitter o simplemente ni le tratabas y te conformabas con seguirle por internet. Coges a toda esa gente y durante 3 días compartes comidas, cenas y cervezas. Impresionante. Han sido unos días repletos de buen rollo y diversión.

Para la organización mis más sinceras felicitaciones,yo creo que han sacado nota alta y más siendo su primera vez, errores por supuesto que han habido pero como todos sabemos que habrá Rooted CON 2011… no pasa nada, al año que viene más y mejor :D

Cómo ya sabréis, Eloi y yo fuimos seleccionados con una ponencia sobre Seguridad y Explotación Nativa en Android que parece que gustó bastante, así que no me puedo sentir más orgulloso y realizado. Gracias a todos los estuvísteis ahí a primera hora el último día, como unos campeones. Si alguien se la perdió que no se preocupe porque la presentación os la enlazo ahora y, como ya prometimos en su momento, para descargar también todo el código y ejemplos:

android-open-248x300 [Read more →]

→ 8 CommentsTags:·····

Resolución de conflictos, es decir, cómo no perder nunca al 3 en raya

February 4th, 2010 · 6 Comments · Opinión, personal

A menudo, ya sea con amigos o no, nos encontramos con situaciones en las que no hay vuelta atrás, uno opina una cosa, otro otra, y eso no va a cambiar. Pero queda algo, el orgullo, en el fondo tu sabes que tienes razón y quieres dejarlo patente. Veamos las opciones:

  • Llegar a las manos: Darse leches está mal visto. Meterse mano también.
  • Jugárselo a piedra, papel o tijera: si es el otro es japonés estás perdido, vas a perder sí o sí, ellos nacieron con un don para ello. Si no es japonés nada te asegura que vayas a ganar, así que nada, mala opción.
  • Jugárselo al tres-en-raya. Esta es la buena.

El tres en raya es un juego sencillo, cuando la gente se pone a jugar se cree que es un juego tonto (que lo es!) y que más o menos, sin considerar empates, el 50% de las partidas las ganarán y el resto las perderán pero no es tan tan sencillo. Así que le sueltas: “Pues ya está! Nos lo jugamos al tres en raya. El primero en ganar será el que tenga la razón, ¿es justo no?” Suelen aceptar.

Vamos a asumir que el juego es empezando con un tablero vacío, que empiezas donde quieras y que cuando ya has puesto las piezas posibles y no ha ganado nadie comienza una partida nueva desde cero.

También vamos a asumir que tú no estás en la parra y que sólo vas a perder si te provocan una situación en la que el contrincante te puede hacer tres en raya de dos maneras simultáneas y no es que se te ha escapado la línea ¬¬. Tú eres cruz, tu víctima será cara.
[Read more →]

→ 6 CommentsTags:·

Congreso de Seguridad Rooted CON 2010

January 13th, 2010 · 11 Comments · hacking, personal

rootedcon

Cómo se puede leer ya en muchos sitios, este año se celebra un nuevo congreso de seguridad informática en España. Su web es http://www.rootedcon.es y como ellos mismos dicen su objetivo es ofrecer conferencias altamente técnicas y fomentar el conocimiento, no bastante con conocer que existen cosas, hay que saber cómo son y por qué funcionan así :D

Se va a organizar un wargame tipo Capture The Flag a manos de un Sexy Panda, ¿qué más se puede tener? Además hay una serie de talleres intensivos denominados RootedLabs donde podrás aprender con los mejores sobre: ingeniería inversa, análisis forense, análisis de malware, pentesting, securización de redes inalámbricas y seguridad web (aún quedan plazas libres en los labs si te interesa algún área).

Allá por noviembre me enteré de la existencia el congreso y desde un principio me interesó acudir, pero ¿por qué no algo más? Hablando con TuXeD nos planteamos la posibilidad de enviar algo al Call For Papers, estuvimos unas cuantas semanas dudando pero tiró para adelante… :D

Unas semanas después (contra todo pronóstico, por lo menos mío) resulta que nos han seleccionado la propuesta, además junto con los primeros ponentes confirmados, cosa que considero un honor más aún. Ya de por sí, ser el último mono iba a ser considerado un éxito 100% por nuestra parte.

Para que os hagáis una idea del personal, esto es lo que hay confirmado por ahora:
http://www.rootedcon.es/rooted-con-2010/ponentes.html

Y TuXeD y yo! No puedo ocultar que estoy emocionado :) me lo voy a pasar de lo lindo seguro.

Poco a poco se tienen que ir confirmando más ponentes y saldrán los detalles de la conferencias. Esto promete.

Si queréis acudir al evento daos prisa porque debido a la gran acogida pronto colgarán el cartel de todo vendido. Me alegro de que haya surgido una nueva iniciativa así y más aún con precios populares y apostando por gente muy capaz que hay por nuestro país.

Por la mocosfera mucha gente ya se ha hecho eco del evento:
http://www.securitybydefault.com/search/label/rootedcon

Y aquí entrevistas a gente que lo organiza o va a estar danzando por ahí:
http://elladodelmal.blogspot.com/search/label/Entrevistas

Can’t wait!

ACTUALIZACIÓN: Ya empiezan a salir más nombres de ponentes y títulos de las conferencias. Toda la información aquí

→ 11 CommentsTags:····

Descodificar tonos DTMF usando Matlab

November 25th, 2009 · 12 Comments · programming

Ya vimos como crear tonos DTMF usando Matlab y han pedido en un par de comentarios [1] [2] cómo se haría a la inversa, así que aquí va ;)

He cogido el script para generar los tonos del otro post y lo he cambiado para los pitidos duren 40ms (que se resume a cambiar que use 320 muestras en lugar de 1200 para cada pitido o silencio), para que sea un poco más real. El wav que voy a usar será el siguiente: ring.wav

Empezamos, ¿qué necesitamos? Cada pitido estará compuesto por una pareja de tonos así que para saber qué número es deberemos reconocer las dos frecuencias principales que tienen los pitidos, y conocer la frecuencia viene a ser lo mismo que saber el periodo.

Hace un tiempo hice una práctica de Tratamiento Digital de la Señal en la que se hacían cosas de estas, uno de los códigos no es mío, está indicado. El resto los hicimos Rafa y yo en su día.

Aprovechándonos de la Transformada de Fourier:

function [P,f]=periodograma(x,N)
% [P f]=periodograma(x,N)
% Calcula N muestras del periodograma de las muestras en x
% N debe ser > que length(x)
%
% P: Periodograma propiamente
% f frecuencias correspondientes
 
k=0:N-1;
f=k./N;
 
L=length(x);
P=1/L*(fft(x,N)).^2;

Pero lo propio será usar un programa que use ventanas para su propósito:

function [P,f]=periodmodif(x,ventana,N)
% [P ,f]=periodmodif(x,ventana,N)
%
% Calcula N muestras del periodograma modificado de las muestras en x
% N debe ser > que length(x)
%
% P: Periodograma propiamente
% f frecuencias correspondientes
 
if N <= length(x)
   error('N debe ser > que length(x)');
else
   k=0:N-1;
   f=k./N;
 
   L=length(x);
   m=0:L-1;
 
   U=1/L*(sum(ventana(m+1).^2));
   P=1/(L*U)*abs(fft(x.*ventana,N)).^2;
end

Cargamos el fichero ring.wav

>> [x,fs,nbits]= wavread('ring.wav')
>> t=0:1/fs:1/fs*(length(x)-1);
>> plot(x)

ring

Ahora tendremos que calcular de cuanto es nuestra ventana mínima. La separación mínima entre tonos es de 320 muestras (que además en este caso es la misma entre todos los tonos) luego la frecuencia digital será 320 / fs = 320/8000 = 0.04

Y aquí un poco de teoría sobre ventanas gracias a los Apuntes de Pak:

ventanas_LTDS_pak

Pero no voy a aburriros con ella así que nos quedaremos en que vamos a usar una ventana tipo Hamming, luego necesitaremos una longitud de ventana L = 4 / resolución = 4 / 0.04 = 100 muestras

Ahora vamos a determinar los dígitos, y para ello vamos a hacer uso de la siguiente función para búscar máximos:

function p=buscapicosu(x,umbral)
%posi_picos=buscapicosu(x,umbral)
% Busca los máximos locales de un vector mayores que un cierto umbral
% umbral se expresa en % respecto al valor máximo del vector.
% Ej. buscapicos(x,60) buscaria los picos mayores o iguales al 60% del
% pico más alto
%
% posi_picos son los indices del vector de entrada correspondientes a los picos.
 
% (C) Antonio Albiol , 2003
 
%Primero descarto los valores menores que el umbral
 
umbral=max(x(:))*umbral/100;
 
x=x.*(x>umbral);
 
%Ahora buscaré los máximos
 
%Primero creo un vector con dos valores muy pequeños en los extremos
xe=[-inf;x(:);-inf];
 
%Ahora calculo la derivada
d1=diff(xe);
ld1=length(d1);
%Ahora busco valores de la derivada de signo diferente consecutivos y que sean máximos
p=find(sign(d1(2:ld1)).*sign(d1(1:(ld1-1)))<0 & sign(d1(1:ld1-1))>0);

Cada pitido y cada silencio dura 320 muestras luego calculamos periodos en esas zonas. Vamos a por el primer dígito, con ventana Hamming de 100 y usando 1024 puntos:

>> [P,f]=periodmodif(x(320:320+99),hamming(100),1024);
>> buscapicosu(abs(P),50)
 
ans =
 
   110
   190
   836
   916

En el espectro digital, de 0 a 1, veremos que las frecuencias se repiten en espejo a partir de 0.5. Luego la frecuencia 110 se corresponde con la 916, igualmente ocurre entre la de 190 y 836, son lo mismo. Así que sólo tenemos que ver a qué corresponden 110 y 190.

Nota a tener en cuenta: en las FFTs (Fast Fourier Transforms) el cálculo se hace mucho más rapido cuando N es una potencia de 2, por eso la elección de hacerlo en 1024 puntos no ha sido del todo al azar.

>> 110/1024*fs
 
ans =
 
  859.3750
 
>> 190/1024*fs
 
ans =
 
  1.4844e+003

Nos vamos a la tablita y vemos con qué 2 valores más cercanos concuerdan 859.375 y 1484.4 Hz. Claramente sería con 852 y 1477 Hz que juntos corresponden con el dígito 9.

dtmf1

Y así con cada uno de los dígitos :)

Sé que estaría mucho mejor un script que hiciera todo el proceso entero y obtuviera qué número es de la tabla pero últimamente necesito días de 30 horas así os tendréis que conformar con esto. ¿A qué número he llamado?

→ 12 CommentsTags:···