¿Las gapps (por ejemplo, de goo.im) están firmadas de forma que se evite su manipulación? ¿Hay alguna forma de verificar que son las mismas que se obtienen de Google?
¿Todas / la mayoría de las ROMs comprueban esto?
¿Las gapps (por ejemplo, de goo.im) están firmadas de forma que se evite su manipulación? ¿Hay alguna forma de verificar que son las mismas que se obtienen de Google?
¿Todas / la mayoría de las ROMs comprueban esto?
Todas las aplicaciones de Android están firmadas.
Android no ejecutará una aplicación no firmada. Además, las firmas están ligadas a los permisos de la app, de manera que si la firma fuera incorrecta, otras apps no podrían hablar con ella, y no podrías recibir actualizaciones de la misma desde Google Play.
La firma de Android se trata con más profundidad en Firmar sus solicitudes en la documentación para desarrolladores de Android, de la que se extrajo la información anterior.
Si eres paranoico y quieres verificar la firma de una aplicación puede utilizar el jarsigner
incluida en el Kit de desarrollo de Java (JDK) . Por ejemplo:
jarsigner -verify -verbose -certs Vending.apk
La página a la que haces referencia dice "Android utiliza este certificado para identificar al autor de una aplicación, y el certificado no necesita ser firmado por una autoridad de certificación. Las aplicaciones de Android suelen utilizar certificados autofirmados". ¿No significa esto que, aunque Android verificará que la aplicación está firmada, no le importará quién la ha firmado? Eso significaría que no tenemos ninguna protección contra una aplicación maliciosa a menos que comprobemos de alguna manera que las gapps que recibimos están firmadas por Google. Esta respuesta parece pasar por alto algunos pasos de comprobación MUY necesarios. ¿Me estoy perdiendo algo?
@stochastic Como la página también menciones, las actualizaciones deben ser firmadas con exactamente la misma llave o Android se negará a instalar la actualización. No importa que la clave no haya sido firmada por una CA, solo que sea la misma que se utilizó originalmente para firmar la aplicación.
Gracias por señalarlo. Sin embargo, ¿esto no supone todavía que hay es una aplicación existente con el mismo nombre? Cuando se instala a través de, digamos, Google Play, eso está bien, pero cuando se instala un archivo zip de gapps a través de una rom de recuperación es totalmente posible que las gapps simplemente no estén presentes todavía (que es la razón por la que se están instalando de esta manera), así que ¿no habría una vulnerabilidad real si no hacemos algún tipo de comprobación de claves manualmente? Además, mientras el sistema Android hace la comprobación que describes, ¿significa eso que una rom de recuperación realizará la misma comprobación?
Si tienes tus gapps de goo.im
Si no lo hace, podría comprobar manualmente si la suma MD5 del archivo .zip que ha descargado es correcta. Esto le asegurará que el archivo no ha sido manipulado.
Si se flashea a través de ClockworkMod Recovery, existe esta opción: install zip from sdcard > toggle signature verification
.
No creo que la verificación de firmas zip compruebe que las aplicaciones (u otros contenidos) dentro de Sin embargo, sólo comprueba que el propio archivo zip esté firmado. Del mismo modo, comprobar el md5 del zip no demuestra nada sobre las aplicaciones que contiene, a menos que crees tu propio zip flasheable con copias buenas conocidas de las mismas versiones de las mismas aplicaciones y luego md5 ambos (pero entonces, ¿por qué lo descargarías? 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:
Todo esto no significa que una consola de recuperación como TeamWin o ClockworkMod recovery compruebe correctamente las firmas de estas claves, ni que una rom sea de Google sólo porque alguien lo firmó correctamente.
¿Las roms comunes comprueban las firmas de los archivos zip? Sí, lo hacen
Afortunadamente, parece que La recuperación de TeamWin comprueba . Si lo entiendo bien, el código fuente (aquí están los instalación y verificación portions) de la recuperación de TeamWin comprueba que un archivo zip en su totalidad ha sido firmado utilizando una clave privada que corresponde a una de las claves públicas en /res/keys. Lo hace si se le indica que verifique la firma de un archivo zip firmado, lo que es diferente de comprobar la suma de comprobación md5 del archivo. En mi versión (v2.7.0.0) puedo ver una opción de "Verificación de la firma del 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 (véase el código del instalador y el código de verificación ) se comporta de forma 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 proceden de Google gracias a esta firma? Probablemente no.
/res/keys
puede utilizarse para firmar .Mientras se comprueban las firmas de los archivos APK, parece que las aplicaciones del sistema (= aplicaciones instaladas a /system/
) tienen controles más relajados. Esto permite incluir archivos adicionales en un archivo APK y seguir pasando 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) sólo comprueba los archivos enumerados en el archivo de manifiesto con el certificado del archivo APK. El resto de los archivos evitan la validación.
Las imágenes de fábrica de los Nexus incluyen Google Apps sin el 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.dex
archivo que en realidad es malicioso. Tenga cuidado con los archivos procedentes de fuentes no fiables.
PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.