Come verificare se un file immagine è pulito?

1

Voglio scoprire se è possibile verificare se un file immagine come JPEG, PNG, GIF o BMP è sicuro e non contiene virus.

Voglio filtrare un file immagine prima di inviarlo a sandbox per verificare se non è sospetto e conosco il suo file sicuro. La risposta dalla sandbox richiede 2-3 minuti e voglio ridurre il tempo se riesco a filtrare alcuni file che sicuramente puliscono.

Esiste un metodo per scoprire se un file immagine è sicuramente sicuro?

    
posta Max.Futerman 15.03.2018 - 10:41
fonte

3 risposte

1

Le immagini sono raccolte di pixel. Di solito sono innocui. Possono essere pericolosi solo se sono malformati e l'utente utilizza un software di visualizzazione delle immagini che ha un bug di sicurezza cruciale o se viene scambiato per un eseguibile e qualcuno prova a eseguirli.

Un modo semplice per sconfiggere la maggior parte di questi attacchi è ricodificare qualsiasi immagine sul tuo server. Utilizzare una libreria sul server per decodificare le immagini su una matrice in memoria di valori RGBA e quindi ricodificare tali valori su una nuova immagine nello stesso formato. Questo controlla se in realtà è un file immagine valido e dovrebbe rimuovere tutti i dati spazzatura da esso.

Tuttavia, se lo fai, tieni presente che apre il tuo server a potenziali attacchi:

  • La libreria che usi per de- e codificare le immagini potrebbe avere delle vulnerabilità. Quindi assicurati di usarne uno con un buon track record di sicurezza.
  • L'immagine potrebbe essere una bomba a decompressione . La maggior parte dei formati di immagine utilizza algoritmi di compressione. Molti algoritmi di compressione consentono di creare file compressi che generano un'enorme quantità di dati se non sono compressi o richiedono un'enorme quantità di risorse computazionali per decomprimere. Questo può essere usato per gli attacchi DOS dell'esaurimento delle risorse. Quindi assicurati di interrompere la decodifica dell'immagine se inizia a consumare troppa RAM o impiega più di qualche millisecondo (a meno che la tua libreria di immagini non faccia già questo).

Ha anche l'effetto collaterale che non solo elimina i metadati dannosi dai file immagine ma anche i metadati che sono utili (come i profili colore). Se vuoi preservare determinati tipi di metadati, devi prestare particolare attenzione a questo.

    
risposta data 15.03.2018 - 13:49
fonte
1

Ci sono alcune domande da affrontare qui:

In primo luogo, il vero tipo di file. Devi controllare l'estensione del file ma questo non indica necessariamente il tipo di file reale, devi controllare l'indicatore del tipo di file - i "byte magici", ci sono librerie per molte piattaforme di sviluppo che fanno questo per te e puoi leggere altro su qui .

Durante la scansione dei virus, è possibile eseguire un motore di scansione su un server e inviare file a questo oppure è possibile utilizzare un'API come Virus Total. Ci sono alcuni aspetti da considerare con l'invio del file a un'API.

Dove si trova l'API? Si trova nello stesso paese in cui si trovano, potrebbero esserci restrizioni sulla legge sui dati per l'invio del file a un motore di scansione in un altro paese se tali immagini potrebbero contenere informazioni personali (come volti, nomi, indirizzi e-mail, ecc.)

I file caricati su determinati motori di scansione potrebbero essere disponibili per altre persone, considerare se questo presenta problemi per te o per i tuoi utenti. È possibile attenuarlo eseguendo il proprio sistema 'on-prem', ma ciò richiederà l'esecuzione dell'infrastruttura e probabilmente incorre in ulteriori licenze.

La seconda considerazione è quando scannerizzi? Se un utente carica un'immagine, esegue la scansione su richiesta non appena tenta un caricamento? Ciò causerà un ritardo nel caricamento ma impedirà l'ingresso di virus nella memoria dei file. L'alternativa è consentire il caricamento senza prima eseguire la scansione e disporre di un agente che esegue, scansionando i file e rimuovendo i file problematici. Dipende dai requisiti che hai.

    
risposta data 15.03.2018 - 10:59
fonte
0

Non è possibile verificare con certezza che un'immagine sia pulita, a meno di analizzarla manualmente per vedere se è perfettamente conforme agli standard e che anche il visualizzatore di immagini è conforme agli standard. Invece, puoi codificare l'immagine tra un semplice formato. La conversione di un'immagine in un formato banale comporta il rischio di sfruttamento, ma la conversione da un formato banale a un formato più complesso non lo è. È possibile sfruttare questa superficie di attacco ridotta, ad esempio:

  1. Carica l'immagine sospetta in un convertitore di immagini sandbox. Il convertitore di immagini non deve avere alcun accesso al filesystem, accesso X11 o accesso a syscalls non necessarie. Il convertitore di immagini sandboxed deve essere non attendibile poiché utilizzerà le librerie potenzialmente vulnerabili.

  2. Chiedi al convertitore di immagini sandbox di ricodificare l'immagine in un formato di pixelmap banale, ad esempio PPM . Il formato deve essere abbastanza semplice da essere irrealizzabile. Il presupposto è che questo processo di conversione possa compromettere il convertitore, quindi tutti i passaggi successivi non devono aver bisogno di fidarsi di questo stadio. Una pixmap è abbastanza banale per questi scopi.

  3. Un secondo convertitore di immagini non in scatola acquisisce quindi la pixmap, ad es. attraverso la memoria condivisa. Questo convertitore di immagini è affidabile, in quanto il suo unico input sarà un formato così banale che lo sfruttamento non è fattibile. La pixmap può quindi essere convertita in un formato immagine più appropriato, assumendo ovviamente che non si desideri che l'output sia un'immagine grande, non compressa, non elaborata.

Quindi perché non avere un solo processo in sandbox per convertire l'immagine? Se si presuppone che la libreria di analisi delle immagini per l'input sia vulnerabile, non è più possibile attendersi nemmeno un processo sandbox. Se chiedete di convertire un JPEG in un PNG e il JPEG è malevolo, potrebbe incorporare un diverso exploit nell'output PNG. Questo non sarà probabile, ma è possibile, rendendo questo un no-go.

Se questo è eccessivo, ci sono ancora altri modi più semplici per ridurre la probabilità di cadere vittima in un exploit di analisi delle immagini. Un elenco non esaustivo di raccomandazioni è:

  • Mantieni aggiornato tutto il software, in particolare le librerie di immagini.

  • Verifica che il formato dell'immagine corrisponda all'estensione, ad es. controllando il tipo MIME .

  • Non accettare immagini da fonti non attendibili, se possibile.

  • Utilizza solo formati di immagine comuni come JPEG, PNG e GIF.

risposta data 16.03.2018 - 05:13
fonte

Leggi altre domande sui tag