snail mail

Después de varias semanas sin pisar casa (Grand Canyon, Black Hat, DefCon y DebConf) detrás de mi puerta hay correo (del tradicional) en cantidad inusual. De un tiempo a esta parte, el correo no electrónico decantó en una forma de hacer llegar facturas, recibos, muestras gratis y nada más. Los sentimientos en el siglo XXI ya van por otro lado. Sin embargo, esta carta fue distinta:



Se trata del número de Agosto de Linux Magazine. El lector observador notará que no está en inglés, ni en alemán, sino en neerlandés. Me la envió Koen Vervloesem, quien hace poco menos de 3 meses me solicitó vía correo (del electrónico) detalles sobre la falla dsa-1571.

Obviamente lo único que soy capaz de entender es mi propio nombre, pero lo que cuenta es la intención :). Gracias Koen por el detalle, se que entenderás este post tanto como yo la nota :P.

Y hablando de correo físicamente transportado (aunque sin relación con lo anterior, que fue totalmente gratis), uno se da cuenta que vive en las antípodas del mundo donde le gustaría estar cuando recibe facturas de encomienda como esta:


Bizarro... pero cruelmente real.

Exploiting DSA-1571: How to break PFS in SSL with EDH

( I love acronyms :-D ) Tal vez quieras leer esto en español.

At this point, all of you should know and see how the H D Moore’s toys work. Those toys attack SSH public-key authentication using clone keys and online brute force.

Furthermore, many of you know that there are other effects produced by a biased PRNG besides this one.

Strangely, I could not find more of those toys exploiting these aspects. So, I would like to show you a Wireshark patch which attacks Perfect Forward Secrecy (PFS) provided by Ephemeral Diffie Hellman (EDH).

Introduction to EDH

Let’s put it in plain words (if you know what we are talking about, ignore this and jump to the next heading):
In an insecure communications channel the parties agree a common key to cipher their dialog. This is what happens in SSL (in most of the cases, depending on the cipher suite):

  • The server selects a random prime p and a generator g of the field Z*p (Let’s ignore the mathematical properties of these values). So, the components p and g are public.

  • The server picks a secret random number Xs and calculates Ys=gXs mod p. Ys is public and is sent to the client (just like p and g).
  • The client does something similar, selecting a secret random number Xc and calculating Yc=gXc mod p too. The client makes Yc public by sending it to the server.
  • The shared secret s is the public key of the other part to the exponential of the own private number, all in p modulus. That is, for the client s=YsXcmod p and for the server s=YcXsmod p.
  • With this shared secret the parties can encrypt all the following messages in a secure way.
  • In the Ephemeral Diffie Hellman (EDH), the private numbers are ruled out, so s is mathematically secure and nobody can obtain it even having access to one of the parties after the aforementioned handshake.

The “exploit”

If an eavesdropper can explore the complete private key space (the all possible numbers for Xc or Xs), he/she will be able to get access to the shared secret. With it all the communication can be deciphered. That’s what this patch can do.

A Wireshark with this patch and a list of possible private keys will try to brute force the share secret. If one of the parties is using the vulnerable OpenSSL package the communication is totally insecure and will be decrypted.

  • The patch for Wireshark 1.0.2 can be downloaded from here.

  • Debian packages with the patch applied can be found here.
  • This is a list of all 215 possible 64 and 128 bit DH private keys in systems vulnerable to the predictable OpenSSL PRNG described by DSA-1571.
  • An example of a pcap file can be found here (it was built with a vulnerable client and one of the Moore toys, a hacked getpid by running $ MAGICPID=101 LD_PRELOAD=‘getpid.so’ ./vulnerable-openssl/apps/openssl s_client -connect db.debian.org:443 )

The patch was submitted in order to be committed on the Wireshark trunk. There you can find the patch against the on-develop source revision 25765.

Issues that can be improved

