Manteniendo segura una contraseña en la configuración del programa

2

Tengo un servicio de Windows que se conecta a una base de datos para sondear un valor con el fin de monitorear cierta actividad.

Por supuesto, para usar esto necesito una contraseña de base de datos. Necesito mantener esta contraseña segura, ya que, por supuesto, no se supone que sea de conocimiento general. Para hacer esto, he desarrollado un simple cifrado XOR y he almacenado el texto cifrado en el archivo de configuración. La clave que he usado para el cifrado por ahora se ha codificado en el servicio.

Por supuesto, esta codificación no es ideal, ya que alguien puede desensamblar el archivo .exe y ver tanto la clave como el cifrado.

No espero que la mayoría de las personas sean capaces de hacer esto, pero creo que es mejor mitigar el riesgo cuando sea posible. Entonces, ¿hay tal vez un mejor enfoque para este problema?

Sé que siempre es mejor usar una solución existente cuando sea posible, pero no pude encontrar nada específicamente que funcionara en este caso. Miré la API de protección de datos de Windows, pero por lo que pude ver, solo funcionó en una instancia de una aplicación. No me permitiría almacenar el texto cifrado en un archivo y acceder a él más tarde.

    
pregunta Luke 29.09.2015 - 11:09
fuente

1 respuesta

2

Si la contraseña se utilizará y almacenará de alguna manera en un cliente que no sea de confianza, entonces no hay una forma real de protegerla. Estaría en la memoria en el punto de uso y también podría ser detectado por un MITM que suplantará al servidor.

Una mejor solución sería tener una API web remota con acceso de lectura a la tabla de la base de datos que contenga el valor que se debe monitorear.

El servicio de Windows luego consulta la API web. Si los datos son confidenciales, es prudente asegurar este servicio con algún tipo de autenticación y protegerlo en tránsito mediante TLS. Sin embargo, el punto principal es que si un cliente descubre las credenciales de la API, lo peor que podrían hacer sería consultar el valor que se devuelve, que es lo que hace el servicio de Windows de todos modos. Es decir, no tendrán acceso para leer otras tablas o para escribir en el servidor de la base de datos. La API solo expondrá la única función, y la API en sí misma solo tendrá los permisos mínimos necesarios.

    
respondido por el SilverlightFox 29.09.2015 - 11:44
fuente

Lea otras preguntas en las etiquetas