软件限制策略是系统内置的功能,与系统无缝结合,不会占用额外的CPU及内存资源,更不会有不兼容的现象,由于其位于系统的最底层,其拦截能力也是其它软件所无法比拟的,不足之处则是其设置不够灵活和智能,不会询问用户。下面我们就来全面的了解一下软件限制策略。
1
、概述
使用软件限制策略,通过标识并指定允许哪些应用程序运行,可以保护您的计算机环境免受不可信任的代码的侵扰。通过散列规则、证书规则、路径规则和Internet区域规则,就用程序可以在策略中得到标识。默认情况下,软件可以运行在两个级别上:“不受限制的”与“不允许的”。在本文中我们主要用到的是路径规则和散列规则,而路径规则是这些规则中使用最为灵活的,散列规制是比较强悍的也是比较常用的。
2、
附加规则和安全级别
限制策略时,使用一下规则对软件进行标识:
证书规制
软件限制策略可以通过其签名证书来标识文件。证书规则不能应用到带有 .exe 或 .dll 扩展名的文件。它们可以应用到脚本和 Windows 安装程序包。可以创建标识软件的证书,然后根据安全级别的设置,决定是否允许软件运行。
路径规则
路径规则通过程序的文件路径对其进行标识。由于此规则按路径指定,所以程序发生移动后路径规则将失效。路径规则中可以使用诸如 %programfiles% 或 %systemroot% 之类环境变量。路径规则也支持通配符,所支持的通配符为 * 和 ?。
散列规则
散列是唯一标识程序或文件的一系列定长字节。散列按散列算法算出来。软件限制策略可以用 SHA-1(安全散列算法)和 MD5 散列算法根据文件的散列对其进行标识。重命名的文件或移动到其他文件夹的文件将产生同样的散列。
Internet
区域规则
区域规则只适用于 Windows 安装程序包。区域规则可以标识那些来自Internet Explorer 指定区域的软件。这些区域是 Internet、本地计算机、本地 Intranet、受限站点和可信站点。
安全级别
对于软件限制策略,默认情况下,系统为我们提供了两个安全级别:“不受限的”和“不允许的” 。
1.“不允许的” 即所有登陆系统的帐户,都不能够运行这个应用软件,无论其是否对数据文件具有访问权限。
2.“不受限的”级别不等于完全不受限制,只是不受软件限制策略的附加限制。也就是说,所有登陆的用户都可以运行指定的软件。只要用户具有数据文件的访问权限,就可以利用软件打开这个文件。可以看出,应用软件的访问权限跟数据文件的访问权限是独立的。用户只具有应用软件或者数据文件的访问权限,往往还不够。需要两者权限都有,才能够打开相关的文件。
但实际上,还有三个级别在默认情况是隐藏掉的,我们可以通过手动修改注册表来开启其它的三个级别,打开注册表编辑器,展开至:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\
Safer\CodeIdentifiers
新建一个DOWRD,命名为Levels,其值为 0x4131000(十六十制的4131000)。创建完毕后重新打开gpedit.msc,我们会看到另外三个级别此时已经开启了。
Safer\CodeIdentifiers
新建一个DOWRD,命名为Levels,其值为 0x4131000(十六十制的4131000)。创建完毕后重新打开gpedit.msc,我们会看到另外三个级别此时已经开启了。
- 不受限的 最高权限,但其也并不是完全的不受限,而是“软件访问权由用户的访问权来决定”,即继承父进程的权限。
- 基本用户 基本用户仅享有“跳过遍历检查”的特权,并拒绝享有管理员的权限。
- 受限的 比基本用户限制更多,但也享有“跳过遍历检查”的特权。
- 不信任的 不允许对系统资源、用户资源进行访问,结果就是程序将无法运行。
- 不允许的 无条件地阻止程序执行或文件被打开
根据权限大小可以排序为: 不受限的 > 基本用户 > 受限的 > 不信任的 > 不允许的
3、软件限制策略的优先权
一个特定的程序可以有多个不同的规则适用,为此,可以按下列优先权顺序来使用这些规则。优先权按从高到低的顺序排列如下:
散列规则 > 证书规则 > 路径规则 > Internet区域规则
如果存在多个路径规则冲突,则最具限制性的规则占有优先权。总的原则就是:规则越匹配越优先。 本例是按优先权从高到低排列的。从这里我们可以看出:
绝对路径 > 通配符路径
文件名规则 > 目录规则
对于同样是目录规则的,则目录数匹配越多就越优先。
文件名规则 > 目录规则
对于同样是目录规则的,则目录数匹配越多就越优先。
这里,我们再顺便介绍一下环境变量和通配符。
在路径规则里,允许使用诸如“%windir%”“%userprofile%”之类的环境变量。一般情况下,我们的系统是在C盘,但也有些人基于其它一些原因如要安装双系统等,将系统安装在其它比如D盘下面,这时我们平常用到的一些路径比如“C:\windows\”就会无效,为了防止这种情况,我们就可以使用系统变量,像“%windir%”,系统会自动为我们匹配其目录。我们在创建规则的时候也可以使用这些环境变量,以适用于不同的系统。下面列出的是一些常使用的环境变量,更多的环境变量你可以运行 CMD 然后运行 SET 命令进行查看。
ALLUSERSPROFILE = C:\Documents and Settings\All Users
APPDATA = C:\Documents and Settings\Administrator\Application Data
CommonProgramFiles = C:\Program Files\Common Files
ComSpec = C:\WINDOWS\system32\cmd.exe
HOMEDRIVE = C:
HOMEPATH = \Documents and Settings\Administrator
ProgramFiles = C:\Program Files
SystemDrive = C:
SystemRoot = C:\WINDOWS
TEMP = C:\Documents and Settings\当前用户名\Local Settings\Temp
TMP = C:\Windows\Temp
USERPROFILE = C:\Documents and Settings\Administrator
WINDIR = C:\WINDOWS
同样,路径规则也支持使用通配符,对DOS熟悉的人应该知道这个东西,就是“?”和“*”。 ? :包括1个或0个字符; * :包括任意个字符(包括0个),但不包括斜杠,“**”和“*”是完全等效的,
4、规则的权限分配及继承
这里的讲解的一个前提是:假设你的用户类型是管理员。
在没有软件限制策略的情况下,如果程序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(基本用户)
a(不受限的)-> b(基本用户) = b(基本用户)
可以看到,一个程序所能获得的最终权限取决于:父进程权限和规则限定的权限的最低等级,也就是我们所说的最低权限原则。
我们的规则里面所说到的基本用户、受限用户,基本上等同于 NTFS 权限里的 USERS 组,但受限用户受到的限制更多,不管NTFS权限如何,其始终受到限制。更多NTFS权限的设置,大家可以查阅NTFS相关的内容。
5
、如何编写规则
下面介绍规则的具体编写方式
开始 -> 运行 -> gpedit.msc 在左边的窗口中依次展开 计算机配置 -> Windows设置 -> 安全设置 -> 软件限制策略
如果你之前没有进行过设置,那么在软件限制策略上点右键,选择创建新的策略,然后在其它规则上右键点击,选择新路径规则既可以进行规则的创建了。
规则的设置很简单,就五个安全级别,根据你自己的需要设置即可。难点主要是规则的正确性和有效性,这个靠多多实践来提升了。
另外提醒一下,大家在设置规则时,注意不要更改以下4条系统默认规则同时还要考虑它们的影响:
%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot% 路径 不受限的
%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot%*.exe 路径 不受限的
%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot%System32\*.exe 路径不受限的
%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
ProgramFilesDir% 路径 不受限的
ProgramFilesDir% 路径 不受限的
相当于规则:
%SystemRoot% 不受限的 整个Windows目录不受限
%SystemRoot%\*.exe 不受限的 Windows下的exe文件不受限
%SystemRoot%\System32\*.exe 不受限的 System32下的exe文件不受限
%ProgramFiles% 不受限的 整个ProgramFiles目录不受限
这里要注意的一点是规则在新添加或者进行修改以后,不会立即生效,可以使用命令 gpupdate /force 来强制刷新,如果长时间不生效,我们可以通过注销,重新登陆来生效。
6
、 应用软件与数据文件独立
在应用软件限制策略的时候,需要明白的第一个原则就是“应用软件与数据文件独立”独立原则。也就是说,你即使具有数据文件的访问权限,但是,若其没有其关联软件的访问权限的话,则仍然不能够打开这个文件。如现在某个用户从网上私自下载了一部电影,其作为所有者人,当然具有对这个数据文件进行访问的权限。但是,我们在软件限制策略设置的时候,这个用户帐户无法访问任何的视频播放软件。如此的话,这个用户仍然无法播放这部电影。
这就是应用软件与数据文件独立的原则。这个原则在实际应用中非常有用。因为我们很难控制用户从网络上下载文件。如用户若从网络上下载歌曲,甚至通过U盘等工具从企业外部把文件拷贝到电脑上去。这些行为我们很难控制。但是,我们对于用户电脑上应用程序的控制来说,则相对简单许多。我们只需要把这些应用程序控制好,则即使用户私自下载受限制的文件,则用户最终也没有软件可以打开它。这也就可以控制他们的相关不正当行为。
7
、 软件限制策略的冲突处理原则
软件限制策略跟其他组策略一样,可以在多个级别上进行设置。或者说,软件限制策略是组策略中的一个特殊分支也未尝不可。所以,软件限制策略可以在本地计算机、站点、域与组织单元等多个环节进行设置。每个级别又可以针对用户与计算机进行设置。而就是因为如此,所以也就产生了冲突的可能性。当在各个设置级别上的软件限制策略发生冲突的时候,其优先性如何呢?
一般来说,其优先性的级别从高到低如下:
第一,组织单元策略;第二,域策略;第三,站点策略;第四,本地计算机策略。这里特别要注意一点,就是组织单元的策略要比域策略的优先性级别要高。也就是说,在域策略中,限制用户使用视频播放器;而在一个培训组织单元中,则允许这个单元中的账户具有视频软件的访问权限。则即使这个组织单元在这个域中,则只要帐户属于这个组织单元,则其仍然可以使用视频软件,因为组织单元级别的优先性要高于域中的设置。
不过,建议最好把软件限制策略利用在域中与组织单元中,而不要放在其他的两个级别中。在域中,实现一些共有的配置,如限制企业员工使用视频播放工具等等。而在OU中,一般情况下继承域的相关配置。当这个组具有特殊的权限时,如现在有一个培训组,这个组中的账户需要有视频软件的播放权限,则就可以在这个组织单元的级别上进行配置。如此的话,就可以保证有一个比较统一的软件权限策略管理平台。若牵涉的级别太多,特别是在本地计算机上配置的话,则会破坏这个统一平台,虽然其优先级比较低。
8
、 软件限制策略之哈希规制
利用前面的路径规制方法,则有一个不好缺陷,当用户修改了应用软件的名字的时候,如把QQ改为其它名称,则原有的组策略限制就会失效。而利用软件限制策略的哈希规则,则可以实现更加精确的控制。如可以使用哈希规则来确定哪些软件可以运行,哪些软件不可以运行。
哈希是根据软件程序的内容根据一定的规则计算出来的一连串固定数目的字节。因为它是根据软件的内容计算出来的,而不是纯粹的根据软件的名字来进行判断,所以,即使用户修改了应用软件的名字,其仍然必须受到这个软件策略的限制。当然,不同的应用软件,由于其应用程序的内容不同,所以其计算出来的哈希值也是不同的。当我们在为某个应用软件建立哈希规则,限制用户不允许运行此软件时,域控制器就会为该软件计算出一个哈希值,判断是否与软件限制策略中的哈希值相同。如果相同的话,操作系统就会拒绝这个软件的运行。所以,当用户人为的修改应用程序的名字或者移动位置的话,因为应用程序的本质内容没有改变,所以其哈希值也不会改变,固其仍然要受到软件策略的限制。但是,如果应用程序中毒了,则可能就会影响到哈希值,从而使得软件策略不起作用。哈希规则是我们比较常用的规则,因为其方便、容易控制。
在采用这些规则的时候,为了避免一些不必要的冲突,还是采用哈希规则为好。个人认为,哈希规则是一个必要好用的规则,而且,其漏洞也比较少,如不会因为员工恶意更改应用程序名字或者移动应用程序的位置而导致软件限制策略失效。
所以,在考虑采用软件限制策略的时候,最好不要在多个级别上采用多个不同的判断规则,否则的话,在这些因素的多重作用下,出来的结果可能连我们自己都弄不明白。建议在配置软件限制策略的时候,一般只在域与组织单元的级别上进行配置;采用的也是哈希单一规则。笔者认为,这无论在设计还是后续维护上面,都是比较方便的。
软件限制策略哈希规制具体实施步骤:
(1)如果要使所创建的限制策略适用于整个域,则需要在GPMC为域组策略中创建一个GPO,因为最好不要直接在默认的域GPO上进行限制限制策略,这一点我们在站节已有介绍;如果要是适用于某组织单位,则可以在相应组织单位的GPO上进行配置。本例以Sales组织单位为例进行介绍。
(2)在Sales组织单位GPO上单击右键,在弹出菜单中选择“编辑”选项,打开Sales组织单位GPO编辑器。
(3)在“计算机设置”节点下的“安全设置”策略项中找到“软件限制策略”选项(参见图9-1),单击右键,在弹出菜单中选择“创建软件限制策略”选项,随即在右边窗口中显示了软件限制策略中的一些策略选项,如图所示。
图8-1 新创建的软件限制策略选项
(4)因为各用户的QQ、MSN程序的安装位置不可能完全一样,而且用户对这类程序的安装位置也可以随意更改,所以我们不能采取“路径规则”来限制用户对QQ、MSN程序的使用。在此我们以“哈希规则”进行限制。在“其他规则”策略选项上单击右键,在弹出菜单中选择“新建哈希规则”选项,打开对话框。
在这里先创建限制使用QQ程序的规则,在“文件哈希”文本框右边通过“浏览”按钮找到QQ.exe程序,系统会自动给出这个规则的哈希值,同时在“文件信息”列表中也会给出相应的文件信息。
(5)在“安全级别”下拉列表中选择“不允许的”选项,然后单击“确定”按钮完成限制运行QQ程序的哈希规则创建。
(6)最后还要把本地管理员的限制排除。方法是双击如图8-1所示窗口的“强制”策略选项,打开如图8-2所示对话框。在其中要选择“除本地管理员以外的所有用户”单选项。如果要使策略应用于相应程序的所有.dll文件(这样更严厉),就可以在如图9-3所示对话框中选择“所有软件文件”单选项。最后单击“确定”按钮使设置生效。
通过以上设置后,在Sales组中的所有计算机都不能运行QQ程序文件了,无论这两个程序的安装位置如何变化,安装目录名如何改变,都将生效。如果要针对其中的用户来限制,则需要在组策略“用户设置”策略项下的“软件限制策略”项中进行配置。
图8-2 “新建哈希规则”对话框 图8-3 “强制属性”对话框
另外,用组策略的“不要运行指定的windows应用程序”策略项也可以配置,大家可以试一下。
最后,如果禁止一般的软件,使用软件限制策略里面的哈希规则就足够了,如果禁止像QQ这样比较强悍的软件,最好是软件限制策略、防火墙过滤同时使用,打一套组合拳,彻底解决我们所面临的问题!