We (the other developers and myself) detected few things to be improved. But we will do nothing for them. So, if you want to contribute with some code, start from these items and submit the patches to the Wireshark’s bugzilla:

  • When the packets are out-of-order the decipher with stop itself.

  • The brute force attack should run in a background process (and with a progres bar)
  • Check the length of the keys before trying to brute force them.
  • The patch also implements the display of public DH parameters in the packet tree. It’s incomplete.

Credits

Paolo Abeni <paolo.abeni at email.it>
Luciano Bello <luciano at debian.org>
Maximiliano Bertacchini <mbertacchini at citefa.gov.ar>

This work was partially supported by Si6 Labs at CITEFA, Argentina.

UPDATE Jul. 21st: See more and updated info here, especially this.

cartoon

Después de pasar más de un mes sin bloguear, uno siente la obligación de tener que hacerlo por una buena causa.

Y ésta me pareció que lo es. Durante mi periódica vuelta por el lado del mal me encuentro una simpática repercusión tardía del ‘Debian/OpenSSL debacle’, siempre desde su peculiar perspectiva el amigo Josemaricariño publicó:


click para agrandar
Una vez más, muchas gracias al maligno por el reconocimiento. Es raro verse en forma de cartoon :oP.

looking for a sponsor to travel to defcon16

Warning: read the last update first. No more contributions are needed :D

The last weeks have been very active. A lot of e-mails from people and magazines, a lot of congratulations and a lot of free beer made me feel like a rock star :) Thanks a lot to everyone. I really appreciated that.

And maybe this petition would sound you like an abuse of this situation. And maybe you are right.

The fact is, I need an sponsor to travel to Defcon16, in Las Vegas, the next August. I need a flight ticket, 3 or 4 nights in a hotel and 2 meals per day.

I’ve been accepted to explain the Debian/OpenSSL problem and I’m dying to be there. If you work for a company which is looking for a nice way to say “thank you”, please consider this option :)


Contact me at luciano <alt+64> debian.org for more details. Thanks.

update (13 minutes later): I just received confirmation from the Black Hat organization to be an alternative speaker there too! So I will need to fund 5 extra nights... :D

update (Jun. 6th): I already have a sponsor! :D. Thanks a lot to all the contributors/mentors/impeller ppl, especially to physical people for the monetary-small-but-emotionally-significant colaborations: Juan Tula and Alejandra García.

porqué el 'Debian/OpenSSL debacle' no afecta mi creencia de que Debian es el mejor OS del mundo

En estos días escuché cosas como “Seguramente provocaste la mayor migración de usuarios de la historia, ya nadie querrá usar Debian en sus vidas”. Otros párrafos sobre la vergüenza que caía sobre los desarrolladores, sobre nuestros procesos de calidad llovieron de a decenas en mi inbox.

Este tipo de cosas me hizo reflexionar. Y es esta reflexión la que me gustaría compartir con ustedes.

Hace un tiempo ya, cuando casi sin querer y por accidente me encontré con el problema, simplemente me negué a creerlo. No podía ser. Era tan trivial y estuvo ahí, frente a nuestras narices tanto tiempo... parecía ser evidente de que yo estaba haciendo algo mal. Tardé mucho en confirmarlo, y aún con la duda lo reporté.

Junto a mi reporte adjunté un parche ridículo, casi insultante. Consistía en:
-/*
- * Don’t add uninitialised data.
MD_Update(&m,buf,j);
-*/

Esto fue el día 5 de Mayo. Al día siguiente tenía una respuesta, con una clara dirección de trabajo. A los pocos días se me informaron la fecha en la que el DSA saldría. Todo fue tan expeditivo, tan admitido, sin subestimaciones, pero con un fuerte sentido de la responsabilidad. Me pareció de una brillante sensatez el desarrollo de dowkd.pl antes del anuncio.

El 14 de Mayo el usuario tenía todos los elementos para defenderse. El paquete openssh-blacklist resultó ser sumamente útil y fue un aliciente entre el caos generado.

