Hola,

El análisis forense de imágenes fotográficas es una disciplina que se suele emplear frecuentemente en procesos judiciales. En determinados eventos criminales, una cámara fotográfica y sus fotografías pueden ser evidencias que incriminen o eximan a un acusado en la comisión de un delito, y por tanto, es importante analizar las imágenes que contenga el dispositivo para poder obtener de ellas evidencias suficientes que sustenten una acusación o una defensa ante un juez.

La información básica de imagen suele ser la fecha de toma de la imagen, el fabricante de la cámara y el modelo de cámara utilizado. Esta información se puede deducir mediante la invocación de las propiedades de una imagen. Cualquier sistema operativo lo permite (en Windows, por ejemplo, haciendo botón derecho --> propiedades sobre una imagen). Nosotros vamos a ver dos procesos automatizables para evitar tener que extraer los datos imagen a imagen, y que además, permiten extraer mucha más información.

También veremos como cuando se toma una fotografía, existen muchos más datos que se graban en ella, y que pueden resolver el grado de culpabilidad de un acusado. A veces, la fecha, el fabricante y el modelo no bastan, y quizás sea necesario deducir, por ejemplo, si dos imágenes han sido tomadas con la misma cámara o no. Un análisis de metadatos puede proporcionarnos esta información.

Para la extracción de metadatos de fotografías existen numerosos métodos. Unos son más sencillos de interpretar y otros producen resultados más complejos. Veremos un par de ejemplos prácticos. Para ello utilizaremos una imagen disponible para todos, por ejemplo, esta imagen de Flickr que podéis descargar aquí.

Extracción básica de metadatos mediante hachoir-metadata

Para instalar hachoir-metadata tenemos diversas opciones, según el sistema que estemos empleando. Yo utilizo FreeBSD, y por tanto, para instalar desde ports basta con ejecutar en línea de comandos:

cd /usr/ports/sysutils/hachoir-metadata/ && make install clean

Ejecutamos hachoir sobre nuestra imagen

nas# hachoir-metadata 95283121_f300f7d188_o.jpg

Obteníendose los siguientes resultados:

Metadata:
- Image width: 800
- Image height: 533
- Image orientation: Horizontal (normal)
- Bits/pixel: 24
- Pixel format: YCbCr
- Compression rate: 21.4x
- Creation date: 2006-01-06 05:33:47
- Camera focal: 5.6
- Camera exposure: 1/125
- Camera model: Canon EOS 20D
- Camera manufacturer: Canon
- Compression: JPEG (Baseline)
- Comment: JPEG quality: 80%
- Format version: JFIF 1.01
- MIME type: image/jpeg
- Endian: Big endian

Como véis, nada fuera de lo normal. Es la información que cualquier gestor de ventanas puede sacar de una imagen mediante un "botón derecho--> propiedades" o similar. Vamos a complicar un poco más las cosas.

Exif, Segmentos JPEG y extracción mediante Perl

Este método requiere que instalemos el módulo Image::MetaData::JPEG. La extracción la realizaremos con un sencillo script


use Image::MetaData::JPEG;

my $image = new Image::MetaData::JPEG('95283121_f300f7d188_o.jpg');
die 'Error: ' . Image::MetaData::JPEG::Error() unless $image;

my @segments = $image->get_segments('COM', 'INDEXES');

print $image->get_description();

die "Ejecucion finalizada\n";

Este script imprime en pantalla la totalidad de lo que se llaman segmentos JPEG. La salida del script es algo larga, y la tenéis disponible aquí para que la consultéis.

Sobre los segmentos no corresponde aquí ahora documentar qué es cada cosa, pero para que os hagáis una idea, casi todas las cámaras digitales emplean Exif (Exchangeable image file format) a la hora de almacenar imágenes. Exif es un invento de JEIDA (Japan Electronic Industry Development Association) en un intento de normalizar el empleo de etiquetas a la hora de intercambiar ficheros de imágenes, y con el paso de los años se ha convertido prácticamente en un estándar de facto. Esta especificación es algo compleja y tediosa, con lo que no vamos a entrar en todos sus detalles. Tan sólo basta con saber que Exif permite emplear etiquetas (marcadores) para almacenar datos críticos de una imagen, y que en virtud a Exif, una imagen digital comprimida se puede representar siempre acorde a una estructura de segmentos parecida a la siguiente:

exif

Estos segmentos básicos contienen la información mínima presente en un fichero comprimido de imagen JPEG, y es frecuente llamarlos marcadores.

Así, el segmento 0xd8 SOI define el comienzo de la imagen (SOI, Start of Image), y como podéis comprobar, es el primero en el dump de segmentos que hemos extraído. Por la misma lógica, debe existir un segmento que indique el final de la imagen, y estará al final del volcado. Ese segmento es 0xd9 EOI (EOI, End of Image)

