随笔-2  评论-15  文章-4  trackbacks-0
SAM是什么?
也许大家在网上看了许多的关于sam的传奇的故事吧!那么今天就让我----偏执狂带你们进入sam的所有吧!
 
第一节:初级认识sam
 
微软做了两个不同的系统骨架,一个叫Win32,我们用的Win9x/Me系统就附在它上面;另一个叫NT(New Technology),也就是WinNT/2000/XP/2003的骨架。不过很不幸,微软有点“偏心”,Win32的骨架做得明显有点过小,所以它成了瘦子,而NT则是典型的美国壮汉。更不幸的是,微软给Win32配备的PWL(PWL是Windows的登录密码文件,文件名即用户名,储存了加密的用户密码,类似Unix的password文件。)门卫是个花瓶,不仅连个家门都看不住,而且嘴巴也守不住秘密;而NT呢,又捞了个好处,SAM门卫尽心尽责,嘴巴也难撬开。NT内核Windows操作系统的密码安全性较Win32内核Windows操作系统的密码安全性高出很多跟SAM不无关系,在这篇文章里,我们就一起来认识一下NT内核Windows操作系统的看门神——SAM。
它只听本地安全认证(Local Security Authority)程序——LSASS.EXE的差遣,就连进门时的审查也是LSASS的指示。如果你把LSASS杀了,你就等着被赶出门吧——当然,对于普通用户来说,如果你试图用普通的进程管理工具或者Windows系统的进程管理杀掉“LSASS.EXE”进程的话,只会得到“该进程为关键系统进程,任务管理器无法结束进程。”的提示,本地安全认证(Local Security Authority)在Windows系统中主要负责以下任务:1.重新找回本地组的SID和用户权限;2.创建用户的访问令牌;3.管理本地安装的服务所使用的服务账号;4. 存储和映射用户权限;5.管理审核的策略和设置;6.管理信任关系。
由于一些设计上的失误,在WinNT/2000里,如果你忘记了密码,那么你要做的不是呼天喊地,只需要在非NT环境里把SAM驱逐出硬盘就可以了。但是在XP以后的Windows操作系统里,这个情况得以改善,如果你把sam踢了,NT也躲着死活不肯出来了。 当然,这也并不是说XP以后的Windows的操作系统密码都无法破解,要知道:经典的LC4和NtPassword都专门拿SAM开刀.
windows NT及win2000中对用户帐户的安全管理使用了安全帐号管理器(security account manager)的机制,安全帐号管理器对帐号的管理是通过安全标识进行的,安全标识在帐号创建时就同时创建,一旦帐号被删除,安全标识也同时被删除。安全标识是唯一的,即使是相同的用户名,在每次创建时获得的安全标识都时完全不同的。因此,一旦某个帐号被删除,它的安全标识就不再存在了,即使用相同的用户名重建帐号,也会被赋予不同的安全标识,不会保留原来的权限。
第二节: 帐号信息在SAM文件中是如何存储
 
