Evitar fugas de información mediante metadatos con Alfresco

Tras hablar de las fugas de información en el “capítulo” anterior, donde explicaba la problemática existente con la gestión de los metadatos internos de los contenidos de cara a posibles análisis y extracción de información que no queramos hacer pública, he preparado la siguiente prueba de concepto para poder limpiar metadatos internos de archivos de imágenes (jpg, png) y pdf con Alfresco. Concretamente usaremos Exiftool, una herramienta hecha en Perl que soporta la edición, y por lo tanto, borrado de metadatos internos de los siguientes formatos y tipos de metadatos más conocidos (ver en la página de Exiftool todos los formatos soportados, que son muchos más):

Formato Información adicional
EPS, EPSF, PS R/W [Encapsulated] PostScript Format
EXIF R/W/C Exchangable Image File Format metadata (TIFF-based)
GIF R/W Compuserve Graphics Interchange Format
IND, INDD, INDT R/W Adobe InDesign Document/Template (XMP metadata only)
JPEG, JPG R/W Joint Photographic Experts Group image (see table below)
PDF R/W Adobe Portable Document Format
PNG, JNG, MNG R/W Portable/JPEG/Multiple-image Network Graphics
TIFF, TIF R/W Tagged Image File Format
XMP R/W/C Extensible Metadata Platform sidecar file

En esta prueba de concepto no veremos como automatizar el borrado de metadatos en ficheros ofimáticos de MS Office u Open Office, ya que Exiftool no soporta esos formatos, aunque los desconozco, parece ser que hay librerías que pueden permitir automatizarlo y añadirlo de la misma forma que comento en este artículo. Hace unos días Chema Alonso, de Informática 64, me comentó que ellos tienen una aplicación que se puede invocar desde línea de comandos y soporta esos formatos que podría servir para mejorar este que os muestro hoy, pero no tengo más detalles.

DISCLAIMER: Recordad que este artículo no es más que una prueba para demostrar que se puede hacer, aunque en mis pruebas no he visto ningún problema que afecte a la estabilidad de la plataforma, no me hago responsable si rompes algo 😉

Bien, empecemos. Vamos a ver la instalación, configuración, prueba y uso.

  • Instalación de exiftool y módulo de ejecución de comandos en Alfresco:

Para realizar esta prueba de concepto he utilizado Alfresco Enterprsie 4.0.0 pero igualmente valdría para la versión Community. Aparte de tener un Alfresco 4.0 instalado y funcionando necesitamos tener instalado Exiftool, podéis descargar de esta dirección la aplicación para Windows, Linux o MacOSX. También podéis descargarlo e instalarlo directamente usando Yum o Apt en vuestra distribución de Linux favorita. Uso Linux en este ejemplo así que todos los comandos y rutas serán en base a este sistema operativo, para hacerlo en Windows deberías cambiar rutas, etc. En MacOSX también lo he probado y este proceso es igual que en Linux.

Una vez instalado Exiftool, posiblemente lo tendremos en la ruta /usr/bin/exiftool por lo tanto en el PATH del sistema operativo y podremos invocarlo ejecutando en una consola simplemente “exiftool” (sin comillas). Para asegurarnos que funciona correctamente asegúrate que tiene permisos de ejecución (chmod +x)  y ejecuta exiftool contra una imagen o pdf que tengas:

[bash]
$ exiftool foto.jpg
[/bash]

Si todo va bien, verás una lista todos los metadatos que contiene la foto como veíamos en las capturas del artículo anterior.

Ahora vamos a ver como se realiza el borrado de todos los metadatos de un fichero desde línea de comandos para terminar todas las comprobaciones:

[bash]
$ exiftool -all= −overwrite_original foto.jpg
[/bash]

Con el anterior comando se borran todos los metadatos del fichero (-all=) y sobrescribe el fichero que se trata (−overwrite_original). Una vez ejecutado el comando vuelve a ejecutar el comando inicial de lectura para comprobar que realmente se han borrado todos los metadatos y funciona correctamente.

