LANMAN工作原理

背景描述

     随着网络应用的不断深入,处于网络中的敏感信息被集中保存在服务器或存储设备中,甚至在网络客户端也往往保存着大量的敏感数据。为了保护这些敏感信息及相关数据不会丢失,或者被恶意用户非法访问,造成不必要的损失,网络用户往往会给这些服务器或存储设备进行Windows口令加密。但同时,随着破解密码的技术不断更新,加上用户设置密码存在一定的规律,例如使用年份、生日、名字和常用语等等作为密码,容易被猜解,所以了解密码破解的原理对保护用户信息显得很重要。

 工作原理

步骤:

1、    Windows系统本地帐号信息存储

    Windows NT/2000/2003/XP等系统使用sam文件作为本地用户账户数据库,所有本地帐号的登录名和口令等相关信息都保存在这个文件中。系统对保存在sam中的口令信息进行了加密处理,以保护口令信息的机密性。此外,在系统运行期间,sam文件被system账号锁定,即使是administrator账号也无法对其进行删除或拷贝等操作。 为了保证Windows操作系统的向后兼容性,Windows NT/2000/2003/XP系统采用了两种不同的机制对帐号的口令信息进行加密,所以在sam文件中每个用户口令对应着两个口令字,一个是LanMan版本的LM散列值,另一个是NT版本的NTLM散列值。

LanMan散列算法

LanMan散列算法对用户口令信息的处理过程:

第一,将所有英文字母均转换为大写字母形式;

    第二,检查密钥长度是否是14个字符,如果密钥长度不足14个字符则用0补足;(注:Windows NTWindows 2000系统密钥最长为14个字符,而Windows 2003xp无此限制,如果密钥超过14个字符,则不会生成LM散列值,而是只生成NTLM散列值)

第三,将密钥平均分成两份,每份含7个字符,再分别对每份密钥进行加密处理;

第四,最后将加密处理后的密码组合起来。得到最终的LM散列值。

LM Hash示例:假设明文口令是"Welcome"

    首先全部转换成大写,再变换成机器存储模式数据,在变换过程中如果明文口令不足14字节,则在后面添加0x00补足14字节。

"WELCOME" -> 57454C434F4D4500000000000000

(注:可以将明文口令复制到UltraEdit编辑器中使用十六进制方式查看即可获取明文口令的十六进制串)

    然后将上述代码分割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据

57454C434F4D45 -str_to_key()-> 56A25288347A348A

00000000000000 -str_to_key()-> 0000000000000000

    这两组8字节数据将采用DESKEY算法对魔术字符串"KGS!@#$%"进行标准DES加密,"KGS!@#$%"对应的机器代码为:4B47532140232425

56A25288347A348A -4B47532140232425进行标准DES加密-> C23413A8A1E7665F

0000000000000000 -4B47532140232425进行标准DES加密-> AAD3B435B51404EE

最后将加密后的这两组数据简单拼接,就得到了最后的LM Hash

LM Hash: C23413A8A1E7665FAAD3B435B51404EE

 

NTLM散列算法

IBM设计的LM Hash算法存在一些弱点,微软在保持向后兼容性的同时提出了NTLM Hash算法。

NTLM散列算法对用户口令信息的处理过程:

第一,将明文口令字符串转换成Unicode字符串;

第二,对所获取的Unicode串进行标准MD4单向哈希

NTLM Hash示例:假设明文口令是"123456"

    首先转换成Unicode字符串,与LM Hash算法不同,这次不需要添加0x00补足14字节

"123456" -> 310032003300340035003600

对所获取的Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值,共16字节。

310032003300340035003600 --------------> 32ED87BDB5FDC5E9CBA88547376818D4

采用MD4算法进行标准单向哈希

就得到了最后的NTLM Hash值:

NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4

    与LM Hash算法相比,明文口令大小写敏感,无法根据NTLM Hash判断原始明文口令是否小于8字节,并摆脱了魔术字符串"KGS!@#$%"的依赖;另外MD4是真正的单向哈希函数。

 