在SAM文件中保存了两个不同的口令信息:LanManager(LM)口令散列算法和更加强大的加密NT版。LM就是NT口令文件的弱点。我们来看看LM口令算法是如何加密口令的,考虑这样一个口令:Ba01cK28tr,这样的口令已经可以称的上是一个安全的口令了,虽然没有!#等特殊字符,但是已经包含大写字母,小写字母和数字,并且具有无规律性。可以认为是符合安全的要求的一个口令。 LM对口令的处理方法是:如果口令不足14位,就用0把口令补足14位,并把所有的字母转称大写字母。之后将处理后的口令分成两组数字,每组是7位。刚才我们所提到的口令经处理后就变成BA01CK2和8TR0000部分。然后由这两个7位的数字分别生成8位的DES KEY,每一个8位的DES KEY都使用一个魔法数字(将0x4B47532140232425用全是1的一个KEY进行加密获得的)再进行一次加密,将两组加密完后的字符串连在一起,这就是最终的口令散列。这个字符传看起来是个整体,但是象L0phtcrack这样的破解软件,他能将口令字符串的两部分独立的破解,因此,破解上面所提到口令(10位),由于口令已经被分解为两部分破解,而后面的那部分口令由于只有3位,破解难度可想而知并不困难。实际的难度就在前面的七位口令上了。因此就NT而言,一个10位的口令与一个7位的口令相比并没有太高的安全意义。由此还可以了解:1234567*$#这样的口令可能还不如SHic6这样的口令安全。(关于如何设置安全口令的问题不是本文的范围,有兴趣的可以参考相关文章) 而正式的口令(加密NT版)是将用户的口令转换成unicode编码,然后使用MD4算法将口令加密。
NT之所以保留两种不同版本的口令是由于历史原因造成的,在一个纯NT的环境中应该将LAN manager口令关闭。因为LAN manager口令使用了较弱的DES密钥和算法,比较容易破解。相比较之下,使用较强加密算法的NT正式口令要安全些。 但是这两种口令的加密方法从总体上来说强度还是不足,因此,微软在win NT4的SP3之和以后的补丁中,提供了一个syskey.exe的小工具来进一步加强NT的口令。这个软件是可以选择使用的,管理员只要运行一下这个程序并回答一些设置问题就可以添加这项增强功能。(windows2000已经作为缺省安装设置了) syskey被设计用来防止轻易获得SAM口令,它是如何工作的呢? 当syskey被激活,口令信息在存入注册表之前还进行了一次加密处理。然而,在机器启动后,一个旧的格式的信息还是会保存在内存中,,因为这个旧格式的口令信息是进行网络验证的所需要的。 可以这样认为:syskey使用了一种方法将口令信息搞乱。或者说使用了一个密钥,这个密钥是激活syskey由用户选择保存位置的。这个密钥可以保存在软盘,或者在启动时由用户生成(通过用户输入的口令生成),又或者直接保存在注册表中。由于没有官方的正式技术说明如何关闭syskey,所以syskey一旦启用就无非关闭,除非用启用syskey之前的注册表备份恢复注册表。(关于将syskey激活后系统有什么发生了什么,如何关掉syskey呢? 见: http://blog.csdn.net/suspension/archive/2004/11/08/172185.aspx )
 
第三节:解决“不小心删除SAM文件”的方法
解决问题:  忘了XP的登陆密码,是不能通过删除sam文件来解决的,那些“网上的办法”害了很多人。  若碰到此问题,可以进行下述操作: 将%windir%\Repair文件夹的sam文件复制到%windir%\system32\config文件夹。 故障恢复控制台下执行下述命令(示例):   copy c:\windows\repair\sam c:\windows\system32\config\sam   如果是双系统,可以在另外一个系统上执行这个复制/粘贴操作  或:将硬盘做从盘挂到其他的2K或XP系统下进行这个操作。   注意:Repair下的sam文件是当初安装XP时产生的,这样操作后会丢失安装系统后你自己在系统中创建的用户和用户组。这样操作成功登陆后,如果系统打开了系统还原,可以还原到最新的还原点。当然,如果你的系统做过ASR备份,可以直接使用ASR备份恢复sam文件。  
(ASR:Security Accounts Manager,但home版不支持ASR)
 
第四节: 关于SAM数据库分析的结论:
 
SAM HACK是非常有危险性的。不正确的修改会将系统的安全数据管理器破坏,造成系统启动问题,虽然可以通过删除SAM文件来让启动恢复。如果能够熟悉SAM的结构,你将发现,可以对用户名与用户名之间、用户组与用户组之间进行调换,以及帐户和帐户组伪造,完全打破微软的帐户格局。并且非常隐蔽,让帐户相关的API函数摸不着头脑。虽然微软处理帐号信息中犯了不少逻辑问题,但是安全帐号数据库并非不安全,所有操作都必须能完全拥有管理员权限。
只有注册用户登录后才能发表评论。