深入剖析EFS

深入剖析EFS本文涉及大量图例 如有网友按照图例学习 实验 请使用 新建文件夹 和 新建文件 来实验 因为涉及数据加解密 有造成数据丢失的可能 小心

本文涉及大量图例,如有网友按照图例学习,实验,请使用“新建文件夹”和“新建文件”来实验,因为涉及数据加解密,有造成数据丢失的可能,小心。
一、名词解释
安全标识符(SID,“安全ID”):
是来识别用户、组和计算机帐户的标志符。在第一次创建一个帐户时,windows系统将给每一个帐户发布一个唯一的 SID。Windows 中的内部进程通过帐户的 SID 而不是帐户的名字来区别账户。相当于人的身份证号码,一些严肃的场合,我们通过身份证号码来区分不同的人而不是通过姓名来区分。要注意的是,如果一个账户被错误删除了,即使重建一个相同名字的账户,其SID也和被删除账户的SID不同,对计算机来说,这仍然是两个不同的账户。
加密:
通过某个函数或方法对正常数据进行运算,使其看起来没有意义的过程。其反过程称为解密。
NTFS 文件系统:
一种高级文件系统,提供了性能、安全、可靠性以及未在任何 FAT 版本中出现的高级功能。例如,NTFS 通过使用标准的事务处理记录和还原技术来保证卷的一致性。如果系统出现故障,NTFS 将使用其日志文件和检查点信息来恢复文件系统的一致性。NTFS 还可以提供诸如文件和文件夹权限、加密、磁盘配额和压缩之类的高级功能。
EFS(encrypting file system,文件加密系统):
加密文件系统 (EFS) 提供一种核心文件加密技术,该技术用于在 NTFS 文件系统卷上存储已加密的文件。加密了文件或文件夹之后,您还可以像使用其他文件和文件夹一样使用它们。
加密对加密该文件的用户是透明的。这表明不必在使用前手动解密已加密的文件,您就可以正常打开和更改文件。
使用 EFS 类似于使用文件和文件夹上的权限。两种方法都可用于限制数据的访问。然而,未经许可对加密文件和文件夹进行物理访问的入侵者将无法阅读这些文件和文件夹中的内容。如果入侵者试图打开或复制已加密文件或文件夹,入侵者将收到拒绝访问消息。文件和文件夹上的权限不能防止未授权的物理攻击。
正如设置其他任何属性(如只读、压缩或隐藏)一样,通过为文件夹和文件设置加密属性,可以对文件夹或文件进行加密和解密。如果加密一个文件夹,则在加密文件夹中创建的所有文件和子文件夹都自动加密。推荐在文件夹级别上加密。
公钥(public key):
EFS中公钥是一个运算函数,其作用就是用来加密数据,就相当于一把锁。这把锁可以放置在internet上,让别人使用这把锁来加密数据然后传给锁的主人。任何人都可以看到并使用这把锁来加密数据,但是如果没有锁的钥匙就打不开锁,因此看不到锁住以后的数据内容,所以公钥暴露在公共场所并没有安全性的问题。
私钥(private key):
对应公钥一对一对存在,其实就是用来开锁的钥匙。私钥不能随便泄露,如果私钥被盗或者被复制,那么别人使用你的公钥加密的数据如果传输时被拦截,就很容易被解密了。同理,如果我们自己的私钥损坏或者丢失了,那么我们同样不能打开这把锁,也即是不能对接收到的别人已经用我的公钥加密了的数据进行解密了,这种情况下,我们必须重新购买锁和对应的钥匙,也就是需要重新申请一对公钥和私钥。
恢复代理(recovery agent):
另外一个有私钥的用户。为了放置私钥损坏或丢失,我们把私钥存放在另外一个人那里,这人就是恢复代理。当然,存放我私钥的人必须是我信任的人。同样EFS中也是采用类似的解决方法,也就是我们常常说到的恢复代理和恢复代理的证书。
二、使用加密文件和文件夹时的注意事项:
只有 NTFS 卷上的文件或文件夹才能被加密。由于 WebDAV 使用 NTFS,当通过 WebDAV(Web 分布式创作和版本控制)加密文件时需用 NTFS。
不能加密压缩的文件或文件夹。如果用户加密某个压缩文件或文件夹,则该文件或文件夹将会被解压。换句话说,数据的压缩和加密只能选其一。
如果将加密的文件复制或移动到非 NTFS 格式的卷上,该文件将会被解密。(压缩也一样)
如果将非加密文件移动到加密文件夹中,则这些文件将在新文件夹中自动加密。然而,反向操作则不能自动解密文件。文件必须明确解密,除非移动到非NTFS的卷上。
无法加密标记为“系统”属性的文件,并且位于 %systemroot% 目录结构中的文件也无法加密。
加密文件夹或文件不能防止删除或列出文件或目录。具有合适权限的人员可以删除或列出已加密文件夹或文件。因此,建议结合 NTFS 权限使用 EFS。
在允许进行远程加密的远程计算机上可以加密或解密文件及文件夹。然而,如果通过网络打开已加密文件,通过此过程在网络上传输的数据并未加密。必须使用诸如 SSL/TLS(安全套接字层/传输层安全性)或 Internet 协议安全性 (IPSec) 等其他协议通过有线加密数据。但 WebDAV 可在本地加密文件并采用加密格式发送。
三、开始动手了
在NTFS分区上新建文件夹,在新建文件夹中新建一个文本文件,随便输入一些字符:  本贴包含图片附件:

