SHERLOQ herramientas forenses imagen digital
SHERLOQ herramientas forenses imagen digital

sherloq: Conjunto de Herramientas Forenses de Imagen

CRÉDITOS NO HEREDADOS

El siguiente contenido es una traducción no oficial del repositorio original (Github) citado al final del artículo. La única intención es la comprensión de la herramienta en idioma español.

Introducción

Sherloq es un proyecto de investigación personal sobre la implementación de un entorno totalmente integrado para forense de imágenes digitales. No está pensado como una herramienta automática que decide si una imagen es falsificada o no (esa herramienta probablemente nunca existirá…), sino como un compañero en la experimentación de varios algoritmos encontrados en los últimos trabajos de investigación y talleres.

Si bien muchas soluciones comerciales tienen precios de venta al público elevados y a menudo están reservadas a los organismos encargados de hacer cumplir la ley y a los organismos gubernamentales, este conjunto de herramientas pretende ser a la vez un framework extensible y un punto de partida para todo aquel que esté interesado en realizar experimentos en esta aplicación particular del procesamiento de señales digitales.

Creo firmemente que la security-by-obscurity es la forma incorrecta de ofrecer cualquier tipo de servicio forense (es decir, “Usando este software propietario le garantizo que esta foto es prístina… ¡y tiene que confiar en mí!”). Siguiendo la filosofía del código abierto, todo el mundo debería ser capaz de probar varias técnicas por su cuenta, adquirir conocimientos y compartirlos con la comunidad… ¡incluso mejor si contribuyen con mejoras en el código! 🙂

Historia

La primera versión fue escrita en 2015 usando C++11 para construir una utilidad de línea de comando con muchas opciones, pero pronto se volvió demasiado engorrosa y poco interactiva. Esa versión pudo ser compilada con CMake después de instalar las librerías OpenCV, Boost y AlgLib. Esta primera prueba de concepto ofrecía alrededor del 80% de las características planeadas (ver abajo la lista completa).

Aunque también incluye algoritmos novedosos, la versión 2017 añadió principalmente una interfaz gráfica de usuario multi-ventana basada en Qt para proporcionar una mejor experiencia al usuario. Se pudieron mostrar múltiples análisis en la pantalla y se implementó un rápido visor de zoom y desplazamiento para facilitar la navegación de las imágenes. Ese proyecto pudo ser compilado con Qt Creator con Qt 5 y OpenCV 3 y cubrió cerca del 70% de las características planeadas.

Avance rápido hasta el 2020 cuando decidí portar todo en Python (PySide2 + Matplotlib + OpenCV) para un desarrollo y despliegue más fácil. Aunque esta iteración acaba de empezar y todavía tengo que portar todo el código anterior en la nueva plataforma, creo que esta será la “forma” final del proyecto (¡siempre y cuando alguien no se ofrezca voluntario para desarrollar una bonita aplicación web!).

Estoy feliz de compartir mi código y ponerme en contacto con cualquiera que esté interesado en mejorarlo o probarlo, pero por favor, tened en cuenta que este repositorio no está destinado a la distribución de un producto final, mi objetivo es sólo seguir públicamente el desarrollo de una herramienta educativa sin pretensiones, así que esperad errores, código sin pulir y características que faltan! 😉

Características

Esta lista contiene las funciones que Sherloq proveerá (¡esperemos!) una vez que se alcance la etapa beta.

Interfaz

  • Moderna interfaz gráfica de usuario basada en Qt con gestión de ventanas de múltiples herramientas
  • Soporte para muchos formatos (JPEG, PNG, TIFF, BMP, WebP, PGM, PFM, GIF)
  • Un visor de imágenes de alta respuesta con desplazamiento y zoom en tiempo real
  • Muchos algoritmos de última generación para probar interactivamente
  • Amplia ayuda en línea con explicaciones de la herramienta y tutoriales
  • Exportar resultados de análisis tanto visuales como textuales

Herramientas

General

  • Original Image: mostrar la imagen de referencia inalterada para la inspección visual
  • File Digest: recuperar la información de los archivos físicos, los hashes criptográficos y perceptivos
  • Hex Editor: abrir un editor hexadecimal externo para mostrar y editar los bytes en bruto
  • Similar Search: navegar por los servicios de búsqueda en línea para encontrar imágenes visualmente similares

Metadata

  • Header Structure: volcar la estructura de cabecera del archivo y mostrar una vista interactiva
  • EXIF Full Dump: escudriñar a través de los metadatos de los archivos y reunir toda la información disponible
  • Thumbnail Analysis: extraer la miniatura incrustada opcional y compararla con la original
  • Geolocation Data: recuperar los datos de geolocalización opcionales y mostrarlos en un mapa global

Inspección

  • Enhancing Magnifier: lupa con mejoras para identificar mejor las falsificaciones
  • Channel Histogram: muestran canales de un solo color o un histograma interactivo compuesto RGB
  • Global Adjustments: aplicar ajustes de imagen estándar (brillo, tonalidad, saturación, …)
  • Reference Comparison: abrir una vista doble sincronizada para la comparación con otra imagen

Detalle

  • Luminance Gradient: analizar las variaciones de brillo horizontal/vertical a través de la imagen
  • Echo Edge Filter: utilizar filtros de derivados para revelar regiones artificiales desenfocadas
  • Wavelet Threshold: reconstruir la imagen con diferentes umbrales de coeficiente de ondas
  • Correlation Plot: explotar los patrones de correlación espacial entre los píxeles vecinos

