¿Se verifican las firmas de gapps de zips?

¿Los gapps (p. ej., de goo.im) están firmados de forma que se evite la manipulación? ¿Hay alguna forma de verificar que son los mismos que obtendría de Google?

¿Todas/la mayoría de las ROM verifican esto?

Respuestas (4)

Todas las aplicaciones de Android están firmadas.

Android no ejecutará una aplicación sin firmar. Además, las firmas están vinculadas a los permisos de la aplicación, de modo que si la firma fuera incorrecta, otras aplicaciones no podrían comunicarse con ella y usted no podría recibir actualizaciones de Google Play.

La firma de Android se analiza con más profundidad en Firma de sus aplicaciones en la documentación para desarrolladores de Android, de donde se extrajo la información anterior.

Si está paranoico y desea verificar la firma de una aplicación , puede usar la jarsignerutilidad incluida con el kit de desarrollo de Java (JDK) . Por ejemplo:

jarsigner -verify -verbose -certs Vending.apk
la página a la que hace referencia dice "Android usa este certificado para identificar al autor de una aplicación, y el certificado no necesita estar firmado por una autoridad de certificación. Las aplicaciones de Android a menudo usan certificados autofirmados". ¿No significa esto que, si bien Android verificará que la aplicación esté firmada, no le importará QUIÉN la firmó? Eso significaría que no tenemos protección contra una aplicación maliciosa a menos que verifiquemos de alguna manera que los gapps que recibimos estén firmados por Google. Esta respuesta parece pasar por alto algunos pasos de verificación MUY necesarios. ¿Me estoy perdiendo de algo?
@stochastic Como también menciona la página , las actualizaciones deben firmarse exactamente con la misma clave o Android se negará a instalar la actualización. No importa que la clave no haya sido firmada por una CA, solo que es la misma que se usó originalmente para firmar la aplicación.
¡Gracias por señalarlo! Sin embargo, ¿esto no supone todavía que existe una aplicación con el mismo nombre? Cuando se instala a través de, por ejemplo, Google Play, está bien, pero cuando se instala un archivo zip de gapps a través de una ROM de recuperación, es muy posible que los gapps simplemente no estén presentes todavía (por eso se instalan de esta manera), por lo que ¿No habría una vulnerabilidad real si no hacemos algún tipo de verificación de claves manualmente? Además, si bien el sistema Android realiza la verificación que describe, ¿significa eso que una rom de recuperación realizará la misma verificación?
  • Si obtuvo sus gapps de goo.im, puede verificar manualmente si la suma MD5 del archivo .zip que descargó es correcta. Esto le aseguraría que el archivo no ha sido alterado.

  • Si está flasheando ClockworkMod Recovery, existe esta opción: install zip from sdcard > toggle signature verification.

Sin embargo , no creo que la verificación de la firma zip verifique que las aplicaciones (u otros contenidos) dentro del zip estén firmados; solo verifica que el archivo zip en sí esté firmado. Del mismo modo, verificar el md5 del zip realmente no prueba nada sobre las aplicaciones que contiene, a menos que cree su propio zip flasheable con buenas copias conocidas de las mismas versiones de las mismas aplicaciones y luego md5 ambos (pero entonces, ¿por qué descargaría ya tendrías tu propia versión flasheable)

Como dice la útil respuesta de Michael Hampton, todas las aplicaciones de Android están firmadas. Esto significa:

  • el sistema Android se asegurará de que cada aplicación que intente ejecutar haya sido firmada por alguien .
  • Cuando Android actualiza una aplicación, la nueva aplicación debe estar firmada con la misma clave que firmó la aplicación original. De lo contrario, la actualización fallará. Si la clave cambia, el nombre de la aplicación también debe cambiar.

Todo esto no significa que una consola de recuperación como TeamWin o ClockworkMod recovery verifique correctamente las firmas de estas claves, ni significa que una rom sea de Google solo porque alguien la firmó correctamente.

¿Las roms comunes verifican las firmas en los archivos zip? Ellos si

  • Afortunadamente, parece que la recuperación de TeamWin comprueba . Si lo entiendo correctamente, el código fuente (aquí están las partes de instalación y verificación ) de TeamWin recovery verifica que un archivo zip en su totalidad haya sido firmado usando una clave privada que corresponde a una de las claves públicas en /res/keys . Hace esto si se le indica que verifique la firma de un archivo zip firmado, que es diferente de verificar la suma de verificación md5 del archivo. En mi versión (v2.7.0.0) puedo ver una opción de "Verificación de firma de archivo zip" en la pantalla de instalación, que supongo que activa esta funcionalidad.

  • La recuperación de ClockworkMod también comprueba las firmas de los archivos zip . El código fuente (consulte el código de instalación y el código de verificación ) se comporta de manera muy similar a la de TeamWin: un archivo zip contará como verificado si está firmado con una clave privada cuya "otra mitad" pública vive en/res/keys

¿Podemos estar seguros de que las aplicaciones provienen de Google debido a esta firma? ¡Probablemente no!

  • A partir de esta entrada de blog y este documento, parece que la mayoría de las roms de recuperación tienen al menos una clave en /res/keys cuya versión privada se conoce públicamente (esa es mi inferencia basada en lo que dicen los enlaces y mi conocimiento de lo que hace el código de verificación de la rom) . Esto significa que las comprobaciones de validez son esencialmente inútiles , ya que se puede utilizar cualquier entrada de teclado/res/keys para firmar .

Si bien se verifican las firmas de los archivos APK, parece que las aplicaciones del sistema (= aplicaciones instaladas en /system/) tienen controles más relajados. Esto permite la inclusión de archivos adicionales en un archivo APK y aun así pasar las comprobaciones de verificación.

He publicado los detalles en esta página , la esencia es que el código de validación en PackageParser.java (parte de platform_frameworks_base) solo verifica los archivos enumerados en el archivo de manifiesto con el certificado en el archivo APK. Otros archivos omiten la validación.

Las imágenes de fábrica de Nexus incluyen Google Apps sin el archivo especial classes.dex(en su lugar, tienen un archivo .odex "optimizado" en un subdirectorio junto al archivo .apk). Esto significa que cualquiera podría crear un APK que contenga un classes.dexarchivo que, de hecho, sea malicioso. ¡Tenga cuidado con los archivos de fuentes no confiables!