黑客是如何利用所谓的“进程内存转储”偷密码的?

2017-06-24 18:16:45 +08:00
 guyeuro

网上说密码要用 char[]而不是 String 储存的原因是:

虽然 String 加载密码之后可以把这个变量扔掉,但是字符串并不会马上被 GC 回收,一但进程在 GC 执行到这个字符串之前被 dump,dump 出的的转储中就会含有这个明文的字符串。

这个黑客是如何利用所谓的“进程内存转储”偷密码啊? 感觉不可思议啊

3060 次点击
所在节点    问与答
27 条回复
nevin47
2017-06-24 22:29:28 +08:00
@geelaw 核心那个密钥拆分成片,使用时不做拼接,实时连续读取
@gamexg
是的,如果最后传递给加密库,那确实成了一个连续的了,所以有时候考虑自己去定制实现加密算法
guyeuro
2017-06-24 23:06:50 +08:00
@wevsty 我问的不是为何要用 char[],而是说就算密码明文在内存里
黑客怎么拿到的?
lcdtyph
2017-06-24 23:23:30 +08:00
@guyeuro
OpenProcess ReadProcessMemory
可以远程遍历完整性级别比你低的进程的内存
xenme
2017-06-24 23:44:37 +08:00
默认情况下不管是 char[]还是 string 在内存中对于你要这种短小的内容来说基本都是连续分布,没有特别保护。。
所以攻击的时候很容易通过遍历内存来攻击,也就是直接 dump 后扫一遍可能就扫出来了。。
而一般的处理是对于这些敏感的内容使用流式处理,使用过程中经过处理,使用后立即清理来尽可能的减少明文存在的时间。

但是你只要输入或者输出需要使用到明文,那么必然会有一个时刻可以看到明文,如果此时 dump 出来,那么依然可以被攻击。
mengskysama
2017-06-25 01:21:23 +08:00
@guyeuro 黑客既然能 dump 内存基本上应该就是有很高的权限了,有些工具更甚,密码常驻内存
感兴趣可以看看这个 https://github.com/huntergregal/mimipenguin
guyeuro
2017-06-25 10:34:12 +08:00
@xenme 那么黑客是如何远程遍历服务器内存的?
xenme
2017-06-25 13:38:15 +08:00
@guyeuro 还要远程的话基本就是漏洞了啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370806

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX