28 junio 2010

Logs con sellado de tiempo digital

Una de las cosas que normalmente suelen tener bastante 'miga' en los juicios relacionados con evidencias informáticas, es la forma en la que se puede acreditar fiablemente y a ser posible legalmente, las pruebas que se aportan en el juicio.

Uno de los requisitos mas importantes es acreditar la integridad de los 'logs' que se presentan como evidencias. Por ejemplo, si estamos tratando de mostrar accesos no autorizados y presentamos como prueba los ficheros que genera Syslog, esos ficheros deberían tener asociado algún tipo de mecanismo que asegure cierta integridad de que no han sido modificados ad-hoc.

En el mundo PKI, existe un componente llamado TSA (Timestamp Authority) que groso modo sirve para asegurar la existencia de un dato en un momento determinado.

El funcionamiento es muy sencillo, por parte del usuario, se genera un hash SHA1 / MD5 de un dato (normalmente un fichero), este hash se le hace llegar a la TSA y la TSA devuelve un 'sello de tiempo' (firmado digitalmente con un certificado) en el que asegura la existencia de ese hash en el momento que se realizó el sellado. De esta forma si presentamos como evidencia un fichero de logs cuyo hash coincide con el hash que ha sido sellado, estaremos demostrando su existencia en el momento del sellado

Evidentemente para que ese sello tenga cierta validez se requiere que la TSA cumpla con unas determinadas características, como por ejemplo emplear sistemas de gestión horaria de máxima precisión o la 'Hora ROA'. En España hay varias TSAs reconocidas oficialmente que permiten sellado de tiempo, algunas permiten el sellado 'gratuito'. Aun así también cabe la posibilidad de implementar una TSA propia, pero claro eso podría poner en tela de juicio la validez legal.

Al final del artículo pondré un link a un script que sirve para sellar digitalmente algunos de los logs que genera Syslog (ficheros messages y secure).

Requisitos: Una implementación de OpenSSL moderna (el soporte TSA es relativamente reciente)

Para el sellado de tiempo vamos a usar la TSA de la 'Agencia de tecnología y certificación electrónica' de la Comunidad Valenciana

Como ejemplo de uso vamos a hacer una petición de sello para el fichero messages-20100613 (fichero generado por logrotate) donde se almacenan eventos relevantes del sistema operativo:

# openssl ts -query -data messages-20100613 -cert | tee messages-20100613.tsq | curl -s -S -H 'Content-Type: application/timestamp-query' --data-binary @- http://tss.accv.es:8318/ts  -o messages-20100613.tsr

Si todo ha ido bien, deberían haberse creado dos ficheros:
messages-20100613.tsq
messages-20100613.tsr

El primero es la petición que se ha generado para ser enviada a la TSA y el segundo es el sello de tiempo que nos ha devuelto la TSA.

Para verificar el sello, nos hace falta descargar el certificado de la CA raíz de accv:

# wget http://www.accv.es/fileadmin/Archivos/certificados/rootca.crt

Y con esto procedemos a verificar el sello:

# openssl ts -verify -data messages-20100613 -in messages-20100613.tsr -CAfile rootca.crt

Verification: OK

¿Fácil verdad? Con esto podríamos demostrar que un dato contenido en un fichero X existía en un momento Y.

Para automatizar el proceso, podemos emplear un pequeño script en Perl que automatiza el proceso de sellado en una Fedora Core 12+1 (fácilmente adaptable a otros entornos) que podría ser lanzado vía cron. El script aquí

7 comments :

Unknown dijo...

No lo entiendo muy bien, una vez hecho el timestamp, sabremos que ese fichero no será manipulado, ok.
Pero, ¿cómo sabemos que no ha sido manipulado previamente?

conexioninversa dijo...

Muy bueno el post y muy práctico

Saludos

Anónimo dijo...

Quien a copiado a quien?

http://www.ateneadigital.org/ong-conocimiento-y-tecnologias-libres/++contextportlets++ContentWellPortlets.BelowPortletManager3/seguridad/full_feed

Yago Jesus dijo...

@gogoigo: No, claro, de lo previo al sello no hay forma de probarlo, por eso lo correcto es que no haya mucha diferencia entre cuando se genera el log y cuando se le pone el sello.

@Pedro Sanchez: Muchas gracias maestro

@Anonimo: Te daré una pista, en ambos artículos al final hay un enlace a un script que está en el repo de herramientas de SbD ¿que opinas tu?

Dani Kachakil dijo...

¿Y en la práctica este tipo de firma se considera una prueba suficiente o es prácticamente imprescindible cotejarla con otros logs (de los grandes ISPs, por ejemplo)?

Es decir, supongamos que alguien que tenga implementado este mecanismo te quiere acusar de haber hecho algo ilegal. ¿Le bastaría con añadir al log algunas filas supuestamente procedentes de tu IP, firmarlo inmediatamente después por alguna TSA y presentarlo como prueba de un delito inexistente? Esperemos que no... ;-)

Saludos

Ernesto Arroyo dijo...

@Kachaki:
El sellado de tiempo consigue que los logs no pueden ser modificados a posteriori, es decir, desde el momento en que se "sellan" cualquier modificación altera la validez del sello y un sello nuevo tendría una fecha posterior y quedaría por tanto descubierta la trampa.

Pero esto no asegura que lo que se está registrando ("logeando" --palabro--) sea veráz. Mi syslog puede estar escribiendo datos falsos (o un rootkit me lo altero) y estaré sellando unos hermosos logs que no representan la realidad.
Pero para eso están los especialistas forenses o la BIT que pueden proporcionar servicios de peritaje y auditoría y que son profesionales acreditados o agentes de la autoridad y por tanto serán tenidos como fuentes fiables por el Sr. Juez.

Bueno, no soy especialista en forensic (tampoco) pero creo que lo primero que se hace en un proceso de estos es obtener una imagen completa del sistema y sellarla para demostrar que cuando empezaste a revisar el sistema era ese y que ni siquiera tus investigaciones lo han alterado.

Yessica dijo...

Muy bueno el sistema!!! Lo probé y funcionó sin problemas!

Una pregunta, cómo instalaron el curl? Yo tengo instalado el mod_tsa pero instale curl desde los repositorios y cuando ejecuto el reply hacia mi servidor no consigue el curl :(

Saludos!
Y gracias!