阅读本文后,我想研究另一个类似漏洞的密码管理器。
在对文章的评论中,
Dark_Angel提出了一个问题:
那么SafeInCloud呢?
该研究是在SafeInCloud v.19.0.2的免费Windows版本上进行的
当我第一次遇到产品时,他给我留下了很好的印象。
但是,进一步的研究揭示了完全相同的漏洞。
与1Password不同,SafeInCloud即使在锁定状态(首次解锁后)也以
明文形式存储
您的所有密码 。
要从数据库获取密码,只需读取应用程序内存。 完全没有数据
混淆 ! 首次成功解锁数据库后,即使用户锁定了主密码(以及所有其他密码和条目)也不会被覆盖。
在以下情况下,您的密码可能会泄漏:
+在任何软件中发送错误报告。 开发人员通常会出于调试目的转储所有应用程序的内存。
+如果您使用计算机,不仅您自己。
+在物理上访问攻击者的计算机时。
+启动恶意软件时。
+内存内容可能会交换。
+其他...
Windows应用程序是用.net编写的,这大大简化了对源代码的分析。

该应用程序是用.net编写的
成功解密数据库(XDatabase)后,已解密的数据库和主密码将另存为DatabaseModel类的Singleton实例中的类字段。

使用数据库和数据库的主密码设置字段
即使用户锁定了应用程序,所有条目和密码也以清晰的形式存储在内存中。 主密码位于旁边。

密码存储在Password属性中,_database是XDatabase类的一个字段,其中包含解密的数据库。
XML格式的数据库。重新解锁应用程序时,将执行基本检查:

如果用户输入的密码与存储器中存储的密码匹配,则解锁完成。
编写了一个简单的
SafeInCloudExtractor实用程序,以自动提取主密码。
该实用程序提取主密码和数据库文件的本地路径。
您使用什么密码管理器? 写评论!
更新 报告问题后,SiC的作者非常否定了批评(受到侮辱)。 在用户的压力下,发布了具有“针对黑客的保护”功能的Beta版。 也就是说,受到SafeInCloudExtractor实用程序的保护。 看来问题已解决! 密码从内存中清除。 但是,事实并非如此,这就是原因:
SiC的更新版本还将所有密码存储在内存中。 为了使代码分析复杂化,应用了混淆器+添加了IsDebuggerPresent检查。 密码以明文形式存储在内存中并进行存储。 看来作者不知道该抗辩。 不能解决问题,但禁用了PoC。 作者很可能不具备开发与安全相关的软件的必要资格和知识。 保持警惕!