Transparencia de la aplicación de productos de Google

Para aumentar la confianza en las apps de Google, ahora nos comprometemos a incluir todas las apps de productos de Google en nuestro registro de transparencia. Publicamos el registro de transparencia para verificar públicamente las afirmaciones que hacemos con respecto a estos APKs.

Modelo de amenazas

Los sistemas de transparencia se pueden usar para detectar y, por lo tanto, disuadir los ataques a la cadena de suministro. Ilustramos con algunos ejemplos.

Supongamos que un atacante modifica de forma maliciosa una app de Google y hasta logra firmarla con la clave de firma que se usa para la distribución a través de Google Play. Con un registro de transparencia binario, cualquier persona que reciba un APK cuestionable puede utilizarlo como una fuente verificable de verdad fundamental para verificar la autenticidad del APK. Verán que Google no agregó los metadatos del APK correspondientes al registro y sabrán que no deben confiar en el APK vulnerado.

Dado que la publicación en el registro es un proceso independiente del proceso de lanzamiento con firma (como se ilustra en el Diagrama del ecosistema), esto eleva el nivel de exigencia para el atacante más allá de solo vulnerar la clave.

Si bien planeamos integrar este registro en una red pública de testigos con un protocolo de testigos estándar, alentamos a las partes externas independientes a supervisar la integridad de este registro disponible públicamente. Estas partes pueden certificar la propiedad de solo agregar del registro y denunciar cualquier manipulación.

La existencia de un sistema de transparencia de este tipo y la capacidad de descubrir ataques adicionales desalientan la actividad maliciosa. Si se vulnera un APK, pero los usuarios solo confían en los que se encuentran en el registro, el APK vulnerado debería exponerse públicamente. Esto aumenta la probabilidad de descubrir que existe el APK vulnerado y se pueden tomar medidas para detener su distribución.

Modelo de solicitante

El Modelo de Solicitante es un framework que se usa para definir roles y artefactos en un sistema verificable. En el caso de la transparencia de apps propias de Google, la afirmación que hacemos es que el hash de un archivo APK registrado en este registro representa una versión específica de una app oficial de Google destinada al consumo público.

  • ClaimGoogleApp: (Yo, Google, afirmo que $hashApp es para $googleApp), donde:
    • $hashApp es un hash criptográfico (p.ej., SHA256) del archivo APK (incluidos los APK divididos) de una versión específica de $googleApp.
    • $googleApp es un paquete de Android (APK) que compone una app que Google crea y distribuye.

Cualquier persona que tenga una copia de $googleApp puede verificar esta afirmación, y describimos este proceso con todo detalle en la página de verificación.

Contenido del registro

Cuando Google lanza una nueva versión de un APK, agrega una entrada correspondiente al Registro de transparencia del APK de Google de origen.

Cada entrada de este registro contiene cuatro elementos de metadatos:

  1. Es el hash del archivo APK de una app firmada por Google. Se trata de una cadena hexadecimal del resumen SHA256 de todo el archivo.
  2. Es la descripción del tipo de hash anterior. Es una cadena.
  3. Es el nombre del paquete del APK. Es una cadena.
  4. Número de versión (versionCode) del APK. Es un número entero distinto de cero.

El formato de una entrada de registro es la concatenación de los cuatro fragmentos de información con un carácter de nueva línea (\n), como se ilustra a continuación:

hash\nSHA256(APK)\npackage_name\npackage_version\n

Como medimos todo el archivo APK, la descripción del hash se establece en SHA256(APK). Esto proporciona una cobertura integral del contenido de cada archivo y facilita a los usuarios la obtención de esta medición.

Diagrama del ecosistema

Diagrama del ecosistema de registros verificables