Windows组策略之软件限制策略详解对于Windows的组策略,也许大家使用的更多的只是管理模板里的各项功能。对于软件限制策略相信用过的筒子们不是很多:)。软件限制策略如果用的好的话,相信可以和某些HIPS类软件相类比了。如果再结合NTFS权限和注册表权限,完全可以实现系统的全方位的安全配置,同时由于这是系统内置的功能,与系统无缝结合,不会占用额外的CPU及内存资源,更不会有不兼容的现象,由于其位于系统的最底层,其拦截能力也是其它软件所无法比拟的,不足之处则是其设置不够灵活和智能,不会询问用户。下面我们就来全面的了解一下软件限制策略。本文将以以下几方面为重点来进行讲解:1、概述2、附加规则和安全级别3、软件限制策略的优先权4、规则的权限分配及继承5、如何编写规则6、示例规则1、概述使用软件限制策略,通过标识并指定允许哪些应用程序运行,可以保护您的计算机环境免受不可信任的代码的侵扰。通过散列规则、证书规则、路径规则和Internet区域规则,就用程序可以在策略中得到标识。默认情况下,软件可以运行在两个级别上:“不受限制的”与“不允许的”。在本文中我们主要用到的是路径规则和散列规则,而路径规则呢则是这些规则中使用最为灵活的,所以后文中如果没有特别说明,所有规则指的都是路径规则。2、附加规则和安全级别附加规则在使用软件限制策略时,使用以下规则来对软件进行标识:证书规则软件限制策略可以通过其签名证书来标识文件。证书规则不能应用到带有.exe或.dll扩展名的文件。它们可以应用到脚本和Windows安装程序包。可以创建标识软件的证书,然后根据安全级别的设置,决定是否允许软件运行。路径规则路径规则通过程序的文件路径对其进行标识。由于此规则按路径指定,所以程序发生移动后路径规则将失效。路径规则中可以使用诸如%programfiles%或%systemroot%之类环境变量。路径规则也支持通配符,所支持的通配符为*和?。散列规则散列是唯一标识程序或文件的一系列定长字节。散列按散列算法算出来。软件限制策略可以用SHA-1(安全散列算法)和MD5散列算法根据文件的散列对其进行标识。重命名的文件或移动到其他文件夹的文件将产生同样的散列。例如,可以创建散列规则并将安全级别设为“不允许的”以防止用户运行某些文件。文件可以被重命名或移到其他位置并且仍然产生相同的散列。但是,对文件的任何篡改都将更改其散列值并允许其绕过限制。软件限制策略将只识别那些已用软件限制策略计算过的散列。Internet区域规则区域规则只适用于Windows安装程序包。区域规则可以标识那些来自InternetExplorer指定区域的软件。这些区域是Internet、本地计算机、本地Intranet、受限站点和可信站点。以上规则所影响的文件类型只有“指派的文件类型”中列出的那些类型。系统存在一个由所有规则共享的指定文件类型的列表。默认情况下列表中的文件类型包括:ADEADPBASBATCHMCMDCOMCPLCRTEXEHLPHTAINFINSISPLNKMDBMDEMSCMSIMSPMSTOCXPCDPIFREGSCRSHSURLVBWSC,所以对于正常的非可执行的文件,例如TXTJPGGIF这些是不受影响的,如果你认为还有哪些扩展的文件有威胁,也可以将其扩展加入这里,或者你认为哪些扩展无威胁,也可以将其删除。安全级别对于软件限制策略,默认情况下,系统为我们提供了两个安全级别:“不受限的”和“不允许的”注:1、“不允许的”级别不包含任何文件保护操作。你可以对一个设定成“不允许的”文件进行读取、复制、粘贴、修改、删除等操作,组策略不会阻止,前提当然是你的用户级别拥有修改该文件的权限2、“不受限的”级别不等于完全不受限制,只是不受软件限制策略的附加限制。事实上,“不受限的”程序在启动时,系统将赋予该程序的父进程的权限,该程序所获得的访问令牌决定于其父进程,所以任何程序的权限将不会超过它的父进程。但实际上,还有三个级别在默认情况是隐藏掉的,我们可以通过手动修改注册表来开启其它的三个级别,打开注册表编辑器,展开至:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers新建一个DOWRD,命名为Levels,其值为0x4131000(十六十制的4131000)基本用户基本用户仅享有“跳过遍历检查”的特权,并拒绝享有管理员的权限。受限的比基本用户限制更多,但也享有“跳过遍历检查”的特权。不信任的不允许对系统资源、用户资源进行访问,直接的结果就是程序将无法运行。不允许的无条件地阻止程序执行或文件被打开根据权限大小可以排序为:不受限的基本用户受限的不信任的不允许的3、软件限制策略的优先权一个特定的程序可以有多个不同的规则适用,为此,可以按下列优先权顺序来使用这些规则。优先权按从高到低的顺序排列如下:散列规则证书规则路径规则Internet区域规则如果存在多个路径规则冲突,则最具限制性的规则占有优先权。总的原则就是:规则越匹配越优先。例如:C:\Windows\System32\Taskmgr.exeC:\Windows\System32\*.exe*.exeC:\Windows\System32\C:\Windows\本例是按优先权从高到低排列的。从这里我们可以看出:绝对路径通配符路径文件名规则目录规则对于同样是目录规则的,则目录数匹配越多就越优先。如果同时存在两个相似的规则,则最具限制性的规则优先权最高。例如,如果C:\Windows\上有一个路径规则,其安全级别为“不允许的”,而%windir%上也有一个路径规则,其安全级别为“不受限制的”,则会采用最具限制性的规则,即“不允许的”。这里,我们再顺便介绍一下环境变量和通配符。在路径规则里,允许使用诸如“%windir%”“%userprofile%”之类的环境变量。一般情况下,我们的系统是在C盘,但也有些人基于其它一些原因如要安装双系统等,将系统安装在其它比如D盘下面,这时我们平常用到的一些路径比如“C:\windows\”就会无效,为了防止这种情况,我们就可以使用系统变量,像“%windir%”,系统会自动为我们匹配其目录。我们在创建规则的时候也可以使用这些环境变量,以适用于不同的系统。下面列出的是一些常使用的环境变量,更多的环境变量你可以运行CMD然后运行SET命令进行查看。ALLUSERSPROFILE=C:\DocumentsandSettings\AllUsersAPPDATA=C:\DocumentsandSettings\Administrator\ApplicationDataCommonProgramFiles=C:\ProgramFiles\CommonFilesComSpec=C:\WINDOWS\system32\cmd.exeHOMEDRIVE=C:HOMEPATH=\DocumentsandSettings\AdministratorProgramFiles=C:\ProgramFilesSystemDrive=C:SystemRoot=C:\WINDOWSTEMP=C:\DocumentsandSettings\当前用户名\LocalSettings\TempTMP=C:\Windows\TempUSERPROFILE=C:\DocumentsandSettings\AdministratorWINDIR=C:\WINDOWS同样,路径规则也支持使用通配符,对DOS熟悉的筒子应该知道这个东西,就是“?”和“*”。?:包括1个或0个字符*:包括任意个字符(包括0个),但不包括斜杠对于通配符,其实网上很多教程上的做法是有误的。例如有一条:%USERPROFILE%\LocalSettings\**\*.*不允许的这条规则本意是阻止所有被指派的文件从LocalSettings目录(包括其子目录)启动,但是经过验证发现,“**”和“*”是完全等效的,并且“*”不包括“\”。那么这条规则的实际意思就是“阻止所有被指派的文件从LocalSettings的一级目录运行”,不包括LocalSettings目录本身,也不包括二级及其下的所有子目录。我们来看看LocalSettings目录下的一级目录有哪些呢?默认情况下是:Temp、TemporaryInternetFiles、ApplicationData、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的运行应用程序)允许或拒绝用户在整个文件夹中移动以到达其他文件或文件夹的请求,即使用户没有遍历文件夹的权限(仅适用于文件夹)。列出文件夹/读取数据允许或拒绝用户查看指定文件夹内文件名和子文件夹名的请求。它仅影响该文件夹的内容,而不影响您对其设置权限的文件夹是否会列出(仅适用于文件夹)。读取属性允许或拒绝查看