
Un toolkit forense per immagini digitali open-source
Un set di strumenti forensi per immagini digitali open source
"L'Analisi Forense delle Immagini è l'applicazione della scienza dell'immagine e della competenza di dominio per interpretare il contenuto di un'immagine e/o l'immagine stessa in ambito legale. Le principali sottodiscipline dell'Analisi Forense delle Immagini con applicazioni per le forze dell'ordine includono: Fotogrammetria, Confronto Fotografico, Analisi del Contenuto e Autenticazione delle Immagini." (Scientific Working Group on Imaging Technologies)
Sherloq è un progetto di ricerca personale volto a implementare un ambiente completamente integrato per la forense digitale delle immagini. Non è inteso come uno strumento automatico che decida se un'immagine è falsificata o meno (quello probabilmente non esisterà mai...), ma come un compagno per sperimentare vari algoritmi trovati negli ultimi articoli di ricerca e nei workshop.
Mentre molte soluzioni commerciali hanno prezzi al dettaglio elevati e spesso sono riservate solo a forze dell'ordine e agenzie governative, questo strumentario mira a essere sia un framework estensibile che un punto di partenza per chiunque sia interessato a fare esperimenti in questa particolare applicazione dell'elaborazione digitale dei segnali.
Credo fermamente che la sicurezza per oscurità sia il modo sbagliato per offrire qualsiasi tipo di servizio forense (ad esempio: "Usando questo software proprietario ti garantisco che questa foto è originale... e tu devi fidarti di me!"). Seguendo la filosofia open source, tutti dovrebbero essere in grado di provare varie tecniche per conto proprio, acquisire conoscenze e condividerle con la comunità... ancora meglio se contribuiscono con miglioramenti al codice! :)
La prima versione è stata scritta nel 2015 usando C++11 per creare un'utilità a riga di comando con molte opzioni, ma presto si è rivelata troppo complessa e poco interattiva. Quella versione poteva essere compilata con CMake dopo aver installato le librerie OpenCV, Boost e AlgLib. Questo primo proof-of-concept offriva circa l'80% delle funzionalità pianificate (vedi sotto per l'elenco completo).
Pur includendo anche nuovi algoritmi, la versione del 2017 ha aggiunto principalmente una GUI multi-finestra basata su Qt per offrire una migliore esperienza utente. Era possibile visualizzare più analisi sullo schermo ed era stato implementato un visualizzatore veloce con zoom e scorrimento per una navigazione più agevole delle immagini. Quel progetto poteva essere compilato con Qt Creator con Qt 5 e OpenCV 3 e copriva circa il 70% delle funzionalità pianificate.
Si arriva al 2020, quando ho deciso di trasferire tutto in Python (PySide2 + Matplotlib + OpenCV) per semplificare sviluppo e distribuzione. Sebbene questa iterazione sia appena iniziata e debba ancora portare tutto il codice precedente sulla nuova piattaforma, penso che questa sarà la forma finale del progetto (a meno che qualcuno non si offra volontario per sviluppare una bella applicazione web!).
Sono felice di condividere il mio codice e di entrare in contatto con chiunque sia interessato a migliorarlo o testarlo, ma tenete presente che questo repository non ha lo scopo di distribuire un prodotto finale; il mio obiettivo è solo quello di tenere traccia pubblicamente dello sviluppo di uno strumento educativo senza pretese, quindi aspettatevi bug, codice non rifinito e funzionalità mancanti! ;)
Questo elenco contiene le funzioni che il toolkit (si spera) fornirà una volta raggiunta la fase beta (NOTA: le funzioni visualizzate in corsivo all'interno del programma non sono ancora implementate!).
Generale: Immagine Originale, Editor Esadecimale, Riepilogo File, Ricerca Simile
Metadati: Dump Completo EXIF, Struttura Intestazione
Ispezione: Lente d'Ingrandimento Migliorata, Istogramma Canali, Confronto Riferimento
Dettaglio: Gradiente di Luminanza, Filtro Echo Edge, Soglia Wavelet, Separazione di Frequenza
Colori: Grafici RGB/HSV, Conversione Spazio Colore, Proiezione PCA, Statistiche Pixel
Rumore: Separazione del Rumore, Deviazione Min/Max, Valori Piani Bit
JPEG: Stima Qualità, Analisi Livello Errore
Manomissione: Miglioramento del Contrasto, Falso Copia-Incolla, Incollaggio Composito, Filtraggio Mediano
Clona il repository corrente in una cartella locale e spostati in tale directory.
Sherloq usa Python 3.11. La configurazione raccomandata utilizza uv perché fornisce lo stesso flusso di lavoro su Linux, macOS e Windows, può installare Python quando necessario e mantiene l'ambiente del progetto nella cartella locale .venv.
Installa uv seguendo la guida ufficiale all'installazione, quindi crea l'ambiente dalla cartella principale di Sherloq:
$ uv venv --python 3.11
Il repository include anche un file .python-version, quindi i futuri comandi uv useranno Python 3.11 per impostazione predefinita.
$ uv pip install -r gui/requirements.txt
Alcuni strumenti sperimentali basati su AI necessitano di pacchetti aggiuntivi. Installali solo se prevedi di utilizzare questi strumenti:
$ uv pip install -r gui/requirements_ai_solutions.txt
Sherloq può essere avviato dalla radice del repository. Il pacchetto dell'applicazione risolve icone, modelli e strumenti inclusi attraverso percorsi di progetto centralizzati.
$ source .venv/bin/activate
$ python -m gui.sherloq_app
> .venv\Scripts\Activate.ps1
> python -m gui.sherloq_app
Puoi anche usare il lanciatore di compatibilità nella cartella principale del repository:
$ python sherloq.py
NOTA per gli utenti Linux: se viene visualizzato questo errore:
qt.qpa.plugin: From 6.5.0, xcb-cursor0 or libxcb-cursor0 is needed to load the Qt xcb platform plugin.
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Esegui questo comando dal terminale: sudo apt install -y libxcb-cursor-dev
L'applicazione Qt Python ora risiede nel pacchetto importabile gui/sherloq_app:
main.py: punto di ingresso dell'applicazione Qt e finestra principale.core/: helper condivisi per l'elaborazione delle immagini come utilità JPEG e caricamento dei file.ui/: widget Qt riutilizzabili, visualizzatori, tabelle e l'albero degli strumenti.tools/: widget di analisi raggruppati per categoria di toolbox (general, metadata, inspection, detail, colors, noise, jpeg, tampering, various).paths.py: accesso centralizzato a icone, modelli e helper nativi inclusi, in modo che il codice non dipenda più dall'avvio da .I grandi asset inclusi e i componenti di ricerca di terze parti rimangono sotto gui/icons, gui/models, gui/noiseprint, gui/pyexiftool, gui/butteraugli, gui/ssimulacra e l'opzionale gui/TruFor_main.
Consulta docs/project-structure.md per una mappa orientata ai contributori.
Quando viene rilasciata una nuova versione, aggiorna la copia di lavoro locale con Git o scaricando l'ultimo codice sorgente, quindi aggiorna l'ambiente dalla cartella principale di Sherloq:
$ uv pip install --upgrade -r gui/requirements.txt
Se hai installato le dipendenze AI opzionali, aggiornale anche quelle:
$ uv pip install --upgrade -r gui/requirements_ai_solutions.txt
gui