En mi vida no he enviado muchos advisories grandes (es el primero que hago totalmente por mi cuenta). Pero me pregunto: ¿Qué hubiese pasado si un problema como este hubiese surgido en algún otro software de alguna empresa? ¿Qué hubiese pasado si, en vez de ser un desarrollador de Debian el descubridor fuese un empleado de esta compañía? El bug dejaría de ser un vergonzoso accidente para convertirse en un devaluador de acciones. La baja de ingresos por clientes perdidos podría hundir la empresa.

En esta caso la historia hubiese sido distinta.

Es por esto que creo que el modelo de software libre es bueno, y en particular Debian es bueno, porque no responde a presiones comerciales, porque no oculta sus problema y porque su prioridad es el usuario.

Sin duda, problemas en el software habrá siempre. Sin duda, este fue un problema de proporciones épicas. Sin duda, la confianza en Debian se ha visto afectada. Pero la lección está aprendida. Y Debian sigue siendo mi sistema operativo favorito.

Esto no es una justificación, sino una profunda opinión personal.

cryptographic apocalypse

Well, maybe I was a little noisy with my first DSA. I will try to be quieter next time :)

I think that many people are being very unfair with the OpenSSL’s maintainers. They made (and are making) a really good job. Was an accident, that things happens.

What we need is a real auditory process of the Debian specific patches. It’s hard, but it’s necessary.

life changelog

La semana pasada resultó ser atípica. Además de muchas actividades tuvo un fuerte condimento de decisiones y oportunidades.

El primero punto de atipidés fue que se trató de mi primer semana de full-daily-routine. Es decir, todas las actividades que planeaba realizar durante este semestre están finalmente en su lugar semanal. El conjunto “actividades para este semestre” está conformado por los siguientes elementos:

  • Inglés, dos veces por semana: Sí, finalmente decidí estudiar inglés... ya que doy pena/lástima/vergüenza cada vez que abro la boca o escribo en el idioma de Shakespeare.

  • Natación, dos veces por semana: Sí, finalmente decidí hacer deporte... es relajante, saludable y divertido.
  • Tenis, una vez o menos por semana: Sí, finalmente decidí hacer deporte (bis)... jugamos con Sebastián quien tiene mucha más práctica que yo pero cada tanto me deja ganar algún game.
  • Teoría de algoritmos, dos veces por semana: Sí, finalmente decidí estudiar por placer... estoy de oyente en la fi.UBA. Las clases están dictadas por Rosita Wachenchauzer quien, además de saber mucho, es una excelente docente.

Como dije, también surgieron varias oportunidades y decisiones. La principal es que, después de dos años de espera, entré en el laboratorio SI6 de CITEFA. Lamentablemente esto me impedirá continuar con mis tareas en ShellCode.

Esta última novedad está fuertemente relacionada con dos resoluciones ridículamente interconectadas: Me voy a comprar un auto y me voy a inscribir en un doctorado (PhD).

En el primer caso, las razones pueden enumerarse. CITEFA está ubicado en un lugar poco accesible y ya no tengo que ir al centro a diario. Los lugares en lo que me moveré durante los próximos meses/años tiene estacionamiento. Dado que la idea me revoloteaba en la cabeza hace semanas, me parecieron buenas excusas.

El tema de la inscripción al doctorado es más independiente. Desde que me recibí que tengo ganas de empezar con esto. El proceso de recolección de papeles para la inscripción que es lento y tedioso. Supongo que pasará tiempo hasta que se me considere doctorando. Mientras tanto será agradable trabajar en el laboratorio. Creo que será una buena introducción a la vida académico-investigativa.

Hasta el momento, estos son los cambios en mi vida. Sigo trabajando para especializarme en Criptografía. Me quedan pendientes algunas materias y el trabajo final. La faena en Debian está algo rezagada, y espero dedicarle algunas horas de calidad en el corto plazo.

cvs commit

DebianDay.uy