启用EFS加密,如图

按确定键,选择加密文件夹和子文件夹,如图

现在文件夹变成了绿色,说明已经被EFS加密了。

新建一个用户user1,logout,以user1登录系统

user1登陆以后打开 新建文件夹,什么?可以打开????  

继续打开新建的文本文件,现在打不开了

lougout user1,换回刚才的用户登录,试试打开新建的文本文件,没有问题,用户根本感觉不到该文件被加密了,这就是EFS的好处

很显然,刚才的操作说明系统用私钥加密了该文本文件,换用户登录后,因为不同的用户私钥不一样,所以不能打开该文件了。
那么,用户EFS使用的私钥放置在硬盘的什么位置呢?而且这个私钥肯定是和用户的SID相对应的。是不是在注册表中?答案是否定的,因为刚才我们根本没有动过注册表。想起一些网友经常遇到的情况是有EFS加密的文件忘记了解密就重装了系统,有些网友还有重装系统前的注册表备份,但是即使导入前系统的注册表也是无法解密的,所以私钥肯定不在注册表中。
参考了微软官方的一些文档,包括EFS的白皮书(white paper),只有这个说明:“EFS文件使用前不需要解密。当向磁盘存储和从磁盘读取字节时,加密和解密透明地完成。EFS 自动检测加密文件,并从系统密钥存储区定位用户密钥。”,而密钥存放区在硬盘的什么位置,更本没有说明。
经过多次的实验,分析,相同的组里面不同的用户设置的EFS,相互之间也是不能解密的,而这些用户对系统的操作,只有一个地方不同,那就是用户配置文件,存放在Documents and Settings中各不同的用户名字下。将重点锁定这个目录,经过反复实验,比较,得出结论:密钥存放在C:/Documents and Settings/Administrator/Application Data/Microsoft/Crypto/RSA下,如图:

