09 septiembre 2008

Firmado digital de binarios en Linux

Pese a que en Linux no es muy frecuente obtener los programas en forma binaria (a diferencia de Windows) puede que en determinadas situaciones sea útil tener la capacidad de firmar digitalmente un binario para tener la certeza que no ha sido alterado y que proviene de una fuente fiable. En Windows, existe desde hace bastante tiempo Authenticode que engloba varias herramientas que permiten firmar digitalmente un ejecutable. Cualquiera puede recordar la típica ventana informando sobre quién ha firmado un .exe cuando lo ejecutamos.

En Linux hay varias soluciones para realizar eso, tal vez la mas análoga a Autenticode (emplea certificados digitales X.509) sea elfsign. El problema es que se encuentra profundamente desactualizado y da problemas en versiones recientes de Linux.

La herramienta que voy a presentar hoy es Bsign que se puede descargar desde aquí. Esta herramienta a diferencia de elfsign esta basada en GPG con sus ventajas e inconvenientes.

Lo que hace, básicamente, es inyectar una firma digital dentro del formato ELF (el formato nativo de los ejecutables de Linux) sobre un HASH del ejecutable, de forma que, por una parte podremos verificar que ese ejecutable ha sido firmado por una clave conocida, y por otra parte saber si ese ejecutable ha sido alterado.

Bsign puede ser empleado como re-emplazo de TripWire o Afick a la hora de diseñar un sistema de comprobación de integridad del sistema. A diferencia de TripWire y soluciones similares que se basan en sacar un Hash del ejecutable y almacenarlo, Bsign firma el ejecutable y únicamente ha de disponer de la clave publica con que fue firmado el binario para realizar la verificación.

Bsign funciona de la siguiente forma:

$ ./bsign --sign ps

Enter pass phrase:

Con el parámetro --sign realizamos la firma digital del fichero usando la clave GPG que este marcada como "default" en nuestro anillo.
Este comando solicitará la contraseña de la clave privada para realizar la firma digital.

A la hora de verificar el ejecutable usaremos bsign de la siguiente forma:

$ ./bsign -V ps
bsign: good signature found in 'ps'.

Si ese ejecutable hubiera sido sustituido por otro sin firma digital, bsign nos informaría durante la verificación;

$ ./bsign -V ps
bsign: no signature found in 'ps'.

Próximamente, escribiré sobre Authenticode

5 comments :

Miriam Ruiz dijo...

¿Cuáles son los problemas que da elfsign? ¿Tienes alguna URL al respecto?

Gracias,
Miry

Yago Jesus dijo...

Hola Miry, el problema que yo encontré en una Fedora Core 9 es que literalmente corrompía el binario ELF durante la inyección de la firma digital. El resultado era que los binarios quedaban imposibles de utilizar y además, la verificación de la firma daba error. Teóricamente elfsign esta soportado en Debian, no he podido probarlo en ese entorno pero si me bajé de un repo el .diff por si se solucionaba el problema, pero no, seguía sin poder emplearse. Una pena, ya tenia preparado un how-to con el certificado de la FNMT :(

Miriam Ruiz dijo...

Yago, sería posible obtener ese binario (el original) para ver qué es lo que falla al firmarlo?

Gracias,
Miry

Yago Jesus dijo...

Claro, si me indicas una direccion de correo yo te lo envío. Para tu privacidad, puedes enviar un mail a la cuenta de nuestro Gtalk Bot (sbd.bot@gmail.com) o añadirlo (si usas talk) y con el comando 'envia' nos lo haces llegar, esta tarde-noche prometo responderte con un .tgz que contenta un ELF firmado con elfsign

Anónimo dijo...

Solo empezar a leer, me encuentro con que "en Linux no es muy frecuente obtener los programas en forma binaria"... mandelocualo? Claro, la mayoria de usuarios compilan sus programas, no? anda ya! Esto solo hacen unos poco locos de Gentoo y alguna otra distro, pero la inmensa mayoria de gente usando la inmensa mayoria de distribuciones obtiene los programas en forma binaria, de toda la vida y como es lógico, ya que compilar los programas es un coñazo y cuesta mucho tiempo (compila el kernel, las X-Window, Gnome/KDE, firefox y OO en cada nueva version a ver cuantas horas tardas).
El artículo no empieza bien, usando premisas falsas.
Luego leo que esta magnífica utilidad modifica los binarios! lo primero que he pensado: esto es muy peligroso! puede dejar los ejecutable inservibles a la mínima, a ver donde guarda el hash, en algun hueco de los elf? bofs, bofs, que no me toquen los mios. Y este peligro ha sido confirmado por el segundo comentario, si es que tengo una punteria (sentido comun en realidad).

Lo siento, no puedo felicitarte ni por el artículo ni por la utilidad de la que hablas.

Para firmar archivos ya existe GPG, y muchas distribuciones lo usan para verificar la integridad de los paquetes instalados, sean binarios, fuentes o paquetes de datos. Separando la firma del binario, si, como debe ser.

elfsign: reinventando la rueda en forma de triangulo.