密码管理器是一种用于存储密码的工具,它允许用户在加密的数据库中保存和提取敏感信息。许多用户依赖密码管理器来提供更好的安全保护。然而,研究人员发现在多个运行Windows 10的密码管理器中存在安全问题。
在本文中,我们将研究的所有密码管理器都以相似的方式工作。用户可以在软件中输入或生成密码,并添加相关的元数据。这些信息会被加密,并且只有在需要显示时才会解密,例如传递给浏览器进行密码自动填充或复制到剪贴板。密码管理器有三种不同的状态:未运行、解锁运行和锁定运行。我们假设用户没有对密码管理器进行其他加密,例如全盘加密或进程加密。未运行状态指的是密码管理器在安装、配置和交互后,自上次机器重启或用户中止进程后没有再次启动。解锁运行状态表示密码管理器正在运行,用户需要输入主密码来解密和访问保存在管理器中的密码。用户可以通过展示、复制到剪贴板或其他方式来访问密码。锁定运行状态表示:(1)密码管理器已启动,但用户尚未输入主密码;(2)用户之前输入了主密码并使用过密码管理器,但随后点击了锁定或退出。
对于未运行状态的密码管理器,研究人员首先分析了它们的安全性。首先,他们研究了不同密码管理器用于将主密码转化为加密密钥的算法。根据NIST的建议,研究人员认为每个密码管理器使用的密钥扩展算法和循环轮数都是可接受的。因此,研究人员认为这些密码管理器在未运行状态下是安全的,使用暴力破解方法破解硬盘中的加密密码记录是计算上不可行的。
表2显示了密码管理器默认配置中使用的密钥扩展算法和循环轮数。
对于运行状态的密码管理器,我们将分别对以下密码管理器进行安全评估:
- 1Password4(版本:4.6.2.626):研究人员发现1Password4在锁定状态下对密码泄露有适当的保护,但在处理主密码和处理从解锁到锁定状态的转换时存在问题。在正面角度来看,软件会在加载另一个密码之前清除未加密的密码,也就是说每次内存中只有一个未加密的密码。但从负面角度来看,在解锁状态下,主密码仍然存在于内存中,并且在从解锁到锁定状态转换时没有擦除混淆的密码内存区域。此外,研究人员还发现一个bug,即在锁定状态下,用户的特定动作会导致主密码以明文形式留在内存中。
- 1Password7(版本:7.2.576):研究人员发现1Password7在运行状态下的安全性不如1Password4。在测试数据库中,研究人员利用1Password7的内存信息解密了所有的密码记录。此外,1Password7在从解锁到锁定状态的转换时不会擦除密码、主密码和密钥。用户必须在解锁后尽快退出软件以清除内存中的敏感信息。
- Dashlane(版本:6.1843.0):与1Password4类似,Dashlane只在与用户交互时会泄露一些记录。最近活动的记录最多会暴露在内存中,无论Dashlane处于锁定还是解锁状态。但是,当用户更新记录中的任何信息后,Dashlane可能会暴露内存中整个数据库的明文,即使Dashlane退出或处于锁定状态。
- KeePass(版本:2.40):与其他密码管理器不同,KeePass是一个开源项目。KeePass也只在与用户交互时解密,但解密的密钥会保存在内存中,并不是每次都擦除的。主密码会被擦除,但不会恢复。在尝试从内存中擦除密码时,研究人员可以提取与交互相关的记录。KeePass声称使用了多种深度内存保护机制,但同时承认这些机制可能会涉及Windows操作系统的API,从而可以复制部分内存缓存信息。
- LastPass(版本:4.1.59):与1Password4类似,LastPass在输入解锁域后会混淆主密码。一旦从主密码中提取出解密密钥,主密码就会被覆写。在解锁状态下,LastPass的数据库记录会解密到内存中,但这些记录会保存在内存中,即使处于锁定状态。
根据我们的评估,所有密码管理器都可以确保未运行状态下的用户密码。每个密码管理器都尝试从内存中擦除密码,但部分密码仍然可以从内存中窃取。例如,从1Password7中可以在锁定和解锁状态下窃取主密码和相关密钥。而1Password4只有在解锁运行状态下,主密码以混淆的形式存在于内存中,很容易恢复出来。