2、    口令破解原理

    无论口令加密采用DES算法、MD4算法,还是其他机制,因为它们具有单向不可逆的特性,要想从算法本身去破解,难度相当大,通常只存在理论上的可能性。由于各种加密算法都是公开的,虽然逆向猜解不可行,但从正向猜解却是很现实的。因为,设置口令的用户是人,人们在设置口令时,习惯使用一些容易记忆且带有明显特征的口令,如用户名、生日、电话号码、亲友姓名等,这就给我们破解口令带来机会。

在我们的实验当中,先通过向靶机植入模拟木马。查找系统的漏洞,当某些系统密码为弱口令,并且开启了IPC共享的时候,就可以通过我们复制上去的模拟木马,破解Windows口令,进行远程控制靶机。

    我们还可以制作一个字典文件:里面的条目都是经常用作口令的字串。猜解口令时,就从字典文件中读出一个条目作为口令,使用与系统口令加密算法相同的方法进行加密,得到的字串与口令文件中的条目进行比较,如果相同,则猜解成功;否则,继续下一次尝试。最终结果可能得到了真正的用户口令,也可能字典文件条目用尽而不能破解。 口令破解的方法主要是字典法,利用字典文件进行口令猜解。常见的口令猜解模式主要是:

字典模式:即使用指定的字典文件进行口令猜解。

 

    混合模式:即指定字典规则,对字典条目进行某种形式的变化,增加字典内容,提高猜解的效率。

    暴力模式:即遍历所有可能的密钥空间,进行口令猜解。

3、    口令破解方法

不同系统使用的口令保护方式不同,对应的口令破解方法、破解工具亦不同。

    Windows 9X系统:Windows 9X系统没有设置严格的访问控制,因此,可以通过重新启动系统等方法进入系统,然后将C:\Windows目录下所有的pwl文件(*.pwl)拷贝到磁盘上,最后,使用专用工具pwltool,即可破解出系统的口令。pwltool支持暴力、字典、智能3种模式的口令破解。

    Windows 2000系统:Windows 2K使用sam文件保存用户账号信息,系统运行期间,sam文件是被system账号锁定的,而且,sam文件信息在保存前经过压缩处理,不具有可读性。要破解Windows 2K系统的账号,就必须先获取sam文件,然后,使用工具L0phtcrack进行口令猜解工作。

获取sam文件的方法有:

   获取%SystemRoot%\system32\config\sam文件。这种方式适用于黑客可以直接接触目标主机,且该主机安装有多种操作系统。重新启动主机,进入其它操作系统,如Windows 98。如果Windows NT/2000是以FAT16/32磁盘格式安装的,则可以直接读取sam文件;如果Windows NT/2000是以NTFS磁盘格式安装的,则可以借助工具NTFS98,在Windows 9x中读写NTFS磁盘的内容,或者借助工具NTFSDOS,在DOS环境下读写NTFS磁盘内容。

   获取%SystemRoot%\repair\sam._文件。这种方式适用于系统做过备份操作或者创建过紧急修复盘的情况。 当系统进行备份,或创建紧急修复盘的时候,会将SAM内容拷贝到sam._文件中。sam._文件在系统运行期间不会被锁定,系统管理员可以任意读取它。但是,这种方法也具有一定的局限性。如果系统更改账号信息后没有再做备份的话,获取的sam._文件将没有任何价值。

   从注册表中导出SAM散列值。这种方法需要具有超级管理员权限。只要有超级管理员权限,利用某些工具,如pwdump,就可以将注册表中的SAM散列值转储成类似UNIX系统passwd格式的文件。

   嗅探网络中SMB报文中包含的口令散列值。Windows系统提供网络服务时通常都是借助SMB来传递数据,其中包括身份认证和加密过程。当网络中存在类似网络文件共享、Windows域登录注册等借助于SMB的网络通信时,监视网络中的SMB数据传输,并加以识别筛选,就可以获取到有价值的口令散列字符串。

 

4、    防止口令攻击

 

    首先,就是要在黑客之前,对自己的系统进行认真审计。利用诸如LC5SAMInside、之类的黑客工具,了解本系统的弱点所在,然后有针对地改进,以便更从容地应对外来的攻击。其次,加强用户账号及口令的安全策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值