微点交流论坛
» 游客:  注册 | 登录 | 帮助

 

作者:
标题: 关于保护安全模式的探讨
xiaoxiaowo
新手上路





积分 8
发帖 8
注册 2008-10-17
#1  关于保护安全模式的探讨

一、先了解一下控制系统启动的三个注册表项
       在HKEY_LOCAL_MACHINE\SYSTEM下,存在着CurrentControlSet、ControlSet001、ControlSet002这三个子键,他们是与系统启动有关的三个项,里面记录着操作系统配置的信息,包括了系统控制、驱动、服务等信息。
       ControlSet001是系统默认的配置信息,但是为了避免序号混乱,windows启动时会从ControlSet001复制一份副本,作为操作系统当前的配置信息,也就是CurrentControlSet。那么ControlSet002是什么呢?当操作系统每成功启动一次,都将CurrentControlSet和ControlSet001中的配置信息复制到ControlSet002中,ControlSet002就成了“最近一次成功启动的配置信息”,也就是启动时按F8之后,你所看到的选项“最后一次正常启动的配置”。


二、为什么编写规则禁止对HKML下“\SYSTEM\CurrentControlSet\Control\SafeBoot\**”作写入、创建、删除之后,仍然可以在该项下写入、创建、删除键和值呢?
       根据为什么水哥的国庆规则根本锁不住安全模式的注册表项帖中麦粉_幽芸提供的信息可以知道,如果我们编写规则禁止对HKML下“\SYSTEM\**\SafeBoot\**”作写入、创建、删除之后,HKML\SYSTEM\CurrentControlSet\Control\SafeBoot\下就不能写入、创建、删除了,并且出现如下日志:
2007-10-28        8:01:36        已由访问保护规则禁止         LYM\hp        C:\WINDOWS\regedit.exe        \REGISTRY\MACHINE\SYSTEM\ControlSet001\Control\SafeBoot\新值 #1        用户定义的规则:444        已阻止的操作: 创建
       明显的能看出,咖啡禁止操作是对HKML\SYSTEM\ControlSet001\Control\SafeBoot\键而不是对HKML\SYSTEM\CurrentControlSet\Control\SafeBoot\键的。根据这些信息,结合上面第一点中所说我作如下猜测:ControlSet001是真的系统配置信息,而CurrentControlSet只是ControlSet001的一个镜像。我们要修改启动配置,实际上修改的是ControlSet001,当我们似乎是在CurrentControlSet下写信息时,实际上首先写的是ControlSet001,又或者在CurrentControlSet下写入的信息只在内存中先作缓存,然后写入ControlSet001,而实际并未在CurrentControlSet下写入信息;而后CurrentControlSet作为镜像映射ControlSet001内的信息,只有读取的操作,于是CurrentControlSet被更新了,得到了面向用户的配置信息,因为只有读取,所以也不存在被规则阻挡了。


三、如何解决问题?
       当然,上面的只是我的猜测。而现在的实际情况就是,根据幽芸提供的日志,我们清楚看出,当我们在CurrentControlSet下写信息的时候,阻挡ControlSet001操作的规则报警了,我们在CurrentControlSet下写信息的时候,作了在ControlSet001下写信息这一操作。
       无论你是否认同我的猜测,问题都将以下面的方式得到解决:
       编写注册表保护规则,命名为“保护安全模式免被破坏”,包含进程为*,要保护的项是HKLM下的\SYSTEM\ControlSet001\Control\SafeBoot\**,阻止的操作为写入、创建、删除。
       然后\SYSTEM\CurrentControlSet\Control\SafeBoot\下的修改将不能实现了。

四、补充
       在网上找到的资料,大家请看,关于使用了“最近一次的正确配置”之后会发生的事情:

HKLM\system注册表项中还有一个select的子项,其中有几个整数键,分别是:
“Current”数据项目表示 Windows XP 在这次启动过程中使用的控件组。  
“Default”数据项目表示 Windows XP 在下次启动时将使用的控件组,它与这次启动使用的控件组相同。  
“LastKnownGood ”数据项目表示您在启动过程中选择“最近一次的正确配置”时 Windows XP 将使用的控件组。  
“Failed”数据项表示 Windows XP 在其中保存失败启动产生的数据的控件组。 此控件组在用户第一次调用“最近一次的正确配置”选项之前并不实际存在。  
对应上面四个值,系统默认时其顺序是:001、001、002、无;
第一次使用“lastknowngood”后:002、002、003、001
第二次使用“lastknowngood”后:003、003、004、002(之前的备份001被002覆盖掉,001组消失)
第三次使用“lastknowngood”后:004、004、001、003(002被003覆盖,而当004要生成新的“lastknowngood”时,001正好可用,于是001重生,002消失)
       当大家使用了“最近一次的正确配置”之后,ControlSet001被认为时错误的配置被封存起来(001记录在在Failed中,不使用了),而用ControlSet002启动,相应生成ControlSet003作为“最近一次的正确配置”,002取代了001的位置,003又取代了002的位置。按上面所说,这些ControlSet会循环使用,最多也就4个,分别为001、002、003、004。
       为了改善保护效果,避免因为使用“最近一次的正确配置”之后,保护ControlSet001就不起作用(因为002取代了001的位置了),因此对保护的项作更改,更改成:要保护的项是HKLM下的\SYSTEM\ControlSet00*\Control\SafeBoot\**。这样就可以了。

五、关于ControlSet001、ControlSet002以及CurrentControlSet
       下午跟笑笑讨论了很久的问题,关于“CurrentControlSet”和“ControlSet00?”这两个键,究竟他们是怎样的关系呢?为什么更改ControlSet001的内容和权限,CurrentControlSet就会作同样的修改呢?反之也是这样,为什么呢?
       晚上我在微软官网找到了些信息,相信大家会有兴趣的,地址是http://support.microsoft.com/kb/100010/zh-cn
       当然,内容都是英文……那么我对部分重要信息作一下解释。
       大家应该会看到这么一段: 引用:
ControlSet001 may be the last control set you booted with, while ControlSet002 could be what is known as the last known good control set, or the control set that last successfully booted Windows NT. The CurrentControlSet subkey is really a pointer to one of the ControlSetXXX keys.

※ ※ ※ 本文纯属【xiaoxiaowo】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
2008-10-18 15:13
查看资料  发送邮件  发短消息   编辑帖子
xiaomi
新手上路





积分 18
发帖 18
注册 2008-9-4
#2  

说的太专业了。。。不明白

※ ※ ※ 本文纯属【xiaomi】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
2008-10-23 16:41
查看资料  发送邮件  发短消息   编辑帖子



论坛跳转:

可打印版本 | 推荐 | 订阅 | 收藏


[ 联系我们 - 东方微点 ]


北京东方微点信息技术有限责任公司 福建东方微点信息安全有限责任公司

闽ICP备05030815号