Almacene un secreto en una computadora con Windows para que ni siquiera un administrador pueda acceder a él

1

Estoy buscando una manera de almacenar un secreto en una computadora con Windows para que ni siquiera el administrador pueda acceder a él.

Pero los ejecutables que están firmados con un certificado de firma de código específico deben poder acceder a ese secreto sin la interacción del usuario.

Estaba pensando en usar el siguiente enfoque:

  • Crea un nuevo usuario de Windows "SecretKeeper" con una contraseña aleatoria que ningún usuario conoce.
  • Instale un servicio de Windows que se ejecuta bajo la cuenta de usuario de SecretKeeper. (Windows puede iniciar el servicio automáticamente sin que nadie más sepa la contraseña de SecretKeeper)
  • Dé el secreto a ese Servicio, haga que almacene el archivo en el sistema de archivos y lo cifre utilizando la API de cifrado de archivos de Windows (de modo que solo ese usuario específico SecretKeeper puede leer el archivo)
  • Cuando una aplicación necesita el secreto, puede comunicarse con el servicio de manera que el servicio pueda verificar la firma del código del ejecutable antes de enviar el secreto.

El problema con este enfoque es que un administrador puede intercambiar el ejecutable del servicio con su propio ejecutable que luego comienza a ejecutarse como SecretKeeper y puede descifrar el archivo.

¿Hay alguna forma de asegurarse de que el administrador de un servicio de Windows instalado no sea intercambiado ni siquiera por el administrador o tal vez haya un enfoque completamente diferente para lograr el objetivo de ocultar un secreto incluso del administrador?

Nota: soy consciente de que un administrador local de una computadora con Windows tiene otros medios para acceder a la memoria de proceso de los procesos en ejecución o ver la comunicación entre procesos y que tendría que haber otros mecanismos para evitarlo.

Esta pregunta es similar a las siguientes preguntas:

pregunta NineBerry 15.02.2018 - 11:46
fuente

2 respuestas

1

Para ser honesto, probablemente ese no sea el punto más débil de tu esquema. Si yo fuera el administrador que intentaba obtener el secreto, todo lo que haría sería descompilar la aplicación que está solicitando el secreto (para ver cómo lo hace), y simplemente construir un archivo .exe rápido que se pregunta cortésmente. Su servicio para el secreto. Quiero decir, tu guardián secreto no tiene ninguna manera de saber si la aplicación que solicita el secreto está autorizada para tenerlo.

Creo que la respuesta corta es: realmente no puedes hacer lo que estás pidiendo.

    
respondido por el Kevin 15.02.2018 - 16:07
fuente
0

Contraseñas de semillas

El enfoque que usaría (dado el conocimiento apropiado) sería cifrar sus datos usando un valor semilla que personalmente conozca y nunca escriba.

Esencialmente, necesitarías saber la palabra, frase o cadena aleatoria de valores / caracteres que se utilizaron originalmente para codificar los datos para decodificarlos, por lo que tu aplicación de mantenimiento de secretos es completamente inútil sin esos datos, incluso si el administrador tiene acceso completo al código y puede descompilar y recompilar a voluntad.

Esto es sustancialmente diferente de un sistema protegido por contraseña en que la codificación no es común en todos los archivos protegidos y la contraseña no tiene que ser almacenada en ningún lugar excepto en su propia cabeza. Esto no es un sistema de permisos, esto es, literalmente, una parte integral del proceso de decodificación de sus datos.

La única forma de evitarlo sería mediante la fuerza bruta, decodificación de los datos en bruto (¡buena suerte con eso!) o el registro clave de la entrada del valor semilla cuando esté en uso.

Para una seguridad casi perfecta, mantenga su aplicación de codificación en un dispositivo externo seguro para que el administrador no tenga fácil acceso a la herramienta, solo los archivos encriptados producidos. Lo conectaría, el dispositivo externo aceptaría su archivo de entrada y lo codificaría / decodificaría usando una semilla de cifrado que ingresa en un teclado (que no se comunica con la computadora comprometida) antes de que salga el archivo cifrado o descifrado. la máquina de alojamiento.

Este enfoque es prácticamente solo vulnerable a ataques de ingeniería social / física donde el atacante obtiene el control físico del dispositivo de encriptación y le obliga a decirle la contraseña.

    
respondido por el Ruadhan2300 30.08.2018 - 13:49
fuente

Lea otras preguntas en las etiquetas