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? />