Corriendo Debian en un server fanless

Debido a una reciente mudanza, he bajado unos servers que tenía corriendo en casa de mis padres. Sin embargo, en mi nuevo hogar estoy en proceso de generar una nueva DMZ, esta vez, sin ventiladores.

El primer paso de este proceso ocurrió en forma de weekend project y consiste en hacerme de un "servidor". Las comillas hacen referencia a que no se trata de un gran server sino un procesador ARM de 200Mhz y 32MB de RAM, lo que es suficiente para que corra Debian y algunos otros servicios que pueden ser interesantes.

Los ingredientes

  • Un all-in-one LAN server que es la forma en que DealExtreme llama a unos dispositivos con chips de la familia str8132. Dado que vamos a instalar snake-os en ellos (en este caso se trata de la versión 1.3.2-20111019), es importante chequear la lista de compatibilidad. En particular me hice de un NS-K330 por 40 dólares.
  • Storage USB, puede ser en la forma de stick o como disco portable.
  • Un RS232 to TTL level converter, también conocido como cable para Nokia N1200/1208/1650/2630/2670. Es para conectarse por serie a la consola. No lo necesitamos ahora mismo, pero está bueno tenerlo a mano en caso de brickearlo, aunque es un procedimiento que no explicaré esta vez.

Instalación de Snake-OS

Es realmente sencillo. Lo primero es bajar snake-os, desde la sección de downloads de la web. Es importante que el archivo sea de la forma snakeos-<versión>-from-original.zip Instalar el que dice from-snake lleva definitivamente al brickearlo y recuperarlo puede ser complejo.
Desde la página de administración del dispositivo hay que subir el archivo snakeos-<versión>-from-original.bin contenido en el zip bajado. Confirmar el md5sum no está de más.

Acceso inicial

Los datos para acceder a la nueva interfaz con el browser:

http://192.168.0.240 (si es que no hay un DHCP en la red)
usuario: admin
contraseña: snake

Por SSH la contraseña de root la misma y, al cambiarla por la página de administración, se cambia en todos los accesos.

Post instalación

Incluso cuando Max opine que el uso de memoria virtual está rumbo a la extinción (lo cierto es que tal vez no es la mejor idea cuando el storage es de estado sólido como en los pendrives), activé el uso de SWAP desde el menú Service-Swapfile.

Si se quieren las mismas prestaciones que se tenían con el firmware original, hay que instalar unos paquetes adicionales. El sistema de paquetes que utiliza snake-os es opkg y tiene que ser primero activado desde Service-Opkg. Los paquetes pueden bajarse desde la página de download de snake-os y se instalan desde System-Packages. En particular, pueden ser interesantes (siempre pensando en los features originales):
Transmission: Es un cliente de BitTorrent, para dejar tus descargas corriendo. Es bastante mejor que el original.
miniDLNA: Es el server de streaming compatible con DLNA/UPnP-AV. Está un poco verde, pero se está trabajando en su mejora.

Corriendo Debian dentro

Las instrucciones están acá. Aunque esto es lo más obvio y necesario:

wget http://snake-os.googlecode.com/files/debian_chroot.tgz
tar -xvf debian_chroot.tgz
mount -o bind /proc /usb/sda1/debian/proc
mount -o bind /dev /usb/sda1/debian/dev
chroot /usb/sda1/debian/

Esta instalación base requiere unos 200MB. Tiene todo el potencial de un Debian (¡porque lo es!).
Claro que falta ajustar varios detalles, pero será la piedra inicial para el resto.

Avancez

Este post también está escrito en español.

If you follow me on Twitter/Facebook, you probably know that I went to Gothenburg, Sweden, during my last trip to Europe. But you probably don't know what I did in such remote city.

Few months ago, I applied to a PhD student position at Chalmers. I was lucky enough to be shortlisted, so I went to some in-situ interviews. And, incredibly, I have been accepted! :-)

Chalmers is a TOP 100 university. Most of the papers I read during the last months has been written by Chalmers researchers and for me is a great honor to be part of an academic institution with such prestige.

I'm going to move to the nice Gothenburg city in August. And I'm happy :)

DebConf10

Este es un delayed post, dado que DebConf10 New York City terminó hace 3 días. Aunque más tarde de lo esperado, no quería dejar pasar la oportunidad de comentar lo bien que la pasé. Siempre es agradable encontrarse con amigos.
Si bien pude dedicar mucho tiempo al security team (generé 3 nuevos DSA aunque, de momento, se ha publicado uno solo), me quedaron muchísimas cosas pendientes por hacer. Además tengo muchas nuevas ideas que me gustaría concretar durante el próximo año.

Entre los pendientes está el de subir fotos, para variar. Así que stay tunned! Para los ansiosos, hay publicadas fotos de otros asistentes aquí. También están disponibles las versiones preliminares de las charlas, donde se me puede ver dado una Lightning Talk, acerca de un prototipo para documentar workflows que se me ocurrió hace unos meses (minuto 10:40 de este video).

/home/duijvestijn

I have a new guest in my apartment. Give a warm welcome to the Adrianus Johannes Wilhelmus Duijvestijn's spirit.