Ahora que tenemos instalado el comando principal para limpiar vamos al siguiente paso. La instalación del módulo que nos permitirá implementar una acción consistente en una llamada a un comando, es decir, a un script de shell. Le conté la idea a mi compañero en Alfresco Rui Fernandes y me dedicó unos minutos para hacer un módulo que permite ejecutar un comando sobre un nodo del repositorio (gracias amigo!), yo he adaptado el módulo a la ejecución de exiftool y podéis descargar el AMP desde aquí:

http://dl.dropbox.com/u/357018/cmd-line-action-clean-metadata-1.0.1.amp

Una vez tengamos descargado el módulo cmd-line-action-clean-metadata-1.0.1.amp, debemos instalarlo a alfresco.war con la herramienta alfresco-mmt (parando antes el servidor de aplicaciones). Para hacer esa tarea de forma sencilla copiamos el módulo al directorio “amps/” que debe estar en la raíz de la instalación de Alfresco. Posteriormente ejecutamos el script apply_amps.sh que está en “bin/” también en la raíz de la instalación. Si no hemos tenido ningún problema tras la ejecución del script ya tenemos el módulo instalado, podemos ver que ha hecho un backup automático de alfresco.war y que ha limpiado ficheros temporales del anterior despliegue.

  • Configuración del módulo para que la acción ejecute nuestro limpiador:

Teniendo el módulo de la acción instalado, ahora debemos configurarlo para usarlo posteriormente en una regla de Alfresco y aplicar la limpieza de metadatos internos de un contenido o contenidos concretos.

Primero debemos crear el script que vamos a ejecutar, lo llamaremos file-metadata-removal-script.sh y lo pondremos en el directorio “bin/” de la instalación de Alfresco, con el siguiente contenido tan sencillo:

[bash]
#!/bin/bash

# Script for calling File Metadata Removal Tool command
/usr/bin/exiftool -all= -overwrite_original $1
[/bash]

Recuerda hacerlo ejecutable con el comando “chmod +x file-metadata-removal-script.sh”.

Por último en alfresco-global.properties debemos añadir el siguiente nuevo parámetro donde indicamos la ruta absoluta del script (modifícala con la ruta del script en tu servidor):

[bash]
#Cleaner metadata script
file.metadata.removal.command=/opt/alfresco-enterprise-4.0.0/bin/file-metadata-removal-script.sh
[/bash]

Hecho lo anterior ya podemos arrancar el servidor de aplicaciones y probarlo.

  • Prueba:
  1. Accede a Alfresco Share con un usuario con permisos para crear una carpeta y crea una carpeta en un sitio.
  2. Crea una regla simple como la siguiente, donde se ejecuta la acción “Clean internal metadata”:
  3. Sube o mueve un fichero del tipo jpg, png o pdf al directorio donde has creado la regla. Sus metadatos internos serán extraídos como siempre por Alfresco y los usará para añadirlos a la información del contenido en su propia base de datos como veíamos en el artículo anterior. Pero también lo limpiará en el propio fichero interno que se almacena en el contentstore. También puedes mover un fichero que ya esté en el repositorio a esa carpeta y se ejecutará la limpieza.
  4. Como ves, es una acción totalmente transparente para el usuario. En los logs podremos ver más información.
  • Logs:

En el fichero alfresco.log podremos ver las siguientes cadenas donde vemos que el nodo de turno se ha limpiado correctamente (1 image files updated):

[bash]
2012-02-27 01:01:32,908  INFO  [rfernandes.cmdlineaction.CmdLineActionExecuter] [defaultAsyncAction4] Binary content store URL fetched: 2012/2/26/22/25/c1a9d2e3-9779-4dc5-aaea-927c1e8bc3a5.bin

2012-02-27 01:01:32,928  INFO  [rfernandes.cmdlineaction.CmdLineActionExecuter] [defaultAsyncAction4] Command line to execute: /opt/alfresco-enterprise-4.0.0/bin/file-metadata-removal-script.sh /opt/alfresco-enterprise-4.0.0/alf_data/contentstore/2012/2/26/22/25/c1a9d2e3-9779-4dc5-aaea-927c1e8bc3a5.bin

