软件限制策略与u盘病毒防范.docx
《软件限制策略与u盘病毒防范.docx》由会员分享,可在线阅读,更多相关《软件限制策略与u盘病毒防范.docx(20页珍藏版)》请在冰豆网上搜索。
![软件限制策略与u盘病毒防范.docx](https://file1.bdocx.com/fileroot1/2023-5/23/bc579da2-616f-4a45-b43e-c28b3d99181b/bc579da2-616f-4a45-b43e-c28b3d99181b1.gif)
软件限制策略与u盘病毒防范
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.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:
\DocumentsandSettings\AllUsers
APPDATA=C:
\DocumentsandSettings\Administrator\ApplicationData
CommonProgramFiles=C:
\ProgramFiles\CommonFiles
ComSpec=C:
\WINDOWS\system32\cmd.exe
HOMEDRIVE=C:
HOMEPATH=\DocumentsandSettings\Administrator
ProgramFiles=C:
\ProgramFiles
SystemDrive=C:
SystemRoot=C:
\WINDOWS
TEMP=C:
\DocumentsandSettings\当前用户名\LocalSettings\Temp
TMP=C:
\Windows\Temp
USERPROFILE=C:
\DocumentsandSettings\Administrator
WINDIR=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的运行应用程序)
允许或拒绝用户在整个文件夹中移动以到达其他文件或文件夹的请求,即使用户没有遍历文件夹的权限(仅适用于文件夹)。
列出文件夹/读取数据
允许或拒绝用户查看指定文件夹内文件名和子文件夹名的请求。
它仅影响该文件夹的内容,而不影响您对其设置权限的文件夹是否会列出(仅适用于文件夹)。
读取属性
允许或拒绝查看文件中数据的能力(仅适用于文件)。
读取扩展属性
允许或拒绝用户查看文件或文件夹属性(例如只读和隐藏)的请求。
属性由NTFS定义。
创建文件/写入数据
“创建文件”允许或拒绝在文件夹中创建文件(仅适用于文件夹)。
“写入数据”允许或拒绝对文件进行修改并覆盖现有内容的能力(仅适用于文件)。
创建文件夹/追加数据
“创建文件夹”允许或拒绝用户在指定文件夹中创建文件夹的请求(仅适用于文件夹)。
“追加数据”允许或拒绝对文件末尾进行更改而不更改、删除或覆盖现有数据的能力(仅适用于文件)。
写入属性
允许或拒绝用户对文件末尾进行更改,而不更改、删除或覆盖现有数据的请求(仅适用于文件)。
即写操作
写入扩展属性
允许或拒绝用户更改文件或文件夹属性(例如只读和隐藏)的请求。
属性由NTFS定义。
删除子文件夹和文件
允许或拒绝删除子文件夹和文件的能力,即使子文件夹或文件上没有分配“删除”权限(适用于文件夹)。
删除(与上面的区别是,这里除了子目录及其文件,还包括了目录本身)
允许或拒绝用户删除子文件夹和文件的请求,即使子文件夹或文件上没有分配“删除”权限(适用于文件夹)。
读取权限(NTFS权限的查看)
允许或拒绝用户读取文件或文件夹权限(例如“完全控制”、“读取”和“写入”)的请求。
更改权限(NTFS权限的修改)
允许或拒绝用户更改文件或文件夹权限(例如“完全控制”、“读取”和“写入”)的请求。
取得所有权
允许或拒绝取得文件或文件夹的所有权。
文件或文件夹的所有者始终可以更改其权限,而不论用于保护该文件或文件夹的现有权限如何。
在系统默认的NTFS权限下,基本用户对于windows\programfiles目录只有 遍历文件夹/运行文件 列出文件夹/读取属性 读取扩展属性 读取权限这四项权限,对于documentsandsettings目录,仅对其所有的目录有完全控制的权限,其它目录只读?
我们的规则里面所说到的基本用户、受限用户,基本上等同于NTFS权限里的USERS组,但受限用户受到的限制更多,不管NTFS权限如何,其始终受到限制。
更多NTFS权限的设置,大家可以查阅NTFS相关的内容。
5、如何编写规则
关于规则编写,我们要遵循以下几个原则:
要方便,不能对自己有过多的限制,这样,即使出现问题也好排队
要安全,要考虑到你的系统中毒的来源有哪些,针对其做好防护。
基于文件名的病毒规则尽量少用,因为容易出现误阴,而且病毒的文件名随便可以改,我们做的又不是特征库。
下面介绍规则的具体编写方式
开始->运行->gpedit.msc
在左边的窗口中依次展开计算机配置->Windows设置->安全设置->软件限制策略
如果你之前没有进行过设置,那么在软件限制策略上点右键,选择创建新的策略
然后在其它规则上右键点击,选择新路径规则既可以进行规则的创建了。
_
规则的设置很简单,就五个安全级别,根据你自己的需要设置即可。
难点主要是规则的正确性和有效性,这个得靠多多实践来提升了。
另外提醒一下,大家在设置规则时,注意不要更改以下4条系统默认规则同时还要考虑它们的影响:
%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\SystemRoot%路径不受限的
%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\SystemRoot%*.exe路径不受限的
%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\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:
\ProgramFiles\*.* 不允许
这样的规则,看起来是没有问题的,但在特殊情况下则可能引起误伤,因为通配符即可以匹配到文件,也可以匹配到文件夹。
如果此目录下存在如SiteMapBuilder.NET这样的目录(如C:
\ProgramFiles\SiteMapBuilder.NET\SiteMapBuilder.NET),同样可以和规则匹配,从而造成误伤,解决方法是对规则进行修改:
C:
\ProgramFiles 不允许的
C:
\ProgramFiles\*\ 不受限的
这样就排队了子目录,从而不会造成误伤。
上网安全的规则
我们很多时候中毒,都是在浏览网页时中的毒,在我们浏览网页时,病毒会通过浏览器漏洞自动下载到网页缓存文件夹中,然后再将自身复制到系统敏感位置,比如windowssystem32programfiles等等目录下,然后运行。
所以单纯的对浏览器缓存文件夹进行限制是不够的。
比较实用的防范方法就是禁止IE浏览器在系统敏感位置创建文件,基于此,我们可以创建如下规则:
%ProgramFiles%\InternetExplorer\iexplore.exe 基本用户
%UserProfile%\LocalSettings\TemporaryInternetFiles\** 不允许的
%UserProfile%\LocalSettings\TemporaryInternetFiles\* 不允许的
%UserProfile%\LocalSettings\TemporaryInternetFiles\ 不允许的
%UserProfile%\LocalSettings\TemporaryInternetFiles 不允许的
如果你使用的是其它浏览器,同样将其设置为基本用户即可。
U盘规则
比较实际的作法:
U盘符:
\* 不允许的不信任的受限的 都可以
不过设为不允许的安全度更高,也不会对U盘的正常操作有什么限制。
CMD限制策略
%Comspec% 基本用户
这里要注意的是系统对于CMD和批处理文件是分开处理的,即使对CMD设置了不允许,仍然可以运行批处理
对于一些系统中平时我们极少用,但存在潜在威胁的程序我们也要进行限制。
比如ftp.exetftp.exetelnet.exenet.exenet1.exedebug.exeat.exearp.exewscript.execscript.exe等等,都可以将其设置为受限的或者直接设成不允许的。
禁止伪装的系统进程
svchost.exe 不允许的
C:
\Windows\System32\Svchost.exe 不受限的
如果你有兴趣,有精神,还可以为系统的所有进程做一个白名单,这样安全性可能会更高。
其它规则就由大家自由发挥吧。
最后提一下策略的备份吧,不能这么辛苦做完下次重做系统再来一次吧,呵呵,备份很简单,我们可以通过导出注册表来备份(不提倡,也就不介绍了)。
也可以通过直接备份文件来备份,打开C:
\WINDOWS\system32\GroupPolicy\Machine,在这个目录下有一个Registry.pol文件,对,就是它了。
备份它,重做系统后直接COPY过来就可以了,当然你也可以将你的策略分享给更多人使用。
这里有一点要注意的,就是这个Machine文件夹如果没有,千万不能手动建立,否则无效,可以使用我们前面介绍过的创建策略的方法,创建以后就会生成这个文件夹,也可以你在备份的时候直接备份这个文件夹。
千万要记得不能手动建立。
如果你不想使用这些策略了,很简单,将Registry.pol文件改名或者删除即可。
附:
U盘病毒解决方法
我这里介绍的都是一些通过系统自身来实现的方法,不使用第三方软件。
喜欢用第三方软件的筒子们就不要讨论了。
前面已经介绍过第一种方法了:
使用软件限制策略,创建一条规则“?
\*.* 不允许的”,这样即使你中了U盘病毒它也没办法运行。