组策略之软件限制策略——完全教程与规则示例

来源:互联网 发布:看病报销软件 编辑:程序博客网 时间:2024/05/21 21:44

组策略之软件限制策略——完全教程与规则示例(规则已发布)

翻了一下HIPS区之前已有的组策略教程,发现存在几个问题:
1.对于路径规则的优先级、通配符问题没有说清,甚至存在误区
2.规则的权限设置只有“不允许的”和“不受限的”两个级别,不够灵活
3.没有涉及权限和继承的问题
4.规则的保护范围有限,甚至不能防网马

所以,就有了此文
在总结前人经验的基础上,重新解释组策略的软件限制策略

第一课,理论部分

软件限制策略包括证书规则、散列规则、Internet 区域规则和路径规则。我们主要用到的是散列规则和路径规则,其中灵活性最好的就是路径规则了,所以一般我们谈到的策略规则,若没有特别说明,则直接指路径规则。




一.环境变量、通配符和优先级
关于环境变量(假定系统盘为 C盘)
%USERPROFILE%  表示 C:/Documents and Settings/当前用户名
%HOMEPATH%    表示 C:/Documents and Settings/当前用户名
%ALLUSERSPROFILE%  表示 C:/Documents and Settings/All Users
%ComSpec%  表示 C:/WINDOWS/System32/cmd.exe
%APPDATA%  表示 C:/Documents and Settings/当前用户名/Application Data
%ALLAPPDATA%  表示 C:/Documents and Settings/All Users/Application Data
%SYSTEMDRIVE% 表示 C:
%HOMEDRIVE%   表示 C:
%SYSTEMROOT%  表示 C:/WINDOWS
%WINDIR%      表示 C:/WINDOWS
%TEMP% 和 %TMP%  表示 C:/Documents and Settings/当前用户名/Local Settings/Temp
%ProgramFiles%  表示 C:/Program Files
%CommonProgramFiles%  表示 C:/Program Files/Common Files

关于通配符:
Windows里面默认
* :任意个字符(包括0个),但不包括斜杠
? :1个字符

几个例子
*/Windows 匹配 C:/Windows、D:/Windows、E:/Windows 以及每个目录下的所有子文件夹。
C:/win* 匹配 C:/winnt、C:/windows、C:/windir 以及每个目录下的所有子文件夹。
*.vbs 匹配 Windows XP Professional 中具有此扩展名的任何应用程序。
C:/Application Files/*.* 匹配特定目录(Application Files)中的应用程序文件,但不包括Application Files的子目录


关于优先级:
1.绝对路径 > 通配符相对路径
如 C:/Windows/explorer.exe > */Windows/explorer.exe  

2.文件型规则 > 目录型规则      
如若a.exe在Windows目录中,那么   a.exe > C:/Windows
注:如何区分文件规则和目录规则?不严格地说,其区分标志为字符“.”。
例如, *.* 就比 C:/WINDOWS 的优先级要高,如果我们要排除WINDOWS根目录下的程序,就需要这样做 C:/WINDOWS/*.*
而严格的说法是,只要规则中的字符能够匹配到文件名中,那么该规则就是文件型规则,否则为目录型规则。可见,文件型、目录型都是相对而言的

3.环境变量 = 相应的实际路径 = 注册表键值路径
如 %ProgramFiles% = C:/Program Files = %HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/ProgramFilesDir%

4.若两条规则路径等效,那么两条规则合成的结果是:从严处理,以最低的权限为准。
如“C:/Windows/explorer.exe 不受限的” + “C:/Windows/explorer.exe 基本用户”=
“C:/Windows/explorer.exe 基本用户

总的来说,就是规则越匹配越优先

注:
1. 通配符 * 并不包括斜杠 /。例如*/WINDOWS 匹配 C:/Windows,但不匹配 C:/Sandbox/WINDOWS

