Es impresionante la cantidad de fotografías que tomamos hoy en día con nuestros teléfonos móviles. Casi se puede decir que toda la vida la documentamos con nuestras imágenes. Algunas compartiéndolas en redes sociales y otras simplemente almacenándolas en el terminal o en la nube. Y desde hace mucho años hablamos de los
Metadatos que estás contienen y de los
posibles riesgos que conllevan si se hacen públicos.
![]() |
Figura 1: Cómo ubicar fotos en un mapa a partir de sus metadatos |
Esta información también ha sido usada en muchos de los
Análisis Forenses Informáticos, como el ejemplo del escote de la novia del
defacer en la
recopilación que se hizo en el 2012. Incluso para el desarrollo de herramientas que permitan determinar el robo de las cámaras o celulares como
Stolen Camara Finder, si siguen siendo usadas y las imágenes cargadas en Internet. Hoy en día en cualquier
Análisis Forense Pericial es una pieza fundamental de la información que se extrae. Podéis ver alguna de las charlas de
Chema Alonso sobre este tema.
Figura 2: Metadata Security Esa información que esta dentro de los metadatos de las imágenes, es conocida como
EXIF (Exchangeable Image File Format), que es un estándar creado en los años noventa por una empresa japonesa con el objetivo de que los archivos
JPEG almacenaran las configuraciones usadas por los fotógrafos al momento de realizar la toma, creando etiquetas para guardar las diferentes informaciones de la configuración.
En el caso de la ubicación se crearon
treinta y una etiquetas diferentes que contienen toda la información posible con relación a la geoposición, siendo desde
2004, usado normalmente en todos los dispositivos fotográficos. Para ver el detalle de los
GPSTags toca tener en cuenta la tabla de la
Figura 3.
Que son los mismos que se visualizan cuando analizamos una imagen con el producto de
ElevenPathsMetashield Clean-Up, tal y como se puede ver en la
Figura 4.
¿Cómo podemos ubicar las fotografías en un mapa? Cuando en el proceso solo tienes una fotografía, es muy simple tomar los valores y colocarlos en
maps.google.com, pero si en un investigación o simplemente por curiosidad tomas todas las fotos que tengas en un equipo en el que estés haciendo un
peritaje forense judicial y quieres localizarlas todas en un mapa, ya no es tan simple.
Lo primero que toca hacer es entender cómo se almacena la información de latitud y longitud en los campos de
GPS Tags, para lo que en nuestro
tan querido por lo pentesters lenguaje Python existe la librería
PIL que permite el manejo de imágenes con una gran cantidad de módulos. Uno específicamente para los datos
EXIF, denominado
ExifTags. Con el que se busca específicamente el
Tag llamado
GPSinfo, que en
Python es un diccionario creado con las claves que marca el estándar. Como se puede ver en el siguiente ejemplo.
![]() |
Figura 6: Accediendo a GPSinfo |
Revisando la tabla de la
Figura 3, podemos ver qué significa cada campo. Y es en los campos 2 y 4 donde tenemos la información de
Latitud y
Longitud, respectivamente. Representados en una tupla de 3 campos, donde cada campo es una lista de 2 objetos. Estos datos nos dan
Latitud,
Minutos y
Segundos, respectivamente en cada lista. Teniendo en cuenta que el segundo valor de la lista es la precisión de cada dato. Así que para transformarlos en un valor que se pueda buscar en un mapa, se debe aplicar la siguiente formula para cada campo
- Latitud = primer campo de la tupla*precisión en ese campo de la tupla
- Minutos = Segundo campo de la tupa / 60 * precisión en ese campo de la tupla
- Segundos = Tercer campo de la tupla / 3600 * precisión en ese campo de la tupla
Para el ejemplo que estamos haciendo, sería:
- Latitud = 33*1
- Minutos = 26 / (60*1)
- Segundos = 163327 / (3600*10000)
Y calculados sobre este ejemplo concreto que estamos viendo, el resultado es el que se puede ver en la imagen siguiente.
![]() |
Figura 7: Latitud y Longitud calculados a partir de los campos 2 y 4 |
Ya se tienen los valores, solo falta tener en cuenta la referencia de ubicación, o sea si es
Norte o
Sur para la
Latitud y si es
Oeste o
Este para la
Longitud. Esto nos da el signo a usar. Si es
Sur la
Latitud es negativa y si es
Este la
Longitud es negativa, por lo que para nuestro ejemplo quedaría así:
![]() |
Figura 8: Ajustadas las referencias |
Si tenemos muchas fotografías y queremos ubicarlas todas en el map, debemos hacer este proceso con cada una de las imágenes, para lograr tener todas las ubicaciones y poder mostrarlas en un mapa con marcas usando, por ejemplo, la
API de Google. Para usarla se requiere
obtener una API Key aquí.
![]() |
Figura 9: Resultado de ubicaciones mostradas en maps.google.com |
Para hacerme más fácil todo este proceso, cree en Python un pequeño script al que llamé
GPSpicture que esta
disponible en GitHub, por si a alguien le viene bien en alguna investigación o simplemente por curiosidad quieran localizar en el mapa todas las imágenes cuya versión de
EXIF sea
2.2 y contengan los datos de localización.
Autor: Diego Samuel Espitia Montengro (@dsespitia) CSA de ElevenPaths en Colombia