2010-12-27 4 views
5

Algunos programas como ProcessExplorer pueden leer cadenas en la memoria (por ejemplo, mi mensaje de error escrito en el código podría mostrarse fácilmente, aunque ya esté compilado).Evite que las cadenas almacenadas en la memoria sean leídas por otros programas

  1. Imagine si tengo una contraseña cadena "123456" asignada secuencialmente en la memoria. ¿Qué pasa si los hackers pueden obtener la contraseña escrita por el usuario? ¿Hay alguna forma de evitar que las cuerdas se vean tan claramente?

  2. Oh, sí, también, si configuro la contraseña y la envié de cliente a servidor para comparar el valor hash de la base de datos almacenada, ¿el hacker no podrá almacenar el mismo hash y volver a reproducirlo para acceder al ¿cuenta de usuario? ¿Hay alguna forma de evitar la repetición?

Thank you!

Respuesta

8

Creo que está confundiendo dos cosas. Las cadenas que ProcessExplorer encuentra también se pueden encontrar mediante el comando "strings" en Unix. Simplemente vuelca todas las cadenas almacenadas en un archivo ejecutable, no en la memoria actual.

A menos que haya compilado una contraseña de usuario en su programa, la memoria asignada para almacenar los datos no debe ser leída por ProcessExplorer.

Existen numerosos problemas que pueden ocurrir. Su mejor apuesta es asegurarse de que no se pueda ejecutar ningún otro código dentro de su espacio de proceso. Desde los días de la memoria virtual, cada proceso tiene su propio espacio de memoria virtual, idealmente impidiendo que cualquier otro programa acceda y se meta con la memoria de otros programas. Hay formas de detectar si su programa está siendo depurado.

También debe asegurarse de que la memoria que está utilizando para almacenar la contraseña nunca se escribe en el disco o se descuelga. Este sitio web puede orientarlo en la dirección correcta. https://www.securecoding.cert.org/confluence/display/seccode/MEM06-C.+Ensure+that+sensitive+data+is+not+written+out+to+disk

[editar]

quería ampliar mi anterior post hablando de prevención de la repetición.

Si realmente quiere una solución completa, deberá implementar la autenticación bidireccional utilizando un sistema PKI. Su cliente tendrá un certificado y también lo hará su servidor. La clave privada del cliente solo se podrá desbloquear con una contraseña que el usuario ingresará. Esto permitirá que el servidor verifique que el cliente es quien dice ser. El cliente verificará que el servidor es quien dice que es del mismo modo que el cliente.

Al usar este sistema, evita que alguien se posesione como servidor e intente conseguir que le envíe su contraseña.

Este es un tema que no puedo cubrir demasiado bien en este sitio web. Deberá investigar Autoridades de certificación y PKI.

Sus vulnerabilidades son entonces: 1.Alcanzando un máximo en la memoria actual para extraer la contraseña de ingeniería social 2.

Referencia: http://en.wikipedia.org/wiki/Public_key_infrastructure

+0

AFAIK, en Windows hay funciones ReadProcessMemory() y WriteProcessMemory(), que le permite leer y escribir la memoria de otro proceso. Por lo tanto, "evitar idealmente cualquier otro programa" en realidad no funciona (( – Septagram

+0

http://msdn.microsoft.com/en-us/library/ms680553%28v=vs.85%29.aspx describe la protección de permisos previos, si eso ayuda – Reinderien

0

No sé cómo se hace normalmente, pero si es crítico para usted, puede ampliar cualquier clase de cadena que use para almacenar su cadena al menos primitivamente encriptada y sobrescribirla con ceros o con datos aleatorios tras la destrucción/reasignación.

2

respuesta de Andrew le da buenos consejos para la protección de las cadenas en memoria. En lo que respecta a la repetición, tienes razón en que si alguien más intercepta la contraseña hash, puede reproducirla y poner en peligro la seguridad. La forma de vencer eso es la autenticación de desafío-respuesta: http://en.wikipedia.org/wiki/Challenge-response_authentication

Cuestiones relacionadas