Efficacia dell'appiattimento di un PDF per rimuovere il malware

13

Attualmente sto cercando modi per prevenire file PDF dannosi al confine della rete. Ciò includerà la scansione dei virus, ma ci sono limiti noti a questo. Vedo un approccio comune è quello di appiattire il file PDF usando qualcosa come:

gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=flattened.pdf raw.pdf 

Mentre questo sembra senz'altro rimuovere i soliti sospetti dall'output di pdfid , solo questo < a href="http://blog.9bplus.com/scoring-pdfs-based-on-malicious-filter/"> non significa che le minacce associate siano state eliminate.

Quindi:

  1. Questo approccio eliminerà la maggior parte degli exploit Flash e Javascript?

  2. Quali sono le probabilità che persistano?

Note:

Poiché è destinato alla scansione di massa, suggerimenti come questo non sono veramente pratici in scala.

I collegamenti a fonti autorevoli sarebbero molto apprezzati.

Aggiorna

Il metodo sopra rimuove Flash e Javascript dal PDF. Steffen (vedi sotto) ha evidenziato che il malware incorporato nei file di immagine sarebbe probabilmente sopravvissuto. Per mitigare questo, sto facendo il downsampling delle immagini. Non sono stato in grado di ottenere una risposta chiara se gs conserva o rimuove i dati EXIF, ma il downsampling sarà probabilmente alter l'offset di qualsiasi malware incorporato che annulla la sua sfruttabilità e il downsampling dovrebbe anche rimuovere qualsiasi malware incorporato nei dati di immagine. Quindi:

DPI=63

gs -dBATCH -dNOPAUSE -dQUIET -sDEVICE=pdfwrite \
   -dDownsampleColorImages \
   -dColorImageDownsampleType=/Bicubic -dColorImageResolution=${DPI} \
   -dDownsampleGrayImages \
   -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=${DPI} \
   -dDownsampleMonoImages \
   -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=${DPI} \
   -sOUTPUTFILE=${TMPPDF} ${SRCFILE}
    
posta symcbean 21.10.2015 - 11:37
fonte

2 risposte

7

Penso che l'uso di gs dovrebbe rimuovere tutto il contenuto attivo (Javascript) e i dati incorporati (Video, Flash ...). Ma non sono sicuro che l'uso di pdfwrite direttamente nel PDF rimuoverà davvero tutti i contenuti attivi e incorporati. Quindi ti suggerisco di convertire prima il PDF in Postscript usando gs e poi convertire il Postscript in PDF usando gs con il backend pdfwrite. Poiché il formato Postscript stesso non supporta il contenuto attivo o incorporato, tale contenuto non dovrebbe sopravvivere al processo di conversione. Non sono sicuro che questo aiuterà anche contro i formati di immagine, come lo sfruttamento delle vulnerabilità in libjpeg , libpng o simile. In ogni caso, la chiamata a gs deve essere effettuata all'interno di un tipo di ambiente protetto (ad es. Sandbox o simile) in modo che tali vulnerabilità non influisce sulla sicurezza del sistema di sicurezza stesso.

Un'altra opzione sarebbe quella di convertire il PDF in immagini e magari creare un nuovo PDF con queste immagini. In questo modo è possibile proteggersi dallo sfruttamento delle vulnerabilità anche nelle librerie di immagini, ma a costo di perdere la capacità di lavorare con il PDF come testo (cioè cercare, copiare ...). Se si desidera la protezione aggiuntiva ma si ha la necessità di gestire il PDF come testo, è possibile eseguire successivamente un software OCR per ricostruire il testo dalle immagini.

    
risposta data 21.10.2015 - 12:18
fonte
2

Questo è troppo lungo per un commento.

Ci sono vari gradi di appiattimento. La conversione di tutto in bitmap non sarebbe consigliata se (ad es.) Si desidera comporre il PDF e si possono rendere i PDF grandi e poco maneggevoli (forse non ti interessa se i file di input sono tutte scansioni di massa). Per PS e viceversa sarebbe ragionevole, ma nota che perderai (ad es.) La capacità di compilare i moduli. Inoltre, i PDF protetti da password non saranno trasmissibili e i PDF protetti dall'azione avranno bisogno di utilizzare un renderer PDF in cui non è presente Adobe DRM.

Passare a PS o bitmap (e viceversa) dovrebbe eliminare sia le vulnerabilità di JS e di flash, insieme a molte altre (ad es. buffer overflow) in termini di visualizzazione finale dei PDF da parte di una persona.

Tuttavia, sia che tu vada in bitmap o in PS o qualsiasi altra cosa, stai semplicemente spostando (e ipoteticamente duplicando) il problema qui. Qualunque sia la vulnerabilità precedentemente esistente nel visualizzatore PDF può essere evitata (supponendo che la vulnerabilità non possa sopravvivere alla conversione in bitmap / PS e viceversa), ma qualunque sia il rendering del PDF potrebbe essere soggetto alle stesse (o ad altre) vulnerabilità.

Girare una VM significa semplicemente che la VM può essere compromessa, il che è probabilmente meno grave di un desktop arbitrario compromesso.

La migliore idea pratica che riesco a trovare è quella di far ruotare, per ogni PDF, un contenitore Docker (o simile) che si trova in uno stato esatto conosciuto ogni volta e fornisce il suo output come file PS o bitmap. Quindi avviare un altro contenitore di finestra mobile (ogni volta) per rendere l'output come PDF. Richiederebbe un attacco mirato e sofisticato per superarlo (non gli approcci PDF infetti da proiettili). La rotazione di un contenitore finestra mobile è molto veloce e ti offre un certo grado di isolamento. Per buona misura, fai il lotto in una VM.

    
risposta data 21.10.2015 - 16:23
fonte

Leggi altre domande sui tag