而S-1-5-21-360507124-1982380022-347760104-500就是我加密EFS文件使用的账户对应的SID,我是用内置的管理员账户直接加密的,可以看到这个SID最后是500,这个标记方法类似于linux对账户的标记
经过实验,发现一个很容易忽略的地方:这个文件夹不是安装系统的时候就生成的,也不是创建该账户时生成的,而是该账户第一次使用EFS的时候生成的,换句话说,如果没有使用EFS加密,该文件夹是没有的!这就会导致另外一个经常出现的问题: 网友经常安装调试好系统以后用ghost做个备份,以备以后恢复系统用。如果在ghost做完以后用EFS加密了文件,系统乱了的时候再从ghost文件恢复,记得一定要先导出证书,不然即使ghost回去的是一模一样的系统,该备份的系统中没有私钥,EFS仍然是打不开的!!!切记。所以ghost即使在同一台机器上使用,也并不是万能的,不同的机器使用差别就更大了。
笔者测试了和ghost功能类似的xp自带的系统还原,庆幸的是系统还原能避免这种现象。如果创建还原点以后用EFS加密了文件,回到还原点时,文件仍然是没有加密的,但是在撤销系统还原以后,该文件仍然是没有加密的!所以对于机密数据,在系统还原以后要慎用撤销系统还原功能!
接下来我们来寻找注册表中什么位置标记了用户账户的私钥放置位置呢?用刚才的SID在注册表中搜索,终于找到了,在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/ProfileList/S-1-5-21-360507124-1982380022-347760104-500中标记了,如图:(图很大,放大到100%才看的清)
Click here to open new window
CTRL+Mouse wheel to zoom in/out
四、恢复代理的设置和证书的备份
对于没有加入到域的机器,2000pro和2000server中默认的恢复代理就是内置的管理员账户,这样当管理员误删除了用户账号的时候,即使该用户有EFS加密的文件,管理员也可以打开(参见上面恢复代理的解释)。这样一来,管理员养成了非常不好的操作习惯,就是有员工辞职时,先删除该员工的账号,再来处理其留下的数据(因为即使有EFS加密的文件管理员也能打开的)。而在xp和2003中,内置的管理员账户不再是默认的恢复代理!不知道有多少管理员犯了经验主义错误,按照2000的方法来处理用户账户,导致很多EFS文件打不开了,强烈FT微软这种重大改动不在重要地方说明!
在xp和2003中以默认的管理员备份证书,运行secpol.msc时,提示先添加恢复代理,如图:

接下来先添加恢复代理,这个比较简单了:
以管理员登录计算机,运行:cipher /r:c:/dra

输入密码并在出现提示后重复输入一次,以保护生成的密钥。
这样就在C:分区下面生成了dra.cer和dra.pfx文件(.CER只是包含证书,而.PFX包含证书和密钥)。  

以想要的恢复代理登录,(建议用内置的管理员账户),右击pfx文件,选安装

按照向导安装证书:

输入cipher创建证书时的密码和相应的选项,安装到系统默认的地方  

运行gpedit.msc,选添加数据恢复代理,如图

按照向导进行,中间要选择一下证书dra.cer的存储目录,添加成功以后如图:

在设置了有效的恢复代理后,用恢复代理登录系统就可以直接解密用户用EFS加密的文件。
如果在设置恢复代理之前就加密过数据,那么这些数据恢复代理仍然是无法打开的。
最后一步,证书的备份
以内置的管理员(管理员组的其他成员不行)运行secpol.msc,如图,导出

按照向导导出证书,copy到安全的地方,比如U盘上,锁好。
ok,现在你可以高枕无忧地使用EFS加密了。
另外要注意的是EFS最好和NTFS的权限一起使用,否则别人虽然看不到你加密的文件,但是可以删除,因此给EFS加密的对象设置一定的NTFS安全设置是必要的,关于NTFS的权限设置,在属性-安全里面设置,因为不属于本文的讨论对象,也比较简单,这里不多讨论了。



