|
| |
精品推荐 |
 |
|
| |
|
|
|
|
SAM的散列存储加密解密算法
|
日期:2007年7月20日 作者:清风网络学院 查看:[大字体
中字体 小字体]
|
SAM的散列存储加密解密算法以及SYSKEY的计算 转摘请注明作者和安全焦点 作者:FLASHSKY SITE:WWW.XFOCUS.NET,WWW.SHOPSKY.COM 邮件:flashsky@xfocus.org 作者单位:启明星辰积极防御实验室
SAM中存放在密码散列这是大家都知道的,但是其密码存放在对应相对SID的V键下面却是一种加密的形式,如何通过这个加密的串计算出密码散列了,大家用PWDUMP3这样的工具可以导出散列来,主要原理是系统空间会存在一个sampsecretsessionkey,PWDUMP3就是拷贝一个服务到对方机器上,读出这个lsass进程空间的sampsecretsessionkey再进行解密的,其实这个sampsecretsessionkey的生成也是非常复 杂的,我们这里做一个比PWDUMP3更深入的一个探讨和分析,sampsecretsessionkey的计算与生成,这样我们就能在直接从物理文件中计算出sampsecretsessionkey,来解密注册表中的密码散列,对于一个忘记密码的系统或一个不知道用户口令但已经获得磁盘的系统有这重要意义,这样我们完全就能通过注册表文件的分析来解密注册表中的密码散列。 通过分析,我们发现以前在NT中常说的SYSKEY在W2K系统的这个过程中起着非常重要的作用,其实SYSKEY已经做为W2K的一个固定组件而存在了,我们下面给出一个整个过程: 系统引导时: 计算获得SYSKEY 读取注册表中的SAM\SAM\Domains\Accoun\V中保存的KEY信息(一般是最后的0X38字节的前0X30字节) 使用SYSKEY和F键的前0X10字节,与特殊的字串"!@#$%^&*()qwertyUIOPAzxcvbnmQQQQQQQQQQQQ)(*@&%","0123456789012345678901234567890123456789"做MD5运算,再与F键的后0X20字节做RC4运算就可以获得sampsecretsessionkey,这个 sampsecretsessionkey固定存放在LSASS进程中,作为解密SAM中加密数据到散列时用
------------------------------------------------- |SYSKEY | |F键信息的前0x10字节 |MD5 |"!@#$%^&*()qwertyUIOPAzxcvbnmQQQQQQQQQQQQ)(*@&%"|--->-------- |"0123456789012345678901234567890123456789" | |RC4 -------------------------------------------------- |------>sampsecretsessionkey | F键信息的后0x20字节 -------------------
当需要解密SAM中加密数据到散列时(如远程登陆): 读取sampsecretsessionkey,再与当前用户的相对SID,散列类型名(如LMPASSWORD,NTPASSWORD)做MD5运算获得针对这个用户密码散列的sessionkey 利用sessionkey用RC4解密第一道加密的散列,再将用户相对ID扩展成14字节做DES切分,生成DESECB,再对用RC4处理后的散列进行分开成2次DES解密就可以获得密码散列。 ------------------------- |sampsecretsessionkey | |sid |MD5 |"LMPASSWOR"/"NTPASSWOR"|--->sessionkey--- | | |RC4 2次DES(填充SID做KEY切分) ------------------------- |----->-------------------------->HASH | 对应的SAM中加密的密码散列 ---------------------------------
这个算法相当好,保证了不同用户的相同散列在SAM存放不一样(相对SID不一样),不同机器的同一SID同口令的SAM中的散列存放不一样(SYSKEY不同); 这个算法的DES/RC4都是可逆的,这样如果我们能通过离线(文件)方式获得SYSKEY的话(其他的信息都可以分析SAM文件获得),我们完全实现离线修改SAM中口令的效果,不过这需要对注册表的结构和SAM中V/F键的数据结构再做深入的研究,这里就不谈了。 那么SYSKEY是如何计算出来的呢?这可能是我发现MS最牛皮的一个地方了,先开始想一定会存放在注册表某处,呵呵,最后跟踪MS引导时候的WINLOGON进程才知道,SYSKEY是这样计算出来的,很多人会大掉眼镜吧: SYSKEY的计算是:SYSTEM\\CurrentControlSet\\Control\\Lsa下的 JD,Skew1,GBG,Data四个键值的CLASS值通过换位得来的,靠,佩服MS。这样我们完全可以离线分析注册表就能获得对其SAM的加密散列的导出或改写了。
下面就是给出的完全实现计算SYSKEY-》sampsecretsessionkey,对特定用户的SAM中加密的密码散列再解密的代码:当然如果从运行系统中解密散列也可以直接读取sampsecretsessionkey,就象PWDUMP3那样做的一样也是可以的,但是如果要实现离线的就还需要再分析更多的东西了。
上一篇:2k注册表外壳设置精解
下一篇:简明批处理教程
|
| SAM的散列存储加密解密算法 相关文章: |
|
|
|
| SAM的散列存储加密解密算法 相关软件: |
|
|
|
|