2. * 和 ** 是完全等效的,例如 **/**/abc = */*/abc

3. C:/abc/*  可以直接写为 C:/abc/ 或者 C:/abc,最后的* 是可以省去的,因为软件限制策略中已经存储了执行文件类型作为 * 的内容了。(指派的文件类型)

4. 软件限制策略只对“指派的文件类型”列表中的格式起效。例如 *.txt 不允许的,这样的规则实际上无效,除非你把TXT格式也加入“指派的文件类型”列表中。



5. * 和 *.* 是有区别的,后者要求文件名或路径必须含有“.”,而前者没有此限制,因此,*.* 的优先级比 * 的高

6. ?:/* 与 ?:/*.* 是截然不同的,前者是指所有分区下的每个目录下的所有子文件夹,简单说,就是整个硬盘;而 ?:/*.* 仅包括所有分区下的带“.”的文件或目录,一般情况
下,指的就是各盘根目录下的文件。那非一般情况是什么呢?请参考第7点

7. ?:/*.* 中的“.” 可能使规则范围不限于根目录。这里需要注意的是:有“.”的不一定是文件,可以是文件夹。例如 F:/ab.c,一样符合 ?:/*.*,所以规则对F:/ab.c下的所有文件及子目录都生效。

8.首先引用《组策略软件限制策略规则包编写之菜鸟入门(修正版)》里的一段:
引用:
4、如何保护上网的安全
在浏览不安全的网页时,病毒会首先下载到IE缓存以及系统临时文件夹中,并自动运行,造成系统染毒,在了解了这个感染途径之后,我们可以利用软件限制策略进行封堵
%SYSTEMROOT%/tasks/**/*.*    不允许的    (这个是计划任务,病毒藏身地之一)
%SYSTEMROOT%/Temp/**/*.*    不允许的
%USERPROFILE%/Cookies/*.*    不允许的
%USERPROFILE%/Local Settings/**/*.*    不允许的  (这个是IE缓存、历史记录、临时文件所在位置)
说实话,上面引用的部分不少地方都是错误的
先不谈这样的规则能否保护上网安全,实际上这几条规则在设置时就犯了一些错误

例如:%USERPROFILE%/Local Settings/**/*.*  不允许的
可以看出,规则的原意是阻止程序从Local Settings(包括所有子目录)中启动
现在大家不妨想想这规则的实际作用是什么?

先参考注1和注2,** 和* 是等同的,而且不包含字符“/”。所以,这里规则的实际效果是 “禁止程序从Local Settings文件夹的一级子目录中启动”,不包括Local Settings根目录,也不包括二级和以下的子目录。
现在我们再来看看Local Settings的一级子目录有哪些:Temp、Temporary Internet Files、Application Data、History。
阻止程序从Temp根目录启动,直接的后果就是很多软件不能成功安装

