存储 频道

技巧:EFS加密帐户被删的一线生机

  恢复步骤

  为了方便描述,这里假设被删帐户的用户名为Admin,Windows安装在C盘。

  1.再造SID

  注意 本方法取自“声明”部分提到的那篇文章。

  首先确认被删帐户的SID,这里可以进入以下文件夹:

  C:\Documents and Settings\Admin\Application Data\Microsoft\Crypto\RSA

  在其下应该有一个以该被删帐户的SID为名的文件夹,例如是S-1-5-21-4662660629-873921405-788003330-1004(RID为1004)

  现在我们要设法让新建帐户同样具有1004的RID,这样就能达到目的。

  在Windows中,下一个新建帐户所分配的RID是由HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account注册表项的F键值所确定的。F键值是二进制类型的数据,在偏移量0048处的四个字节,定义下一个帐户的RID。那么也就是说,只需要修改0048处的四个字节,就能达到目的(让新建帐户获得1004的RID)!

  确认好以后,别忘记把Admin帐户的配置文件转移到别的地方!

  (1) 默认情况下,只有system帐户才有权限访问HKEY_LOCAL_MACHINE\SAM,这里在CMD命令提示符窗口,运行以下命令,以system帐户身份打开注册表编辑器:

  psexec -i -d -s %windir%\regedit.exe

  提示 可以在以下网站下载psexec:

  http://www.sysinternals.com/Utilities/PsExec.html

  (2) 定位到HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account注册表项,双击打开右侧的F键值。

  (3) 这里要说明一下,Windows是以十六进制、而且以反转形式保存下一个帐户的RID。什么意思呢?也就是说,如果是1004的RID,对应十六进制就是03EC,但是我们必须把它反转过来变成EC03,再扩展为4个字节,就是EC 03 00 00。

  所以,我们应该把F键值的0048偏移量处,把其中四个字节改为“EC 03 00 00”,如图2所示。

  图2

  (4) 重要:别忘了重启计算机!

  (5) 重启以后,新建一个同名帐户Admin,它的SID应该和以前是完全一样。如果不相信的话,可以借助GetSID或者PsGetSID等工具测试一下。

  2.“破解”EFS

  接下来的方法就非常简单了,用新建的Admin帐户身份登录系统,随便加密一个文件,然后注销,用管理员帐户登录系统,把原来保留的配置文件复制到C:\Documents and Settings\Admin文件夹下。

  再用Admin帐户登录系统,现在可以解密原来的EFS文件了。

  疑难解答

  1.如果已经重装系统,那怎么办?

  “声明”部分提到的那篇文章里提到,如果还记得原来帐户的密码,并且配置文件没有被删除的话,还有希望。这时候可以借助sysinternals的NEWSID工具把系统的计算机SID重设为原来的值,再用前面描述的方法构造所需的RID,这样就可以获得所需的帐户SID。剩余步骤完全一样。

  http://www.sysinternals.com/Utilities/NewSid.html

  2.有用户曾经遇到这样的问题:登录系统时收到提示说密码过期,需要重设,重设密码登录后发现打开EFS文件。

  KB890951提到这个问题。其解释是因为在修改密码时,系统还没有加载配置文件(有点语焉不详),原文如下:

  This problem occurs because the user profile for the current user is not loaded correctly after you change the password.

  配置文件和EFS有何相干?看完本文,大家应该知道,EFS的私钥和主密钥都是保存在配置文件里的。由于配置文件没有加载,所以主密钥的加密版本没有得到更新(没有跟上帐户密码的变化),导致主密钥无法正确解密,从而无法解密私钥和FEK。这就是问题的真正原因。

  该KB提供了一个内部补丁,可以解决这个问题。KB890951的链接如下:

  http://support.microsoft.com/kb/890951

  3.有关公钥的问题

  为了容易理解,笔者故意忽略了公钥。公钥保存也保存在帐户的配置文件里:

  %UserProfile%\Application Data\Microsoft\SystemCertificates\My\Certificates

  在EFS恢复的操作中,必须确保公钥也要复制到新帐户的配置文件里。尽管看起来公钥与EFS解密无关(它负责加密)。

  原来,加密文件$EFS属性的DDF字段里除了有帐户SID和加密的FEK副本外,还有公钥的指纹信息(Public Key Thumbprint)和私钥GUID信息(私钥的某种散列值)。

  系统在扫描加密文件$EFS属性中的DDF字段时,根据用户配置文件里的公钥中所包含的公钥指纹和私钥GUID信息,当然还有帐户的SID,来判断该帐户是否具有对应的DDF字段,从而判断该用户是否属于合法的EFS文件拥有者。

  所以公钥也很重要。

  当然公钥是可以“伪造”的(可以伪造出所需的公钥指纹和私钥GUID),以欺骗EFS系统,具体方法可以参考国外的那篇原稿,此处不再赘述。

0
相关文章