Efectividad de aplanar un PDF para eliminar el malware

13

Actualmente estoy buscando formas de prevenir archivos PDF maliciosos en el límite de la red. Esto incluirá escaneo de virus, pero hay limitaciones conocidas para eso. Veo que un enfoque común es aplanar el archivo PDF usando algo como:

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

Si bien esto parece eliminar a los sospechosos habituales de la salida de pdfid , solo eso < a href="http://blog.9bplus.com/scoring-pdfs-based-on-malicious-filter/"> no significa que se hayan eliminado las amenazas asociadas.

Por lo tanto:

  1. ¿Este enfoque eliminará la mayoría de las vulnerabilidades de Flash y Javascript?

  2. ¿Qué amenazas es probable que persistan?

Notas:

Como está pensado para el escaneo masivo, sugerencias como this no son realmente prácticos a escala.

Los enlaces a fuentes autorizadas serían muy apreciados.

Actualizar

El método anterior elimina Flash y Javascript del PDF. Steffen (ver más abajo) destacó que el malware incrustado en los archivos de imagen probablemente sobreviviría. Para mitigar esto, estoy reduciendo el tamaño de las imágenes. No he podido obtener una respuesta clara sobre si gs preserva o elimina los datos EXIF, pero es probable que la reducción de resolución alterar la compensación de cualquier malware incrustado allí anula su capacidad de explotación, y la reducción de muestreo también debería eliminar cualquier malware incrustado en los datos de imagen. Por lo tanto:

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}
    
pregunta symcbean 21.10.2015 - 11:37
fuente

2 respuestas

7

Creo que usar gs debería eliminar todo el contenido activo (Javascript) y los datos incrustados (Videos, Flash ...). Pero no estoy seguro de que usar pdfwrite directamente en el PDF elimine todo el contenido activo e incrustado. Por lo tanto, le sugiero que primero convierta el PDF a Postscript usando gs y luego convierta el Postscript nuevamente a PDF usando gs con el backend de pdfwrite. Dado que el formato Postscript en sí no admite contenido activo o incrustado, dicho contenido no debe sobrevivir al proceso de conversión. No estoy seguro de si esto también ayudará con los formatos de imagen, como explotar vulnerabilidades en libjpeg , libpng o similar. En cualquier caso, la llamada a gs debe realizarse dentro de algún tipo de entorno protegido (es decir, sandbox o similar) para que dichas vulnerabilidades no sean afecta la seguridad del sistema de seguridad .

Otra opción sería convertir el PDF a imágenes y tal vez crear un nuevo PDF con estas imágenes. De esta manera, podría protegerse contra la explotación de vulnerabilidades en bibliotecas de imágenes, pero a costa de perder la capacidad de trabajar con el PDF como texto (es decir, buscar, copiar ...). Si desea la protección adicional pero necesita la capacidad de manejar el PDF como texto, podría ejecutar un poco de software OCR para reconstruir el texto de las imágenes.

    
respondido por el Steffen Ullrich 21.10.2015 - 12:18
fuente
2

Esto es demasiado largo para un comentario.

Hay varios grados de aplanamiento. No se recomienda convertir todo a mapas de bits si (por ejemplo) desea componer el PDF y puede hacer que los PDF sean grandes y difíciles de manejar (tal vez no le importe si los archivos de entrada son todos escaneos masivos). Sería razonable para PS y viceversa, pero tenga en cuenta que perderá (por ejemplo) la capacidad de completar formularios. Además, los PDF protegidos por contraseña no serán transmisibles y los PDF protegidos por acción necesitarán que uses un procesador de PDF que no tenga DRM de Adobe.

Ir a PS o mapa de bits (y viceversa) debe eliminar las vulnerabilidades JS y flash, junto con muchas otras (por ejemplo, desbordamientos de búfer) en términos de la persona que finalmente ve los PDF.

Sin embargo, ya sea que vaya al mapa de bits o al PS o lo que sea, simplemente está moviendo (y posiblemente duplicando) el problema aquí. Cualquiera de las vulnerabilidades que existían anteriormente en su visor de PDF puede evitarse (suponiendo que la vulnerabilidad no pueda sobrevivir a la conversión a bitmap / PS y viceversa), pero cualquier interpretación del PDF puede estar sujeta a las mismas (u otras) vulnerabilidades.

La renovación de una máquina virtual simplemente significa que la máquina virtual puede verse comprometida, lo que probablemente sea menos grave que el hecho de que un escritorio arbitrario se vea comprometido.

La mejor idea práctica que se me ocurre es girar, para cada PDF, un contenedor Docker (o similar) que se encuentra en un estado conocido exacto cada vez, y proporciona su salida como archivo PS o de mapa de bits. Luego, gire otro contenedor de la ventana acoplable (cada vez) para representar la salida como PDF. Requeriría un ataque sofisticado y dirigido para pasar por eso (no los enfoques de PDF infectados con armas de fuego). Girar el contenedor de una ventana acoplable es muy rápido y le proporciona cierto grado de aislamiento. Por si acaso, haz el lote en una máquina virtual.

    
respondido por el abligh 21.10.2015 - 16:23
fuente

Lea otras preguntas en las etiquetas