∙ | Windows组策略之软件限制策略详解 对于Windows的组策略,也许大家使用的更多的只是 管理模板 里的各项功能。对于 软件限制策略 相信用过的筒子们不是很多:)。软件限制策略 如果用的好的话,相信可以和某些HIPS类软件相类比了。如果再结合NTFS权限和注册表权限,完全可以实现系统的全方位的安全配置,同时由于这是系统内置的功能,与系统无缝结合,不会占用额外的CPU及内存资源,更不会有不兼容的现象,由于其位于系统的最底层,其拦截能力也是其它软件所无法比拟的,不足之处则是其设置不够灵活和智能,不会询问用户。下面我们就来全面的了解一下 软件限制策略。 本文将以以下几方面为重点来进行讲解: 1、概述 2、附加规则和安全级别 3、软件限制策略的优先权 4、规则的权限分配及继承 5、如何编写规则 6、示例规则 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这些是不受影响的,如果你认为还有哪些扩展的文件有威胁,也可以将其扩展加入这里,或者你认为哪些扩展无威胁,也可以将其删除。 批派类型.JPG (91.81 KB) 2008-8-6 22:49 安全级别 关于桥的作文对于软件限制策略,默认情况下,系统为我们提供了两个安全级别:“不受限的”和“不允许的” 注: 1、“不允许的”级别不包含任何文件保护操作。你可以对一个设定成“不允许的”文件进行读取、复制、粘贴、修改、删除等操作,组策略不会阻止,前提当然是你的用户级别拥有修改该文件的权限 2、“不受限的”级别不等于完全不受限制,只是不受软件限制策略的附加限制。事实上,“不受限的”程序在启动时,系统将赋予该程序的父进程的权限,该程序所获得的访问令牌决定于其父进程,所以任何程序的权限将不会超过它的父进程。 default.jpg (53.54 KB) 2008-8-6 22:49 但实际上,还有三个级别在默认情况是隐藏掉的,我们可以通过手动修改注册表来开启其它的三个级别,打开注册表编辑器,展开至: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers 新建一个DOWRD,命名为Levels,其值为 0x4131000(十六十制的4131000) registry.jpg (82.42 KB) 2008-8-6 22:49 创建完毕后重新打开gpedit.msc,我们会看到另外三个级别此时已经开启了。 default2.jpg (63.46 KB) 2008-8-6 22:49 不受限的 最高权限,但其也并不是完全的不受限,而是“软件访问权由用户的访问权来决定”,即继承父进程的权限。 基本用户 基本用户仅享有“跳过遍历检查”的特权,并拒绝享有管理员的权限。 受限的 比基本用户限制更多,但也享有“跳过遍历检查”的特权。 不信任的 不允许对系统资源、用户资源进行访问,直接的结果就是程序将无法运行。 不允许的 无条件地阻止程序执行或文件被打开 根据权限大小可以排序为: 不受限的 > 基本用户 > 受限的 > 不信任的 > 不允许的 3、软件限制策略 的优先权 一个特定的程序可以有多个不同的规则适用,为此,可以按下列优先权顺序来使用这些规则。优先权按从高到低的顺序排列如下: 散列规则 > 证书规则 > 路径规则 > Internet 区域规则 如果存在多个路径规则冲突,则最具限制性的规则占有优先权。总的原则就是:规则越匹配越优先。 例如: C:\Windows\ 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\ 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 目录(包括其子目录)启动,但是经过验证发现,“**”和“*”是完全等效的,并且“*”不包括“\”。那么这条规则的实际意思就是“阻止所有被指派的文件从 Local Settings 的一级目录运行”,不包括 Local Settings 目录本身,也不包括二级及其下的所有子目录。我们来看看 Local Settings 目录下的一级目录有哪些呢?默认情况下是:Temp、Temporary Internet Files、Application Data、History,那么这条规则里就包括有 禁止TEMP目录下的所有被指派的文件运行 的意思,其根本结果就是会造成很多软件无法安装。因为有些软件在安装时会先行解压到TEMP目录。 影响最大(简直可以列入本年度十大最错误的做法中了)的一条:?:\autorun.inf “不允许的” 相信对 软件限制策略 有研究的筒子都见过这条规则吧,这条规则的本意是阻止所有盘根目录下的 autorun.inf 文件运行,以阻止U盘病毒的运行。它也确实达到了它的目的, autorun.inf 文件双击的时候被阻止了。但病毒被阻止了吗?答案是否定的,病毒还是会被正常运行。为什么呢?我们来了解一下系统是怎么处理 autorun.inf 文件的。 首先, 读取 autorun.inf,然后 读取 autorun.inf,再然后 将 autorun.inf 里的相关内容写入注册表中 MountPoints2 这个键值。只要 成功写入注册表,那么这个 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设置 -> 安全设置 -> 软件限制策略 如果你之前没有进行过设置,那么在 软件限制策略 上点右键,选择创建新的策略 然后在 其它规则 上右键点击,选择 新路径规则 一句话赞美老师既可以进行规则的创建了。 新路径规则.jpg (96.13 KB) 2008-8-6 22:49 新路径规则2.jpg (28.06 KB) 2008-8-6 22:49 规则的设置很简单,就五个安全级别,根据你自己的需要设置即可。难点主要是规则的正确性和有效性,这个得靠多多实践来提升了。 另外提醒一下,大家在设置规则时,注意不要更改以下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 来强制刷新。 6、示例规则 根目录规则 如果我们要限制某个目录下的程序运行,一般是创建诸如: C:\Program Files\*.* 不允许 这样的规则,看起来是没有问题的,但在特殊情况下则可能引起误伤,因为通配符即可以匹配到文件,也可以匹配到文件夹。如果此目录下存在如 SiteMapBuilder.NET 这样的目录(如C:\Program Files\SiteMapBuilder.NET\Site Map Builder.NET),同样可以和规则匹配,从而造成误伤,解决方法是对规则进行修改: C:\Program Files 不允许的 C:\Program Files\*\ 不受限的 这样就排队了子目录,从而不会造成误伤。 上网安全的规则 我们很多时候中毒,都是在浏览网页时中的毒,在我们浏览网页时,病毒会通过浏览器漏洞自动下载到网页缓存文件夹中,然后再将自身复制到系统敏感位置,比如 windows system32 program files等等目录下,然后运行。所以单纯的对浏览器缓存文件夹进行限制是不够的。比较实用的防范方法就是禁止IE浏览器在系统敏感位置创建文件,基于此,我们可以创建如下规则: %ProgramFiles%\Internet 基本用户 %UserProfile%\Local Settings\Temporary Internet Files\** 不允许的 %UserProfile%\Local Settings\Temporary Internet Files\* 不允许的 %UserProfile%\Local Settings\Temporary Internet Files\ 不允许的 %UserProfile%\Local Settings\Temporary Internet Files 不允许的 如果你使用的是其它浏览器,同样将其设置为 基本用户 即可。 U盘规则 比较实际的作法: U盘符:\* 不允许的 不信任的 受限的 都可以 不过设为不允许的安全度更高,也不会对U盘的正常操作有什么限制。 CMD限制策略 %Comspec% 基本用户 这里要注意的是系统对于CMD和批处理文件是分开处理的,即使对CMD设置了不允许,仍然可以运行批处理 对于一些系统中平时我们极少用,但存在潜在威胁的程序我们也要进行限制。比如 at. 等等,都可以将其设置为受限的或者直接设成不允许的。 禁止伪装的系统进程 不允许的 C:\Windows\ 不受限的 如果你有兴趣,有精神,还可以为系统的所有进程做一个白名单,这样安全性可能会更高。 其它规则就由大家自由发挥吧。 最后提一下策略的备份吧,不能这么辛苦做完下次重做系统再来一次吧,呵呵,备份很简单,我们可以通过导出注册表来备份(不提倡,也就不介绍了)。也可以通过直接备份文件来备份,打开 C:\WINDOWS\system32\GroupPolicy\Machine ,在这个目录下有一个 Registry.pol 文件,对,就是它了。备份它,重做系统后直接COPY过来就可以了,当然你也可以将你的策略分享给更多人使用。这里有一点要注意的,就是这个Machine文件夹如果没有,千万不能手动建立,否则无效,可以使用我们前面介绍过的创建策略的方法,创建以后就会生成这个文件夹,也可以你在备份的时候直接备份这个文件夹。千万要记得不能手动建立。如果你不想使用这些策略了,很简单,将 Registry.pol 文件改名或者删除即可。 附:U盘病毒解决方法 我这里介绍的都是一些通过系统自身来实现的方法,不使用第三方软件。喜欢用第三方软件的筒子们就不要讨论了。 前面已经介绍过第一种方法了:使用 软件限制策略,创建一条规则 “?\*.* 不允许的” ,这样即使你中了U盘病毒它也没办法运行。 第二种方法,其实也算是第一种方法的延伸吧。前面我们分析过系统对 autorun.inf 文件的处理流程,从中我们可以看出有一步, 读取 autorun.inf 的内容后会将其写入注册表中,由此,我们可以通过对注册表相关键值的权限进行限制,从而使其无法修改注册表,进而达到防止U盘病毒运行的目的。相关注册表键: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\*\shell\open HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\*\shell\autorun HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\*\shell\explorer HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\*\shell\*\Command HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 具体做法是将这些键降低权限,或者直接将所有用户对其的访问权限取消都可以。 第三种方法就是利用Windows的一个漏洞,建立Bug文件夹,来防止Autorun类病毒。具体方法是: 首先在U盘下建立一个名为Autorun.inf的文件夹,然后在这个文件夹下建立一个带“.”的BUG文件夹,这样的话 autorun.inf 文件夹就无法删除了,比如我们在D盘下建立: 首先在D盘下建立 Autorun.inf 文件夹 然后运行CMD,输入 md d:\autorun.inf\test..\ 这样就可以在autorun.inf文件夹里建一个名为“test.”的文件夹,在资源管理器中无法访问,无法改名,无法删除。 这种方法比较消极,但适用于经常在别人机子上使用U盘的情况。不过据说有些病毒已经可以对付这种方法了。 第四种方法,也是流传很广的一种做法,就是通过组策略或者注册表禁止自动播放功能。这种方法以前我也是深信不疑的,但通过近来的几个小实验,发现这种方法也是有缺陷的,它只能防止一些做工粗糙的U盘病毒,对于很多病毒其实是防不了的。这个我们可以做如下实验来验证。我们自己建立一个 autorun.inf 文件,放于U盘根目录下,再COPY一个NOTEPAD到你的U盘根目录下,其内容如下: [autorun] shell\open=打开(&O) shell\open\ shell\open\Default=1 shell\explore=资源管理器(&X) shell\explore\ 从组策略中关闭自动播放功能,在U盘点击右键,新菜单里没有多出来的选项,但你双击U盘试试,你会发现NOTEPAD运行了。使用右键选择打开或者资源管理器也一样,都会运行,因为这里 autorun.inf 已经修改了右键菜单里原来这两项的功能了。 那么自动播放是用来干嘛的呢?相信很多筒子都知道,现在有好多光盘,当你把光盘放入光驱后,不用你进行任何操作,就会弹出一个界面,让你选择运行什么,或者播放什么这一类,记得瑞星的杀软就是这样,还有一些主板显卡的驱动盘也有这功能,但是把同样的内容放入U盘中,插入黄千硕U盘的时候却不会自动运行,很显然操作系统的这个功能只是对光盘有效,这就是我们所知道的自动播放功能,我们在组策略中关闭了自动播放功能,仅仅只是使光盘放入光驱后不会自动运行,但你点击光驱右键,你会发现 自动播放 的选择还是存在的,所以关闭自动播放毫无意义。在这里我们要注意一个小小的概念,自动播放(AutoPlay) 自动运行(AutoRun) 这是有区别的。要想彻底关闭系统的这个功能,我们只能从服务入手,对系统熟的话你就会知道系统处理自动播放和自动运行的服务是 Shell Hardware Detection ,所以我们只要关闭了 Shell Hardware Detection 这个服务,所有的U盘病毒都不可能运行起来了。但这种方法也不是万能的,因为系统的差异,可能某些系统关闭此服务后会导致系统启动缓慢。 个人认为,对于U盘病毒的防范,修改注册表的那种方法是最有效而且没有什么副作用的。 本帖最近评分记录 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论