Estoy viendo la comunicación entre nuestra aplicación móvil iOS / Android por un lado, y nuestra API de servicios web RESTful por el otro. Desde el lado del servidor, tengo que asumir que todo lo que recibo es sospechoso. Supongo que la aplicación móvil podría haber sido modificada mediante ingeniería inversa, con claves secretas / privadas recolectadas, etc.
Suponiendo que estamos haciendo correctamente la comunicación con clave simétrica protegida por HMAC, cuando recibo, autentico y descifro un mensaje cifrado, sé que el mensaje fue enviado por alguien que posee nuestra clave secreta compartida.
Por supuesto, este mensaje podría provenir de un atacante que haya obtenido esa clave secreta.
Me pregunto si hay un protocolo formal o una mejor práctica en el área de administración de claves que aborda este problema: como receptor, ¿puedo detectar que el secreto compartido está o puede haber sido comprometido? Creo que la respuesta es que No, no existe tal solución "fácil". ¡Pero si hay una respuesta, me gustaría saberlo!
Sospecho que no hay respuesta en el área de administración de claves. Esto es realmente "¿Cómo autentico el remitente del mensaje, cuando el remitente es nuestra aplicación móvil descargada de la tienda de aplicaciones?"
Mantener las firmas válidas después de privado compromiso clave discute la incrustación de una marca de tiempo segura de un proveedor de marca de tiempo de terceros confiable. No creo que eso ayude, cuando asumo que el atacante puede hacer cualquier cosa que la aplicación móvil comprometida pueda hacer. Esa es la naturaleza de los servicios web.
INFORMACIÓN ADICIONAL
Después de observar a los atacantes de nuestra API de servicios web, busco formas de mejorar nuestra arquitectura de seguridad. ¡No quiero preguntar algo tan vago como para ser inútil!
Aquí está nuestra situación como la entiendo. Estamos ansiosos por recibir recomendaciones.
Tenemos un sitio web de tráfico relativamente alto (el top 1.500 según el ranking de Alexis USA) que ha existido por muchos años. Eso significa que tenemos una gran experiencia en la protección del tráfico de atacantes y sitios web "normales".
Hemos encontrado que las API REST que se conectan a nuestra aplicación móvil son un escenario completamente diferente. Es muy probable que no esté haciendo las preguntas correctas. ¡Todavía no entiendo realmente el espacio del problema!
Todo el tráfico de API está sobre HTTPS. Confío en que la seguridad de la capa de transporte sea correcta porque forma parte de nuestra experiencia "regular" en el sitio web.
Nuestro atacante utiliza correctamente los servicios web con tokens de autenticación correctos, etc. Hasta ese momento (el punto de observar ese conjunto particular de ataques), nuestro tráfico de API es texto simple a través de HTTPS. Tenemos aplicaciones móviles para iOS y Android en las tiendas Apple y Google Play. El desarrollo de aplicaciones móviles está bajo nuestro control.
A partir de esto, llegamos a la conclusión de que nuestro atacante pudo observar el tráfico de nuestra aplicación móvil de texto simple a través de HTTPS. O que nuestro atacante diseñó a la inversa nuestra aplicación móvil (que es menos probable dado el alto nivel de habilidad necesario).
Por lo tanto, creo que los lugares que necesitamos mejorar:
-
Comunicación más segura entre nuestros servicios web y nuestras aplicaciones móviles.
-
Proteja mejor nuestro sitio (servidor) del ataque a través de los servicios web.
Odio hacer una pregunta tan abierta, pero ¿puedo obtener consejos / referencias sobre cómo realizar estas mejoras de seguridad? He hecho varias preguntas y he recibido excelentes consejos durante la semana pasada, ¡pero eso no significa que todavía entienda completamente el espacio del problema!