Estos días, varios titulares han anunciado que Cellebrite ha conseguido romper el cifrado de la conocida aplicación de mensajería Signal. Otros se acercan más a la realidad al indicar que «La empresa que desbloqueó un iPhone para el FBI afirma ahora haber roto la encriptación de la base de datos de Signal«

Al final, lo que tenemos que tener en cuenta respecto a esta noticia es lo siguiente:

  • Debemos distinguir el cifrado en tránsito del mensaje del existente en reposo una vez el mensaje ha llegado a su receptor
  • El cifrado punto a punto de Signal, que es el que permite protección del contenido de los mensajes frente a ataques de terceros sigue siendo plenamente seguro
  • Lo que se ha conseguido es acceder a mensajes y adjuntos existentes en el terminal de uno de los participantes, igual que se podría haber hecho si la aplicación hubiera estado desbloqueada
  • Signal sigue siendo una aplicación plenamente segura para comunicaciones, especialmente en ambientes hostiles
  • Tener acceso físico al dispositivo permite un gran número de vectores de ataque que pueden llegar a habilitar el acceso al contenido del terminal

El cifrado punto a punto

El cifrado punto a punto permite el envío de mensajes sin que tan siquiera el prestador del servicio, en este caso los responsables de Signal, puedan tener acceso a su contenido. Se cifra en el equipo que envía el mensaje con la clave pública del destinatario, con lo que únicamente este podrá acceder. Esto permite proteger al mensaje en tránsito frente a interceptaciones por parte de potenciales atacantes, manteniendo así la privacidad de las comunicaciones.

Cifrado punto a punto – el mensaje está protegido hasta llegar al receptor

Pero esto, como puede verse en el diagrama, únicamente se aplica durante el traslado del mensaje del origen al destino, pero una vez el mensaje llega al destinatario este debe poder acceder a dicho contenido. Así, se descifrará usando la clave privada, y es en este momento en el cual dejaremos de hablar del cifrado punto a punto, dado que se almacenarán los mensajes recibidos por parte de la aplicación en su base de datos en el dispositivo que corresponda, al igual que el emisor del mensaje ha realizado en su base de datos.

Por lo tanto, los mensajes se encuentran en la base de datos de Signal tanto del emisor como del receptor, cifradas como veremos más adelante pero con un sistema diferente. Y es en este punto en el que Cellebrite ha conseguido acceder a contenidos.

¿A qué se ha tenido acceso entonces?

Lo que ha conseguido Cellebrite es acceder a mensajes y adjuntos existentes en la base de datos de Signal de un móvil al que tuvieron acceso físico. Es decir, los mensajes fueron recibidos por su destinatario legítimo o se accedió al terminal del origen del mensaje, la aplicación los almacenó en su base de datos, y dicho terminal es sobre el que se han realizado las actuaciones periciales usando Cellebrite Physical Analizer y los servicios de Cellebrite. Esto es así porque para poder realizar las tareas que menciona será necesario

  • Tener acceso físico al terminal
  • Conseguir acceder a su almacenamiento

La necesidad de que se den estas circunstancias se señala en la página web de Signal, en el artículo que han redactado al respecto y que han titulado ‘No, Cellebrite cannot break Signal encryption.’

This is a situation where someone is holding an unlocked phone in their hands and could simply open the app to look at the messages in it. Their post was about doing the same thing programmatically (which is equally simple), but they wrote an entire article about the “challenges” they overcame, and concluded that “…it required extensive research on many different fronts to create new capabilities from scratch.”

Web de Signal

No se trata por tanto de una interceptación de los mensajes antes de su entrega, o de colaboración de Signal para llevar a cabo dicha tarea, sino que se trata de un supuesto concreto en que se realiza el análisis de los mensajes tras poder revisar la estructura de almacenamiento de la app tras poder tener acceso a ella. Esto supone que todo lo que se verá a continuación no resultaría posible si, por la protección del sistema, no se pudiera acceder a los ficheros y carpetas necesarios.

Los datos se encuentran cifrados en el terminal usando sqlcipher, de forma similar a lo que sucede con otras herramientas como Chatsecure, como señala este informe

To ensure privacy, ChatSecure provides end-to-end message encryption with OTR and encrypts with SQLCipher and IOCipher the SQLite databases it uses to store the information it generates

Uso de SQLCipher por Chatsecure

