欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

EFS加密的一线生机-加密帐户被删的补救方法

引子:看到新闻组里那么多网友“哭诉”EFS问题,早就想写一篇EFS的文章。但是苦于手头资料太少,很多概念尚未圆润贯通,匆匆草就之下,这误人子弟的罪责,怕是逃不过的。

 

声明:本文参考了国外一篇“牛”文,由于要掌握这篇国外文章,读者必须具备一些NTFS底层知识,否则难窥其堂奥。故此笔者四处网罗资料,加上穿凿附会,希望能帮助读者诸君更方便省时地领会这篇文章,舞好EFS这把双刃剑。文章链接如下:

http://www.beginningtoseethelight.org/efsrecovery/index.php

 

这里需要提醒用户注意:本文并非为了证明微软的EFS存在 漏洞,也不是专为马大哈们准备的包治百病的后悔药。事实上如果没有导出EFS证书和私钥,那么一旦删除用户、或者重装系统,EFS加密文件就不属于你了。

 

提示 本文适用于Windows XP Professional单机环境,并假设没有恢复代理(DRF)和共享访问帐户(多个DDF)

任务描述

如果某个用户把自己的登录帐户删除,那么其他用户将无法访问其EFS加密文件。更可恶的是,一旦公司里的某个用户心怀怨气,恶意加密了本属于别的用户的重要文件,将会导致严重问题。一般情况下,这些EFS加密文件已经被判了死刑,但是实际上只要满足以下条件的话,我们还是可以在末日来临之前打开逃生的天窗:

(1) 必须知道该被删帐户的密码。

(2) 该被删帐户的配置文件必须存在。如果使用“本地用户和组”管理单元删除帐户,则配置文件保留的机会很大,如果使用“用户帐户”控制面板删除帐户,则有一半机会保留配置文件。如果配置文件不幸被删,则只能祈祷可以借助Easy Recovery之类的数据恢复工具进行恢复。

可能有些朋友会觉得这两个条件比较苛刻,此处卖个关子先……

EFS加密原理

大家知道,EFS加密实际上综合了对称加密和不对称加密:

(1) 随机生成一个文件加密密钥(叫做FEK),用来加密和解密文件。

(2) 这个FEK会被当前帐户的公钥进行加密,加密后的FEK副本保存在文件$EFS属性的DDF字段里。

(3) 要想解密文件,首先必须用当前用户的私钥去解密FEK,然后用FEK去解密文件。

 

看到这里,似乎EFS的脉络已经很清晰,其实不然,这样还不足于确保EFS的安全性。系统还会对EFS添加两层保护措施:

(1) Windows会用64字节的主密钥(Master Key)对私钥进行加密,加密后的私钥保存在以下文件夹:

%UserProfile%\Application Data\Microsoft\Crypto\RSA\SID

提示 Windows系统里的各种私有密钥,都用相应的主密钥进行加密。Windows VistaBitLocker加密,也用其主密钥对FVEK(全卷加密密钥)进行加密。

(2) 为了保护主密钥,系统会对主密钥本身进行加密(使用的密钥由帐户密码派生而来),加密后的主密钥保存在以下文件夹:

%UserProfile%\Application Data\Microsoft\Protect\SID

整个EFS加密的密钥架构如图1所示。

1

提示 EFS密钥的结构部分,参考自《Windows Internals 4th》的第12章。

 

回到“任务描述”部分所述的两个条件,现在我们应该明白原因了:

(1) 必须知道该被删帐户的密码:没有帐户密码,就无法解密主密钥。因为其加密密钥是由帐户密码派生而来的。

提示 难怪Windows XP2000不同,管理员重设帐户密码,也不能解密EFS文件。

(2) 该被删帐户的配置文件必须存在:加密后的私钥和主密钥(还包括证书和公钥),都保存在配置文件里,所以配置文件万万不可丢失,否则就会彻底“鬼子不能进村”。重装系统后,原来的配置文件肯定被删,这时候当然不可能恢复EFS文件。

 

可能有用户会想,只需新建一个同名的用户帐户,然后把原来配置文件复制给新帐户,不就可以解密EFS文件了?原因在于帐户的SID,因为新建用户的SID不可能和老帐户一样,所以常规方法是不可能奏效的。我们必须另辟蹊径,让系统再造一个完全一样的SID

恢复步骤

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

1.再造SID

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

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

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

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

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

 

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

 

确认好以后,别忘记把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。什么意思呢?也就是说,如果是1004RID,对应十六进制就是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.有用户曾经遇到这样的问题:登录系统时收到提示说密码过期,需要重设,重设密码登录后发现打开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

 

2.有关公钥的问题

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

%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系统,具体方法可以参考国外的那篇原稿,此处不再赘述。

 

