Esta pregunta trata de intentar comprender los riesgos de seguridad involucrados en la implementación de oauth en una plataforma móvil como Android. La suposición aquí es que tenemos una aplicación de Android que tiene la clave/secreto del consumidor incrustado en el código.¿Cómo mantener el secreto del consumidor de OAuth seguro, y cómo reaccionar cuando está en peligro?
Suponiendo que un secreto del consumidor se ha visto comprometido, y un hacker lo ha conseguido, ¿cuáles son las consecuencias de esto?
supuestosSecret Consumidor comprometida
Estoy en lo correcto al afirmar que un secreto del consumidor comprometido, como tal, no tiene ningún efecto sobre la seguridad del usuario, o los datos almacenados en el proveedor OAuth permitido que el usuario estaba interactuando con. Los datos en sí no están comprometidos y no pueden ser recuperados por el pirata informático.
El pirata informático necesitaría obtener un token de acceso de usuario válido, y eso es mucho más difícil de conseguir.
¿Qué podría hacer un hacker con un secreto de consumidor comprometido?
también soy yo razón al afirmar lo siguiente:
- El hacker puede instalar/publicar una aplicación que imita mi aplicación.
- El hacker puede atraer a los usuarios que irán a través del flujo de OAuth, recuperar un token de acceso a través de la hackers OAuth danza (utilizando la clave comprometida consumidor /secreta).
- El usuario puede pensar que está tratando con mi aplicación, ya que él verá un nombre familiar (clave de consumidor) durante el proceso de autorización.
- Cuando un consumidor emite una solicitud a través de el hacker, el hacker puede fácilmente interceptar el token de acceso, y combinado con el secreto consumidor puede ahora firmar peticiones en mi nombre a a acceder a mis recursos.
impacto para el usuario final
En el supuesto de que
- un hacker tiene la configuración de un/ sitio de aplicación usando mi consumo secreta
- uno de mis usuarios fue enganado al autorizar acceso a esa aplicación/sitio
El followin g puede ocurrir:
- el usuario final puede ser darse cuenta de que algo raro está pasando, e informar al proveedor de servicios (por ejemplo: Google) acerca de la aplicación maliciosa
- el proveedor de servicios puede entonces revocar la clave del consumidor tendría que ser actualizado
mi aplicación (que contiene el secreto de consumidor), como de lo contrario todos mis clientes no serían capaces de autorizar a mi solicitud hacerlo en preguntas:/secreta
consumidor de OAuth (mi solicitud) impacto en su nombre más (ya que mi secreto de consumidor ya no sería válido).
La delegación de todo el tráfico de OAuth
Aunque sería posible delegar muchas de las interacciones de OAuth a través de un servidor web intermedio (haciendo la danza OAuth y el envío de la señal de acceso para el usuario), uno tendría que proxy de todo interacciones de servicio también, ya que se requiere la clave/secreto del consumidor para firmar cada solicitud. ¿Es esta la única forma de mantener la clave/secreto del consumidor fuera de la aplicación móvil y almacenada en un lugar más seguro en el servidor web intermedio?
Alternativas
¿Hay alternativas para esta delegación? ¿Es posible almacenar el secreto del consumidor en el servidor web intermedio y tener algún tipo de mecanismo para que la aplicación de Android (publicada en el mercado y debidamente firmada) pueda realizar una solicitud segura al servidor web intermedio para buscar el secreto del consumidor y almacenarlo? internamente en la aplicación? ¿Se puede implementar un mecanismo para que el servidor web intermedio "sepa" que se trata de una aplicación oficial de Android que solicita el secreto del consumidor, y que el servidor web intermedio solo distribuirá el secreto del consumidor a esa aplicación particular de Android?
He editado la pregunta un poco. Quiero asegurarme de que las suposiciones que hago en la pregunta sean correctas. Tampoco quiero evitar los inconvenientes para los usuarios. Entonces veo 2 opciones. 1. Solo corra el riesgo, mantenga el secreto en el código y ofusque. o 2. hacer el proxy y mantener el secreto en el servidor web donde estoy bastante seguro de que no se verá comprometido. ¿Es esa una conclusión justa? – ddewaele
¡Muchas gracias por la respuesta actualizada! – ddewaele
Tengo una pregunta sobre esto. ¿Por qué dices que es imposible ver que la llamada del código es la que escribiste? ¿No podría simplemente enviar un token que está vinculado a la firma de su aplicación, que a su vez está vinculada a su certificado? Solo sus aplicaciones están firmadas con su certificado y este archivo se mantiene privado de todos modos. – PSIXO