2011-02-02 18 views
5

Estoy escribiendo una aplicación .NET (C#) de Windows para almacenar contraseñas de usuario en ella, como keypass, LastPass, etc. roboformsPráctica común en relación con las contraseñas en la memoria

para procesar los datos de usuario que tengo que mantenerlo en memoria esta información también contiene Contraseñas del usuario.

Ahora mis preguntas son:

  1. Puede alguien leer los datos de la memoria utilizando alguna herramienta o volcado de memoria?
  2. En caso afirmativo, ¿cómo? ¿Alguien puede compartir esa herramienta? Intenté con las aplicaciones CurrProcess, HeapViewer, ProcessExplorer y ProcessView, pero no puedo encontrar ningún dato privado en el volcado de memoria,
  3. . Debo aprender algo más para garantizar la protección de las contraseñas en memoria.

Gracias

Respuesta

3

Sí, existen herramientas que capturan toda la memoria física (y el archivo de paginación) para una mayor investigación. Se llaman "forenses" y puede encontrarlos agregando esta palabra clave a sus búsquedas. Si desea capturar memoria en su código (es decir, escriba ese programa usted mismo), esto es posible utilizando nuestro producto RawDisk.

En cuanto a la protección de sus contraseñas, Kobi mencionó la clase SecureString, que se supone que almacena cadenas de manera segura en la memoria. Si bien esta clase no es 100% de protección (la contraseña se descifra de todos modos cuando la usa), pero hace que la captura de contraseñas sea mucho menos probable.

8

Tiene usted razón en sus preocupaciones, las cadenas en la memoria no son seguros.
Probablemente estés buscando la clase SecureString.

1

Sugiero que explore el código fuente de Keepass (versión 2.xx). Está escrito en .NET y trata los mismos problemas que le preocupan.

1

Mi experiencia es limitada en la seguridad, pero espero que esto será atento

  1. Sí, es posible
  2. Puede utilizar WinDbg + SOS para conseguir casi cualquier cosa que desee de la representación interna del objeto
  3. Hay una clase especial llamada SecureString en BCL que se ajusta a sus necesidades.
5

Si le preocupa que alguien espíe la memoria RAM para buscar contraseñas, entonces tiene más problemas importantes. Si un usuario malintencionado tiene acceso a la memoria RAM, es trivial dejar caer un keylogger en la máquina, o pasar por alto el lugar donde se utilizan las teclas en el software, o interceptar las claves una vez que se descifran. etc, etc.

La regla general es, si alguien tiene acceso a la máquina, entonces su juego en cuanto a la seguridad.

+2

-1 Primero, esto no responde la pregunta del OP de ninguna manera y su escenario es solo posible. Todavía puede haber un error en la aplicación que permite a un atacante leer la memoria (aleatoria). SecureString es perfectamente válido para un caso así, ya que puede liberarlo tan pronto como no necesite el objeto. Con cadenas, no puedes. Otros casos pueden ser información sensible, como la información de la tarjeta de crédito, cuando la página web o la aplicación fallan y se crea un volcado de memoria (es decir, el sistema operativo falla y envía el volcado para que el desarrollador lo rastree).con cadena, ahora también envió información muy sensible lejos – Tseng

+0

@Tseng. El interrogador preguntó cómo puede proteger la contraseña de alguien que usa herramientas que acceden directamente a la memoria. Mi respuesta (que defiendo) dice que si un atacante puede acceder a la memoria, entonces no hay nada que puedas hacer. La cadena segura puede ayudar en algunos casos raros, pero absolutamente no resuelve el problema. En su escenario, el volcado de memoria podría tomarse cuando la información confidencial está en texto sin formato. – PaulG

+0

"1. ¿Alguien puede leer los Datos de memoria usando alguna herramienta o ** volcado de memoria **?" incluye explícitamente volcados de memoria, que también pueden ocurrir cuando su sistema operativo falla y se envía – Tseng

Cuestiones relacionadas