深入剖析EFS
创建时间:2005-06-01 更新时间:2005-06-03
文章属性:原创
文章提交:mrcool (mrcool_at_zhinet.com)
EFS是Encrypting File System,加密文件系统的缩写,他可以被应用在windows 2000以上的操作系统且为NTFS5格式的分区上(windows xp home不支持).
   
    EFS 只能对存储在磁盘上的数据进行加密,是一种安全的本地信息加密服务.EFS使用核心的的文件加密技术在NTFS卷上存储加密文件.
    它可以防止那些未经允许的对敏感数据进行物理访问的入侵者(偷取笔记本电脑,硬盘等)
   
    EFS是如何工作的
    当一个用户使用EFS去加密文件时,必须存在一个公钥和一个私钥,如果用户没有,EFS服务自动产生一对。对于初级用户来说,即使他完全不懂加密,也能加密文件,可以对单个文件进行加密,也可以对一个文件夹进行加密,这样所有写入文件夹的文件将自动被加密。
    一旦用户发布命令加密文件或试图添加一个文件到一个已加密的文件夹中,EFS将进行以下几步:
    第一步:NTFS首先在这个文件所在卷的卷信息目录下(这个目录隐藏在根目录下面)创建一个叫做efs0.log的日志文件,当拷贝过程中发生错误时利用此文件进行恢复。
    第二步:然后EFS调用CryptoAPI设备环境.设备环境使用Microsoft Base Cryptographic Provider 1.0 产生密匙,当打开这个设备环境后,EFS产生FEK(File Encryption Key,文件加密密匙).FEK的长度为128位(仅US和Canada),这个文件使用DESX加密算法进行加密。
    第三步: 获取公有/私有密匙对;如果这个密匙还没有的话(当EFS第一次被调用时),EFS产生一对新的密匙.EFS使用1024位的RSA算法去加密FEK.
    第四步:EFS为当前用户创建一个数据解密块Data Decryptong Field(DDF),在这里存放FEK然后用公有密匙加密FEK.
    第五步:如果系统设置了加密的代理,EFS同时会创建一个数据恢复块Data Recovery Field(DRF),然后把使用恢复代理密匙加密过的FEK放在DRF.每定义一个恢复代理,EFS将会创建一个Data Recovery Agent(DRA).Winxp没有恢复代理这个功能,所以没有这一步.,这个区域的目的是为了在用户解密文件的中可能解密文件不可用。这些用户叫做恢复代理,恢复代理在EDRP(Encryption Data Recovery Policy,加密数据恢复策略)中定义,它是一个域的安全策略。如果一个域的EDRP没有设置,本地EDRP被使用。在任一种情况下,在一个加密发生时,EDRP必须存在(因此至少有一个恢复代理被定义)。DRF包含使用RSA加密的FEK和恢复代理的公钥。如果在EDRP列表中有多个恢复代理,FEK必须用每个恢复代理的公钥进行加密,因此,必须为个恢复代理创建一个DRF。
    第六步:包含加密数据、DDF及所有DRF的加密文件被写入磁盘。
    第七步: 在加密文件所在的文件夹下将会创建一个叫做Efs0.tmp的临时文件.要加密的内容被拷贝到这个临时文件,然后原来的文件被加密后的数据覆盖.在默认的情况下,EFS使用128位的DESX算法加密文件数据,但是Windows还允许使用更强大的的168位的3DES算法加密文件,这是FIPS算法必须打开,因为在默认的情况下它是关闭的.
    第八步:在第一步中创建的文本文件和第七步中产生的临时文件被删除。
    加密过程图片可参考 

    文件被加密后,只有可以从DDF或是DRF中解密出FEK的用户才可以访问文件.这种机制和一般的安全机制不同并意 味着要想访问文件,除了要有访问这个文件的权力外还必须拥有被用户的公有密匙加密过的FEK.只有使用私有密匙解密文件的用户才可以访问文件.这样的话会有一个问题:就是一个可以访问文件的用户可把文件加密之后,文件真正的拥有者却不能访问文件.解决这个问题的办法:用户加密文件的时候只创建一个文件解密块Data Decryption Field(DDF),但是只后他可以增加附加用户到密匙队列.这种情况下,EFS简单地把FEK用想给其他用户访问权的用户的私有密匙加密.然后用这些用户的公有密匙加密FEK,新增加的DDF和第一个DDF放在一起(这些新增加的用户对文件只有访问的权力).
    解密的过程和加密的过程是相反的,参考

    首先,系统检测用户是否具有被EFS使用的私有密匙.如果有的话,系统将会在读取EFS属性,同时在DDF对列中寻找当前用户的DDF.如果DDF找到的话,用户私有密匙将会在那里解密出FEK.使用解密出来的FEK,EFS去解密加密的文件数据.需要注意的是文件从来不会完全被加密,但是有时候会去加密一些特殊的扇区如果上层模块要求的话.
    EFS组成
    EFS由EFS服务、EFS驱动、EFS文件系统运行库(FSRTL)和Win32 API。EFS服务作为一个标准系统服务运行,它是Windows 2000安全子系统的一部分。它与CryptoAPI接口产生钥匙、DDF和DRF,EFS驱动就象是NTFS的一部分,它呼叫EFS服务请求钥匙,DDF和DRF作为需要被创建,一个EFS驱动的组成是EFS FSRTL,它定义了EFS驱动程序能作为NTFS的代表而执行的功能。
    EFS和NTFS如何共存
    EFS可以被认为除NTFS外的第二层防护,为访问一个被加密的文件,用户必须有访问到文件的NTFS权限。在相关NTFS权限的用户能看到文件夹中的文件,但不能打开文件除非有相应的解密钥匙。同样,一个用户有相应的钥匙但没有相应的NTFS权限也不能访问到文件。所以一个用户要能打开加密的文件,同时需要NTFS权限和解密钥匙。
    然而,NTFS权限可能被大量的方法穿越,包括口令破解程序、用户在离开前没有退出系统或系统内部的NTFSDOS。在NT4.0下,游戏结束了――硬盘上所有的数据都可以访问了。在Windows 2000下,当一个文件用EFS加密后,一个未授权的用户,即使访问到磁盘上的文件,但也不能访问文件上数据,因为没有授权用户的私钥。
    EFS 属性
            
   当NTFS加密文件的时候,它首先会为文件设置加密标志,然后在存储DDF和DDR的地方为文件创建一个$EFS属性.这个属性的属性ID=0x100,它可以被加长,占有0.5k到若干k的大小,这个大小是由DDF和DRF的数量决定的.
    
    
    
    下面是一个详细的EFS属性的例子.
    
        
    紫色:EFS属性大小
   
    天蓝色:电脑安全标识符和用户数字.它指定EFS存储证书的文件夹.为了得到文件
         夹的名字,EFS会做一些转换.
         5A56B378 1C365429 A851FF09 D040000 - 存储在$EFS中的数据.
         78B3565A 2954361C 09FF15A8 000004D0 - 转换后的结果.
         2025018970-693384732-167712168-1232 - 转换成十进制.
         S-1-5-21-2025018970-693384732-167712168-1232 - 加上安全标识符前缀.
         得到的文件夹就是:
         %UserProfile%/ApplicationData/Microsoft/Crypto/RSA/S-1-5-21-2025018970-693384732167712168-1232/
    粉红色:公有密匙特性
    黄色:私有密匙全局唯一标识符(同时被当作容器名字).当EFS从CryptoAPI provider中获取设备环境的时候使用这个名字.如果$EFS属性只有一个DDF,容器的名字可以从$efs中计算出来.但是当更多的用户加入这个文件的时候(就会有更多的DDF和DRF),私有密匙全局唯一标识符并不是保存所有的用户,其它的必须从基于公有密匙存储特性的证书中恢复.
    红色:加密提供器的名字(Microsoft Base Cryptographic Provider v.1.0)
    绿色:用户的名称,DDF和DRF的所有者.
    蓝色:加密后的FEK.通常FEK是128位的,但是被1024位的RSA密匙加密后,长度变成1024位.
参考资料:   http://www.ntfs.com    http://www.nsfocus.net

 
编程小号
上一篇 2025-01-07 20:51
下一篇 2025-01-07 20:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/104186.html