【实战】手工恢复EFS加密文件

admin 2023年3月6日18:41:08评论116 views字数 3200阅读10分40秒阅读模式

1 概述

EFS作为一种常见的加密形式,在电子物证取证过程中经常遇到。一些情况下,商业软件并不能很好地识别解密EFS加密文件。此时便需要勘验民警掌握EFS加密原理并根据原理恢复出原始加密文件。

下面本文将介绍如何手工恢复EFS加密的文件。

1.1模拟案件背景

8月20日18:00某市汽车站发生一起爆炸案件,经初步侦查,炸弹系通过手机远程引爆,办案人员经过综合研判分析,确定了引爆炸弹的手机号码,通过该号码进行落地抓捕了一名犯罪嫌疑人王五,并在现场扣押了一部笔记本电脑、一台Android手机(已制作成镜像文件Android.dd),并将对象使用的计算机硬盘及进行了证据固定,制作成镜像文件“wang.E01”。

经过初步分析,发现硬盘中部分文件是EFS加密形式加密。

【实战】手工恢复EFS加密文件

【实战】手工恢复EFS加密文件

图1.1、图1.2 加密文件详情

1.2 EFS加密的的工作原理

当一个用户使用EFS去加密文件时,即使他完全不懂加密,也能加密文件,可以对单个文件进行加密,也可以对一个文件夹进行加密,这样所有写入文件夹的文件将自动被加密。一旦用户发布命令加密文件或试图添加一个文件到一个已加密的文件夹中,EFS将进行以下几步:

第一步:NTFS首先在这个文件所在卷的卷信息目录下(这个目录隐藏在根目录下面)创建一个叫做efs0.log的日志文件,当拷贝过程中发生错误时利用此文件进行恢复。

第二步:然后EFS调用CryptoAPI设备环境.设备环境使用MicrosoftBase Cryptographic Provider 1.0 产生密匙,当打开这个设备环境后,EFS产生FEK(FileEncryption Key,文件加密密匙)。这个文件使用DESX加密算法进行加密。

第三步: 获取公/私密匙对;如果这个密匙还没有的话(当EFS第一次被调用时),EFS产生一对新的密匙EFS使用1024位的RSA算法去加密FEK。

第四步:EFS为当前用户创建一个数据解密块DataDecryptong Field(DDF),在这里存放FEK然后用公钥加密FEK。

第五步:如果系统设置了加密的代理,EFS同时会创建一个数据恢复块DataRecovery Field(DRF),然后把使用恢复代理密钥加密过的FEK放在DRF。每定义一个恢复代理,EFS将会创建一个DataRecovery Agent(DRA)。Winxp没有恢复代理这个功能,所以没有这一步.,这个区域的目的是为了在用户解密文件的中可能解密文件不可用。这些用户叫做恢复代理,恢复代理在EDRP(EncryptionData Recovery Policy,加密数据恢复策略)中定义,它是一个域的安全策略。如果一个域的EDRP没有设置,本地EDRP被使用。在任一种情况下,在一个加密发生时,EDRP必须存在(因此至少有一个恢复代理被定义)。DRF包含使用RSA加密的FEK和恢复代理的公钥。如果在EDRP列表中有多个恢复代理,FEK必须用每个恢复代理的公钥进行加密,因此,必须为个恢复代理创建一个DRF。

第六步:包含加密数据、DDF及所有DRF的加密文件被写入磁盘。

第七步: 在加密文件所在的文件夹下将会创建一个叫做Efs0.tmp的临时文件。要加密的内容被拷贝到这个临时文件,然后原来的文件被加密后的数据覆盖。在默认的情况下,EFS使用128位的DESX算法加密文件数据。

第八步:在第一步中创建的文本文件和第七步中产生的临时文件被删除。

文件被加密后,只有可以从DDF或是DRF中解密出FEK的用户才可以访问文件。这种机制和一般的安全机制不同并意味着要想访问文件,除了要有访问这个文件的权力外还必须拥有被用户的公有密匙加密过的FEK。只有使用私有密匙解密文件的用户才可以访问文件。这样的话会有一个问题:就是一个可以访问文件的用户可把文件加密之后,文件真正的拥有者却不能访问文件。解决这个问题的办法:用户加密文件的时候只创建一个文件解密块DataDecryption Field(DDF),但是只后他可以增加附加用户到密匙队列。

