java - salida - ¿Por qué la verificación de firma en el servidor remoto es más segura que en el dispositivo?
smtp hotmail (3)
La sección Controles de seguridad en la descripción general de Facturación en la aplicación indica realizar una "verificación de firma" en un servidor remoto en lugar de en la aplicación (se ejecuta localmente en el dispositivo Android):
Al realizar la verificación de la firma, puede ayudar a detectar las respuestas que han sido manipuladas o que han sido falsificadas. Puede realizar este paso de verificación de firma en su aplicación; Sin embargo, si su aplicación se conecta a un servidor remoto seguro, le recomendamos que realice la verificación de la firma en ese servidor .
Pero si realizo la verificación de la firma en el servidor remoto, esperando solo una yes/no
o true/false
, ¿no es realmente más fácil de interceptar y modificar por un atacante?
Y si la respuesta del servidor remoto es otra firma, ¿cómo es más seguro verificar la segunda firma localmente en el dispositivo que hacerlo para la primera firma (Market)?
¿Qué me estoy perdiendo?
Actualización: @alf señaló correctamente que si el servidor también es responsable de entregar el contenido comprado y la verificación de la firma se realiza en el servidor, incluso si el atacante pone en peligro la aplicación, el servidor no entregará el contenido comprado a través de la facturación integrada en la aplicación. Esto es trivial y bien entendido.
Lo que no mencioné originalmente es que en realidad me estoy refiriendo a un escenario en el cual el servidor no entrega ningún contenido sino que solo verifica la firma, de modo que la aplicación puede decidir si desbloquea ciertas características . En tal caso, ¿cuál es la ventaja de la verificación remota de firmas del servidor a través de la aplicación?
Porque tienes el control del código de verificación en el servidor. El código en el extremo del dispositivo podría haber sido comprometido.
Si no realiza la verificación de la firma en el servidor, el atacante no se molestará con su dispositivo. O, si lo desea, puede descargar su aplicación, descompilarla y simplemente eliminar la verificación. ¿Qué vas a hacer contra una aplicación modificada?
¿no es esto realmente más fácil de interceptar y modificar por un atacante?
Si está utilizando SSL para comunicarse con el servidor, no pueden interceptar y cambiar la respuesta. SSL también verifica la identidad del servidor, por lo que está seguro de que está hablando con su propio servidor, no con el del atacante.
En cuanto a por qué realizar la verificación de firma en el servidor, la idea del comentario del doc original es que si lo hace en el cliente, debe almacenar la clave pública dentro de la aplicación. El atacante podría intercambiar la clave con la suya, y las firmas generadas por el atacante verificarán que está bien. Puede evitar esto haciendo la verificación en el servidor. Sin embargo, las herramientas de cracking de la vida real, como AntiLVL , solo buscarán el bytecode que devuelve true/false
y lo modificará para que siempre sea true
.