对于Windows的组策略,也许大家使用的更多的只是 管理模板 里的各项功能,
Windows组策略的软件限制策略
。对于 软件限制策略 相信用过的筒子们不是很多:)。软件限制策略 如果用的好的话,相信可以和某些HIPS类软件相类比了。如果再结合NTFS权限和注册表权限,完全可以实现系统的全方位的安全配置,同时由于这是系统内置的功能,与系统无缝结合,不会占用额外的CPU及内存资源,更不会有不兼容的现象,由于其位于系统的最底层,其拦截能力也是其它软件所无法比拟的,不足之处则是其设置不够灵活和智能,不会询问用户。下面我们就来全面的了解一下 软件限制策略。1、概述
使用 软件限制策略,通过标识并指定允许哪些应用程序运行,可以保护您的计算机环境免受不可信任的代码的侵扰。通过 散列规则、证书规则、路径规则和Internet 区域规则,就用程序可以在策略中得到标识。默认情况下,软件可以运行在两个级别上:“不受限制的”与“不允许的”。在本文中我们主要用到的是路径规则和散列规则,而路径规则呢则是这些规则中使用最为灵活的,所以后文中如果没有特别说明,所有规则指的都是路径规则。
2、附加规则和安全级别
附加规则
在使用 软件限制策略 时,使用以下规则来对软件进行标识:
证书规则
软件限制策略可以通过其签名证书来标识文件。证书规则不能应用到带有 .exe 或 .dll 扩展名的文件。它们可以应用到脚本和 Windows 安装程序包。可以创建标识软件的证书,然后根据安全级别的设置,决定是否允许软件运行。
路径规则
路径规则通过程序的文件路径对其进行标识。由于此规则按路径指定,所以程序发生移动后路径规则将失效。路径规则中可以使用诸如 %programfiles% 或 %systemroot% 之类环境变量。路径规则也支持通配符,所支持的通配符为 * 和 ?。
散列规则
散列是唯一标识程序或文件的一系列定长字节。散列按散列算法算出来。软件限制策略可以用 SHA-1(安全散列算法)和 MD5 散列算法根据文件的散列对其进行标识。重命名的文件或移动到其他文件夹的文件将产生同样的散列。
例如,可以创建散列规则并将安全级别设为“不允许的”以防止用户运行某些文件。文件可以被重命名或移到其他位置并且仍然产生相同的散列。但是,对文件的任何篡改都将更改其散列值并允许其绕过限制。软件限制策略将只识别那些已用软件限制策略计算过的散列。
Internet区域规则
区域规则只适用于 Windows 安装程序包。区域规则可以标识那些来自 Internet Explorer 指定区域的软件。这些区域是 Internet、本地计算机、本地 Intranet、受限站点和可信站点。
以上规则所影响的文件类型只有“指派的文件类型”中列出的那些类型。系统存在一个由所有规则共享的指定文件类型的列表。默认情况下列表中的文件类型包括:ADE ADP BAS BAT CHM CMD COM CPL CRT EXE HLP HTA INF INS ISP LNK MDB MDE MSC MSI MSP MST OCX PCD PIF REG SCR SHS URL VB WSC ,所以对于正常的非可执行的文件,例如TXT JPG GIF这些是不受影响的,如果你认为还有哪些扩展的文件有威胁,也可以将其扩展加入这里,或者你认为哪些扩展无威胁,也可以将其删除。
screen.width-333)this.width=screen.width-333" border=0>
安全级别
对于软件限制策略,默认情况下,系统为我们提供了两个安全级别:“不受限的”和“不允许的”
注:
“不允许的”级别不包含任何文件保护操作。你可以对一个设定成“不允许的”文件进行读取、复制、粘贴、修改、删除等操作,组策略不会阻止,前提当然是你的用户级别拥有修改该文件的权限“不受限的”级别不等于完全不受限制,只是不受软件限制策略的附加限制。事实上,“不受限的”程序在启动时,系统将赋予该程序的父进程的权限,该程序所获得的访问令牌决定于其父进程,所以任何程序的权限将不会超过它的父进程。
但实际上,还有三个级别在默认情况是隐藏掉的,我们可以通过手动修改注册表来开启其它的三个级别,打开注册表编辑器,展开至:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\
Safer\CodeIdentifiers
新建一个DOWRD,命名为Levels,其值为 0x4131000(十六十制的4131000)
screen.width-333)this.width=screen.width-333" border=0>
创建完毕后重新打开gpedit.msc,我们会看到另外三个级别此时已经开启了。
screen.width-333)this.width=screen.width-333" border=0>
不受限的
最高权限,但其也并不是完全的不受限,而是“软件访问权由用户的访问权来决定”,即继承父进程的权限。
基本用户
基本用户仅享有“跳过遍历检查”的特权,并拒绝享有管理员的权限。
受限的
比基本用户限制更多,但也享有“跳过遍历检查”的特权。
不信任的
不允许对系统资源、用户资源进行访问,直接的结果就是程序将无法运行。
不允许的
无条件地阻止程序执行或文件被打开
根据权限大小可以排序为:不受限的>基本用户>受限的>不信任的>不允许的
3、软件限制策略的优先权
一个特定的程序可以有多个不同的规则适用,为此,可以按下列优先权顺序来使用这些规则。优先权按从高到低的顺序排列如下:
散列规则>证书规则>路径规则> Internet区域规则
如果存在多个路径规则冲突,则最具限制性的规则占有优先权。总的原则就是:规则越匹配越优先。
例如:
C:\Windows\System32\Taskmgr.exe C:\Windows\System32\*.exe *.exe
C:\Windows\System32\
C:\Windows\
本例是按优先权从高到低排列的。从这里我们可以看出:
绝对路径>通配符路径
文件名规则>目录规则
对于同样是目录规则的,则目录数匹配越多就越优先。
如果同时存在两个相似的规则,则最具限制性的规则优先权最高。例如,如果 C:\Windows\ 上有一个路径规则,其安全级别为“不允许的”,而 %windir% 上也有一个路径规则,其安全级别为“不受限制的”,则会采用最具限制性的规则,即“不允许的”。
这里,我们再顺便介绍一下环境变量和通配符。
在路径规则里,允许使用诸如“%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个),但不包括斜杠
对于通配符,其实网上很多教程上的做法是有误的。
例如有一条:%USERPROFILE%\Local Settings\**\*.* 不允许的这条规则本意是 阻止所有被指派的文件从 Local Settings 目录(包括其子目录)启动,但是经过验证发现,“**”和“*”是完全等效的,并且“*”不包括“\”,
电脑资料
《Windows组策略的软件限制策略》(https://www.unjs.com)。那么这条规则的实际意思就是“阻止所有被指派的文件从 Local Settings 的一级目录运行”,不包括 Local Settings 目录本身,也不包括二级及其下的所有子目录。我们来看看 Local Settings 目录下的一级目录有哪些呢?默认情况下是:Temp、Temporary Internet Files、Application Data、History,那么这条规则里就包括有 禁止TEMP目录下的所有被指派的文件运行 的意思,其根本结果就是会造成很多软件无法安装。因为有些软件在安装时会先行解压到TEMP目录。影响最大(简直可以列入本年度十大最错误的做法中了)的一条:?:\autorun.inf “不允许的”
相信对 软件限制策略 有研究的筒子都见过这条规则吧,这条规则的本意是阻止所有盘根目录下的 autorun.inf 文件运行,以阻止U盘病毒的运行。它也确实达到了它的目的, autorun.inf 文件双击的时候被阻止了。但病毒被阻止了吗?答案是否定的,病毒还是会被正常运行。
为什么呢?我们来了解一下系统是怎么处理 autorun.inf 文件的。
首先,svchost.exe 读取 autorun.inf,然后 explorer.exe 读取 autorun.inf,再然后 explorer.exe 将 autorun.inf 里的相关内容写入注册表中 MountPoints2 这个键值。只要 explorer.exe 成功写入注册表,那么这个 autorun.inf 文件的使命就完成了,U盘里的病毒就等着你去双击U盘了。
那么我们的软件限制策略中,将 autorun.inf 设为“不允许的”这一做法在这个过程中起到什么作用?
很遗憾地告诉你:没有任何作用。
真要说它起到的作用,仅仅是阻止你打开 autorun.inf 这个文件而已。所以,对于 autorun.inf 的所有策略,都是无效的。
真要想防止U盘病毒的运行,策略的设置只有一种方法:?:\*.* 不允许 意思就是阻止所有盘下面的被指派文件运行。当然,如果你只想阻止U盘下的文件运行的话,那就将规则里的“?”改为具体的盘符即可。当然还有其它很多办法来防止U盘病毒的,这个我会在文后附上其它解决方法的,欢迎筒子们进行验证。让我们去伪存真,找到最好的解决办法吧:)
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(基本用户)
可以看到,一个程序所能获得的最终权限取决于:父进程权限 和 规则限定的权限 的最低等级,也就是我们所说的最低权限原则
举一个例子:
若我们把IE设成基本用户等级启动,那么由IE执行的任何程序的权限都将不高于基本用户级别,只能更低。所以就可以达到防范网马的效果——即使IE下载病毒并执行了,病毒由于权限的限制,无法对系统进行有害的更改,如果重启一下,那么病毒就只剩下尸体了。
甚至,我们还可以通过NTFS权限的设置,让IE无法下载和运行病毒,不给病毒任何的机会。
这里,我们来看一下NTFS的权限(这里的权限是NTFS权限,与规则无关)。NTFS的所有权限如下:
遍历文件夹/运行文件 (遍历文件夹可以不管,主要是“运行文件”,若无此权限则不能启动文件,相当于AD的运行应用程序)
允许或拒绝用户在整个文件夹中移动以到达其他文件或文件夹的请求,即使用户没有遍历文件夹的权限(仅适用于文件夹)。
列出文件夹/读取数据
允许或拒绝用户查看指定文件夹内文件名和子文件夹名的请求。它仅影响该文件夹的内容,而不影响您对其设置权限的文件夹是否会列出(仅适用于文件夹)。
读取属性
允许或拒绝查看文件中数据的能力(仅适用于文件)。
读取扩展属性
允许或拒绝用户查看文件或文件夹属性(例如只读和隐藏)的请求。属性由 NTFS 定义。
创建文件/写入数据
“创建文件”允许或拒绝在文件夹中创建文件(仅适用于文件夹)。“写入数据”允许或拒绝对文件进行修改并覆盖现有内容的能力(仅适用于文件)。
创建文件夹/追加数据
“创建文件夹”允许或拒绝用户在指定文件夹中创建文件夹的请求(仅适用于文件夹)。“追加数据”允许或拒绝对文件末尾进行更改而不更改、删除或覆盖现有数据的能力(仅适用于文件)。
写入属性
允许或拒绝用户对文件末尾进行更改,而不更改、删除或覆盖现有数据的请求(仅适用于文件)。 即写操作
写入扩展属性
允许或拒绝用户更改文件或文件夹属性(例如只读和隐藏)的请求。属性由 NTFS 定义。
删除子文件夹和文件
允许或拒绝删除子文件夹和文件的能力,即使子文件夹或文件上没有分配“删除”权限(适用于文件夹)。
删除 (与上面的区别是,这里除了子目录及其文件,还包括了目录本身)
允许或拒绝用户删除子文件夹和文件的请求,即使子文件夹或文件上没有分配“删除”权限(适用于文件夹)。
读取权限(NTFS权限的查看)
允许或拒绝用户读取文件或文件夹权限(例如“完全控制”、“读取”和“写入”)的请求。
更改权限(NTFS权限的修改)
允许或拒绝用户更改文件或文件夹权限(例如“完全控制”、“读取”和“写入”)的请求。
取得所有权
允许或拒绝取得文件或文件夹的所有权。文件或文件夹的所有者始终可以更改其权限,而不论用于保护该文件或文件夹的现有权限如何。
在系统默认的NTFS权限下,基本用户对于windows\program files目录只有 遍历文件夹/运行文件 列出文件夹/读取属性 读取扩展属性 读取权限 这四项权限,对于documents and settings目录,仅对其所有的目录有完全控制的权限,其它目录只读?
我们的规则里面所说到的基本用户、受限用户,基本上等同于 NTFS 权限里的 USERS 组,但受限用户受到的限制更多,不管NTFS权限如何,其始终受到限制。
更多NTFS权限的设置,大家可以查阅NTFS相关的内容。
5、如何编写规则
关于规则编写,我们要遵循以下几个原则:要方便,不能对自己有过多的限制,这样,即使出现问题也好排队要安全,要考虑到你的系统中毒的来源有哪些,针对其做好防护。
基于文件名的病毒规则尽量少用,因为容易出现误阴,而且病毒的文件名随便可以改,我们做的又不是特征库。
下面介绍规则的具体编写方式
开始 -> 运行 -> gpedit.msc
在左边的窗口中依次展开计算机配置-> Windows设置->安全设置->软件限制策略
如果你之前没有进行过设置,那么在 软件限制策略 上点右键,选择创建新的策略然后在 其它规则 上右键点击,选择 新路径规则 既可以进行规则的创建了。
screen.width-333)this.width=screen.width-333" border=0>
screen.width-333)this.width=screen.width-333" border=0>
规则的设置很简单,就五个安全级别,根据你自己的需要设置即可。难点主要是规则的正确性和有效性,这个得靠多多实践来提升了。
另外提醒一下,大家在设置规则时,注意不要更改以下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%路径不受限的
相当于规则:
%SystemRoot%不受限的整个Windows目录不受限
%SystemRoot%\*.exe 不受限的 Windows下的exe文件不受限
%SystemRoot%\System32\*.exe 不受限的 System32下的exe文件不受限
%ProgramFiles%不受限的整个ProgramFiles目录不受限
这里要注意的一点是规则在新添加或者进行修改以后根据不同的机器,会在一至两分钟内生效,不会立即生效,如果长时间不生效,我们可以通过注销,重新登陆来生效,也可以使用命令 gpupdate /force 来强制刷新。