加强EFS的安全

由于EFS把所有的相关密钥都保存在Windows分区,所以这可能给EFS带来一定的安全隐患。目前有一些第三方工具号称可以破解EFS,这些工具首先攻击SAM配置单元文件,尝试破解帐户密码,从而破解帐户密码主密钥的加密密钥主密钥EFS私钥FEK密钥链

为了防止攻击者窥视我们的EFS文件,可以借助以下三种方法:

 

1.导出删除私钥

可以用证书向导导出EFS加密证书和私钥,并且在证书导出向导对话框里选择删除私钥,如图3所示。

 

3

删除私钥以后,攻击者就没有办法访问EFS加密文件了,而我们需要访问时,只需导入先前备份的证书和私钥即可。

 

2System Key提供额外的保护

System Key可以对SAM配置单元文件和EFS私钥提供额外保护。Windows XPSystem Key默认保存在本地,我们可以运行syskey命令,强制系统将System Key保存在软盘里,或者用启动密码(startup password)来生成System Key

由于EFS密钥链”的根密钥(System Key)没有保存在本地计算机中 所以攻击者将更加难以破解EFS加密。

提示 BitLocker加密的recovery key,类似于syskeystartup password,都是借助启动时所输入的一串密码来生成所需的密钥。

 

3BitLocker提供更彻底的保护

本方法仅适用于Windows Vista(EnterpriseUltimate Edition)

最彻底的保护方法,首推Windows Vista新引入的BitLocker加密,这时候Windows分区的所有内容全部被加密(包括SAM配置单元、EFS密钥)

BitLocker(TPM1.2)加密可以看成是Windows启动保护器。在系统启动时,TPM芯片会负责分析各个重要的启动组件,以判断自己是否位于原来的计算机环境。如果是的话,就依次释放BitLocker加密所需的密钥链,我们才能顺利地访问Windows,才能访问EFS文件。

如果攻击者企图把硬盘挂接到别的计算机上,系统就会拒绝释放密钥,整个Windows Vista分区处于加密状态。

如果攻击者窃取了计算机,并且窃取了BitLocker所需所有条件(TPM芯片自不必说,假设也获得密钥U)。这时候系统能够顺利引导,并且成功释放BitLocker密钥链。但是攻击者还必须想办法知道帐户的密码,否则无法登录系统,Windows分区依然处于加密状态

EFS额外保护的原理如图4所示。

 

4

 

4.题外话:为什么释放BitLocker密钥以后,Windows分区依然处于加密状态?

所以尽管BitLocker密钥已经释放,但是Windows分区并没有被立即全部解密。否则每次启动,都要解密整个Windows分区,得花多少时间(笔者的Vista分区完全解密,共花3小时)

原来BitLocker加密是以一个FVE Filter Driver来实现加密和解密,该Filter Driver处于文件系统驱动的下层。登录系统以后,用户需要访问文件时,文件系统会自动请求FVE Filter Driver进行解密,猜想应该是一次解密一个Block,每个Block可能是512字节(和EFS一样),不敢确定。对于用户来说,这个过程是完全透明的,同时对性能的影响很小,几乎可以忽略不计。EFS加密的情况有点类似。

 

写在最后

 

这里非常敬佩国外微软技术爱好者的执着,事实上该作者还有一篇经典的文章(描述SAM配置单元文件的二进制结构),链接如下,非常值得推荐。

很难想象,要编写这样的文章,得花费多少的人力和时间,要做多少的实验才能在SAM数据库逐个字节地找出其对应的含义!

本文的目的,也是为了向这些国外的作者致敬。

http://www.beginningtoseethelight.org/ntsecurity/index.php

 

已发表 2006年4月20日 1:35 作者 ahpeng

评论通知

如果您想在帖子更新时接到邮件通知,请先登录。这里

订阅帖子评论使用 RSS

评论

2006年4月20日 17:07 by junxiulee

# re: EFS加密的恢复-加密帐户被删的补救方法[已更新]

IT Pro必读文章
2006年4月21日 8:44 by Liu_hui

# re: EFS加密的恢复-加密帐户被删的补救方法[已更新]

牛X,看来Advanced EFS Data Recovery的原理应该也是这个了,这下不用买这个软件也可以恢复了,嘿嘿
2006年4月21日 14:51 by gnaw0725

# re: EFS加密的一线生机-加密帐户被删的补救方法

HKEY_LOCAL_MACHINE\SAM 默认状态下管理员帐户虽然无法访问,但可以添加管理员帐户,就可以访问了。
2006年4月21日 15:41 by ahpeng

# re: EFS加密的一线生机-加密帐户被删的补救方法

To Gnaw0725:
呵呵呵,我这个人比较懒,修改完HKLM\SAM,还要把其ACL再改回来,麻烦。
2006年4月21日 17:48 by Sucirst

