¿Puede el almacenamiento de un secreto en el cliente considerarse seguridad "suficientemente buena"?

1

He pasado la mayor parte de las 2 semanas buscando una solución para asegurar mi juego. Es un juego para Android / iOS que tiene su propio servidor / base de datos.

Hasta ahora, la única seguridad que tengo son las contraseñas de sal + hash. Pero cualquiera puede llamar a mi API.

Así que quise cambiar esto, una solución que encontré que es muy simple es hacer un hash de mi consulta cuando llamo a mi API usando un secreto que está almacenado tanto en el cliente como en el servidor. Por supuesto, esto significa que si alguien descompila mi aplicación, puede acceder a mi API.

En el peor de los casos, pueden darse una versión premium gratuita de mi juego ($ 4) y aumentar su propio rango (que vería, y solo eliminar al usuario). Estoy de acuerdo con eso, se convertiría en un problema si pudieran hacerlo para cualquier usuario, pero eso debería ser imposible.

En mi opinión, la solución está bien para este modelo de amenaza, si quieren pasar por todos esos problemas solo para ahorrar $ 4, estoy de acuerdo con eso.

¿Alguien con más experiencia ve una falla en mi enfoque? Si es lo suficientemente bueno, ¿cuál es una buena manera de ocultar el secreto en mi cliente?

Referencia: Respuesta con speedplane Aquí

    
pregunta Green_qaue 21.03.2017 - 14:14
fuente

2 respuestas

1

La clave para tales preguntas es tener un modelo de amenaza. En un modelo de amenaza, usted captura qué capacidades tiene su amenaza y qué es lo que quieren hacer. Luego puede equilibrarlo con sus costos.

Parece que has ido por ese camino correctamente. Ha identificado que el atacante puede estar dispuesto a desensamblar el código para obtener un secreto compartido. Ha identificado que el costo es de $ 4 o la posibilidad de gastar un poco de trabajo borrando una cuenta de usuario en su servidor. El saldo depende de ti.

Considera que, en el caso del juego de consola DRM, todo lo que pueden hacer es incrustar el secreto. Se han vuelto bastante inteligentes al respecto. Un caso famoso fue Spiro el Dragón, que tenía muchos elementos de DRM. Algunos fueron fáciles de detectar y se agrietaron inmediatamente. Otros eran más sutiles. Algunos solo establecerían una bandera en algún lugar que se verificara 3 niveles más tarde. Si se estableciera la bandera, el mapa no tendría huevos (un elemento esencial para avanzar al siguiente nivel).

Spiro finalmente se rompió completamente. Cuando finalmente lo hicieron, los crackers en realidad agradecieron al equipo de desarrollo por darles un desafío tan interesante. El DRM fue considerado un éxito completo. ¿Por qué? Los crackers tardaron más de 2 meses en conseguir finalmente todas las grietas en su lugar. Para los juegos de consola, la mayoría de las compras del juego se realizan en los primeros 2 meses, por lo que la comunidad de piratería no tuvo un impacto negativo en las ventas durante ese período clave.

    
respondido por el Cort Ammon 20.06.2017 - 06:31
fuente
0

Para la parte 1 de tu pregunta, no sé mucho de los aspectos técnicos del desarrollo de Android, pero muchos juegos se pusieron en línea para reducir la piratería. Si hay una comunidad en línea (tus puntajes altos, por ejemplo, se muestran), puedes prohibir a los usuarios de tu comunidad que estén pirateando tus cosas. Los juegos sin conexión para un solo jugador son todavía muy piratables y, por lo general, dependen de buena fe.

Para la parte 2 de su pregunta, sobre cómo asegurar sus puntajes altos: enlace

    
respondido por el daniel 21.03.2017 - 14:31
fuente

Lea otras preguntas en las etiquetas