扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
对于Windows系统来说,注册表和系统的安全稳定运行休戚相关。正因如此,它也成了系统的软肋,任何不当操作或者恶意破坏都会造成灾难性的后果。其实,为了减少因为上述安全风险,注册表有一些内建的安全限制(比如注册表默认限制某些区域只能被特定用户看到,例如HKLM\SAM和HKLM\SECURITY就只能被LocalSystem用户看到)。但仅仅有这些安全措施还远远不能保证注册表的安全,我们还应该进行更加严格的安全控制。下面笔者和大家分享自己在这方面的一些经验。
说明:下面的所有操作是在Windows Server 2008上进行的,其中绝大多少适用于其他Windows系统,只有极少的部分是就要Server 2008的。
1、设置对注册表工具(Regedit.exe)的运行限制
保护注册表不受未经授权访问的做好办法之一是让恶意用户根本无法访问注册表。对于服务器来说,这意味着要严格控制服务器的物理安全,只允许管理员本地登录。对于其他系统,或者无法防止用户本地登录到服务器的情况下,则可以针对Regedit.exe和Reg.exe配置访问权限,使其更安全。另外,我们也可以尝试从系统中删除注册表编辑器以及Reg命令,但这会导致其他问题,造成管理员系统管理的麻烦,尤其是当管理员需要从远程访问注册表的时候,这样的做法有些自断后路。
我们可以采取一个比较折中的方法,就是修改注册表编辑器的访问权限,以限制其它非授权用户对其进行访问。访问%SystemRoot%文件夹,找到注册表编辑器程序Regedit.exe,右键单击该工具选择“属性”。在属性对话框中打开“安全”选项卡,可以看到如图所示的界面。在该界面中我们根据需要添加或者删除用户或者组,然后设置其必要的访问权限。这里的权限设置和对文件(文件夹)的权限设置是一样的,我们可以选择一个对象,然后允许或者拒绝特定的权限。除了Regedit.exe的设置外,我们还需要对命令行下的注册表访问工具Reg.exe进权限设置。打开%SystemRoot%\System32文件夹,用鼠标右键单击该程序,选择“属性”。同样在属性对话框中打开“安全”选项卡,默认情况下该命令可以被一般用户管理员使用,我们可以根据需要在该界面中进行用户授权和权限设置。以笔者的经验,大家不要通过组统一授权,因为这样该组中的所有用户都具有相应的权限。我们可以删除组,只为具体的用户授权,这样攻击者通过添加到组实施对注册表的控制就行不通了。(图1)
图1 设置对注册表工具(Regedit.exe)的运行限制
需要说明的是,Windows系统中还有一个名为Regedit32的注册表工具,其实这个工具只是一个到Regedit.exe的链接。如果我们设置了Regedit.exe的权限后,并不需要对Retdit32.exe也进行类似的权限设置。
2、设置对注册表键的访问权限
对于注册表的权限控制,我们还可以具体到对注册表键的访问控制。对于注册表键的权限设置,我们除了可以直接进行权限的编辑外,还可以使用安全模板进配置。使用恰当的安全模板不仅可以锁定对注册表的访问,而且不要担心错误的设置会导致系统无法启动或应用程序无法运行。
不过,通常情况下我们只是针对特定的注册表键进行权限控制,这时候只能通过直接进行权限的编辑。具体方法是:运行注册表编辑器,找到要设置的键,用鼠标右键单击选择“权限”,或者也可以首先选中该键然后从注册表编辑器的“编辑”菜单中选择“权限”也可,随后会打开“SAM的权限”对话框。和文件权限的设置一样,我们可安装需要添加或删除组和用户,选中某个对象,设置拒绝或者允许某个权限。
需要说明的是,很多权限是从更高级别的键继承的,无法直接进行修改。要编辑其权限,需要单击“高级”按钮打开如图所示的“SAM的高级安全设置”对话框。在此有4个选项卡:其中“权限”选项卡上的“继承于”一栏显示了这个权限是从哪里继承来的,一般来说这些权限都是从目标键的根键继承下来的。我们在单击“确定”应该更改前,要考虑清楚是否应该选择“包括可以从该对象的父项继承的权限”复选框。如果选择,那么所选键以及其下级是所有子键的权限都好发生变化。“审核”选项卡下可对所选键配置审核。“所有者”选项卡下显示所选键的当前所有者,并且可以分配所有权。默认情况下,只有所选键会受到影响,但如果希望针对当前键的所有子键都有效,需要勾选“替换子容器和对象的所有者”选项。“有效权限”选项卡下,可用于判断当前设置会对特定用户或组应用怎样的权限,这个功能非常有用,而且在“权限”选项卡下对权限的修改在单击“确定”或“应用”之前会不会被应用。(图2)
图2 设置对注册表键的访问权限
3、安全设置控制对注册表的远程访问
Windows的注册表不仅可本地访问,还可远程访问。因此,攻击者或者未经授权的用户可能会像管理员一样尝试远程访问系统的注册表,这无疑会带来极大的安全风险。通常情况下,对于个人系统我们不会远程访问注册表,那么就可以禁止注册表的远程访问。
“开始”菜单中的“运行”,输入services.msc打开服务管理器,找到“Remote Registry”服务项,双击该项“停止”服务,并设置启动类型为“禁止”即可。不过,上述设置后,就完全禁止了远程对注册表的访问。但有的时候,我们需要允许可远程访问注册表的某些键,该怎么办呢?其实,我们还可通过修改注册表键值的方法来控制对注册表的远程访问。这个注册表键是“HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\Winreg”。在开启了“Remote Registry”服务的Windows系统中就有该注册表键,Windows使用该键的权限设置判断哪些用户可以远程访问注册表,而默认情况下,通过验证的用户都可以。事实上,通过验证的用户对该键具有查询数值、枚举子键、通知和读取的控制权限。因此,我们需要排除某些敏感的注册表目录,以防止被远程恶意访问。在“HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\Winreg”键先有个“AllowedPaths”键,其右侧有个字符串注册表键值“Machine”,双击该键值可以看到可远程访问的注册表键值路径,在此我们可以根据需要添加或者删除注册表路径,以实现对远程访问注册表路径的控制。(图3)
图3 安全设置控制对注册表的远程访问
下面做一些补充,笔者看到某些管理员基于安全需要关闭了注册表的远程访问功能,却莫名其妙地造成了某些系统故障,这里做一说明。这时因为,Windwos系统中的某些服务为了实现特殊的功能可能需要远程访问注册表,例如Directory Replicator服务已经Spooler服务,这样在关闭了对注册表的远程访问会造成这些服务的运行错误。这样我们一定要在限制对注册表的远程访问时,必须要绕过这些服务对远程注册表访问的限制。其做法是,将需要远程访问注册表的服务的账户名添加到Winreg键的访问列表中,或者将需要远程访问的注册表键的路径添加到AllowedPath值中。在Machine键下的Paths值可以让计算机访问列出的位置,Users键下的Paths值可以让用户访问列出的位置。只要对这些键没有明确的访问限制,那么就可以进行远程访问。在修改完毕后,需要重新启动计算机这样对注册表的修改才可生效。(图4)
图4 在Machine键下Paths值让计算机访问列出的位置
此外,对于Windows Vista和Windows Server 2008系统来说,我们可以通过“本地安全策略”控制台启用或者禁用注册表的远程访问,同时也可以设置用户或组是否列在Winreg注册表键的访问控制列表(ACL)中。这里设置了很多默认路径,笔者建议不要轻易修改它们,除非你非常清楚你要进行的操作。其操作方法是:依次单击“开始”→“管理工具”→“本地安全策略”,打开本地安全策略控制台。展开左窗格中的“本地策略”节点,然后选择“安全选项”,在主窗格中可以看到列出了很多策略设置。在此,我们可以拖动滚动条,根据需要双击“网络访问:可远程访问的注册表路径”或“网络访问:可远程访问的注册表路径和子路径”选项。在属性对话的“本地策略设置”选项卡上,可以看到允许远程访问的注册表路径以及子路径列表。在此我们可按照需要添加或删除路径或者子路径。(图5)
图5 “本地安全策略”控制台启用或者禁用注册表
4、部署审核监视用户对注册表的操作
审核是Windows系统的一项重要功能,就像对文件等其他系统项进行审核一样,我们也可注册表的访问进行审核。据此我们可了解到哪些用户访问了注册表,以及他对注册表进行了哪些操作。不过,启用对注册表的审核后会耗费一定的系统性能。笔者建议,我们只选择自己最关心的、必要的审核对象,以减少被写入安全日志中的数据流,以此减少对系统性能带来的负担。
要启用对在注册表的审核,先要启用系统审核。为此,需要通过系统的本地安全策略或相应的组策略对象进行。运行“本地计算机策略”控制台,定位到“计算机配置”→“Windows 设置”→“安全设置”→“本地策略”→“审核策略”节点下设置启用系统审核策略。对系统启用了审核后,即可配置希望对注册表进行审核的方式。我们可以设置对需要的注册表键进行监控,此时我们可以利用继承功能,这样我们就不需要对注册表中的每一个键进行设置审核了。当然,如果只需要对一个指定的根键或者子键作为开始的审核的起点,我们可以首先取消上面的继承重新设置。比如,我们要对事关系统账户安全的HKLM\SAM注册表键进行审核,可进行如此操作。(图6)
图6 系统账户安全的HKLM\SAM注册表键进行审核
依次点击“开始”→“运行”,输入regedit.exe打开注册表编辑器。定位到HKLM\SAM注册表键,右键单击该键选择“权限”打开“SAM的权限”对话框。带该对话框中单击“高级”按钮,打开“SAM的高级安全设置”对话框,在对话框中打开“审核”选项卡,单击“添加”按钮进入对话框,在此选择要审核的用户或组。审核的用户或者组添加完毕后,单击“确定”进入“SAM的审核项目”对话框。在此,我们可以针对每个权限选择要进行的审核类型。如果希望跟踪权限的成功使用,就选择相应的“成功”选项;如果希望更正权限的失败使用,则选择相应的“失败”选项。设置完毕后单击“确定”关闭该对话框。对于其他用户或者组的审核设置,方法类似。需要说明的是,如果希望将审核应用于所有子键,需选中“包括可以从该对象的父项继承的审核项目”选项。(图7)
图7 ASM审核项目
总结:上面从4个方面和大家分享了自己在Windows注册表安全管理方面的一些经验,应该说囊括了注册表管理的主要方面。另外,不少管理员采用的通过组策略禁用注册表,也不失为一项安全措施。不过,本文的写作目的是和大家探讨正常情况下注册表的安全部署,所以对此没有涉及。最后,希望本文对大家有所帮助。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。