# re: EFS加密的一线生机-加密帐户被删的补救方法

呵呵 这样一篇文章真可以说填补了国内的一项空白阿!

刘晖想得也不尽然,呵呵 :P
这个原理虽然明确了 但是并不等于我们就能复制出aefsdr来。盆盆老师这里所讲的方法比aefsdr多了一个限制:必须知道原有帐户的密码。aefsdr则是在原有操作系统完好的情况下扫描全部可用“文件”(文件 包括master key,private key,sam registry等等内容)进行猜解和解密,这个过程中一般是不需要用户提供原有密码的(在无可用key的情况下,用户可以提交帐户名密码构造可用key),这部分技术才是aefsdr的核心,也是收费的标的物

看了盆盆老师的文章,虽然很多地方另我豁然开朗了,但是冰仞结合psexec访问加密文件这个特例的原理仍然让我一如既往地感到不解,看来在efs加密这方面还是可以继续挖据的。^_^ 这里要向盆盆老师这样治学严谨的it pro们致敬!
2006年4月22日 3:09 by ahpeng

# re: EFS加密的一线生机-加密帐户被删的补救方法

TO Sucirst:
有关冰刃“破解”EFS加密文件的实验,我觉得可能是你的实验步骤不严密所导致。
推荐你重新安装一个干净的XP虚机,然后新建两个帐户,Test1和Test2,并且设置不同的密码,然后再进行实验。
2006年4月24日 3:04 by Sucirst

# re: EFS加密的一线生机-加密帐户被删的补救方法

虽然多少有些不情愿,但是正好手上刚配好一个英文的干净的xp sp2虚拟机,没有安装任何系统外的程序和驱动,未经优化。按照之前我的试验设想和盆盆老师建议的步骤建立两个账户test1 test2 分别以不同的密码设置好,加密不同的两个文件夹,仍然可以用psexec+冰刃在原系统上轻松破解。

这个试验并不困难,希望盆盆老师自己也能试验一下,如果你下载不到冰刃,我可以提供给你。盆盆老师一直以来都以治学严谨另我十分尊敬,这一次如果简单的把这个问题归结为我的试验步骤不严谨的话,我只能说我很失望。

ps,根据冰刃作者PJF的解释,限于冰刃特殊的算法,这种方法能恢复的文件大小是有限制的。(限制我推测应该取决于你内存的大小)但是简单的1K的文本,只要能破解,就足以说明问题。
2006年4月24日 10:54 by ahpeng

# re: EFS加密的一线生机-加密帐户被删的补救方法

Sucirst兄弟,我找时间测试一下,有结果了会尽快在这里跟帖。
2006年5月3日 23:27 by Stone.sxy

# re: EFS加密的一线生机-加密帐户被删的补救方法

最近有个Microsoft Private Folder 1.0可以用一用,不会遭到EFS加密却忘了备份私钥的麻烦呢。

http://www.appbeta.com/modules.php?name=News&file=article&sid=3085
2006年5月4日 20:09 by Nir2003

# re: EFS加密的一线生机-加密帐户被删的补救方法

不错,重新建立一个和先前帐户密码、SID相同的新用户帐户,并且利用先前的主密钥解密用户文件,神不知鬼不觉的就......
2006年5月17日 0:25 by 王翔 0632-6865769

# re: EFS加密的一线生机-加密帐户被删的补救方法

我也是出现了这个事情,有6个G的文件打不开,都是很重要的文件。我都快愁死了!
我对电脑来说不是很精通,希望能和您电话联系。
不知道楼主能不能帮帮我。

电话:0632-6865769
电子邮箱:wxhaim@163.com
2006年5月17日 21:38 by 王翔

# re: EFS加密的一线生机-加密帐户被删的补救方法

我迫切需要您的帮助。
谢谢,请与我联系!
0632-6865769
wxhaim@163.com
2006年8月6日 16:55 by shiryu

# re: EFS加密的一线生机-加密帐户被删的补救方法

关于冰刃的问题在下也实验过,我是在重装的系统,shiryu被EFS加密,重建新的同名帐号,直接用冰刃就能访问~
汗那
2006年9月26日 15:25 by zhu19992002

# re: EFS加密的一线生机-加密帐户被删的补救方法

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


这时候可以借助sysinternals的NEWSID工具把系统的计算机SID重设为原来的值,再用前面描述的方法构造所需的RID能具体讲一下操作方法吗?我对电脑不精通,现在有很多重要文件都打不开了,期盼您的帮助。

重装系统后一般配制文件还存在吗?

我的邮箱zhsh1999@126.com
急望您的回音!!!



2007年1月28日 1:22 by 夜里晒太阳