那么,阻止程序从Temporary Internet Files根目录启动又如何呢?
实际上,由于IE的缓存并不是存放Temporary Internet Files根目录中,而是存于Temporary Internet Files的子目录Content.IE5的子目录里(-_-||),所以这种写法根本不能阻止程序从IE缓存中启动,是没有意义的规则
若要阻止程序从某个文件夹及所有子目录中启动,正确的写法应该是:
某目录/**

某目录/*
某目录/
某目录

9.
引用:
?:/autorun.inf    不允许的
这是流传的所谓防U盘病毒规则,事实上这条规则是没有作用的,关于这点在 关于各种策略防范U盘病毒的讨论 已经作了分析




二.软件限制策略的3D的实现:
“软件限制策略本身即实现AD,并通过NTFS权限实现FD,同时通过注册表权限实现RD,从而完成3D的部署”
对于软件限制策略的AD限制,是由权限指派来完成的,而这个权限的指派,用的是微软内置的规则,即使我们修改“用户权限指派”项的内容,也无法对软件限制策略中的安全等级进行提权。所以,只要选择好安全等级,AD部分就已经部署好了,不能再作干预
而软件件限制策略的FD和RD限制,分别由NTFS权限、注册表权限来完成。而与AD部分不同的是,这样限制是可以干预的,也就是说,我们可以通过调整NTFS和注册表权限来配置FD和RD,这就比AD部分要灵活得多。

小结一下,就是
AD——用户权利指派
FD——NTFS权限
RD——注册表权限

先说AD部分,我们能选择的就是采用哪种权限等级,微软提供了五种等级:不受限的、基本用户、受限的、不信任的、不允许的。

不受限的,最高的权限等级,但其意义并不是完全的不受限,而是“软件访问权由用户的访问权来决定”,即继承父进程的权限。
基本用户,基本用户仅享有“跳过遍历检查”的特权,并拒绝享有管理员的权限。
受限的,比基本用户限制更多,也仅享有“跳过遍历检查”的特权。
不信任的,不允许对系统资源、用户资源进行访问,直接的结果就是程序将无法运行。
不允许的,无条件地阻止程序执行或文件被打开

很容易看出,按权限大小排序为 不受限的 > 基本用户 > 受限的 > 不信任的 > 不允许的

其中,基本用户 、受限的、不信任的 这三个安全等级是要手动打开的
具体做法:
打开注册表编辑器,展开至
HKEY_LOCAL_MACHINE/SOFTWARE/Policies/Microsoft/Windows/Safer/CodeIdentifiers
新建一个DOWRD,命名为Levels,其值可以为

0x10000                  //增加受限的
0x20000                  //增加基本用户
0x30000                  //增加受限的,基本用户
0x31000                  //增加受限的,基本用户,不信任的

设成0x31000(即4131000)即可

如图:


或者将下面附件中的reg双击导入注册表即可





再强调两点:
1.“不允许的”级别不包含任何FD操作。你可以对一个设定成“不允许的”文件进行读取、复制、粘贴、修改、删除等操作,组策略不会阻止,前提当然是你的用户级别拥有修改该文件的权限
2.“不受限的”级别不等于不受限制,只是不受软件限制策略的附加限制。事实上,“不受限的”程序在启动时,系统将赋予该程序的父进程的权限字,该程序所获得的访问令牌决定于其主体,所以任何程序的权限将不会超过它的父进程。

权限的分配与继承:
这里的讲解默认了一个前提:假设你的用户类型是管理员。

在没有软件限制策略的情况下,
很简单,如果程序a启动程序b,那么a是b的父进程,b继承a的权限

现在把a设为基本用户,b不做限制(把b设为不受限或者不对b设置规则效果是一样的)
然后由a启动b,那么b的权限继承于a,也是基本用户,即:
a(基本用户)-> b(不受限的) = b(基本用户)
若把b设为基本用户,a不做限制,那么a启动b后,b仍然为基本用户权限,即
a(不受限的)-> b(基本用户) = b(基本用户)

可以看到,一个程序所能获得的最终权限取决于:父进程权限 和 规则限定的权限 的最低等级,也就是我们所说的最低权限原则

举一个例:
若我们把IE设成基本用户等级启动,那么由IE执行的任何程序的权限都将不高于基本用户级别,只能更低。所以就可以达到防范网马的效果——即使IE下载病毒并执行了,病毒由于权限的限制,无法对系统进行有害的更改,如果重启一下,那么病毒就只剩下尸体了。
甚至,我们还可以通过NTFS权限的设置,让IE无法下载和运行病毒,不给病毒任何的机会。


权限的解释:
引用:
以操作系统方式操作 (SeTcbPrivilege)
此策略设置允许进程采用任何用户的标识,来获取对该用户被授权访问的资源的访问权限。
(危险的权限,不建议分配给任何组)

配置单一进程 (SeProfileSingleProcessPrivilege)
此策略设置确定哪些用户可以使用工具来监视非系统进程的性能。
(可以类比一下:利用事件查看器查看应用程序的信息)

配置系统性能
此策略设置允许用户使用工具查看不同系统进程的性能,它可能会被滥用以允许攻击者确定系统的活动进程并深入了解计算机的潜在攻击面。
(例如,利用事件查看器查看系统的信息)

跳过遍历检查 (SeChangeNotifyPrivilege)
当用户导航 NTFS 文件系统或注册表中的对象路径时,此策略设置允许没有特殊访问权限“遍历文件夹”的用户“跳过”文件夹。此用户权限并不允许用户列出文件夹的内容,但只允许他们遍历目录。

更改系统时间 (SeSystemtimePrivilege)
此策略设置确定哪些用户和组能够更改环境中计算机内部时钟的时间和日期。分配了此用户权限的用户可以影响事件日志的外观。当计算机的时间设置发生更改时,记录的事件会反映新时间,而不是事件发生的实际时间。

调试程序 (SeDebugPrivilege)
此策略设置确定哪些用户可以将调试程序附加到任何进程或附加到内核中,它提供对敏感和关键操作系统组件的完整访问权限。当管理员需要利用支持“内存中的修补”(也称为“热修补”)技术的修补程序时,需要此用户权限。
(包含了创建远程线程、修改进程内存、直接操作系统内核等内容)

从远端系统强制关机 (SeRemoteShutdownPrivilege)
此策略设置允许用户从网络上的远程位置关闭基于 Windows XP 的计算机。任何分配了此用户权限的用户都可能引起拒绝服务 (DoS) 情况,这将使该计算机无法为用户请求提供服
务。因此,Microsoft 建议仅向高度信任的管理员分配此用户权限。
(从网络上或调用shutdown.exe来关闭计算机需要此特权)

关闭系统 (SeShutdownPrivilege)
此策略设置确定在本地登录到您环境中的计算机上的用户中,哪些用户可以使用“关机”命令关闭操作系统。误用此用户权限可能导致拒绝服务情形。
(正如字面上所说的)

替换进程级记号 (SeAssignPrimaryTokenPrivilege )
此策略设置允许某个进程或服务使用不同的安全访问令牌启动其他服务或进程,它可用于修改子进程的安全访问令牌并导致特权提升。
(运行方式、runas命令相关特权)

创建记号对象 (SeCreateTokenPrivilege)
此策略设置允许进程创建访问令牌,这可能提供提升权限来访问敏感数据。在安全具有高优先级的环境中,不应向任何用户分配此用户权限
(几乎是至高无上的权限,允许进程的提权)

取得文件或其它对象的所有权 (SeTakeOwnershipPrivilege)
此策略设置允许用户获得文件、文件夹、注册表项、进程或线程的所有权。此用户权限绕过现有用于保护对象的任何权限,并向指定用户授予所有权。
(一旦拥有此特权,就等于完全控制了系统)

装载和卸载设备驱动程序(SeLoadDriverPrivilege)
此策略设置允许用户在系统上动态装载新的设备驱动程序。攻击者可能使用此功能安装显示为设备驱动程序的恶意代码。用户需要此用户权限和 Power Users 组或 Administrators 组的成员资格才能在 Windows XP 中添加本地打印机或打印机驱动程序。

增加进度优先级 (SeIncreaseBasePriorityPrivilege)
此策略设置允许用户更改进程利用的处理器时间量。攻击者可能使用此功能将进程的优先级提高为实时,并为计算机创建一个拒绝服务情形。

内存中锁定页 (SeLockMemoryPriv ilege)
此策略设置允许进程将数据保存在物理内存中,这样可以防止系统将数据分页存储到磁盘的虚拟内存。如果分配了此用户权限,系统性能可能显著降低。

修改固件环境值 (SeSystemEnvironmentPrivilege)
此策略设置允许用户配置影响硬件配置的系统范围环境变量。此信息通常存储在“最后一次正确的配置”中。修改这些值可能造成会导致拒绝服务情形的硬件故障。
此功能的威胁相对较小

作为批处理作业登录(SeBatchLogonRight)
此策略设置允许帐户使用 Task Scheduler 服务登录。Task Scheduler 通常用于管理目的,因此可能需要在 EC 环境中使用。但是,在 SSLF 环境中使用时,它应该仅限于防止滥
用系统资源或防止攻击者获得计算机的用户级别访问权限之后使用该权限启动恶意代码。

作为服务登录(SeServiceLogonRight)
此策略设置允许帐户启动网络服务或将进程注册为系统上运行的服务。在 SSLF 环境中的任何计算机上均应限制此用户权限,因为许多应用程序可能需要此特权。在 EC 环境中配置此用户权限之前,应仔细地进行评估和测试。

管理审核和安全日志(SeSecurityPrivilege)
此策略设置确定哪些用户可以更改文件和目录的审核选项以及清除安全日志。
此功能的威胁相对较小

执行卷维护任务
此策略设置允许用户管理系统卷或磁盘配置,它可能允许用户删除卷并导致数据丢失以及拒绝服务情形。
FD:NTFS权限
* 要求磁盘分区为NTFS格式 *
其实Microsoft Windows 的每个新版本都对 NTFS 文件系统进行了改进。NTFS 的默认权限对大多数组织而言都已够用。

NTFS权限的分配
1.如果一个用户属于多个组,那么该用户所获得的权限是各个组的叠加
2.“拒绝”的优先级比“允许”要高
例如:用户A 同时属于Administrators和Everyone组,若Administrators组具有完全访问权,但Everyone组拒绝对目录的写入,那么用户A的实际权限是:不能对目录写入,但可以进行除此之外的任何操作

高级权限名称 描述 (包括了完整的FD和部分AD)
引用:
遍历文件夹/运行文件  (遍历文件夹可以不管,主要是“运行文件”,若无此权限则不能启动文件,相当于AD的运行应用程序)
允许或拒绝用户在整个文件夹中移动以到达其他文件或文件夹的请求,即使用户没有遍历文件夹的权限(仅适用于文件夹)。

列出文件夹/读取数据
允许或拒绝用户查看指定文件夹内文件名和子文件夹名的请求。它仅影响该文件夹的内容,而不影响您对其设置权限的文件夹是否会列出(仅适用于文件夹)。

读取属性 (FD的读取)
允许或拒绝查看文件中数据的能力(仅适用于文件)。

读取扩展属性
允许或拒绝用户查看文件或文件夹属性(例如只读和隐藏)的请求。属性由 NTFS 定义。

创建文件/写入数据 (FD的创建)
“创建文件”允许或拒绝在文件夹中创建文件(仅适用于文件夹)。“写入数据”允许或拒绝对文件进行修改并覆盖现有内容的能力(仅适用于文件)。

创建文件夹/追加数据
“创建文件夹”允许或拒绝用户在指定文件夹中创建文件夹的请求(仅适用于文件夹)。“追加数据”允许或拒绝对文件末尾进行更改而不更改、删除或覆盖现有数据的能力(仅适用于文件)。

写入属性 (即改写操作了,FD的写)
允许或拒绝用户对文件末尾进行更改,而不更改、删除或覆盖现有数据的请求(仅适用于文件)。  即写操作

写入扩展属性
允许或拒绝用户更改文件或文件夹属性(例如只读和隐藏)的请求。属性由 NTFS 定义。

删除子文件夹和文件 (FD的删除)
允许或拒绝删除子文件夹和文件的能力,即使子文件夹或文件上没有分配“删除”权限(适用于文件夹)。

删除 (与上面的区别是,这里除了子目录及其文件,还包括了目录本身)
允许或拒绝用户删除子文件夹和文件的请求,即使子文件夹或文件上没有分配“删除”权限(适用于文件夹)。

读取权限 (NTFS权限的查看)
允许或拒绝用户读取文件或文件夹权限(例如“完全控制”、“读取”和“写入”)的请求。

更改权限 (NTFS权限的修改)
允许或拒绝用户更改文件或文件夹权限(例如“完全控制”、“读取”和“写入”)的请求。

取得所有权
允许或拒绝取得文件或文件夹的所有权。文件或文件夹的所有者始终可以更改其权限,而不论用于保护该文件或文件夹的现有权限如何。
以基本用户为例,基本用户能做什么?

在系统默认的NTFS权限下,基本用户对系统变量和用户变量有完全访问权,对系统文件夹只读,对Program Files的公共文件夹只读,Document and Setting下,仅对当前用户目录有完全访问权,其余不能访问

如果觉得以上的限制严格了或者宽松了,可以自行调整各个目录和文件的NTFS权限。
如果发现浏览器在基本用户下无法使用某些功能的,很多都是由于NTFS权限造成的,可以尝试调整对应的NTFS权限

基本用户、受限用户属于以下组
Users
Authenticated Users
Everyone
INTERACTIVE

但受限用户权限更低,无论NTFS权限如何,受限用户始终受到限制。

调整权限时,主要利用到的组为 Users 或 Authenticated Users

例:对用户变量Temp目录进行设置,禁止基本用户从该目录运行程序,可以这样做:
首先进入“高级”选项,取消勾选“从父项继承那些可以应用到子对象的权限项目,包括那些在此明确定义的项目(I)”



然后设置Users的权限如图


这样基本用户下的程序就无法从Temp启动文件了
引用:
更正一下,由于Temp目录的默认权限不同的系统可能不同,所以在调整权限时要注意。总之须保证Administrators、System组具有完全访问权,everyone组可以删除,然后再设置Users组的权限
注意不要使用“拒绝”,不然Admin组也会受影响


又例如,如果想保护某些文件不被修改或删除,可以取消Users的删除和写入权限,从而限制基本用户,达到保护重要文件的效果
当然,也可以防止基本用户运行指定的程序

以下为微软建议进行限制的程序:
regedit.exe

arp.exe

at.exe

attrib.exe

cacls.exe

debug.exe

edlin.exe

eventcreate.exe

eventtriggers.exe

ftp.exe

nbtstat.exe

net.exe

net1.exe

netsh.exe

netstat.exe

nslookup.exe

ntbackup.exe

rcp.exe

reg.exe

regedt32.exe

regini.exe

regsvr32.exe

rexec.exe

route.exe

rsh.exe

sc.exe

secedit.exe

subst.exe

systeminfo.exe

telnet.exe

tftp.exe

tlntsvr.exe


RD部分注册表权限。由于微软默认的注册表权限分配已经做得很好了,不需要作什么改动,所以这里就直接略过了


三.关于组策略规则的设置:

规则要顾及方便性,因此不能对自己有过多的限制,或者最低限度地,即使出现限制的情况,也能方便地进行排除
规则要顾及安全性,首先要考虑的对象就是浏览器等上网类软件和可移动设备所带来的威胁。没有这种防外能力的规则都是不完整或者不合格的
基于文件名防病毒、防流氓的规则不宜多设,甚至可以舍弃。
一是容易误阻,二是病毒名字可以随便改,特征库式的黑名单只会跟杀软的病毒库一样滞后。

于是,我们有两种方案:
如果想限制少一点的,可以只设防“入口”规则,主要面向U盘和浏览器
如果想安全系数更高、全面一点的,可以考虑全局规则+白名单

具体内容见二楼
待续.....
最后布置几道作业 ,看看大家对上面的内容消化得如何


1. 在规则“F:/**/*/*.*  不允许”下,下面那些文件不能被打开?
A:F:/a.exe
B.F:/Folder.1/b.exe
C.F:/Folder1/Folder.2/C.txt
D.F:/Folder1/Folder.2/Folder.3/d.exe

2. 在以管理员身份登陆的情况下,建立规则如下:
%Temp%                                                                                        受限的
%USERPROFILE%/Local Settings/Temporary Internet Files                         不允许的
%ProgramFiles%/Internet Explorer/iexplore.exe                                                 基本用户
%HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders/Desktop%  不受限的
在这四条规则下,假设这样的情况:
iexplore.exe 下载一个test.exe到Temporary Internet Files目录,然后复制到Temp目录,再从Temp目录中运行test.exe,(复制和运行的操作都是IE在做),然后由text.exe释放test2.exe到桌面,并运行test2.exe。
那么test2.exe的访问令牌为:
A.不受限的        B.不允许的      C.基本用户       D.受限的

3. 试说出 F:/win* 和 F:/win*/ 的区别

4. 若想限制QQ的行为,例如右下方弹出的广告,并不允许QQ调用浏览器,可以怎么做?

答对两题即及格。不过貌似还是有些难度
原创粉丝点击