Usos de ImageMagick: filtrar falsos positivos de imágenes recuperadas con Foremost

Recuperar archivos eliminados de discos relativamente grandes produce enormes cantidades de falsos positivos. Se recuperan muchos archivos que, en realidad, no contienen información útil y, en muchos casos, no se pueden abrir porque no tienen la estructura adecuado. El "sufrido" perito se tiene que pasar horas revisando archivos ilegibles hasta encontrar algún fichero válido con información útil.

Esta misma semana un "conocido" (persona que te hace trabajar como si fuera un cliente pero al que no puedes facturar) me "pidió" que recuperase las fotografías desaparecidas del disco duro de su portátil (230 GB). En realidad, el "conocido" había reinstalado el sistema operativo borrando todos los archivos de su usuario. Quería recuperar su valiosa colección de fotografías.
Arranqué el equipo con una distribución Linux desde un disco externo, cloné el disco duro en otro disco externo "de trabajo" y usé foremost para recuperar archivos JPG (las "valiosas" fotos estaban en formato JPG). Resultado: 135.000 archivos JPG recuperados ocupando 70 GB. Evidentemente, la mayoría de estos archivos (el 60%) no son archivos JPG válidos; son "falsos positivos" de foremost.

Ante esta situación mi objetivo era filtrar los 81.000 falsos positivos y quedarme con los archivos que realmente son imágenes correctas (que se abren con un visor de imágenes y muestran "algo"). El siguiente paso (fuera del contexto de esta entrada) sería ordenar los archivos resultantes por resolución, tamaño o cualquier otro criterio y quedarme sólo con las imágenes buscadas.