# re: EFS加密的一线生机-加密帐户被删的补救方法

请教盆盆老师,我这里有个问题,文中提到,主密钥的加密密钥由帐户密码派生而来,但这是不是等于帐户的密码呢,如果是由帐户的密码通过一个随机算法得到的加密密钥,那么即使重建了帐户,密码一样,SID一样,但通过该密派生出来的主密钥的加密密钥应该是不一样的吧...(当然这只是我的一个猜想)

2007年6月9日 11:08 by zhaorong852

# re: EFS加密的一线生机-加密帐户被删的补救方法

我是個攝影愛好者,把歷年的文章和相片都加密了,因為去成都出差電腦中毒匆忙重裝系統回來後才發現打不開原來EFS加密的所有文件了,打了很多電話,問了很多人,還去過深圳的數據恢復公司,要麼說全國、全球都不可能解密,要麼打開電腦看了一下支支吾吾不得要領……

    EFS加密如此簡單,而一旦沒備份証書重裝系統又如此復雜困難,就象把高危險品放在伸手可及的地方,這應該是微軟應該考慮改正的,自我看了ahpeng 老師您的文章,覺得我的情況應該是符合你說的“一絲生機”的條件的,雖然系統反復給我重裝過,但我記得原系統的賬戶名和密碼,備份過原系統的注冊表,是用超級兔子壓縮備份的,解壓縮後裡面有七個文件,配置文件應該也在裡面吧,

(~index.ini;SAM;NTUSER.DAT;DEFAULT;SYSTEM,SOFTWARE),隻是原系統用戶名下的配置文件應該是三個,我隻有兩個,少了一個“NTUSER.DAT.LOG”,因為我的電腦知識實在有限,所以請教老師,我這種情況還可以恢復嗎?務請盡快給我回復,不勝感謝之至,zhaorong852@hotmail.com

2007年6月11日 21:34 by wangyes

# re: EFS加密的一线生机-加密帐户被删的补救方法

大侠救命啊,重装完系统后才发现有个很重要的文件夹用了EFS加密。现在怎么办啊?救救我吧!!! wangyes2005@163.com 谢谢了!!

2007年6月12日 11:00 by ahpeng

# re: EFS加密的一线生机-加密帐户被删的补救方法

楼上两位兄弟,你们的情况,应该已经无解了,下次注意备份加密证书吧。

zhaorong852兄弟,你的情况,只是备份了用户的注册表配置单元,但是没有备份证书,所以无效。

2007年10月23日 11:46 by 鬼儿

# re: EFS加密的一线生机-加密帐户被删的补救方法

我的私钥不让导出是怎么回事啊(灰的)。就是因为文件拥有人的密码改了就不能打开加密的文件了。郁闷!

2007年10月23日 11:48 by 鬼儿

# re: EFS加密的一线生机-加密帐户被删的补救方法

这个话题还有人看吗?什么时候能给我反映啊 ?快来人啊~~~~~~~~~

2007年10月23日 11:49 by 鬼儿

# re: EFS加密的一线生机-加密帐户被删的补救方法

我现在只能把证书导出来,但导入进去还是不行。楼主老大快来救人啊~~~~~

2008年1月9日 20:36 by 黄生

# re: EFS加密的一线生机-加密帐户被删的补救方法

请教盆盆老师,重装完系统后才发现有个很重要的文件夹用了EFS加密。现在怎么办啊?救救我吧!我原系统没有设密码。电脑中毒重装系统后。能在WORD属性时里面查到原用户名及证书内容。请教下如何能恢复。有没有中文的工具修护。我的邮箱是hsy2125@163.com QQ是290199013  谢谢!

2008年1月12日 9:57 by yfbin

# re: EFS加密的一线生机-加密帐户被删的补救方法

我有三个存放照片的文件夹,原来无意间用了XP的EFS进行加密,后来为共享又将加密取消,但取消加密后有两个文件夹的文件都无法打开,另外一个可以打开,我的电脑XP系统一直正常,用户帐号没有更换过,照片一直可以正常打开,原来是存在C盘,后来为了共享才移动到F盘,F盘也是NTFS格式,因其它用户打不开,后将加密取消,在做取消操作时三个文件夹是先后进行,最早取消的文件夹可以打开文件,后面两个就不行了。其中有一个RAR文件,后用Advanced RAR Repair恢复可以打开,但JPG文件和MOV文件仍无法打开。幸好有几个JPG文件存在邮箱,下载下来和无法打开的JPG文件进行进行二进制文件比较,从00000行到10FF0行内容不同,后面内容完全一样,后来又用各种图像修复软件,还是无法将文件修复,请各位高手提供帮助,不胜感激

说说您的看法?

(必填) 
必填 
(必填)