Windows 数据保护 API (DPAPI) 是在 Windows 系统上存储机密(例如 ASP.Net 应用程序所需的数据库密码)的建议方法。
DPAPick在 BlackHat DC 2010 和 WOOT'10 上展示,重点是恢复过去的密码和加密的文件系统证书。演示文稿摘要要求解密所有 DPAPI 加密数据。由于是离线攻击,Windows 注册表访问控制也无效。
DPAPick 的有效性有哪些限制?如何利用它的盲点和弱点来更好地保护我为我的应用程序存储在工作站上的数据?
Windows 数据保护 API (DPAPI) 是在 Windows 系统上存储机密(例如 ASP.Net 应用程序所需的数据库密码)的建议方法。
DPAPick在 BlackHat DC 2010 和 WOOT'10 上展示,重点是恢复过去的密码和加密的文件系统证书。演示文稿摘要要求解密所有 DPAPI 加密数据。由于是离线攻击,Windows 注册表访问控制也无效。
DPAPick 的有效性有哪些限制?如何利用它的盲点和弱点来更好地保护我为我的应用程序存储在工作站上的数据?
@nealmcb 向我询问了这个问题(谢谢!),这确实是一个很好的问题,我们的论文中没有涉及。我同意我们没有就如何处理 DPAPI 安全性提供足够的建议。我将通过写一篇博文来解决这个问题,但与此同时,这里是您可以做什么的概述:
总体而言,DPAPI 是一个黑盒 API,它允许您将任何机密数据(例如 firefox 密码数据库)绑定到 Windows 帐户密码。要解密任何 DPAPI 机密,您需要用户密码的哈希(虽然在 SHA1 (16_LE) 中而不是 NTLM 中)。
因此,在离线攻击设置中,攻击者首先需要暴力破解(或猜测)用户密码以获取此哈希,因此“强”密码绝对是第一道良好的防线。但请记住,我们有 NTLM 的彩虹表,因此 DPAPI 安全性也受此影响。
磁盘加密(如 bitlocker 和 truecrypt)是很好的第一道防线,因为攻击者显然需要在尝试恢复 DPAPI 数据之前解密硬盘驱动器。
相信 EFS 会解决问题并不是一个好主意,因为解密文件所需的证书是使用类似“DPAPI”的系统加密的。因此,一旦知道用户密码,攻击者所要做的就是首先通过恢复证书来解密 EFS 文件,然后解密 DPAPI 数据。
我希望这可以澄清情况。对于 CREDHIST 问题,我正在考虑编写一个清除它的工具(至少前 N 个旧密码)。
如果您还有其他问题,请告诉我
这主要是算法的逆向工程,因为 API 采用了隐蔽的安全性,并且没有提供完整的原语集。
因此,这似乎首先放大了使用真正好的登录密码的需要,以抵抗字典攻击。
也永远不要使用弱密码,因为它会使您的其他密码容易被破解。
始终警惕后门的可能性,如论文所述:Elie - Reversing DPAPI and Stealing Windows Secrets Offline。
并游说微软接受为他们进行免费分析的更合格的加密货币人员的提议。即修复他们损坏的 CREDHIST 机制。或者切换到另一个秘密存储方案......
我给你展示 A,一台安装了 Windows 操作系统的 PC,以及一个配置的用户帐户,以及代表用户使用 DPAPI “保护”的一些数据。
然后展示B,用户本人。
我们将两个实体放在一个房间里,有一些电力但没有外部网络。用户 B 打开机器 A 的电源,然后继续输入他的密码并登录。然后用户 B 访问受保护的数据。
因此,机器状态(即硬盘)的完整内容和用户密码的知识足以恢复数据。推论:如果攻击者可以掌握机器状态(例如,他偷了整台笔记本电脑),那么他可以对用户的密码运行离线字典攻击,他可以通过向其投入更多硬件来任意加快攻击速度。
其余的只是通常的安全马戏团,通过默默无闻、逆向工程和说出一长串看起来很严肃的首字母缩略词来消除 Evil Hackers™ 的威胁。离线字典攻击情况可以通过通常的密码散列花里胡哨(参见bcrypt)来缓解。更彻底的方法是使用防篡改设备,例如外部智能卡或TPM,这在概念上剥夺了攻击者机器状态的关键部分;但这更昂贵,并且在硬件故障的情况下会影响数据恢复。