Pasé el fin de semana en Montevideo (Uruguay), con motivo del Día Debian organizado por debianuruguay. Dí una charla sobre cómo convertirse en Debian Developer y un improvisado taller de empaquetamiento de punto debs.

Excelentes charlas, buena cerveza, amigos y extranjero, todo lo necesario para pasarla bien. Fue un excelente fin de semana de desintoxicación, propio del trajín diario porteño que ya me tenía algo cansado.

Muchísimas gracias a quienes lo hicieron posible, en particular a Alvaro Mouriño (Tuxie), quien me hizo sentir como en casa (o incluso mejor).

ocurrencia

In Spanish, occurrence and stupid idea are the same word.
j=`w3m planet.debian.org -dump -no-graph -l 200 | tr -d -C [:alpha:] | tr [:upper:] [:lower:]`; for i in `seq ${#j}`; do echo $j | cut -b $i; done | sort | uniq -c | while read w; do y=`echo $w | cut -f 1 -d ' '`; echo -n $(echo "scale=5; $y/${#j}" | bc); echo " `echo $w | cut -f 2 -d ' '`" ;done | sort -rn

</ cuasi vacation > < last university semester >

Durante este fin de semana, aprovechando que todavía no empezaba las clases (hasta hoy), por sugerencia de mi madre y con la excelente escusa de las 7mas Jornadas regionales de Software Libre, es que estuve en Córdoba los últimos 3 días y a modo de vacaciones nerdies.

El nivel de charlas fue espectacular y con varios disertantes internacionales. De las conferencias a las que asistí destaco:

  • A tale of one standard: ODF vs OOXML por David Megías - Georg Greve - Nagarjuna G - Gustavo Boksar

  • Welcome potential Kernel Hackers por Christoph Hellwig
  • Python y Concurrencia por Lucio Torre

    Por otra parte, me dediqué a terminar algunas cosas que había empezado durante la semana, como ser: un módulo de brute force para formularios web como parte de medusa y terminar dsniff. Éste último fue mi primer upload en Debian :-). Con respecto al módulo de medusa, se lo mandé a upstream para las correcciones del caso y espero esté en su próxima versión.

    Dado que estoy retomando mis obligaciones académicas, puede que dedique menos tiempo a este tipo de cosas. Pero me esforzaré por hacerlo regularmente. En particular, imagemagick necesita mucho trabajo y tengo muchos pendientes de WNPP.

    Sin duda, necesito invertir más tiempo de calidad en lo que me gusta.

fin del semestre academico

Finalmente terminé el semestre académico. Todo hubiera salido de maravillas sino fuese por un tropezón en el final de Inteligencia Artificial, que tendré que volver a dar en septiembre.

Primero, lo prometido (ni que fuera gran cosa). Los dos informes que presenté este semestre y que disfruté mucho de hacerlos. Ambos fueron comentados en este blog durante su confección y vienen acompañados de un poco de código para que pueda verse su parte “práctica”:

  • Algoritmos Genéticos para la Resolución de Sudokus - (Inteligencia Artificial): Como lo había comentado, no esperen nada interesante desde el punto de vista de la resolución. Es, más bien, una ridiculez hecha informe. Planeo hacerle algunas mejoras al programa propuestas por amigos con demasiado tiempo libre.
  • Análisis y Detección de Esteganografía en Audio - (Procesamiento de Señales): Tampoco esperen nada revelador. Aunque creo que también voy a mejorarle la parte algorítmica en algún momento. Si bien es algo más serio que el anterior, su enfoque está muy basado en los lenguajes y funciones utilizadas. Creo que se puede orientar más a lo analítico, por lo que sugerencias son bienvenidas.

El semestre que voy a iniciar es el último antes de convertirme en ingeniero. Quedan 6 materias y el objetivo principal es terminar con un promedio superior a 7.

Otro tema. Gracias a todos lo que me saludaron y felicitaron por mi nombramiento en Debian :-). Sus elogios y empujones de entusiasmo hacen mucho bien.