5 min read

El secreto que guarda el iPhone

[![Screen_shot_2011-04-20_at_5](http://angeljimenez.files.wordpress.com/2011/04/screen_shot_2011-04-20_at_5-51-54_pm-scaled1000.png?w=300&resize=500%2C323)](http://angeljimenez.files.wordpress.com/2011/04/screen_shot_2011-04-20_at_5-51-54_pm-scaled1000.png)
Ayer, [tras probar el programa](http://necedades.com/siguiendo-los-pasos-de-mi-iphone) de Alasdair Allan y Pete Warden para ver en el mapa las posiciones almacenadas en el iPhone, decidí acceder al propio fichero para ver qué es lo que realmente está almacenado dentro. [El proceso no es sencillo](http://petewarden.github.com/iPhoneTracker/#2) pero tampoco requiere de grandes conocimientos técnicos. Simplemente hay que encontrar el fichero en la copia de seguridad almacenada en el ordenador (~/Library/Application Support/MobileSync/Backups). El problema es que iTunes crea nombres aleatorios para los archivos y es necesario *parsear* el fichero *Manifest.mbdb* para poder encontrar el código asociado al fichero *consolidated.db*, que es una base de datos SQL simple que puede leerse con varios programas y donde están almacenados todos los datos.

 

Antes de nada, unas cuantas apreciaciones:

 

  1. Tengo que matizar mi post de ayer porque el nivel de detalle es mayor que el que da a entender la aplicación iPhone Tracker. El iPhone almacena la posición con más exactitud pero para simplificar la representación Allan y Warden han quitado precisión, de ahí que siempre aparezca como una retícula. El teléfono está almacenando realmente su posición, no la de las antenas. Resulta que al final tenía razón en el primer post. Según Apple el teléfono guarda un archivo de las antenas y puntos WiFi cercanos.   
  2.  Por si no quieres leer el resto de esta entrada, mi opinión sobre el tema se mantiene. Creo que esto es simplemente un fichero caché de control que Apple, muy tontamente, no ha cifrado ni ocultado como debería. No creo que haya un motivo oscuro para su existencia y no representa un problema serio. Salvo que se pierda el teléfono o el ordenador y alguien tenga acceso físico a ellos la información no es accesible (y aún así sería algo complicado). El teléfono no la transmite a ningún servidor externo, ni siquiera a la propia Apple, según Warden. Por supuesto puedo equivocarme pero imagino que es una base de datos para agilizar la localización del GPS asistido cuando una aplicación la solicita, es decir, es un fichero que forma parte del framework CoreLocation, el que permite a las aplicaciones preguntar al teléfono por la situación del usuario.
  3. A pesar de que los datos son más precisos de lo que parece, sigue siendo información de posicionamiento por triangulación de antena, bastante poco efectiva.** No hay datos de GPS y los errores de posición pueden llegar a ser muy grandes, de varios cientos de kilómetros.** La información es similar a la que manejan las operadoras de telefonía.

 

Muy bien, una vez aclarado, entremos en materia. ¿Qué hay dentro de consolidated.db? El tamaño del archivo y la extensión va a depender mucho del uso que se haga del teléfono. El archivo se crea al instalar iOS 4.0 por primera vez y se mantiene durante toda la vida del teléfono, incluso si se borra la información y se restaura desde una copia de seguridad. Por lógica los datos almacenados desde la última copia de seguridad, en caso de que hagamos restauración, se pierden, así que como sistema de seguimiento no está muy bien diseñado. 

 

La única forma de acabar con el historial es borrar la información del iPhone y no restaurarlo desde una copia. Al hacerlo se crea un consolidated.db nuevo. 

 

En mi caso, la última vez que hice esto fue el 10 de septiembre de 2010 y esa es la primera entrada en la tabla de localización de mi consolidated.db, que ocupa unos 33,4 MB. Las entradas están ordenadas siguiendo un* timestamp* que mide en segundos pasados desde el 1 de enero de 2001 así que el mío empieza en 305831478 (protip: Wolfram Alpha es particularmente efectivo para saber qué día y hora coincide con esos segundos transcurridos desde 2001). 

 

Tengo un total de 29.791 entradas almacenadas en la base de datos de posición por antena y se extienden a lo largo de 222 días (basta con restar el primer y último timestamp y pasar el resultado de segundos a días, aunque también se puede contar cuantos días han pasado desde la primera entrada en la base de datos, ya que todos los días hay nuevas entradas). ** Esto me da más o menos una entrada cada 10 minutos** y este era el dato que realmente me interesaba conocer y el motivo por el que me lancé a mirar el archivo en primer lugar, ¿cada cuánto registra el teléfono una nueva posición?

 

Desgraciadamente no vale con hacer una media. Las entradas no se distribuyen de forma uniforme y pueden pasar horas sin que actualice la posición para, de repente, pasar a registrar varias veces por segundo el mismo lugar. Esto me lleva a pensar que cuando el teléfono está en reposo no se actualiza la base de datos, sólo lo hace cuando está activo. Siento arruinar las teorías conspiratorias. Otra posibilidad es que el teléfono sólo registre la posición cuando se producen ciertos eventos, como que el usuario esté en movimiento, que varíe la potencia de las antenas de telefonía o que una aplicación externa solicite datos de localización. Por último puede que en ocasiones el teléfono utilice otros sistemas para posicionamiento (más sobre esto más adelante). Voy a intentar hacer un pequeño experimento en los próximos días para comprobarlo pero no hay nada que indique regularidad en la forma en la que los datos están almacenados.

[![Screen_shot_2011-04-20_at_8](http://angeljimenez.files.wordpress.com/2011/04/screen_shot_2011-04-20_at_8-09-17_pm-scaled1000.png?w=300&resize=500%2C216)](http://angeljimenez.files.wordpress.com/2011/04/screen_shot_2011-04-20_at_8-09-17_pm-scaled1000.png)
 

Otro detalle importante es que bajo un mismo timestamp puede representar varias localizaciones así que en el mismo segundo es posible estar en varios sitios de forma simultánea. Una vez más, creo que esto se debe a que el fichero no trata de ser preciso en la recolección de los datos. Si buscamos dónde está mi teléfono en un momento determinado -un segundo exacto- de ayer, por ejemplo, lo único que obtendríamos sería una colección dispersa de puntos situada alrededor del West Village en Nueva York. Hay días en los que el teléfono crea una docena de entradas en puntos diferentes en el mismo instante y no se vuelve a actualizar la posición hasta el día siguiente.

 

La posición, como ya he comentado, viene de la función CellLocation, que es la que utilizan los teléfonos -prácticamente todos- para preguntar a la red de telefonía por su posición. Pero dentro de la base de datos hay otra tabla destinada a la posición conseguida a través de WiFi, que en mi caso tiene 233.652 entradas, bastante mayor, y que refleja el hecho de que mi teléfono pasa bastante tiempo en casa o conectado a redes WiFi (cafeterías, etc..).

Esta segunda tabla puede explicar por qué hay días en los que el teléfono no parece registrar posición alguna a través de CellLocation. Si se encuentra en una red WiFi es posible que utilice ésta para fijar la posición en la base de datos. Sobra decir que la precisión de la localización a través de red WiFi no es muy grande y depende de que el punto de acceso tenga disponible información geográfica pero esto quiere decir que este mismo truco se puede utilizar para obtener longitudes y latitudes en los iPod Touch e iPad WiFi, al menos durante el tiempo que han permanecido conectados a la red WiFi.

 

En general, como comentaba al principio, creo que se trata de un error bastante estúpido por parte de la compañía. Este fichero debería estar cifrado para prevenir problemas de privacidad y no estaría mal que Apple comentase por qué cree necesario almacenar el historial completo de posición, aunque sea dentro del propio teléfono y no lo haga de forma precisa. Siendo Apple es fácil predecir que la situación va a escalar hasta posiciones realmente absurdas independientemente del impacto real (como ocurrió con el famoso antennagate) pero es la cruz de la compañía. Puede que se le preste demasiada atención a la empresa de Steve Jobs en los medios, pero se hace tanto para bien como para mal.

Una última cosa: recomiendo la lectura de este post de Alex Levinson -forense e ingeniero de seguridad informática- sobre el tema.