Thanks a lot to Bartu and Rezlaj, who carried out the necessary seance that make this possible.

The complete photo set is here. If you do not have the slightest idea of what I'm talking about, take a look to Wikipedia or my previous post (Spanish only).

(esta entrada también está disponible en Español)

/home/duijvestijn

Tengo un nuevo huésped en mi departamento. Denle una cálida bienvenida al espíritu de Adrianus Johannes Wilhelmus Duijvestijn.

Muchísimas gracias a Bartu y a Rezlaj, quienes llevaron a cabo la sesión de espiritismo necesaria para hacer esto posible.

Todas las fotos están disponibles aquí. Si no tienes la menor idea de a qué se refiere esto, échale un ojo a la Wikipedia (solo en inglés) o a mi entrada anterior.

(this post is available in English too)

removing your facebook photo tags automagically

Este post también está escrito en español aquí.

Privacy at Facebook is heavy-duty. As a big fan of the Worlds Collide Theory I hate be tagged compulsively. I would like to select in which photos appear in my profile and feed. Since I couldn't find that option in the setting menu, I looked for the answer in my favorite scripting language: Python.

This 60-lines-long script removes your tag from the latests photos where you has been labelled. You can download it from here. You may run it hourly (or every 15 minutes, or every 5 minutes, depends how paranoid you are) via cron or whatever.

Any improvement is welcome. It probably runs on Windows too. If you managed to do it, leave a comment for the others.

NEW VERSION! (available here).

remover tu etiqueta de las fotos de facebook automágicamente

This post has been written in English too.

La privacidad en Facebook es un asunto complejo. Como gran suscriptor a la Teoría de Colisión de Mundos es que odio ser etiquetado en fotos de forma compulsiva. Me gustaría tener alguna forma de elegir en que fotos aparezco en mi perfil y actualizaciones. Dado que no pude encontrar tal opción entre la configuración, busqué la respuesta en mi lenguaje de scripting favorito: Python.

Este script de 60 lineas remueve tu etiqueta de las últimas fotos donde te hayan tagueado. Puede ser descargado desde aquí. Hay que correrlo cada hora (o cada 15 minutos, o cada 5, dependiendo de que tan paranoico seas) a través de cron o como sea.

Cualquier mejora es bienvenida. Posiblemente también corra en Windows. Si lograste hacer esto, deja un comentario que pueda serle útil a otros.

¡NUEVA VERSIÓN! (disponible aquí).

aUSBusing

When your laptop is being repaired (and it's still there, since August 28) you need imaginative ways to be connected.

Here is my Nokia N800 as something near to a desktop computer.

Just few notices:

  • life battery is really short when you plug too many things to the USB interface.
  • usbcontrol rules
  • solder a female-female USB adapter is easy and funny (it came from a broken motherboard)
  • after some weeks using Maemo, ideas about developing applications to it come to my mind
  • the mail client and the browser included with Maemo suck
  • my ocular health is being damaged

llegar para irse

Todavía no termino de llegar (literalmente, que mi mochila se quedó en Madrid un día más que su dueño) y ya tengo el pasaje salir pasado mañana para Bahía Blanca.

El evento es Jornadas del Sur, durante este fin de semana largo. Hablaré sobre seguridad y empaquetado, además de encontrarme con amigos para beber y divertirse :P

¿Nos vemos allá?

UPDATE Fri, 14 Aug 2009: Las fotos ya están disponibles, a excepción de las de Toledo, que están en una cámara desechable porque me olvidé la digital cuando fui.

cáceres->lisbon->madrid

Esta última quincena ha sido de lo más intensa.

DebConf9Lo más destacable, por lejos, fue DebConf9. Esa semana donde las cosas se viven de forma profundamente apasionadas, donde a cada paso hay diversión y amigos. Este año tuvo lugar en Cáceres, una ciudad relativamente pequeña de Extremadura. Me dediqué, mayormente, a escuchar charlas, intentar revivir paquetes que tenía algo olvidados, y hacer mucho trabajo de security. Incluso siendo impresionantemente productivo, mi ToDoList, lejos de reducirse durante esa semana, aumentó paradógicamente su tamaño en varias veces. Trabajo y diversión en envase familiar.

Mi idea no era volverme directamente a casa de DebConf9. Por un lado, estar de este lado del charco implica un esfuerzo demasiado grande que requiere ser amortizado. Por otro, conservo la esperanza que la depresión-post-debconf pegue menos si antes de volver doy una vuelta por ahí. El hecho es que, sin un plan, coordine mi pasaje de regreso sumando dos semanas a la finalización de DebConf9. Así fue como terminé en Lisboa, gracias a José que me llevó en su auto y empujado por la promesa de un país más barato que el español.

LisboaEn Lisboa pasé unos 4 días, muy lindos por cierto. Es una ciudad atípica, llena de particularidades, con gente agradable y más extranjeros que locales. Posiblemente el álbum de fotos pueda contar más detalles.

De ahí y en tren, partí a Madrid, donde estoy viviendo la última semana de este viaje. Siempre estoy de paso en Madrid, lo que es injusto, ya que nunca me hice el tiempo para visitarla como un turista más. Con el tiempo he criado algunas amistadas acá, por lo que también ocuparé estos días en ponerme al día y beber cerveza.

Mañana (en algunas horas, para ser estricto) tengo pensado ir a Toledo, así que va llegando el momento de hibernar mi laptop e irme a dormir.

at debconf9

Después de dos excelentes días en Madrid, tratando de recuperarme de un viaje demasiado largo, embarcamos en un bus con rumbo a Cáceres, junto con Santiago.

Ahora estoy escribiendo esto desde el hacklab 1 de DebConf9, con esa hermosa senciación de haberme encontrado con mucha gente y de estar listo para vivir esos inolvidables días al año :)

