Casi todas las empresas o instituciones de gobierno usan archivos PDF. Y, a menudo, usan firmas digitales para garantizar la autenticidad de dichos documentos. Cuando abres un PDF firmado en cualquier lector PDF, este muestra una marca que indica que el documento tiene firma, a quién pertenece; y también te da acceso al menú de validación de firma.
Así pues, un equipo de investigadores de varias universidades alemanas analizó la seguridad de las firmas PDF. Vladislav Mladenov, de Ruhr-Universität Bochum, compartió los hallazgos de su equipo durante el Chaos Communication Congress (36С3).
La tarea de los investigadores era simple: modificar los contenidos de un documento PDF firmado sin anular la firma en el proceso. En teoría, los cibercriminales podrían hacer lo mismo para difundir información falsa o para añadir contenido malicioso a un archivo firmado. Después de todo, es probable que los clientes que reciben un documento firmado de un banco confíen en él y sigan los enlaces que contiene.
El equipo eligió 22 lectores PDF para diferentes plataformas que de modo sistemático facilitaron los resultados de sus experimentos.
Estructura del archivo PDF
Primero, digamos algunas cosas sobre el formato PDF. Cada archivo consta de cuatro partes: el encabezado, que muestra la versión del PDF; el cuerpo, que muestra el contenido que el usuario visualiza; la sección Xref, un directorio de los objetos contenidos en el cuerpo y sus ubicaciones (con el fin de mostrar el contenido); y el trailer, con el que los lectores PDF empezarán a leer el documento. El trailer contiene dos parámetros importantes que le indican al programa dónde iniciar el procesamiento del archivo y dónde comienza la sección Xref.
En el formato se integra una función de actualización acumulativa que le permite al usuario, por ejemplo, resaltar parte del texto e insertar comentarios. Desde un punto de vista técnico, la función añade tres secciones más: las actualizaciones para el cuerpo, un nuevo directorio Xref y un trailer nuevo. Esto es lo que realmente permite cambiar el modo en que el usuario ve los objetos, así como añadir contenido. En esencia, una firma digital de un archivo PDF es una actualización acumulativa que añade otro elemento al archivo, junto con sus secciones correspondientes.
Ataque tipo ISA (Incremental saving attack)
Primero, por medio de un procesador de texto, el equipo intentó añadir secciones extra al archivo con otra actualización acumulativa. En sentido estricto, no se trata de un ataque contra el archivo PDF, pues el equipo utilizó simplemente una función que los desarrolladores del formato implementaron. Cuando un usuario abre un archivo modificado de este modo, el lector PDF normalmente muestra un mensaje que nos advierte que la firma digital es válida pero el documento se ha modificado. No es un mensaje muy esclarecedor, al menos no para un usuario con poca experiencia. Y, lo que es peor, uno de los lectores PDF (LibreOffice) ni siquiera mostró el mensaje.
El siguiente experimento de seguridad de los archivos PDF consistía en extraer las dos secciones del final (es decir, añadir una actualización al cuerpo, pero no Xref ni trailer nuevos). Algunas aplicaciones se negaron a trabajar con dicho archivo. Dos lectores PDF vieron que faltaban dos secciones y automáticamente las añadieron sin notificar al lector acerca del cambio en el contenido. Otros tres simplemente cargaron el archivo sin ninguna objeción.
A continuación, los investigadores se preguntaron qué pasaría si simplemente copiaran la firma digital dentro de su propia actualización “manual”. Otros dos lectores, Foxit y MasterPDF, cayeron en la trampa.
En total, 11 de los 22 lectores PDF resultaron ser vulnerables a estas sencillas manipulaciones. Además, seis no advirtieron en absoluto que el documento abierto para lectura había sufrido modificaciones. En los otros cinco casos, con el fin de mostrar algún tipo de manipulación del archivo PDF, el usuario tenía que entrar al menú y verificar manualmente la validez de la firma digital, pues sencillamente no bastaba con abrir el archivo.
Ataque tipo SWA (Signature wrapping attack)
La firma de un documento añade dos campos importantes al cuerpo bajo la forma de actualizaciones acumulativas: /Contents, el cual contiene la firma; y /ByteRange, que describe con exactitud lo que se firmó. En este último se encuentran cuatro parámetros (uno indica el comienzo del archivo; otro, el número de bytes antes del código de la firma; un tercero establece dónde termina; y el cuarto, el número de bytes después de la firma) porque la firma digital es una secuencia de los caracteres generados con medios criptográficos a partir del código del documento PDF. Por supuesto, la firma no puede firmarse a sí misma, así que el área donde se almacena queda excluida del proceso de cálculo de la firma.
Los investigadores intentan añadir otro campo de /ByteRange inmediatamente después de la firma. Los dos primeros valores permanecen inalterados; solamente se alteró la dirección del final del código de firma. El resultado fue la aparición de un espacio adicional en el archivo que permitía que se añadiera cualquier objeto malicioso, así como la sección Xref que los describía. En teoría, si se leyera correctamente el archivo, el lector PDF no pasaría de esta sección. Sin embargo, 17 de las 22 aplicaciones eran vulnerables a dicho ataque contra archivos PDF.
Ataque por USF (Universal signature forgery)
Para obtener una medición óptima sobre la seguridad de los archivos PDF, el equipo decidió también someter las aplicaciones a pruebas de estrés y compararlas con una estratagema de prueba de penetración: según esta última, se intenta reemplazar los valores de los campos con otros incorrectos, o simplemente borrarlos. Al realizar el experimento con la sección /Contents, se descubrió que, si la firma real se reemplazaba con el valor 0x00, dos lectores la validaban aún.
Pero ¿qué pasaba si la firma se dejaba en su lugar, pero se eliminaba la sección /ByteRange (es decir, la información de lo que se firma)? ¿O qué pasaba si se insertaba un valor nulo en lugar de valores reales? En ambos casos, algunos lectores PDF validaron dicha firma.
En total, se halló que 4 de los 22 programas contenían errores de implementación que podían verse aprovechados.
La tabla de resultados resumidos muestra que al menos 21 de los 22 lectores PDF pueden ser burlados. Es decir, salvo por uno, todos aceptan un archivo PDF con contenido malicioso o información falsa que luciría válida para el usuario.
Esquema de vulnerabilidades de los lectores PDF. Fuente.
Curiosamente, Adobe Reader 9 fue la única aplicación que no cayó en ninguna de las trampas colocadas por los investigadores. El problema con ella es que es susceptible a una vulnerabilidad RCE (ejecución remota de código); y que solo los usuarios de Linux la emplean, sencillamente porque es la versión más reciente que está disponible para ellos.
Conclusiones prácticas sobre la seguridad de los PDF
¿Qué conclusiones prácticas podemos sacar de todo esto? Primero, que nadie debería confiar ciegamente en las firmas digitales PDF. Si ves una marca de verificación color verde en alguna parte, eso no significa necesariamente que la firma sea válida.
Segundo, incluso un documento firmado puede suponer un riesgo. Así que antes de abrir cualquier archivo recibido por la red, o de seguir los enlaces que contienen, asegúrate de que tienes una solución de seguridad confiable instalada en tu computadora.