系统重启(Win7 x64)后,应用程序报告无法访问 EFS 加密目录中的文件。
- 通过程序访问时出现“拒绝访问”。
- 权限正常且良好。
- 该问题影响了另外 2 个随机选择的文件。
- 很长时间没有发生相关变化或问题。
所以这看起来像这个问题确实如此,根据证书指纹,该文件被加密为不同的证书单击“高级属性”对话框中的“详细信息”时弹出的对话框中显示。
但奇怪的是:
- 打开“高级属性”对话框(从文件属性对话框)约 10 秒,100% CPU,每次都只针对此文件。
通过 ProcessHacker 获得的堆栈跟踪充满了“efscore.dll”、“bcrypt.dll”、“crypt32.dll”等。 certmgr.msc
显示我自己未创建的新 EFS 证书。它是 3 天前有效的,它的指纹是我在无法访问的文件上看到的。- 导出向导允许导出新的 EFS 证书,但中途却给出了错误消息(“密钥在指定状态下无效”。) 并且它创建的文件实际上并不包含所选的证书,而是包含另一个证书。
- 在系统的克隆副本上,过了一会儿,文件又可以访问了,内容也完好无损!我检查了与之关联的证书的指纹,这次是我常用证书的指纹,而不是新创建的证书的指纹。
所以,这让我对 EFS 的可靠性产生了怀疑。
- 为什么要悄悄创建新证书并将其用于加密一些文件?
- 为什么与文件关联的证书似乎发生了变化?
答案1
经过进一步的分析,我得出以下结论:
包含操作系统的 SSD 已发生故障,导致至少几天内无声且任意的数据损坏。
可观察到的影响按以下顺序排列:磁盘性能下降、可能出现不明确的小软件错误、EFS 证书私钥损坏、Explorer 崩溃、BSOD。
以下是我对事件的复原:
大约在事件发生前 10-14 天,Windows 出于某种原因创建了一个新的 EFS 证书,该证书的私钥被损坏,因此不久后无法访问。现在无法解密的所有文件可能在私钥丢失后被重写。Windows 的不稳定行为可能是由于 SSD 故障,有时会返回正确的数据,有时则不会。
此外,我还了解到 Windows 可能会毫无错误地将加密文件解码为垃圾文件。因此,能够解密文件并不能证明其完整性。(也就是说,SSD 可能已向 Windows 传送了损坏的数据,但 Windows 在解密文件时并未检测到这一点。)