一种离线解析dpapi加密数据的方法

文档序号:7794505阅读:749来源:国知局
一种离线解析dpapi加密数据的方法
【专利摘要】本发明公开一种离线解析DPAPI加密块数据的方法,包括步骤:S1.加载待分析设备数据源,确定待分析设备数据源磁盘Windows操作系统分区;S2.获取系统账号主密钥文件、System文件和Security文件;S3.通过扫描DPAPI加密块特征值获取待解密文件的DPAPI加密块;S4.解析System文件和Security文件获取Pbkdf2密钥明文;S5.获取解密系统账号主密钥文件所需的关键信息,使用Pbkdf2密钥解密系统账号主密钥文件得到主密钥明文;S6.使用主密钥解密DPAPI加密块得到数据明文。本发明的有益效果为:本发明无需依赖于目标数据源所在的操作系统,也无需知道计算机的用户名和密码,即可对DPAPI系统存储区的加密数据进行解密,同时也满足对证据源只读操作和跨平台解密的需求。
【专利说明】—种离线解析DPAPI加密数据的方法
【技术领域】
[0001]本发明涉及数据加解密领域,特别是涉及一种离线解析DPAPI加密数据的方法。【背景技术】
[0002]美国微软公司的Windows操作系统是目前最流行的PC操作系统,其数据安全性一直备受关注。从WindoWS2000开始,微软提供了一组简单易用的系统级数据保护接口(Data Protection Application Programming Interface,即 DPAPI,包含加密函数CryptProtectData和解密函数CryptUnprotectData),为应用程序和操作系统提供数据保护服务。该组接口的显著特点是加密和解密操作必须在同一台计算机上进行,由操作系统内部完成密钥的产生、存储和使用,消除了应用程序密码密钥的管理问题。DPAPI的应用范围十分广泛,如远程桌面密码、FTP账号密码、无线上网密码、EFS的私钥加密、部分邮箱账号密码、常见浏览器的上网自动表单、以及国内外的一些即时通讯软件,在密码密钥的保护上也用到了该组接口。所以离线解析DPAPI加密数据,在电子取证行业有着不小的现实意义。
[0003]目前,大部分的取证软件都是采用现场在线的方式解析DPAPI加密数据,即通过直接启动或动态仿真数据源所在的操作系统,登录对应的账户,安装并启动取证软件,软件内部通过调用CryptUnprotectData函数来解密DPAPI的加密数据块,最后在界面上展示结果。这种方法直接依赖于目标源操作系统,如果系统遭破坏无法启动则数据无法解密,且操作过程中容易污染数据源,破坏证据的只读性。
[0004]另外,国内虽有一专利提出了针对用户存储区的DPAPI加密数据的解密,该方法能够解析用户账户级的加密数据,但需要事先知道用户登录账户对应的SID和明文密码,否则无法解密,同时该方法只针对DPAPI用户存储区的加密数据,无法针对系统存储区、也就是本机系统级的DPAPI加密数据进行解密。

【发明内容】

[0005]为解决上述技术问题,本发明提供了一种无需依赖于目标数据源所在的操作系统,且无需知道待解密数据源操作系统用户登录账户密码,即可对DPAPI系统存储区的加密数据进行解密的离线解析DPAPI加密数据的方法。
[0006]一种离线解析DPAPI加密数据的方法,包括步骤:S1、加载待分析设备数据源,确定待分析设备数据源磁盘Windows操作系统分区;S2、根据所述操作系统分区获取系统账号主密钥文件、System文件和Security文件;S3、通过扫描DPAPI加密块特征值获取待解密文件的DPAPI加密块;S4、解析System文件和Security文件获取Pbkdf2密钥明文;S5、获取解密系统账号主密钥文件所需的关键信息,使用Pbkdf2密钥解密系统账号主密钥文件得到主密钥明文;S6、使用主密钥解密DPAPI加密块得到数据明文。
[0007]本发明的有益效果为:本发明通过Pbkdf2密钥解密系统账号主密钥文件得到主密钥明文,由主密钥解密DPAPI加密块得到数据明文,实现对DPAPI系统存储区加密数据进行离线解析,并且本发明无需直接启动或动态仿真数据源所在设备的操作系统就能实现以只读方式读取数据源DPAPI加密数据,无需登录用户的账号和明文密码即可进行数据解密。进一步地,本发明不依赖于WindowsCryptAPI库,无需调用CryptAPI函数接口,可满足跨平台使用的要求。
【专利附图】