2012-02-27 01:01:32,928  INFO  [rfernandes.cmdlineaction.CommandExecutor] [defaultAsyncAction4] Executing: /opt/alfresco-enterprise-4.0.0/bin/file-metadata-removal-script.sh /opt/alfresco-enterprise-4.0.0/alf_data/contentstore/2012/2/26/22/25/c1a9d2e3-9779-4dc5-aaea-927c1e8bc3a5.bin

2012-02-27 01:01:33,332  INFO  [rfernandes.cmdlineaction.CommandExecutor] [Thread-143] OUTPUT>    1 image files updated

2012-02-27 01:01:33,338  INFO  [rfernandes.cmdlineaction.CommandExecutor] [defaultAsyncAction4] ExitValue: 0
[/bash]

Por defecto se usa el modo INFO en el log del módulo, pero con la siguiente cadena se podría modificar en log4j.properties:

[bash]
log4j.logger.org.alfresco.demo.rfernandes.cmdlineaction=info
[/bash]

  • Comprobar con exiftool:

Podemos comprobar con exiftool que realmente se ha limpiado el contenido lanzando el comando contra el nodo directamente:

[bash]
$ exiftool /opt/alfresco-enterprise-4.0.0/alf_data/contentstore/2012/2/26/22/25/c1a9d2e3-9779-4dc5-aaea-927c1e8bc3a5.bin
[/bash]

Y veremos que sólo se muestran los metadatos básicos del contenido, no los que pueden aportar más información. Ojo con lanzar comandos directamente a los contenidos en el contentstore, no lo hagas con comandos que no sepas realmente lo que hacen, podrías generar una inconsistencia en el repositorio. La implementación ideal sería usando código java así que cuidado con lo que hacéis 😉

  • Reglas:

En este ejemplo hemos visto una sencilla regla para probar la limpieza de los ficheros, para usar esta idea en un sistema real deberíamos saber como vamos a integrar Alfresco con un sistema web, por ejemplo con un portal o un canal de publicación, y ejecutar la acción con los contenidos que vayan a ser usados por ese portal o canal independientemente de cómo se acceda a Alfresco (CMIS, API nativa, etc.). Si lo que usamos es el Transfer Service de Alfresco, también deberíamos crear una regla para que se limpien los contenidos cuando salgan del repositorio con destino otro sistema.

  • Conclusión:

Como hemos visto en este artículo, hay opciones muy válidas para llevar a cabo la tarea de limpieza de contenidos para evitar fugas de información mediante los metadatos usando Alfresco. Seguro que con esta idea como base se pueden hacer cosas mucho más potentes. Los comentarios y mejoras son bienvenidos.

Contenidos, metadatos y las fugas de información

Llevo un tiempo escribiendo algunas cosas sobre seguridad y Alfresco (que iré publicando), una de los temas que más interés me despierta es la fuga de información, concretamente mediante datos que no vemos directamente pero que están ahí, que están en los contenidos, es decir, en los metadatos ocultos (o no tan ocultos) de los ficheros. De esto se ha hablado mucho, por ejemplo en España contamos con Chema Alonso que ha escrito gran cantidad de información al respecto en http://www.elladodelmal.com.

¿Quién no recuerda el famoso “Caso Blair”? Se publicó un fichero sobre la Guerra de Irak y las armas de destrucción masiva y se demostró (mediante los datos ocultos en el fichero) que había sido manipulado por gente de su gabinete y por lo tanto mentía en cuanto a la procedencia de la información. Más información en inglés y en español.

¿De qué estoy hablando? Voy a aclarar algunos conceptos para no liarnos y ponernos en situación.