En nuestro ejemplo, podemos comprobar que tras la definición de inicio (SOI) aparece inmediatamente el segmento de aplicación APP1 (0xe1). Dentro de APP1 encontramos subsegmentos relacionados con información técnica de la imagen, y habilita al fabricante para introducir sus propios marcadores. Así, APP1 --> IFD0 contiene datos básicos para identificar la imagen, como fabricante, modelo o fecha de toma de la imagen:

********** APP1 --> IFD0 ********** ( 9 records)
[ Make]<0x010f> = [ ASCII] "Canon".
[ Model]<0x0110> = [ ASCII] "Canon EOS 20D".
[ Orientation]<0x0112> = [ SHORT] 1
[ XResolution]<0x011a> = [ RATIONAL] 72/1
[ YResolution]<0x011b> = [ RATIONAL] 72/1
[ ResolutionUnit]<0x0128> = [ SHORT] 2
[ DateTime]<0x0132> = [ ASCII] "2006:01:06 05:33:47".
[ YCbCrPositioning]<0x0213> = [ SHORT] 2
[ SubIFD]< ......> = [REFERENCE] --> 0x822bda4

Otros subsegmentos APP derivados del anterior son APP1 --> IFD0 --> SubIFD, APP1 --> IFD0 --> SubIFD --> MakerNoteData_Canon y APP1 --> IFD0 --> SubIFD --> MakerNoteData_Canon --> special. Cada uno de ellos contiene información de diversa índole, pero que permite identificar unívocamente a una imagen tomada en un instante de tiempo determinado por un modelo de cámara determinado.

Justo después del marcador de aplicación, y siguiendo el esquema Exif, debería aparecer el marcador DQT (Define Quantization Table), que define la tabla de cuantización. En nuestro ejemplo aparece como 0xdb DQT. Así sucesivamente. El resto de marcadores aparecidos en nuestra imagen son DHT (Define Huffman Table), que aparece como 0xc4 DHT y SOS (Start of Scan), que aparece como 0xda SOS.

Otros marcadores hacen referencia a puntos específicos de Exif, como por ejemplo, la interoperabilidad. En nuestro ejemplo, recurriríamos al marcador APP1 --> IFD0 --> SubIFD --> Interop, de donde obtenemos la información:

InteroperabilityIndex <0x0001> = [ ASCII] "R98".
InteroperabilityVersion <0x0002> = [ UNDEF] '0100'

Este índice de interoperabilidad suele estar a "R98" (nuestro ejemplo), indicando que la fotografía es conforme a la especificación R98 de las recomendaciones de interoperabilidad Exif. Otras veces, estará en "THM", lo que indica que el fichero es conforme a las reglas DCF para "thumbnails" de previsualización.

Resumiendo

Como podéis ver, la imagen responde a un estándar, y ese estándar permite conocer información relevante de todas las condiciones en las que se tomó una fotografía determinada. El análisis de esta información puede ser determinante a la hora de proporcionar evidencias digitales en la comisión de un delito, no sólo por la cantidad de información de la que disponemos, sino porque mediante estas técnicas podemos procesar cantidades elevadas de fotografías en poco tiempo al ser fácilmente automatizables.

Imaginaos (y perdonad por lo crudo del ejemplo) que un sujeto A es detenido en una investigación de pedofilia. A este sujeto se le intervienen 10 fotografías de la víctima B, susceptibles de constituír un delito. Al sujeto A también se le interviene una cámara digital, con la que se han tomado las fotos de la víctima A. En paralelo, se detiene al sujeto C, al que se le intervienen otras 10 fotografías de otra víctima, a la que llamaremos D.

Si mediante un análisis forense de las imágenes, y en virtud a los metadatos unívocos, determinamos que las fotografías de la víctima B han sido tomadas con la misma cámara que las fotografías de la víctima D, podríamos relacionar a los sujetos A y C en la comisión del delito, ya que parecería lógico sospechar que el sujeto A ha realizado las fotos de las víctimas B y D, y el sujeto C ha obtenido de algún modo las imágenes del sujeto A.

Este tipo de relaciones, cuando se fundamentan en derecho, son las que sustentan las investigaciones criminales y permiten poner tras los barrotes a la gente que ha cometido delitos. El ejemplo que hemos puesto es sólo un ejemplo ilustrativo de las muchas posibilidades de las que afortunadamente gozan las Fuerzas y Cuerpos de Seguridad del Estado para luchar no sólo contra la pedofilia, sino contra muchos más delitos en los que medie un elemento digital, en este caso, una cámara de fotos. Como podéis imaginar, otra vez mediará un lápiz USB, un DVD, un CD o un disco duro. Cada medio ofrece un tipo de información, y la misión principal del investigador forense es extraer la información adecuada y pertinente para poder posteriormente relacionar a individuos con actividades delictivas.

Una tarea algo dura y complicada, pero reconfortante :)