Mañana, junto con Enrico y Steve, estaremos dando una charla en el OpenDay, la cual aún no empezado a preparar, así que será una noche divertida. Posiblemente vaya a estar disponible el streaming de videos, pero aún no se en qué URL.

En breve, fotos.

UPDATE 05 Aug: Lo prometido, las fotos.

not yours

If I say "I got the third place in a scholarship application", it doesn't look bad.

But there is money only for the first two persons. Sometimes, close is not enough. So, without money, I won't be able to study in Europe... damn...

Maybe next year... maybe not.

Note: The application was, as you can see, for a doctoral scholarship in Spain... my broken English has no effect here...

interview ( ) { ego++; }

(Sé que estoy escribiendo poco, y sé que con cuestionable calidad. Esta entrada no será la excepción)

Circo Linux, un simpático blog/e-zine, me ha realizado una extensa entrevista que puede leerse aquí. Los temas que tratamos han sido de lo más variado, desde Debian hasta mi afición al go. Fue una charla amena.

Tengo varias ideas en la cabeza que merecen ser posteadas, pero poco tiempo para plasmarlas. Trataré de cambiar dicha situación en el corto plazo y levantar este blog a lo que solía ser: un lugar divertido donde perder el tiempo.

nothing to hide

The next week I'm going to Berlin (and some days to Frankfurt). I'll be in the 25th Chaos Communication Congress (25C3).

I'll be out of home from 24th Dec until 7th Jan. It'll be a non-traditional holidays, be far away from family. But, in the other hand, it gonna be awesome be and talk in a CCC and spend a Christmas Eve in a plane and a New Year's Eve in Brandenburg Gate with friends.

See you there?

On tour (stage 6): Alicante, España

Ayer volví de Alicante, una relativamente pequeña ciudad de Valencia. Allí tuvo lugar el III Congrés de Programari Lliure - Comunitat Valenciana. Un congreso atípico, no solo por el fuerte apoyo político y económico, sino por sus asistentes. Se trata de un evento de software libre para la educación y quienes van son docentes.

La pasé muy bien. Aproveché la oportunidad para ver a Dato, comer hasta el hartazgo y visitar la ciudad. Las fotos, en un par de horas.

UPDATE 27NOV 10:56 ARTS: El álbum de fotos completo aquí.

the root of all mistake: the overgeneralization

Yes, it's me again with this DSA-1571 exploitation issue. The discovery, explanation and exploitation of the bug is now part of my final coursework for my postgraduate degree career. So, yes... sorry.

Some weeks ago I started suspecting about the attack to PFS in SSL with EDH. The key point is: the key space is dependent of the PRNG state. The bug affects the initialization of the PRNG, but the random string has not a pattern by it self. If you ask for many random numbers to the PRNG, you gonna get numbers that differ among them, since they are the output of a hash function of them self. So each random number depends on, besides the PID, the state of the PRNG pool in the moment (in other words, amount of bytes that you already pull from the PRNG pool before)

The explained attack was based in a fixed list of private exponents (which are selected randomly during the DHE handshake), presupposing that all the application call RAND_bytes() the same number of times before get it. To make the list of exponent I ran the openssl s_client with all the possible PIDs, hoping that all the applications behaves the same way.

After more tests I notice that that was an overgeneralization. The proof is in the pudding: wget and cURL, two simple CLI file retrievers, gets different exponent between them, even running with the same PID.

I was working on this when I accidentally found a really nice Eric Rescorla's post which is deeply related with this. The post goes further and analyzes the interaction between how Apache forks off and how it generates SSL handshakes.

So, I made lists of secret exponents for wget, curl, openssl s_client and openssl s_server with a modification version of libssl (appling this messy patch) and running scripts like this:

for i in $(seq $((2**15)));
do
  export MAGICPID=$i;
  LD_LIBRARY_PATH="openssl.broken/" LD_PRELOAD="./getpid.so" \
     wget --no-check-certificate https://localhost/ -q  -O /dev/null ;
  echo $i ;
done

As you can see, I used the HD Moore's GetPID faker shared library and a normal local Apache with mod_ssl. The broken libssl (which is in .openssl.broken/) store up in /tmp/data.key a csv with command name, PID and all the DH components (g, x, y and p).

But this way is farly unconfortable for others SSL deamon servers. Have you got any better idea?