Salvando las diferencias entre Chatsecure y Signal respecto a cómo se almacena la clave que se utilizará para descifrar, tenemos un sistema del que interesa conocer la clave utilizada para cifrar el contenido. Para conseguirla, Cellebrite realizó un análisis de la estructura de la aplicación, con tal de determinar dónde se encuentran las bases de datos de mensajes y adjuntos, conociendo que se utilizaba para ello AES en modo CTR

Como indicaron en el post ahora eliminado, pero que aún se encuentra disponible en archive.org, su actuación se inició analizando la estructura de Signal, y localizando las bases de datos

Estructura de carpetas de la aplicación Signal

La clave necesaria se encontró en la carpeta denominada ‘shared_prefs’, y cifrada de forma simétrica usando una clave llamada ‘AndroidSecretKey’ almacenada en la Keystore de Android. Podéis leer más sobre este almacenamiento en el siguiente enlace:

https://developer.android.com/training/articles/keystore?hl=es-419

Desde F-Secure ya analizaron la seguridad de este almacenamiento de claves, realizando algunos consejos al respecto para proteger este almacenamiento. Incluso en el caso de identificación usando datos biométricos, existen implementaciones vulnerables, como señalan en el post

About 70% of the assessed applications that utilised fingerprint authentication were unlocked without even requiring a valid fingerprint. Furthermore, data stored by the application was successfully decrypted after unlocking the application in 50% of cases.

Por lo tanto, lo que se ha conseguido es acceder a dicho contenido de mensajes y adjuntos, con un terminal que había participado en dichas conversaciones, y en el que se han podido revisar las diversas carpetas de la aplicación de Signal a través de las herramientas de Cellebrite para poder extraer la clave.

Si no se pudiera acceder a la carpeta shared_prefs, donde se encuentra la clave cifrada, este ataque no resultaría posible.

En la web de Signal encontramos las mismas conclusiones, señalando la importancia de tener acceso al terminal

If you have your device, Cellebrite is not your concern. It is important to understand that any story about Cellebrite Physical Analyzer starts with someone other than you physically holding your device, with the screen unlocked, in their hands. Cellebrite does not even try to intercept messages, voice/video, or live communication, much less “break the encryption” of that communication. They don’t do live surveillance of any kind.

Signal hablando sobre el acceso conseguido por Cellebrite

Imagine that someone is physically holding your device, with the screen unlocked, in their hands. If they wanted to create a record of what’s on your device right then, they could simply open each app on your device and take screenshots of what’s there. This is what Cellebrite Physical Analyser does. It automates the process of creating that record. However, because it’s automated, it has to know how each app is structured, so it’s actually less reliable than if someone were to simply open the apps and manually take the screenshots. It is not magic, it is mediocre enterprise software.

Coincidimos en que la retirada del artículo de Cellebrite fue más por las opiniones contrarias que podía levantar, dado que los expertos en seguridad rápidamente detectarían el reducido alcance real que tenía, más que no porque se hubiera revelado ningún secreto empresarial.

¿Qué podemos hacer para mejorar la seguridad de nuestros terminales?

Uno de los pasos más importantes en el caso de terminales Android para mejorar la seguridad del terminal es activar el cifrado en caso de que no venga activado por defecto. Desde Android 7 se pudo activar el cifrado de disco completo, y a partir de Android 10 se usa cifrado basado en archivos (soportado asimismo desde Android 7).

Aunque existen vulnerabilidades que pueden llegar a permitir el acceso incluso cuando existe hardware dedicado para proteger este cifrado (pensemos en el caso de dispositivos de Apple) estos sistemas se van mejorando y van eliminando vulnerabilidades, por lo que también debemos mantener actualizados nuestros dispositivos y aplicaciones.

Asimismo, pueden utilizarse herramientas propias de la aplicación, como las que contempla Signal, para reducir riesgos aún en el caso de que una persona pudiera acceder al terminal desbloqueado

If you are concerned about a situation where someone else might end up physically holding your device with the screen unlocked in their hands, Signal can still help. Features like disappearing messages and view-once media messages allow you to communicate more ephemerally and keep your conversations tidy.

Signal recomienda cómo mejorar la seguridad

Y recordad, tanto en este caso como en otros similares a futuro, que las afirmaciones extraordinarias requieren pruebas extraordinarias.

Sergio Carrasco Mayans
Síguenos

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.