【附图说明】
[0008]图1为本发明实施方式一种离线解析DPAPI加密数据的方法的流程图。
【具体实施方式】
[0009]为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
[0010]一、对本发明涉及的缩略语和关键术语进行定义和说明:
[0011]DPAPI:(Data Protection Application Programming Interface)
[0012]加密函数CryptProtectData:微软Windows操作系统提供的加密接口 ;
[0013]解密函数CryptUnprotectData:微软Windows操作系统提供的解密接口 ;
[0014]DPAPI加密块:用加密函数CryptProtectData加密过的数据;
[0015]Pbkdf2运算:一种基于迭代复杂度保证密码安全的加密算法(Password-BasedKey Derivation Function2),首先,它需要选取一种传统的加密算法,通常为单向散列算法,如SHA-1算法做为它的基础加密算法;其次,它需要指定迭代次数和干扰值,这个迭代次数是用来确定基础加密算法被执行的次数,次数越多则密码被暴力破解的可能性越低,数据越安全;
[0016]MD5哈希运算:单向散列算法,产生长度为128位的消息摘要;
[0017]SHA-1哈希运算:单向散列算法,产生长度为160位的消息摘要;
[0018]SHA256哈希运算:单向散列算法,产生长度为256位的消息摘要;
[0019]SHA-512哈希运算:单向散列算法,产生长度为512位的消息摘要;
[0020]DES-3:三重数据加密标准(Triple Data Ecryption Standard),一种对称密钥加密算法,衍生于DES加密算法;
[0021]AES-256:高级加密标准(Advanced Entryption Standard),在密码学中又称Rijndael加密法,也是一种对称密钥加密算法,安全性高于DES ;
[0022]HMAC算法:加密散列函数,又叫做基于散列的消息认证代码(Hash-basedMesssage Authentication Code),使用加密散列函数需要一个密钥,同时还需指定一个散列函数,可以是MD5或SHA-1等,HMAC主要用来确定加密的数据不被篡改;
[0023]主密钥文件唯一标识masterKeyGuid:主密钥文件的文件名,是一个全局唯一标识的Guid字符串,存放在系统账号目录;
[0024]数据块加密算法标识dwCryptoAlgld:算法标识(ALG_ID)是微软定义的一系列32位整数类型值,用于指明运算过程中所采用的加密或哈希算法。其中,以0x66开头的标识通常标识对称加密算法,以0x80开头的标识通常标识哈希算法。例如加密算法标识CALG_3DES,其对应值为0x6603,表示为三重数据加密标准算法;
[0025]加密密钥长度dwCryptoAlgldKeyBitLen:加密算法的密钥位数,例如DES-3加密算法的密钥长度是168位;
[0026]加密算法干扰值pbyCryptoAlgSalt:干扰值(Salt Value),也叫做“盐”,通常也是随机数,算法中加入干扰值可以有效防止预先计算好的彩虹表的攻击;
[0027]数据块哈希算法标识dwHashAlgld:算法标识(ALG_ID)是微软定义的一系列32位整数类型值,用于指明运算过程中所采用的加密或哈希算法。其中,以0x66开头的标识通常标识对称加密算法,以0x80开头的标识通常标识哈希算法。例如哈希算法标识CALG_MD5,其对应值为0x8003,表示为MD5哈希散列算法;
[0028]消息摘要长度dwHashDigestBitLen:哈希算法计算后得到的散列值长度,如MD5哈希算法的消息摘要长度是128位;
[0029]密文长度dwDpapiCipherLen:Dpapi加密数据块的大小;
[0030]主密钥干扰值pbkSalt:干扰值(Salt Value),也叫做“盐”,通常也是随机数,算法中加入干扰值可以有效防止预先计算好的彩虹表的攻击;
[0031]Pbkdf2算法迭代次数dwPbkdf2Num:Pbkdf2算法的迭代次数,该值越高也不容易被破解,但运算速度也会相应受影响;
[0032]主密钥哈希算法标识dwHmacAlgld:算法标识(ALG_ID)是微软定义的一系列32位整数类型值,用于指明运算过程中所采用的加密或哈希算法。其中,以0x66开头的标识通常标识对称加密算法,以0x80开头的标识通常标识哈希算法。例如哈希算法标识CALG_MD5,其对应值为0x8003,表示为MD5哈希散列算法;
[0033]主密钥加密算法标识dwCryptoAlgld:算法标识(ALG_ID)是微软定义的一系列32位整数类型值,用于指明运算过程中所采用的加密或哈希算法。其中,以0x66开头的标识通常标识对称加密算法,以0x80开头的标识通常标识哈希算法。例如加密算法标识CALG_3DES,其对应值为0x6603,表示为三重数据加密标准算法;
[0034]主密钥密文pbyMasterCipher:主密钥经过加密后生成的密文;
[0035]SID:安全标识符(Security Identifiers),是标识用户、组和计算机账号的唯一号码;
[0036]JD:注册表当前使用的系统安全策略的子键之一;
[0037]Skewl:注册表当前使用的系统安全策略的子键之一;
[0038]GBG:注册表当前使用的系统安全策略的子键之一;
[0039]Data:注册表当前使用的系统安全策略的子键之一;
[0040]System文件:Windows的注册表文件之一,存储计算机硬件和系统的信息;
[0041]Security文件:Windows的注册表文件之一,存储安全性设置信息;
[0042]Syskey:用来保护系统SAM文件的一个密钥,长度一般为16个字节;
[0043]二、对本发明的技术方案进行详细阐述如下:
[0044]请参阅图1,为本发明一实施方式一种离线解析DPAPI加密数据的方法的流程图,该方法包括步骤:
[0045]S1、加载待分析设备数据源,确定待分析设备数据源磁盘Windows操作系统分区;
[0046]S2、根据所述操作系统分区获取系统账号主密钥文件、System文件和Security文件;
[0047]S3、通过扫描DPAPI加密块特征值获取待解密文件的DPAPI加密块;[0048]S4、解析System文件和Security文件获取Pbkdf2密钥明文;
[0049]S5、获取解密系统账号主密钥文件所需的关键信息,使用Pbkdf2密钥解密系统账号主密钥文件得到主密钥明文;
[0050]S6、使用主密钥解密DPAPI加密块得到数据明文。
[0051]所述步骤SI具体包括步骤:
[0052]S11、通过写保护设备加载待分析设备数据源;
[0053]S12、通过识别Windows文件夹、注册表文件、休眠文件和页面交换文件的路径确定待分析设备数据源磁盘Windows操作系统的系统分区。
[0054]所述写保护设备可以是只读锁设备也可以是只读设备,采用写保护设备进行数据读取可以防止对待分析设备数据源造成数据破坏。
[0055]以真机环境下C盘为系统分区为例,所述步骤S2中操作系统账号的主密钥文件、System文件和Security文件的完整路径如表一所示:
[0056]表一、主密钥文件、System文件和Security文件的路径
[0057]
【权利要求】
1.一种离线解析DPAPI加密数据的方法,其特征在于,包括步骤: 51、加载待分析设备数据源,确定待分析设备数据源磁盘Windows操作系统分区; 52、根据所述操作系统分区获取系统账号主密钥文件、System文件和Security文件; 53、通过扫描DPAPI加密块特征值获取待解密文件的DPAPI加密块; 54、解析System文件和Security文件获取Pbkdf2密钥明文; 55、获取解密系统账号主密钥文件所需的关键信息,使用Pbkdf2密钥解密系统账号主密钥文件得到主密钥明文; 56、使用主密钥解密DPAPI加密块得到数据明文。
2.根据权利要求1所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤SI具体包括步骤: 通过写保护设备加载待分析设备数据源; 通过识别Windows文件夹、注册表文件、休眠文件和页面交换文件的路径确定待分析设备数据源磁盘Windows操作系统的系统分区。
3.根据权利要求1所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤S3中DPAPI加密块特征值为DPAPI加密块头部20个固定字节:{0x01, 0x00, 0x00, 0x00, OxDO,0x8C, 0x9D, OxDF, 0x01, 0x15, OxDI, 0x11, 0x8C, 0x7A, 0x00, OxCO, 0x4F, 0xC2, 0x97, OxEB}。
4.根据权利要求1所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤S3还包括记录DPAPI加密块在待解密文件中的偏移量。`
5.根据权利要求1所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤S4具体包括步骤: 解析System文件获取操作系统当前使用的控件组; 根据操作系统当前使用的控件组计算操作系统的syskey ; 解析Security文件获取本地安全认证子系统服务的相关配置信息,从相关配置信息中读取系统安全策略版本号值PolRevision,判断PolRevision是否大于0x00010009 ; 当PolRevision小于0x00010009时,读取系统安全策略加密密钥PolSecretEntryptionKey,并读取 Pbkdf2 密钥的密文内容 CurrVal ; 判断CurrVal的第八个字节的值是否为1,当为I时,使用Keyl对Pbkdf2密文进行DES解密得到Pbkdf2密钥明文,否则,使用key2对Pbkdf2密文进行DES解密得到Pbkdf2密钥明文, 所述keyl为用Unicode编码字符串“823543”做为密码,字符串“823543”的长度和内容做为明文,进行DES加密得到的一个24字节的密文; 所述key2为对syskey进行一次MD5哈希运算,并将该运算结果做为参数对系统安全策略加密密钥PolSecretEntryptionKey的60~76字节进行1000次的MD5哈希运算得到散列值Kl,再将散列值Kl做为RC4算法的解密密钥对PolSecretEncryptionKey的12~60字节进行RC4解密得到的明文; 当PolRevision大于或等于0x00010009时,读取系统安全策略加密密钥链表PolEKList,对syskey进行一次SHA256哈希运算,并将该运算结果做为参数对PolEKList的28~60字节进行1000次SHA256哈希运算得到散列值K2,将散列值K2做为AES-256算法的解密密钥对PolEKList60字节之后的内容进行AES-256解密得到PolEKList中密钥的个数、索引值和对应的密钥值; 构建一个内容为索引值与密钥值对应的Pbkdf2密钥链表KeyList,将解密后PolEKList中的索引值和对应的密钥值导入密钥链表KeyList中; 读取Pbkdf 2密钥的密文内容CurrVal,在CurrVal的4~20字节中取得PolEKList的密钥值的索引值,根据该索引值从Pbkdf2密钥链表KeyList中获取PolEKList的密钥; 对PolEKList的密钥进行一次SHA256哈希运算,并将该运算结果做为参数对CurrVal的28~60字节进行1000次SHA256哈希运算得到散列值K3,将散列值K3做为AES-256算法的解密密钥对CurrVal的60字节之后的内容进行AES-256解密得到Pbkdf2密钥明文。
6.根据权利要求5所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤S5具体包括步骤: 获取解密系统账号主密钥文件所需的关键信息,该关键信息包括主密钥文件唯一标识masterKeyGuid、加密算法干扰值pbyCryptoAlgSalt、数据块哈希算法标识dwHashAlgld、额外熵参数pOptionalEntropy和数据块哈希算法标识dwHashAlgld ; 根据主密钥文件唯一标识masterKeyGuid得到DPAPI加密块的主密钥文件,所述主密钥文件共包含5个数据单元,分别为主密钥头部单元、用户主密钥单元、本地加密密钥单元、历史凭据标识单元和域密钥备份单元; 解析用户主密钥单元获取主密钥干扰值pbkSalt、Pbkdf2算法迭代次数dwPbkdf2Num以及主密钥哈希算法标识dwHmacAlgld ;` 以Pbkdf2算法迭代次数dwPbkdf2Num、主密钥哈希算法标识dwHmacAlgld和主密钥干扰值pbkSalt做为输入参数,对Pbkdf2密钥明文进行Pbkdf2运算,得到运算结果bySessionKeyAndIV ; 判断 PolRevision 是否大于 0x00010009 ; 当PolRevision小于0x00010009时,所述结果bySessionKeyAndIV长度为32字节,将bySessionKeyAndIV的前24字节和后8字节分别做为DES-3算法的解密密钥和初始化向量对用户主密钥单元的主密钥密文进行DES-3解密,得到的明文最后64字节即为主密钥明文byMasterKey; 当PolRevision大于或等于0x00010009时,所述结果bySessionKeyAndIV长度为48字节,将bySessionKeyAndIV的前32字节和后16字节分别做为AES-256算法的解密密钥和初始化向量对用户主密钥单元的主密钥密文进行AES-256解密,得到的明文最后64字节即为主密钥明文byMasterKey。
7.根据权利要求6所述的离线解析DPAPI加密数据的方法,其特征在于,所述步骤S6具体包括步骤: 根据所述数据块哈希算法标识dwHashAlgld对主密钥明文byMasterKey进行哈希运算得到主密钥哈希byMasterKeyHash ;根据所述加密算法干扰值pbyCryptoAlgSalt、数据块哈希算法标识dwHashAlgld、额外熵参数pOptionalEntropy,以主密钥哈希byMasterKeyHash做为输入进行HMAC哈希运算,得到散列值hmacMasterkey ; 根据数据块哈希算法标识dwHashAlgld和数据块加密算法标识dwCryptoAlgld,以散列值hmacMasterkey做为输入,生成对称解密密钥IastSessionKey ; 根据数据块加密算法标识dwCryptoAlgld,以对称解密密钥IastSessionKey为解密密钥、初始化向量为空,对DPAPI加密块密文内容pbyDpapiCipher进行解密,获得DPAPI加密块明文。
8.根 据权利要求7所述的离线解析DPAPI加密数据的方法,其特征在于,所述对称解密密钥lastSessionKey使用完后立即从内存中清除。
【文档编号】H04L9/06GK103701829SQ201410004313
【公开日】2014年4月2日 申请日期:2014年1月3日 优先权日:2014年1月3日
【发明者】苏再添, 吴少华, 林艺滨 申请人:厦门市美亚柏科信息股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1