Atestación de aplicación móvil (Mobile app attestation)
La atestación de aplicación móvil es un servicio de la plataforma que emite una declaración firmada sobre la autenticidad de una aplicación y la integridad del dispositivo donde se ejecuta, que después verifica el backend de esa aplicación. Saca la decisión de confianza del dispositivo, que es justo lo que no pueden hacer las comprobaciones de integridad del lado del cliente.
El mecanismo es una cadena de firmas que el atacante no puede falsificar. El sistema operativo, respaldado por hardware en los dispositivos modernos, produce un token que afirma que esta es la aplicación auténtica, instalada por el canal de distribución esperado, en un dispositivo que pasa las comprobaciones de integridad de la plataforma. La aplicación manda ese token con su petición, y el servidor valida la firma contra las claves públicas de la plataforma antes de decidir qué permite. Las dos plataformas grandes ofrecen un servicio así.
Es una mejora real sobre la detección de root y jailbreak, porque el veredicto se produce y se comprueba fuera del control del atacante. No es absoluto: no dice nada de un dispositivo comprometido por debajo del nivel que la plataforma puede observar, depende de servicios a los que la aplicación tiene que llegar, y deja fuera a los usuarios con dispositivos antiguos o sin soporte, lo cual es una decisión de producto tanto como de seguridad.
El fallo de implementación que encontramos es monótono. El token se pide y se manda, y el backend o bien no verifica la firma, o bien acepta un token sin comprobar que se emitió para esta petición, o bien lo verifica y sigue adelante igual porque rechazar usuarios generaba tickets de soporte. Un token reproducido desde un dispositivo limpio tapa entonces uno modificado. Igual que el certificate pinning, este es un control que el cliente cree desplegado y que el comportamiento del servidor desmiente, y por eso se comprueba directamente en las pruebas de móvil donde se comprueba que el backend verifica la atestación, no solo que está.