防止存储在内存中的字符串被其他程序读取

Roy*_*Roy 6 c++ security string

像ProcessExplorer这样的程序能够读取内存中的字符串(例如,我可以很容易地显示在代码中编写的错误消息,即使它已经编译过).

  1. 想象一下,如果我在内存中按顺序分配了密码字符串"123456".如果黑客能够获取用户输入的密码怎么办?反正有没有阻止字符串被清楚地看到?

  2. 哦,是的,如果我将密码哈希并从客户端发送到服务器以比较存储的数据库哈希值,黑客是否能够存储相同的哈希值并重播它以获得对用户帐户的访问权限?反正有没有阻止重播?

谢谢!

And*_*ell 8

我相信你会混淆两件事.ProcessExplorer发现的字符串也可以通过Unix中的"strings"命令找到.它只是将所有存储的字符串转储到可执行文件而不是当前内存中.

除非您将用户密码编译到程序中,否则ProcessExplorer不应读取分配用于存储数据的内存.

可能会出现许多问题.您最好的办法是确保在您的流程空间内不能运行任何其他代码.从虚拟内存时代开始,每个进程都有自己的虚拟内存空间,理想情况下阻止任何其他程序访问和搞乱其他程序的内存.有一些方法可以检测您的程序是否正在调试.

您还需要确保用于存储密码的内存永远不会写入磁盘或被分页.该网站可以为您指明正确的方向.https://www.securecoding.cert.org/confluence/display/seccode/MEM06-C.+Ensure+that+sensitive+data+is+not+written+out+to+disk

[编辑]

我想通过谈论重播预防来扩展我以前的帖子.

如果您真的认真对待完整的解决方案,则需要使用PKI系统实现双向身份验证.您的客户将拥有证书,您的服务器也将拥有证书.客户端的私钥只能通过用户输入的密码解锁.这将允许服务器验证客户端是否是他所说的人.然后,客户端将验证服务器是谁,他说他与客户端的方式相同.

通过使用此系统,您可以防止某人作为服务器,并尝试让您向其发送密码.

这是我在这个网站上无法涵盖的主题.您需要研究证书颁发机构和PKI.

您的漏洞是:1.进入当前内存以提取密码2.社交工程

参考:http://en.wikipedia.org/wiki/Public_key_infrastructure