Cualquier fichero contiene la información del mismo fichero, por ejemplo, un fichero foto.jpg contendrá una imagen, pero también contiene más información que no se ve a simple vista, son los metadatos o propiedades de dicho fichero que nos aportan más información sobre el mismo. En esos metadatos de la foto se pueden ver datos sobre la cámara con la que se ha realizado, fecha en la que se hizo, software con la que se ha editado, una miniatura, información sobre la localización donde se tomó y muchos datos más. Propiedades parecidas también se encuentran en ficheros Adobe PDF, MS Office, Open Office y un largo etcétera. En el caso de ficheros DOC o DOCX incluso podríamos extraer información sobre las personas que lo han editado, nombres de usuario, impresoras donde se ha enviado, recursos compartidos accedidos, etc. Por lo tanto, analizando esas propiedades podemos extraer mucha información valiosa.

Gracias a Google u otros buscadores es muy fácil localizar los ficheros publicados en internet por parte de una organización concreta, tan fácil como buscar algo así: “inurl:dominio.com filetype:pdf”

Hay millones de webs que publican esta información sin tratar previamente, sin saber realmente que información están dejando visible al resto del mundo. Incluso en España está contemplado el borrado o limpieza de esta información en el Esquema Nacional de Seguridad pero tras hacer unos cuantos escaneos de webs españolas de referencia es evidente parece que no tiene mucho éxito.

Fijaros si es importante este concepto que organizaciones como la NSA (National Security Agency de los Estados Unidos) o SANS, han publicado informes sobre los riesgos que supone este problema. Podéis acceder a los mismos aquí:

http://www.nsa.gov/ia/_files/app/pdf_risks.pdf

http://www.sans.org/reading_room/whitepapers/privacy/document-metadata-silent-killer_32974

¿Cómo puedo ver todo esto que comentas? Existen varias herramientas que nos permiten extraer este tipo de datos, analizarlos y poder averiguar cierta información que podrían permitir realizar intrusiones, uso fraudulento de la misma u otras actividades “interesantes”. Voy a enumerar algunas:

FOCA, también con versión online.

libextractor.

Metagoofil.

Exiftool.

Maltego.

Sin lugar a dudas, la más completa y además con sabor español es FOCA, escrita por la empresa Informatica64, tiene una versión gratuita y funciona sobre Windows. Esta herramienta nos permite extraer toda la información oculta en los ficheros, analizarlos y recolectar la información de forma gráfica e intuitiva, incluso puede dibujar un mapa de red con los datos extraídos como direcciones IP o nombres de máquinas. En este enlace se puede ver una conferencia en la DEFCON que es auto explicativa (merece la pena verla entera). Cabe recordar que FOCA nació para hacer auditorías y recolección de datos, y la extracción de metadatos es una de las muchas cosas que hace esta herramienta.

¿Y cómo puedo prevenir este tipo de situaciones? ¿Cómo limpio los archivos que voy a sacar fuera de mi ordenador o que voy a publicar en alguna página en internet? Hay algunas herramientas que nos permiten hacerlo y generalmente es una tarea totalmente manual que debe hacer el usuario por su cuenta (con lo que eso conlleva).

Con OOMetaextractor podemos borrar los metadatos de los documentos de OpenOffice. En el propio MS Office 2007 y versiones superiores hay una opción al guardar que nos permite borrar la información personal, para versiones anteriores hay un plugin que permite hacerlo. En el caso de PDF, para eliminar toda la información interna debemos usar Adobe Acrobat 8.0 o un plugin para versiones anteriores o con la herramienta Exiftool mencionada anteriormente. En ficheros gráficos del tipo JPG, PNG, etc, se puede eliminar algunos de estos datos con Adobe Photoshop o también con Exiftool. Aunque esta herramienta no está orientada precisamente a un usuario final.

Las fotos almacenan esa información en metadatos EXIF, IPTC y otros, los ficheros PDF en XMP, hay muchos más tipos de metadatos en los ficheros, en la web de Exiftool podéis aprender mucho sobre este tema.

Aquí vemos un ejemplo de los datos extraídos de una foto que me han enviado por correo electrónico:

Aquí los metadatos de una presentación en Power Point:

Como veis, en ambos casos hay información muy interesante, en la foto la localización exacta donde se hizo la foto, altitud, el teléfono con el que se hizo la foto, incluso podríamos acceder a la imagen en miniatura si la tuviera (que puede ser algo sorprendente porque puede no ser exactamente igual) y mucha información más. En el fichero PowerPoint podemos ver el usuario que está trabajando actualmente con el fichero, el usuario que lo hizo, fechas de creación, tiempo que se ha tardado en realizar el documento, etc. Toda esta información está muy bien siempre y cuando el usuario quiera que sea pública o que esté disponible, pero generalmente el usuario final no sabe nada de esto ni las consecuencias que puede tener.

Imaginad el impacto que puede tener la publicación de un documento que ha escrito una empresa “amiga” con un RFP y que posteriormente ha publicado otra empresa u organismo, si no se limpian los metadatos se podría demostrar e impugnar una asignación de un proyecto ya que se podría demostrar quien ha escrito el documento y quien lo ha publicado. Eso ocurre y ha ocurrido en muchas ocasiones, por eso esto es muy crítico.

¿Y qué relación tiene todo esto con Alfresco? Gran parte de estos metadatos que residen en múltiples formatos de documentos son utilizados por los extractores de Alfresco para nutrir sus contenidos de información adicional y evitar que el usuario deba rellenar a mano algunos de ellos, esta tarea se hace gracias a las librerías Apache Tika incorporadas en el repositorio. Por lo tanto, si subimos un fichero a Alfresco, se extraen los metadatos más conocidos automáticamente y podemos acceder a ellos en las propiedades de cada contenido, esto no significa que desaparezcan del propio fichero. A efectos de un ECM esto es normal ya que una vez que un fichero está en un ECM éste es el encargado de gestionar la información alrededor del fichero y poder dotar a los contenidos de más información y posibilidades que el propio contenido en si mismo.

En esta captura podemos ver como se muestran las propiedades extraídas (y ahora almacenadas en la BBDD de Alfresco) de una foto:

Entonces ¿qué ocurre si publico mis contenidos en servidores web con acceso público, o si tengo integrado mi portal cuyos contenidos están almacenados en Alfresco? ¿Qué pasa con los metadatos internos de los ficheros que se ponen a disposición de cualquiera en internet pero residen en el repositorio o salen de él?

Eso lo veremos en el próximo artículo, donde explicaré como defendernos de posibles fugas de información mediante metadatos usando Alfresco.

Video del webinar “Novedades en Alfresco 4.0”

Descubre las novedades en Alfresco 4 Enterprise. En este webinar de una hora de duración veremos las nuevas características de la versión 4 de Alfresco Enterprise y varias demos de estas nuevas funcionalidades.

Entre ellas están:

  • Posibilidad de utilizar las herramientas de productividad que deseen (Microsoft Office, Google Docs, iWork de Apple en el iPad, QuickOffice y Adobe Creative Suite) con integración inteligente en Alfresco.
  • Conectarse sin dificultades y publicar contenido de servicios en la nube, tales como YouTube, SlideShare, Twitter, Facebook y Flickr.
  • Mayor facilidad de uso.
  • Características sociales mejoradas y adaptadas a las organizaciones.
  • Despliegue y administración más cómodo.
  • Mejoras en rendimiento, escalabilidad, búsquedas y personalización.

Alfresco 4 continúa aportando seguridad, rendimiento y flexibilidad a las TI necesarios para ofrecer valor a los negocios con importantes mejoras en la indexación, administración y posibilidades de extender.

Recuerda revisar las Release Notes de esta versión, puedes descargarlas del Portal de Soporte de Alfresco en http://support.alfresco.com y también revisar la matriz de compatibilidad de la versión.

Video del webinar “Alfresco Social Publishing Framework”

Desde la versión 4.0 Alfresco incorpora el nuevo Social Publishing Framework que nos permite publicar contenidos en diferentes canales como Facebook, Twitter, Slideshare, Linkedin, Flickr o Youtube. En este webinar vamos a ver como funciona el framework y como podemos ampliarlo en base a nuestras necesidades para otros canales, gracias a la ayuda de nuestro Partner Gold atSistemas. Aprende en este webinar a formar parte del Cloud Connected Content!