Tengo una base de datos de puntaje alto en mi servidor web, comunicándome a través de https.
¿Puede un jugador malintencionado ver el contenido sin cifrar de la solicitud POST, o ya está cifrado antes de que tenga la oportunidad de verlo?
Si el jugador puede instalar un nuevo certificado raíz en su computadora en el que su juego confíe, puede usar mitmproxy o algún otro proxy de interceptación de HTTPS para observar cualquier comunicación entre su juego y el servidor.
Básicamente, la forma en que funcionan estos proxies es que pretenden ser el servidor al que su juego (o un navegador) intenta conectarse, y pueden hacerlo presentando un certificado generado dinámicamente que lo dice, firmado por el propio certificado raíz del proxy. Obviamente, para que esto funcione, el usuario debe decirle a su sistema (y específicamente a Unity) que confíe en este certificado raíz personalizado. Pero si pueden hacer eso, entonces Unity aceptará felizmente la afirmación del proxy de que es su servidor, ya que ve un certificado firmado válido que lo dice.
No sé lo suficiente sobre la implementación de HTTPS de Unity para decir con certeza si es posible agregar certificados raíz personalizados como ese. Pero, en ausencia de un conocimiento cierto de que no lo es, asumiría que lo más probable es que lo sea. En particular, si Unity solo delega la administración de certificados a su sistema operativo, entonces agregar el certificado raíz personalizado a la lista de raíces confiables del sistema operativo (lo que generalmente puede hacer cualquier usuario con privilegios de administrador) hará que Unity también confíe en él.
Es posible que pueda evitar este ataque implementando algún tipo de fijación de certificados , de modo que su juego sepa cómo se supone que debe ser el certificado del servidor legítimo y se niegue a comunicarse con un servidor que presenta algún otro certificado, incluso si está firmado por lo que el sistema operativo del usuario considera una raíz de confianza. Pero eso puede no ser trivial de configurar.
(Además, incluso si puede evitar este ataque en particular, el jugador aún podría interceptar sus datos antes de que se envíen a través de HTTPS, por ejemplo, adjuntando un depurador a su juego o parcheando la API de Unity utilizada para transmitir los datos algunos En general, es muy difícil evitar que un usuario lo suficientemente capacitado y motivado descubra lo que hace su software siempre que se esté ejecutando en su computadora).