Foremost, Scalpel, PhotoRec
Foremost (http://foremost.sourceforge.net/), Scalpel y PhotoRec (http://www.cgsecurity.org/wiki/PhotoRec) son algunas de las utilidades que permiten recuperar archivos borrados de un disco mediante "carving". Esto es, recorren todo el espacio libre (sin uso) del disco buscando secuencias de datos que coincidan con la estructura de tipos de archivos conocidos. Para recuperar ficheros JPG, por ejemplo, buscan la secuencia "0xFFD8" (marca de inicio) y, una vez encontrada esta secuencia buscan la marca de final de archivo (0xFFD9). Si no hay marca de final el programa extrae un número máximo de bytes (prefijado) a partir de la posición de la cabecera.
Como se comentó antes, la probabilidad de encontrar "0xFFD8" sin tratarse de una imagen es muy alta, produciéndose un montón de falsos positivos. También se producen falsos positivos cuando un archivo borrado es sobreescrito parcialmente con nuevos datos y el resultado resulta irreconocible.
La aparición de falsos positivos es, de alguna manera, deseable ya que lo que el perito necesita habitualmente es localizar cualquier información útil. Es laborioso obtener muchos falsos positivos pero peor sería que el programa de recuperación generase "falsos negativos" y dejase fuera de la extracción los archivos realmente relevantes.

ImageMagick
ImageMagick (http://www.imagemagick.org/script/index.php) es un "editor de imágenes orientado a la línea de comandos". Se presenta como un conjunto de programas que se pueden invocar desde la línea de comandos y permiten, entre otras funciones, redimensionar imágenes, convertir formatos, aplicar efectos, combinar varias imágenes en una, etc.
Parece un contrasentido pero es muy útil cuando hay que realizar una operación simple (o no tan simple) sobre muchas imágenes y se quiere automatizar el proceso sin tener que ejecutar manualmente las operaciones usando un editor gráfico (tipo Photoshop, GIMP, etc.).
En el caso que nos ocupa usé el comando "identify" que permite obtener información de una imagen y, como resultado añadido, devuelve un código de error cuando el fichero no es una imagen válida.

Filtrar-falsos-positivos.ps1
Así se llama este script (para Powershell) que escribí para clasificar los archivos JPG recuperados por foremost. El funcionamiento es muy simple, se recorren todos los archivos recuperados, se comprueba con ImageMagick si se trata de un JPG válido (identify) y, en función del resultado, se mueve el archivo a la carpeta ".\buenos" o a la carpeta ".\malos". 
Con este script, me ahorré varias horas de trabajo y pude devolver a mi "conocido" las miles de fotografías que almacenaba en su portátil y que él creía haber perdido para siempre. 


# 2014-01-08
# Script para separar en un directorio ficheros JPG válidos de JPG no válidos.
# Muy útil para descartar falsos positivos de SCALPEL / FOREMOST, etc.
#
# Para ejecutar scripts en Powershell hay que dar permisos de ejecución.
# Set-ExecutionPolicy Unrestricted
#
# Utiliza el comando "identify" de la librería http://www.imagemagick.org/

# Parámetros
param (
[string]$extension = "*.JPG",
[string]$idir = "."
)

$comando= "Filtrar-falsos-positivos.ps1"
$buenos= ".\buenos"
$malos= ".\malos"

write-host -NoNewLine Filtrar-falsos-positivos.ps1
write-host
write-host -NoNewLine "Uso: " $comando " extension"
write-host -NoNewLine Ejemplo: $comando -extension *.jpg [-idir directorio]
write-host -NoNewLine Parseando $extension en $idir
write-host

New-Item -ItemType directory -Path $buenos 2> $null
New-Item -ItemType directory -Path $malos 2> $null

Get-ChildItem $idir -Filter $extension | `
Foreach-Object{
   $archivo = $_.FullName

   write-host $archivo
   identify -quiet $archivo | out-null
   if ( $LASTEXITCODE -eq 0) {
      # es un JPG correcto, lo muevo a buenos
      mv $archivo $buenos
   }
   else{
      # en un JPG inválido, lo borro (o lo muevo)
      mv $archivo $malos
   }
}

write-host
write-host -NoNewLine ***

<Usos de ImageMagick: filtrar falsos positivos de imágenes recuperadas con Foremost />

¿Puede la NSA acceder a redes WIFI a 12 Km de distancia?

¿Cómo es posible? Yo soy incapaz de conectarme a mi router desde el baño del piso de arriba (15 metros) y la NSA puede inyectar paquetes en mi red WIFI desde 8 millas terrestres (12 km). ¿WTF?

La discusión surge a raíz de la publicación del arsenal de herramientas tecnológicas de la NSA (http://leaksource.wordpress.com/2013/12/30/nsas-ant-division-catalog-of-exploits-for-nearly-every-major-software-hardware-firmware/). Entre todo este listado extraordinario se incluye el dispositivo NIGHTSTAND que permite interceptar e inyectar paquetes en conexiones WIFI a una distancia de 8 millas (en condiciones óptimas).


David Maeztu (@davidmaeztu) preguntaba en Twitter si esto era viable, Samuel Parra (@Samuel_Parra) confirmaba que él lo había conseguido con tecnología casera a 8 Km y yo enlazaba experiencias extremas con conexiones WIFI. Por ejemplo, 280 Km en un experimento documentado aquí: http://www.booki.cc/wireless-networking-in-the-developing-world/long-distance-outdoor/.

Resulta que hace años trabajé en el desarrollo de software de simulación radioeléctrica para el cálculo de coberturas para sistemas móviles (GSM, CDMA). Así que algo me sonaba el tema y he preparado una pequeña explicación de cómo funciona la propagación de señales radio y una simulación del caso que nos ocupa.

El siguiente esquema (estupendo) está extraído del artículo anterior.


Es decir, entre el emisor y el receptor de una señal radio hay elementos que refuerzan la señal y otros que la atenúan. El secreto para una buena transmisión consiste en añadir toda la potencia necesaria al emisor para que la señal recibida tenga una relación señal/ruido suficiente "para que se entienda". El sistema funciona mejor si los elementos son de calidad: las antenas tienen ganancias altas y los cables pérdidas pequeñas.

La atenuación en el aire de la señal ("Path loss") no depende tanto de la distancia como de la obstrucción del campo de visión entre emisor y receptor:
  • La curva de la gráfica anterior es bastante significativa: el nivel de señal se reduce drásticamente en los primeros metros y posteriormente tiende a disminuir muy lentamente. "Primeros metros" son 10 o 15 metros: efectivamente, si tienes una antena de telefonía sobre el tejado de tu casa y vives en el ática la potencia recibida en tu casa es, fácilmente, 100 veces la potencia que recibe un vecino que esté 7 pisos más abajo. 
  • El campo de visión entre emisor y receptor no es una línea recta, sino un elipsoide tridimensional (un balón de rugby). Para conseguir la comunicación hay que intentar que haya el menor número de obstáculos dentro de este balón de rugby, aunque se puede conseguir una buena comunicación con un obstáculo en el medio que tape la visión directa (un árbol, por ejemplo)
  • En distancias cortas las reflexiones son muy importantes (por ejemplo, las paredes de una casa) pero en campo abierto apenas tienen influencia excepto si encontramos agua por el camino. La propagación sobre el agua permite, por ejemplo, que la cobertura de estaciones móviles en el norte de la isla de Mallorca llegue a la península.

Con todo esto me fui a http://www.cplus.org/rmw/rmonline.html donde hay un programa que permite realizar simulaciones de propagación radio y simulé una comunicación WIFI en un vano de 15 Km, aproximadamente:
  • Busque dos puntos en La Mancha separados por 15 Km (14,747 exactamente) con la esperanza de que la orografía facilitara la visión directa entre emisor y receptor. (no lo conseguí)
  • Puse a los extremos dos mástiles de 100 m para garantizar que hubiese visión directa entre ambas antenas y que el elipsoide de Fresnel correspondiente estuviese 100% libre de obstrucciones. (ver gráfico más abajo).
  • Le puse al emisor (el "supuesto" router WIFI de la víctima espiada) una potencia de 1 Vatio, típico de un router doméstico (802.11b)
  • Definí la frecuencia. La herramienta sólo permite 2,3 Ghz en lugar de los 2,4 Ghz de 802.11b. 
  • En el receptor (el equipo de la NSA) puse una antena de alta ganacia (15 dBi) que es lo que se ve en la foto del NIGHTSTAND.
Lo siguiente es el resultado de la simulación:



Con todo la información anterior, el simulador me ofreció una señal en recepción de -79,28 dBm más que suficiente para establecer con éxito una comunicación entre ambos extremos. Por supuesto, suponiendo condiciones óptimas: sin obstáculos, pocas interferencias en los canales utilizados, antena direccional para evitar que el equipo de la NSA sea detectada por otros receptores cercanos, etc. etc.

Resumen: ¿Puede la NSA interceptar una comunicación WIFI a 12 Km? YES, NSA CAN!

<¿Puede la NSA acceder a redes WIFI a 12 Km de distancia? />





Identificación mediante imágenes reflejadas en la pupila

La noticia en la prensa "generalista": [ABC] Las imágenes reflejadas en los ojos de un fotografiado pueden recuperarse.  
Luego está la fuente donde aparece el trabajo de Kerr Jenkins: [PLOS ONE] Identifiable Images of Bystanders Extracted from Corneal ReflectionsY la imaginación, el optimismo y/o la imprudencia del investigador se dispara afirmando que se puede recurrir a este sistema en casos de toma de rehenes o abusos sexuales infantiles para identificar a los autores a partir de los reflejos en los ojos de las fotografías de las víctimas. 


Aquí el vídeo "promocional":


Fuente del vídeo: Kerr Jenkins: [PLOS ONE] Identifiable Images of Bystanders Extracted from Corneal Reflections



Antes de seguir adelante, vamos a adelantar unos cuantos conceptos teóricos sobre la identificación de personas a partir de fotografías. 

"Reconocer" es la capacidad de nombrar indubitadamente (sin duda) a una persona que aparece en una imagen. Es decir, la persona de la imagen es conocida por el testigo (un amigo, un conocido o una persona famosa) y el testigo asocia la imagen a su conocido. Ejemplo: un guarda de seguridad está supervisando una cámara a la entrada de un edificio y reconoce a las personas que aparecen en pantalla ("ése es Federico García, tercera planta, contabilidad").
"Identificar", en este contexto, es la capacidad de determinar unívocamente la identidad de una persona desconocida que aparece en una imagen. Es decir, a partir de ese momento el observador podrá reconocer a esa persona en el futuro. Ejemplo: un guarda de seguridad está supervisando una cámara de la puerta de un centro comercial y es capaz de "quedarse con la cara" de una de las personas que aparecen en pantalla ("no le conozco pero si le vuelvo a ver seguro que le reconozco").

Habitualmente, cuando se montan sistemas de videovigilancia, se establece que para reconocer a una persona se necesita una imagen de la cara de 40x40 pixeles. Y para identificar a una persona sería necesaria una imagen de 90x90 pixeles

En el paper de Kerr Jenkins afirma que se puede reconocer a una persona a partir de una imagen de su rostro de 7x10 pixeles, según estudios anteriores. Y pone como ejemplo la siguiente imagen "icónica" de Barack Obama que tiene una resolución de 16x20. 


Por supuesto, este es un ejemplo muy tramposo porque es una imagen muy famosa que representa a una de las 5 personas vivas más famosas del mundo. 

Volvamos al artículo citado: ¿qué resolución tiene que tener la foto del sujeto víctima para ser capaces de identificar una persona reflejada en su pupila? Pues el propio estudio lo dice: en el experimento realizado hicieron una foto de 39 MPx (migapíxeles) a una distancia de 1 metro usando iluminación de estudio. 


Con este montaje consiguieron que en la pupila del sujeto fotografiado aparecieran refleajdos 5 rostros cuyo tamaño medio (en píxeles) era de 30x50. Estos ya son tamaños considerables.

Para que se vea con un ejemplo práctico he cogido cuatro fotos de cuatro famosos y las he escalado a diferentes tamaños, reescalando a continuación todas las imágenes al mismo tamaño para que se puedan comparar. He usado interpolación cúbica para evitar granularidad y el efecto de pixelado (exactamente igual que en el estudio de Kerr Jenkins). 

Las resoluciones son, respectivamente, 10x10, 30x30, 50x50 y 100x100.













Personalmente, creo que es imposible identificar a nadie con una imagen menor de 30x30. A partir de 50x50 se puede empezar a reconocer a la persona si su rostro nos resulta muy familiar y, por supuesto, la imagen es buena (frontal, con luz, etc.).

El estudio referido es demasiado optimista y, desde luego, sus resultados no se pueden aplicar a las imágenes de aficionados que se suben habitualmente a Internet (en redes sociales u otros servicios).


<Identificación mediante imágenes reflejadas en la pupila />