Colores

  • RGB/HSV Plots: muestran gráficos interactivos en 2D y 3D de valores de píxeles RGB y HSV
  • Space Conversion: convertir los canales RGB en espacios HSV/YCbCr/Lab/Luv/CMYK/Gray
  • PCA Projection: usar PCA de color para proyectar el píxel en la mayoría de los componentes salientes
  • Pixel Statistics: calcular los valores RGB mínimos/máximos/promedios de cada píxel

Ruido

  • Noise Separation: estimar y extraer diferentes tipos de componentes del ruido de la imagen
  • Min/Max Deviation: destacar los píxeles que se desvían de las estadísticas min/max basadas en bloques
  • Frequency Split: dividir la luminancia de la imagen en componentes de alta y baja frecuencia
  • Bit Planes Values: mostrar aviones de bits individuales para encontrar patrones de ruido inconsistentes

JPEG

  • Error Level Analysis: muestran la diferencia de nivel de píxeles con respecto a los niveles de compresión fijos
  • Quality Estimation: extraer las tablas de cuantificación y estimar la última calidad de JPEG guardada
  • Multiple Compression: utilizar los residuos para detectar la compresión múltiple a diferentes niveles
  • DCT Dimples Map: analizar los artefactos de cuantificación periódica introducidos por los dispositivos

Manipulación

  • Contrast Enhancement: analizar la distribución del color para detectar mejoras en el contraste
  • Copy-Move Forgery: utilizar descriptores de características invariables para la detección de áreas clonadas
  • Composite Splicing: explotar las estadísticas de DCT para la detección automática de la zona de empalme
  • Image Resampling: estimar la interpolación de píxeles 2D para detectar rastros de remuestreo

Varios

  • Median Filtering: detectar los rastros de procesamiento dejados por el filtrado de la mediana no lineal
  • Illuminant Map: estimar la dirección de la luz local de la escena en las superficies 3D estimadas
  • PRNU Identification: explotan el ruido del patrón del sensor introducido por diferentes cámaras
  • Stereogram Decoder: decodificar imágenes 3D ocultas dentro de los autoestereogramas de ojos cruzados

Capturas de Pantalla

Aquí hay algunas capturas de pantalla de la anterior interfaz gráfica de C++ Qt (que se actualizará con la nueva versión):

File Analysis

Metadata, Digest y EXIF
Metadata, Digest y EXIF

Color Analysis

Conversión espacial proyección PCA histogramas
Conversión espacial, Proyección PCA, Histogramas y Estadísticas

Visual Inspection

Comparación de Evidencias
Lupa de aumento, ajustes de imagen y comparación de pruebas

Instalación

Crear un entorno virtual

Linux

Instalar el administrador de paquetes
$ sudo apt install python3-distutils python3-dev python3-testresources subversion
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3 get-pip.py

Configurar los entornos virtuales
$ sudo pip install virtualenv virtualenvwrapper
$ echo -e "\n# Python Virtual Environments" >> ~/.bashrc
$ echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc
$ echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc
$ echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
$ source ~/.bashrc
$ mkvirtualenv sq -p python3

MacOS

1) Abrir Terminal e ingresar `python3 --version` para instalar el intérprete y otras herramientas de línea de comandos
2) Una vez instalado, procede de manera similar a la instalación de Linux:
   $ wget https://bootstrap.pypa.io/get-pip.py
   $ sudo python3 get-pip.py
   $ sudo pip install virtualenv virtualenvwrapper
   $ echo -e "\n# Python Virtual Environments" >> ~/.bash_profile
   $ echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bash_profile
   $ echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bash_profile
   $ echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bash_profile
   $ source ~/.bash_profile
3) $ mkvirtualenv sq -p python3

Windows

Puedes seguir esta guía (la instalación de Flask es opcional).

Conda

  1. Descarga e instala Anaconda (también se puede instalar miniconda, no tiene interfaz gráfica pero es más pequeña)
  2. Instalar la librería Xinerama: sudo apt-get install libxcb-xinerama0
  3. Abrir una consola para crear un entorno Python (en Windows hay que iniciar una consola Conda o sth desde el menú Inicio): conda create --copy -n sherloq python 
  4. Después de que la instalación termine, teclea en la misma consola conda activate sherloq para activar el env y dejar la consola abierta.

Lanzamiento de Programa

  1. Clonar el contenido del repositorio en una carpeta local
  2. Cambiar el directorio actual a la carpetae gui dentro de sherloq
  3. Ejecuta pip install -r requirements.txt
  4. Lanza el programa con python sherloq.py

Bibliografía

  • Black Hat Briefings DC. (2008) “A Picture’s Worth: Digital Image Analysis and Forensics” . Washington, DC. Retrieved from http://blackhat.com/presentations/bh-dc-08/Krawetz/Whitepaper/bh-dc-08-krawetz-WP.pdf
  • “Noiseprint: a CNN-based camera model fingerprint” (Davide Cozzolino, Luisa Verdoliva)
  • “Exposing Digital Forgeries by Detecting Traces of Re-sampling” (Alin C. Popescu and Hany Farid)
  • “Two Improved Forensic Methods of Detecting Contrast Enhancement in Digital Images” (Xufeng Lin, Xingjie Wei and Chang-Tsun Li)

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda