Alguna vez te preguntaste cuántos metadatos están incluidos en los archivos PDF que envías por correo electrónico o comparte con los demás. Bueno, lo creas o no, hay mucho que se puede averiguar a partir de un PDF que has creado.
Esta publicación analiza cómo limpiar o remover los metadatos de tus archivos PDF antes de enviarlos y cómo protegerlos, para que el destinatario no los edite o copie fácilmente.
En ocasiones, estas técnicas se denominan anti-forenses con el objetivo de limitar la cantidad de información forense que proporciona dentro de un archivo que ha producido.
Si buscas una solución rápida de copiar y pegar, salta al final de esta publicación donde te muestro cómo crear una función en bash para automatizar todo el proceso.
1. Requisitos previos
Antes de abordar las soluciones que proporcionaré en esta publicación, asumiré que está utilizando Ubuntu o un sistema operativo basado Debian, y que tiene instaladas las siguientes herramientas.
apt install exiftool
apt install qpdf
apt install pdftk
2. Ver metadatos de archivos PDF
Comencemos ejecutando el siguiente comando en un documento PDF para ver qué metadatos realmente están contenidos en un archivo PDF. Puede ejecutar este comando de forma segura en cualquier PDF.
exiftool -all GuiaTrucosInformaticos.pdf
Usando un PDF de ejemplo (GuiaTrucosInformaticos.pdf) y el comando anterior, se produce el siguiente resultado que muestra todos los metadatos actuales que están asociados con el archivo PDF.
Notará que los metadatos en el archivo PDF brindan una buena cantidad de información, incluyendo;
- Fecha de creación y cambios en el archivo,
- La zona horaria en la que está configurada mi computadora,
- La aplicación que utilicé para crear el archivo y el número de versión, en este caso PDFill,
- y el nombre que he usado como Autor, entre otras cosas más.
Si bien es poco probable que esta información por sí sola pueda llevar a algo tan siniestro como que se vea comprometida mi máquina, sí proporciona una buena cantidad de información sobre la computadora en la que creé este PDF. La recopilación de información (información gathering o footprinting) y el reconocimiento sobre un objetivo es el punto de partida de un atacante, por lo que limitar esta huella (footprint) ayuda a limitar al atacante en su investigación inicial antes de que comience un desafío.
Por ejemplo, si un atacante quiere explotar la aplicación que uso, ahora sabe exactamente en qué software concentrarse para desarrollar un exploit.
3. Eliminar metadatos de archivos PDF
Veamos cómo podemos recortar/limpiar algo de este metadato. Hay dos herramientas principales que prefiero usar, qpdf y exiftool.
- Qpdf te permite linealizar un archivo PDF, entre otras funciones de manipulación de PDF, tradicionalmente esto es para crear archivos PDF optimizados para una descarga y visualización más rápida.
- Exiftool, por otro lado, te permite ver y actualizar los metadatos de los archivos. Exiftool no solo se limita a archivos PDF, sin embargo, para este ejemplo, nos quedaremos con los PDF, pero puede ejecutar el comando exiftool anterior en otros archivos y ver qué resultados obtiene.
Vale la pena señalar que estas herramientas eliminan los metadatos comunes de un PDF, algunos metadatos aún pueden existir en el archivo, incluidos los metadatos de fuentes y los metadatos de los objetos.
Primero, comenzamos con qpdf para linealizar el PDF y quitar los metadatos.
qpdf GuiaTrucosInformaticos.pdf Guia_Limpia.pdf
Cuando veamos los metadatos del archivo, notará que se ha eliminado un montón, en comparación con el resultado anterior.
Bueno en teoría, en caso no funcione, a continuación tengo otro comando útil…
Una vez que haya usado qpdf, puede ejecutar exiftool sobre el archivo. En el siguiente comando le digo a exiftool que elimine todos los campos de metadatos que pueda y los reemplace por null (nulo). Esto elimina efectivamente el campo de metadatos de ser consultado.
exiftool -all:all= Guia_Limpia.pdf
Cuando nuevamente ejecuto exiftool para consultar los metadatos en el archivo, obtengo los siguientes resultados: ¡Ahora sí!
La razón por la que recomiendo usar qpdf y exiftool juntos es que exiftool también elimina todos los metadatos XMP, mientras que qpdf optimiza el archivo a la vez que elimina cualquier objeto huérfano, como los que acabamos de definir como nulos. En el script final que proporciono al final de este post, en realidad ejecuto qpdf de nuevo después de exiftool para eliminar cualquier objeto huérfano que exiftool pueda haber creado.
4. Proteger archivos PDF
Una vez que haya eliminado la mayor cantidad de metadatos del archivo PDF como sea posible, generalmente asumo la postura de que realmente no quiero que nadie altere o pueda copiar fácilmente mi trabajo, que generalmente es la razón por la que he creado un PDF en primer lugar (al menos de ahora en adelante lo haré :’D).
Esta sección examina la mejor manera de proteger un PDF sin dejar de permitir que el destinatario del mismo visualice y/o imprima dicho archivo PDF. Aunque se explica cómo proteger un PDF, debe tener en cuenta que no es a prueba de balas y que existen técnicas para copiar elementos de un PDF. Este proceso simplemente hace que el trabajo sea más complejo para los usuarios más avanzados y ayudará a evitar que los destinatarios menos avanzados alteren tu trabajo.
Voy a proporcionar dos técnicas diferentes para proteger un PDF. Ambos tienen resultados ligeramente diferentes.
4.1. Técnica usando qpdf
La primera es de nuevo usar qpdf, que permite linealizar un documento y también encriptar su contenido para que no sea editado — en un solo comando. Este comando básicamente significa que hace lo siguiente:
- Proteger con contraseña el archivo: MiContraseña,
- No requerir una contraseña para abrir el archivo,
- Permitir que un destinatario imprima el archivo en alta resolución,
- No permitir que un destinatario pueda hacer modificaciones,
- Proteger el archivo con cifrado AES de 128 bits,
- El PDF que desea proteger se llama Guia_Limpia.pdf ,
- y el PDF recién creado y protegido se llama:
Aquí está el comando completo:
qpdf --linearize --encrypt "" "MiContraseña" 128 --print=full --modify=none --extract=n --use-aes=y -- Guia_Limpia.pdf Guia_Protegida.pdf
4.2. Técnica usando pdftk
La siguiente técnica ha existido por un tiempo y todavía es relativamente común entre las aplicaciones web más antiguas que manipulan archivos PDF, razón por la cual la he incluido.
A diferencia del ejemplo anterior, pdftk no usa el cifrado AES para proteger el archivo. En cambio, utiliza el algoritmo de cifrado RC4 menos seguro. Sin embargo, esta técnica también permite abrir el PDF con una versión anterior de Adobe Reader.
Este comando indica lo siguiente:
- El PDF que desea proteger se llama Guia_Limpia.pdf,
- El PDF creado recientemente y que está protegido se llama Guia_Protegida2.pdf,
- Protege el archivo con contraseña y pide al autor la contraseña,
- No se requiere de una contraseña para abrir el archivo,
- Permite que un destinatario imprima el archivo en alta resolución,
- No permite que un destinatario pueda hacer modificaciones,
- Protege el archivo con encriptación RC4.
Aquí está el comando completo:
pdftk "Guia_Limpia.pdf" output "Guia_Protegida2.pdf" owner_pw PROMPT encrypt_128bit allow printing
Una vez que hayas completado uno de los métodos anteriores para proteger tu archivo PDF, puedes verificar que se haya producido correctamente y ver cuáles son los permisos en el archivo PDF. Puedes usar la herramienta pdfinfo para este fin.
- El siguiente ejemplo es un archivo PDF que fue protegido usando pdftk, notará que el algoritmo de encriptación utilizado es RC4.
- El siguiente ejemplo es un archivo que se protegió utilizando qpdf con el parámetro –use-aes=y. En este ejemplo, verá que tiene el algoritmo de encriptación AES.
5. Código Bash: Eliminar Metadatos + Protección PDF
Entonces, ahora ha aprendido a eliminar los metadatos y también a proteger un PDF para evitar que se edite. Seguramente, a estas alturas, estás pensando “Solo quiero una forma simple de juntar todo esto en un solo comando“. Así que aquí lo tienes…
El siguiente fragmento de código funciona al agregar una nueva función a tu archivo ~/.bash_aliases. Es posible que necesites crear este archivo si nunca antes has usado .bash_aliases. Necesitará editar este archivo con tu editor de línea de comando preferido. Puedes usar vi o nano, yo utilizaré este último en el ejemplo a continuación:
nano ~/.bash_aliases
Entonces necesitarás agregar la siguiente función:
seguridad_pdf() {
echo "Metadatos originales para $1"
exiftool $1
echo "Eliminando Metadatos...."
echo ""
qpdf --linearize $1 nuevo1-$1
exiftool -all:all= nuevo1-$1
qpdf --linearize nuevo1-$1 nuevo2-$1
rm nuevo1-$1
rm nuevo1-$1_original
echo "Nuevos Metadatos para nuevo2-$1"
exiftool nuevo2-$1
echo ""
echo "Protegiendo nuevo2-$1...."
password=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -n 1)
echo "La contraseña será: $password"
echo ""
qpdf --linearize --encrypt "" $password 128 --print=full --modify=none --extract=n --use-aes=y -- nuevo2-$1 nuevo-$1
rm nuevo2-$1
echo "Estado final de nuevo-$1"
pdfinfo nuevo-$1
}
Una vez que hayas agregado lo anterior a tu archivo .bash_aliases, deberás ejecutar el siguiente comando (sí, hay un “.” allí) para que su sesión actual de Bash use los cambios que has agregado. El siguiente comando solo se necesita una vez, después de eso, todas las nuevas sesiones de Bash ya tendrán cargado el archivo .bash_aliases.
. ~/.bash_aliases
¿Entonces cómo debería usarlo? Ya que todo está automatizado, simplemente siga este ejemplo:
seguridad_pdf [Tu_archivo.pdf]
El resultado deberá ser algo parecido a esto:
También te interesará saber:
- Cómo Extraer, Eliminar y Editar Metadatos en Archivos de LibreOffice
- Cómo Ver, Editar y Eliminar los Metadatos en Archivos de MS Word
- Cómo Falsear el GPS y otros Metadatos en las Fotos
Eso debería ser todo. Buena suerte manteniendo tu huella de metadatos y tus archivos PDF protegidos. ¡No te olvides compartir este artículo! 😉