2  恢复加密文件

2.1准备工作

1.恢复EFS加密文件将使用到的软件有FTKImager、mimikatz和OpenSSL。

2.从镜像中导出Windows加密使用的文件,用户证书(公钥)存放位置:

UserswangAppDataRoamingMicrosoftSystemCertificatesMyCertificates

私钥存放位置:

UserswangAppDataRoamingMicrosoftCryptoRSA

用户主密钥存放位置:

UserswangAppDataRoamingMicrosoftProtect

3.挂载镜像到本地计算机。

4.用户密码或NTLM SHA1值。

2.2判断文件归属

【实战】手工恢复EFS加密文件

图2.1 列出当前目录下的文件

【实战】手工恢复EFS加密文件

图2.2 判断加密文件归属

解密此文件需要的证书和对应的私钥应该有如下指纹:

0DCD 7A32 2FF7 C37F 9CBC 1655 36DB 92EF 79E9 9942。

 2.3获取证书

【实战】手工恢复EFS加密文件

图2.3 导出der格式的证书文件

现在我们已经导出了证书,证书存放在了

0DCD7A322FF7C37F9CBC165536DB92EF79E99942.der

文件当中。从程序输出的信息中我们知道私钥由MicrosoftEnhanced Cryptographic Provider v1.0 crypto provider管理,存放于名为的94602bae-8cb4-4017-8fbd-f9749da71cb1容器中。

2.4获取私钥

遗憾的是,私钥的文件名与容器的名称并不一致,所以只能通过逐一检查容器文件的pUniqueName属性来确定私钥容器存放的文件。

【实战】手工恢复EFS加密文件

图2.4 检查容器文件属性

通过对私钥容器文件的逐个检查,我们找到了存放私钥的文件是

29c47f6938002e2264a470da664d3670_df327f19-b3f3-4485-a97c-29cfa8a2f294

从程序的输出我们知道加密私钥的主密钥是{c64a8607-017c-4842-a5cb-0e20ddd3899d}。

2.5解密主密钥

解密主密钥你必须要有用户的密码,如果你没有密码的话:

1.可以使用本地账户的SHA1值来代替密码。

2.使用域备份秘钥恢复主密钥。

本案例中,我们使用用户的密码wang123和SID:

S-1-5-21-254907853-103419711-2982942390-1000

来解密主密钥。

【实战】手工恢复EFS加密文件

图2.5 获取主密钥

【实战】手工恢复EFS加密文件

图2.6 获取主密钥

程序输出的主密钥是

1b4c668a62bc533eeb39225d9dd37f5636c48d0b9a2f6db93dd457e36960bb2ac753151f17ff2fcb6da23e20c1f542efd3d0c3fab9c893f5ec2e7a3f02824ad5,

对应的SHA1值是

9c99eccdfea61a4c87d5453d49595fed1677f504

2.6解密私钥

【实战】手工恢复EFS加密文件

图2.7使用主密钥解密私钥

【实战】手工恢复EFS加密文件

图2.8 使用主密钥解密私钥

现在程序把私钥存放在了

raw_exchange_capi_0_94602bae-8cb4-4017-8fbd-f9749da71cb1.pvk

当中。

2.7构造正确的PFX证书

接下来使用OpenSSL软件构造可以导入系统的证书文件。

【实战】手工恢复EFS加密文件

图2.9 构造PFX证书

将构造好的cert.pfx导入系统。

【实战】手工恢复EFS加密文件

图2.10 导入后的证书

【实战】手工恢复EFS加密文件

图2.11证书指纹信息

2.8查看文件

导入证书之后,我们就有了对应的访问权限。

【实战】手工恢复EFS加密文件

图2.12查看加密文件属性

【实战】手工恢复EFS加密文件

图2.13成功解密出的文件

3  结语

本文通过介绍EFS加密流程,分析Windows操作系统执行EFS加密的过程及其产生的文件逐步还原出加密各环节使用到的非对称加密密钥,从而恢复出被加密的文件。

【实战】手工恢复EFS加密文件

原文始发于微信公众号(Th0r安全):【实战】手工恢复EFS加密文件

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月6日18:41:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【实战】手工恢复EFS加密文件https://cn-sec.com/archives/1261239.html

发表评论

匿名网友 填写信息