Come analizzereste un'immagine per scoprire se ci sono script o possibili malware incorporati in esso? Quali strumenti / metodi usare?
Sto presumendo che accetterete file di immagini caricati dagli utenti e li servirete ad altri utenti tramite un'applicazione web. In questo caso ci sono due diversi vettori di attacco qui.
(1) file che possono essere interpretati sia come immagine sia in un altro tipo.
Questo include:
(1a) file con tag HTML incorporati, che possono quindi essere caricati come HTML da un browser che esegue il content-sniffing e il contenuto di script all'interno eseguito nel contesto di sicurezza del dominio, causando JavaScript XSS tradizionale.
(1b) file che possono essere interpretati come dati plug-in, in particolare Java (attacco GIFAR). Il solo hosting di questi può essere compromesso per XSS perché la stessa politica di origine in Java e Flash si basa sulla posizione che ospita il file, non sulla pagina inclusa.
Questi file possono essere comunemente immagini valide del tipo atteso e che funzionano come tipo di target vulnerabile.
È possibile rendere difficili questi attacchi elaborando le immagini inviate, caricandole e ri-salvandole. Puoi farlo comunque per poter eseguire riduzioni, ridimensionamenti o modifiche a livello di qualità.
In linea di principio è possibile che qualcuno invii un'immagine che, se compressa da qualunque algoritmo stai usando, espelle un'immagine con <script>
o altro cattivo contenuto, ma probabilmente non è pratico nella realtà.
In ogni caso, dovresti mitigare questo attacco servendo qualsiasi file inviato dall'utente da un dominio separato che non ha la capacità di creare script o condividere cookie con il dominio del sito web principale. (Può essere un sottodominio fino a quando non viene fornito nulla su alcun dominio degli antenati condivisi.)
(2) immagini malformate che sfruttano bug nei decodificatori di immagini del browser per causare l'esecuzione di codice arbitrario. Questi non sono comuni oggi ma ci sono stati errori di decodifica di immagini in passato ed è possibile che possano sorgere altri problemi.
Questo può anche essere sconfitto caricando e ri-salvando l'immagine; anche solo non ricevere un errore sul carico è generalmente un buon segno. Tuttavia, è ipotizzabile che ci possa essere un bug nel proprio decodificatore di immagini, che renderebbe quindi vulnerabile il lato server agli stessi problemi.
Quindi assicuratevi che i vostri componenti di elaborazione delle immagini lato server siano aggiornati e, dove possibile, limitate il numero di formati di input accettati per ridurre la superficie di attacco. Potresti anche considerare di eseguire la gestione delle immagini in un processo con privilegi più bassi (privsep) se questa è una potenziale minaccia per la tua app.
Il caricamento di un'immagine per l'elaborazione comporta anche il rischio di attacco denial of service sul lato server attraverso immagini molto grandi (in dimensioni e / o bombe a compressione). Sanity: controlla le dimensioni e la risoluzione del file dall'intestazione del file immagine prima di caricare.
A seconda di cosa è la tua app, ci possono essere benefici limitati nel rilevare exploit di immagini malformate perché (a parte la loro rarità) di solito è facile per un utente malintenzionato ospitarli altrove e pubblicare l'immagine o un link ad esso in un altro utente -il contenuto inviato.
Oltre alla risposta di @ bobince, dovresti anche fare attenzione agli script incorporati nei metadati delle immagini. Questo è un rischio se si visualizzano, ad esempio, dati EXIF da immagini inviate dall'utente. (Ho trovato un paio di vulnerabilità XSS in una popolare galleria di immagini basata su questo metodo di iniezione.)
Molti strumenti / librerie ti mostreranno i metadati delle immagini. Exiv2 è uno strumento utile per visualizzare e manipolare i metadati delle immagini EXIF e IPTC.
La maggior parte degli scanner antivirus utilizza un rilevamento basato su firma per scoprire malware incorporato in qualsiasi file.
Tuttavia, questi malware vengono eseguiti raramente se si tratta di un'immagine reale (estensione del file) l'immagine viene visualizzata utilizzando un programma corretto, che non tenta di "eseguire" un'immagine.
Leggi altre domande sui tag encryption malware