Probablemente todos los usuarios del navegador Google Chrome conozcan la famosa ventana que pregunta si queremos almacenar nuestra contraseña al iniciar sesión en alguna página web. En este artículo explicaremos el mecanismo que utiliza para almacenar y proteger aquellas contraseñas que aceptamos guardar y analizaremos algunos aspectos de la seguridad de estos.

¿Como se almacenan los datos de inicio de sesión en Chrome?

Al hacer clic en el botón “aceptar” estamos permitiendo que Google Chrome guarde en el equipo tanto el usuario como la contraseña que fueron ingresados en el formulario de inicio de sesión de un sitio web. Más específicamente, estos datos se almacenarán en una base de datos SQLite3 ubicada generalmente en la dirección:

%LocalAppData%\Google\Chrome\User Data\Default\Login Data  

El archivo que contiene la base de datos es utilizado únicamente por Google Chrome, por lo que se supone que ningún otro software benigno accederá al mismo. En cuanto a la estructura interna de esta base de datos, sus tablas tienen los siguientes campos:

Imagen 1. Tablas y campos de la base de datos utilizada para guardar las contraseñas.

Estas tablas contienen toda la información necesaria para que el mecanismo de recuerdo de contraseñas funcione correctamente. Luego, nuestros datos de inicio de sesión serán almacenados principalmente en la tabla “logins”, siendo los campos “username value” y “password_value” aquellos que contienen la información más sensible. Sin embargo, por sí solos estos campos no tienen utilidad, ya que Google Chrome también necesita conocer a qué sitio web se corresponden esas credenciales. Aquí entra en juego otro campo de la misma tabla: “origin_url”, el cual contiene la dirección del sitio donde fueron utilizadas. Los demás campos contienen otros elementos que aportan al correcto funcionamiento del mecanismo, pero en menor medida.

Cabe destacar que por motivos básicos de seguridad las contraseñas no son almacenadas en texto plano; es decir, sin cifrar. Por el contrario, en los sistemas Windows, Google Chrome utiliza una función de cifrado provista por el sistema operativo: CryptProtectData (Crypt32.dll).

Esta función tiene la peculiaridad de estar diseñada para que los datos cifrados por ella solo puedan ser descifrados por el mismo usuario del sistema operativo que había iniciado sesión al momento de cifrar la contraseña. Más aun, también podría ser configurada para que los datos cifrados solo puedan ser descifrados en la misma computadora donde se los cifró. Es decir, a diferencia de las funciones de cifrado más generales, esta función no utiliza una clave particular definida por el usuario, sino que utiliza directamente las credenciales de acceso del usuario en el sistema operativo en sí.

Por lo tanto, si un cibercriminal quisiera robar dichas credenciales, no tendría otra opción que descifrarlas habiendo iniciado sesión en la computadora y utilizando el mismo usuario que las creó y transferirlas posteriormente.

¿Qué riesgos presenta el uso de este mecanismo para almacenar contraseñas?

El mayor riesgo que presenta es que si un atacante tuviese acceso a la computadora podría obtener fácilmente las contraseñas, descifrarlas y robarlas en texto plano. Este tipo de comportamiento ha sido observado en múltiples códigos maliciosos e incluso en troyanos bancarios dirigidos específicamente a Latinoamérica, donde se pretende robar credenciales de acceso a sitios de banca en línea.

La dinámica de estos ataques es sencilla. De la misma forma en que anteriormente se obtuvo la estructura interna de las tablas también se puede conseguir el contenido de estas. A modo de ejemplo:

Comenzamos intentando iniciar sesión en Facebook con un usuario y contraseña ficticios. Cuando el navegador nos indique, hacemos clic en la opción para que Google Chrome guarde nuestras credenciales.

Imagen 2. Ventana de Google Chrome para almacenar las credenciales ficticias utilizadas en este ejemplo.

Una vez que nuestro nombre el usuario y contraseña fueron almacenados en la base de datos de Google Chrome, procedemos a buscar el archivo donde se guarda esta información.

Imagen 3. Archivo correspondiente a la base de datos SQLite3 utilizada por Google Chrome.

Finalmente, basta con abrir el archivo con algún programa que permita visualizar bases de datos (en este ejemplo: DB Browser for SQL Lite).

Imagen 4. Campos de la tabla “logins” junto con su contenido, donde pueden observarse las credenciales de acceso usadas en el ejemplo.

Una vez abierto con DB Browser, al dirigirnos a la tabla “logins” podemos encontrar las entradas donde se encuentran los datos para el inicio de sesión, que incluyen: URL, usuario y contraseña. Como puede observarse en el recuadro rojo ubicado a la derecha en la Imagen 4, la contraseña almacenada está cifrada en una estructura BLOB y, al hacer clic en ese campo, el programa nos muestra la representación hexadecimal de la misma.

En este punto el atacante ya cuenta con el usuario, el sitio web y la contraseña cifrada, por lo que únicamente resta realizar el paso final: descifrarla. Para realizar esto se aprovecha del hecho de contar con acceso (físico o virtual) al equipo en cuestión, ya que es altamente probable que el usuario activo sea el mismo que guardó previamente la contraseña, permitiéndole al atacante descifrarla fácilmente utilizando la función: CryptUnprotectData (la función inversa a la mencionada previamente).

Todos estos pasos pueden ser realizados por un malware de forma rápida y automática. Sin embargo, el malware no es el único riesgo que debemos tener en cuenta, ya que actualmente existen múltiples programas de fácil acceso a través de una búsqueda online que son capaces de realizar estos mismos pasos. Esto no es un detalle menor, ya que estos programas permiten que personas con nulos conocimientos técnicos, pero con acceso físico a la computadora desbloqueada, puedan robar las credenciales del mismo modo que lo haría un malware.

Conclusión

Si bien es cierto que el mecanismo de almacenamiento utilizado por Google Chrome representa un riesgo de seguridad únicamente en los casos en que el equipo ya se encontraba previamente comprometido o expuesto, la utilización de esta funcionalidad añade un vector de ataque adicional que podría ser explotado por un cibercriminal o usuario malintencionado.

Es importante remarcar que todos los riesgos mencionados se limitan únicamente a este mecanismo, es decir, al riesgo de que las contraseñas allí almacenadas sean robadas. Por lo tanto, se recomienda no utilizar esta funcionalidad y, en caso de hacerlo, no utilizarla para guardar contraseñas de servicios importantes, como podría ser la banca en línea, redes sociales, portales médicos, o aquellos que contengan información personal.

Lee también: 5 herramientas para administrar la seguridad de tus datos