2周年T恤设计比赛投稿进行中论坛升级问题疑问解答!诚招 - 美化坛版主
美化常用工具下载(必备)花不完的天下币秀桌面 - 展示(欢迎投稿哟)
发新话题
打印

★咖啡规则设置技巧——提高篇★

★咖啡规则设置技巧——提高篇★


  • ★咖啡规则设置技巧——提高篇★
    转自卡饭.http://bbs.kafan.cn/viewthread.php?tid=178656&extra=page%3D1
    转帖.供参考学习

    在网上我们经常能看到一些咖啡的规则设置文章,里面所提及的所谓什么高级技巧,以现在的角度来看
    ,那些设置方法已经十分落后了。但是这样的文章还在被到处转载,继续误导他人。例如竟然有人说防
    范网页病毒只要把js、vbs、htm、html都防止新建、执行就可以了,对于这种做法,我真不知说什么好
    了。
    网上真正有用的、关于咖啡规则设置的文章极少,所以新手学习规则十分困难。然而却有一些人整天把研究规则挂嘴边,但“研究”了那么久,
    也不见有任何技术性成果出来,更有甚者,自己的规则没有设好,反而说咖啡的规则累人,对于这些人,我只能说,那是因为你们没有
    去考虑过,如何可以花更少的时间和精力以获得更多的成果。

    以下分享一下我的心得,希望对各位有所帮助。

    首先有一句话大家要是记住的:
    咖啡的规则是用来限制病毒的,而不是用来限制自己的!
    我们编写规则时,一定要从这个原则出发!

    1.善用文件夹排除法
    大家在对规则进行排除的时候,一般的做法是逐个进程的添加。此法最大的缺点就是——累。尤其是遇
    到需要添加大量进程的时候,或者新安装玩软件的时候,每次都要查看日志,然后慢慢排除,实在是麻
    烦。恐怕很多人放弃咖啡也是出于这个原因。
    事实上,如果我们将软件集中管理起来(例如将软件安装在同名的文件夹内),然后采取文件夹排除法
    ,那么就可以大大地减少工作量,也不会感觉到累了。
    但有一点需要注意的,就是排除的目标文件夹,需要另加规则进行保护,不然若病毒进入此文件夹后,
    就能通行无阻了。

    小结:咖啡之所以让一些人感觉到麻烦,无非就是规则的排除。善用文件夹排除法,可以让你从大量的
    排除工作中解放出来。
    PS:排除的目标文件夹最好使用中文名称,可以防止病毒利用


    2.理清父子进程关系,搞清执行主体。
    如果你想写出好的、有效的、而又不影响正常使用的规则来,那么这一点是最最重要的。

    首先,大家要搞清什么是父进程,什么是子进程
    只有父进程可以排除,子进程不能排除。
    在咖啡规则里,“要包含的进程”是父进程,“要阻止的文件或文件夹”是子进程,“要排除的进程”是对于“要包含的进程”而言的,而且只能是“要包含的进程”里的子集。
    所以,如果大家想写规则 “只允许在某个文件夹下创建.txt文件,而阻止新建其它任何文件”,那么这样的规则用咖啡是做不到的。有很多人写出无效的规则来,就是这个原因。 这点请大家一定要搞清楚。


    然后,我们举一例:
    注册表规则反例.jpg (20.84 KB)
    2007-12-29 13:04



    大家看出这个规则的问题没有?
    这条规则的作用实际是在禁用注册表编辑器,但注意,这仅仅是注册表编辑器而已,而不是注册表。真
    正的注册表文件存在于%windir%\SYSTEM32\CONFIG中,由其中的多个文件和我的文档中各用户的
    ntuser.dat组成。事实上,病毒访问注册表的途径不只是通过regedit.exe(或者说,这种情况不多),
    病毒可以调用reg.exe来进行注册表的改写,也可以通过脚本来访问,也可以不借助其它程序直接访问注册表。
    因此,此规则并没有达到它所声称的目的,是失败的规则。造成这样的原因,正是用户没有搞清楚到底什么
    程序在访问什么文件。也就是所谓的执行关系的问题。

    其次,理清楚执行主体还能有助于解决规则影响日常使用的问题。很多人写阻止规则时,都习惯性地填
    上“*”,然后再慢慢排除正常进程,这种做法其实就是让大家觉得用咖啡规则累的根源。只要我们在阻
    止程序时,只阻止真正的秉事者,那么就不会带来不必要的麻烦了。关于这点,可以参看第3条。

    再举一例
    对于JS、vbs等脚本文件,很多人为了安全,都会禁止去“执行”。事实上,我们打开一个vbs文件时,
    进行的操作并不是“执行”,而是读取。那么是什么程序在“执行”脚本?脚本宿主工具,是脚本宿主
    解释并执行vbs里的代码。那又是谁启动了脚本宿主?答案是,你用什么程序去运行vbs文件的,就是什
    么程序调用了脚本宿主。
    所以,你去禁止vbs脚本的“执行”,那是无效的。只有禁止读取vbs,才能达到禁用的目的。我们也可
    以去禁止调用脚本宿主工具,那么脚本自然就无法被解释了。

    再举一比较典型的例子,通过此例大家应该会对执行关系有一个比较清晰的了解:
    规则1.jpg (21.66 KB)
    2007-12-31 13:13




    2.jpg (19.98 KB)
    2007-12-31 13:13



    这两条规则,唯一不同的就是执行主体和被操作对象的关系互换了。
    这样互换后,两条规则有什么区别?

    先分析规则1:
    规则1要阻止的执行主体是U:\**,也就是U盘的程序。也就是说,我们的系统程序
    (例如explorer)不再阻挡范围之内,所以我们去读取U盘里的文件,例如复制、打
    印word文档等等,都是可以的。因此在此规则下,U盘是可以正常使用的。
    规则1的作用其实就是“禁止I盘的文件对本地文件进行任何操作”,简单说,就
    是即使I盘的程序被运行了,它也不能对本地干任何事。

    至于规则2:
    规则2要阻止的执行主体是*,即任何程序。自然包括操作系统,因此在此规则下
    ,我们无法对U盘的文件进行任何操作!包括打开txt文档。
    规则2的作用是“禁止所有程序读取U盘的文件”,也就是说,U盘的文本文档也无
    法打开了!连往U盘里写文件,复制文件等等操作都无法完成。

    注:有时候,我们需要在规则1中的排除项里面加入“**\Windows\**”,这是因为,
    虽然理论上,系统的程序不在规则的阻挡范围之内,但实际应用时,会发现类似
    **\NOTEPAD.EXE 这样的程序触犯规则,具体原因未明,可能是咖啡的判定bug。
    解决方法则是:
    1.打上patch4补丁
    2.在排除项里添加  **\windows\**
    因为U盘里面的文件 和windows文件夹里面的文件是没有交集的,也就是说,排除
    了windows文件夹,其实是什么也没有排除

    小结:所谓研究咖啡规则,不仅仅是要学习规则的语法,更重要的是多去了解系统的常识和程序被调用的关系。
    其实在编写规则时多进行测试,就能搞清楚很多问题了,最后你能知道什么程序调用什么程序是正常行为,而什么
    情况却不是。当这些你都了然于胸的时候,你就能很好地驾驭咖啡的规则了,而同时,你也成为一个高
    手了。


    3.转换思路,另辟蹊径
    为了说明问题,又举一例:
    我们一般的防范U盘规则。大家都是怎样做的?我想大部分都是禁止系统去读取autorun.inf吧。其实要
    实现此功能还有另一种方法的。那就是使用注册表规则。如下图:
    防U盘病毒.jpg (23.76 KB)
    2008-1-26 00:33



    要包含的进程那里,我想大概大家又会习惯性地填上“*”。其实,执行这个注册表操作的正是
    explorer.exe,只禁止它就可以了。其它一些正常的进程也会访问这个键值,所以,随便地填上“*”不
    符合我们方便性要求。大家在写规则时,除非必要,否则慎用“*”。
    其实此规则防U盘的效果和禁止读取autorun,inf的作用是一样的,连缺点都是一致的,就是会连光盘的
    自动播放功能都禁了。

    小结:举此例的目的在于说明,要设规则达到某种效果,其实可以有很多方法的。若此路难行,不妨绕
    道。这样或者就能找到最好最适合自己的方法。

    TIPS:其实咖啡不用规则也可以轻松防住利用autorun的病毒。如下图设置:
    autorun.jpg (24.48 KB)
    添加自定义检测项
    2007-12-29 23:40


    autorun2.jpg (29.11 KB)
    再排除光驱下的autorun文件
    2007-12-29 23:40








    4.关于通配符 和 文件操作的解释
    可能一些人对这点还有些困惑,这里说一下 引用:
    文件操作解释:
    对文件进行读访问[G]:表面上说禁止对文件的读取,实际上,禁止了读取,效果等于选
                择了所有项目。即[G]=[G]++[K]+[H]+[J]+[R]。
    对文件进行写访问:不折不扣的禁止写入,没有其他副作用,但是一个被保护的文件一
                旦更名,就可以写入了,且更名不在阻挡范围。
    正在执行的文件[K]:仅对执行文件有效(EXE、COM、BAT、DLL、SCR),对CHM、
                MSI、VBS无效。可更名。
    正在创建的新文件[H]:阻挡新文件创建,可以使用名称通配符,后缀通配符,
                且[H]=[H]+[R]
    正在删除文件[J]:实际效果为:[J]=[J]+[R]

    重命名文件[R]:不存在的文件操作,但是很重要。
      
      由上述解说可见,和[K]存在更名逃脱规则的风险,所以FD规则中只有和[K]时,根据需要选择
    [J]锁定文件。

    咖啡的通配符跟HIPS是有一些区别的,这里简单说说。 引用:
    咖啡通配符的解释:
    问号 (?) : 用于表示任意单个字符,不能为空。如:maxthon? 包含 maxthon1、maxthon2,但不包含
    maxthon
    星号 (*) : 用于排除多个字符,可以为空。如:maxthon* 包含 maxthon1、maxthon1234、maxthon等

    双星号 (**) : 表示零个或多个含有反斜杠的字符,这样允许多层次排除。例:C:WINDOWS\**,即为
    windows目录下(包含各级子目录)的所有文件


    另外,**\** 和 **\* 是完全等价的。* 和 **\** 在单独使用时是等价的,均代表“所有的文件”。而
    *.* 则是代表“所有带后缀的文件”
    例如:C:\WINDOWS\*,代表windows根目录下的所有文件(不包含子目录)
          “C:\WINDOWS\**” =“C:\WINDOWS\**\*” =“C:\WINDOWS\**\**”,均代表windows目录下的
    所有文件(包含子目录)
          C:\WINDOWS\*.*,代表windows根目录下的所有带后缀的文件(不包含子目录)

    5.减少重复劳动,规则多合一
    举一例:
    迅雷规则.jpg (23.2 KB)
    2007-12-29 13:04




    大家认为此规则可以如何改进?
    我的看法是,包含进程那里,我们需要进行调整。
    用过迅雷的都知道,迅雷的有两个运行文件,一个是thunder.exe,一个是thunder5.exe。因此这里只阻
    止thunder.exe的话,就让thunder5.exe偷过了。那么,是要再多建一条规则吗?当然不是,只要在包含
    项里加上thunder5.exe就可以了。
    不过哦,这样又有一个问题了:如果哪一天出了一个thunder6.exe呢?又要改规则吗?
    为了避免重复劳动,我们应该考虑将包含项改成如此:thunder.exe,thunder?.exe ,这样规则就基本
    不需要改动了,哪怕它某日又冒出一个thunder7.

    再举一例:
    RD1.jpg (23.14 KB)
    2007-12-29 13:04



    RD2.jpg.jpg (23.26 KB)
    2007-12-29 13:04




    事实上,这两条规则完全可以合成一条,因为第二条规则其实就已经包含了第一条规则了,也就是说,
    第一条规则是多余的。因为通配符“**”就已经包含项和值。不信?可以试试。

    这样就是所谓的规则多合一了。其实对于很多规则来说,都可以考虑合成为一条的,当然具体情况要具
    体分析。

    又例如,如果你想保护一些重要的文件不被恶意修改、删除(如GHO镜像文件、文档资料等),可以将这些文件放到同名的目录中(不需要同一目录,只要同名即可),然后用一条规则保护这种目录即可。这样,一条规则就可以达到保护多种格式的文件的目的,而不必多写规则。

    小结:合理使用通配符和文件夹管理,可以少写和少改动规则,减少重复劳动。 引用:
    另外还有一个方法,就是将各种功能相似的软件集中管理(将其都安装在一个文件夹内),然后针对这
    个文件夹建立规则,是最省心、又最有效的办法。如上例的迅雷规则中,还可以把thunder、flashget、emule、

    BT客户端、FTP软件等等都安装在一个文件夹中,这样就可以一条规则就能管理好这些程序了。我自己的做
    法是这样的:把IE禁用,把平时用的浏览器安装到“浏览器”目录,实行特别关照。迅雷等软件均装在“下载工具
    ”目录,其它会访问互联网的程序放到另一目录中。然后分别为这些文件夹加以适当的限制,分配不同
    的权限。如此管理软件后,不但脉络清晰,还方便制定规则,实为一举两得。

    6.关于排除项的安全性——路径排除法
    这个问题就不需要什么说明了,大家知道,只要规则中存在一个排除进程,就多一份危险——如果病毒
    和排除项名称一样这么办?这时采用路径排除法就能解决问题。

    7.了解系统文件夹作用,提高规则之针对性
    关于这个,大家需要了解的是:
    1.系统正常工作时,各个系统文件夹的作用。
    2.网页木马会把病毒下载到什么目录,病毒一般从什么文件夹运行,运行时会释放什么类型的文件到什
    么目录等等。
    或者大家觉得这些都是废话,但要对系统文件夹有一个深入的了解,不是一件容易的事,而搞清楚这些
    之后,编写规则的时候,就可以很有针对性了,而不必用那些超级规则来锁死硬盘了。

    8.前摄防御,不做事后诸葛:
    引用:

        病毒的侵入必将对系统资源构成威胁,即使是良性病毒,至少也要占用少量的系统空间影响系统的正常运行,特
    别是通过网络传播的计算机病毒,能在很短的时间内使整个计算机网络处于瘫痪状态,从而造成巨大的损失。因此,
    防止病毒的侵入要比病毒入侵后再去发现和消除它更重要。因为没有病毒的入侵,也就没有病毒的传播,更不需要消
    除病毒。另一方面,现有病毒已有万种,并且还在不断增多。而消毒是被动的,只有在发现病毒后,对其剖析、选取
    特征串,才能设计出该“已知”病毒的杀毒软件;而当发现新病毒或变种病毒时,又要对其剖析、选取特征串,才能
    设计出新的杀毒软件。它不能检测和消除研制者未曾见过的“未知”病毒,甚至对已知病毒的特征串稍作改动,就可
    能无法检测出这种变种病毒或者在杀毒时出错。这样,发现病毒时,可能该病毒已经流行起来或者已经造成破坏。

    而现在流行的主动防御,基本上是靠行为特征来判断的,这些特征也是入库式的,要是某天病毒使用未知的手段进行
    入侵,而这种手段没有包含在行为特征库里,病毒就可以绕过所谓的“主动防御”。从这个意义上说,现在的
    主动防御,其实也是一种“被动防御”。那么,什么才算是真正的主动防御?




    举数例:防删gho文件,防写镜像映射、保护安全模式等
    我想大家应该都有这样的规则吧?没有?还不赶快补上!
    不过大家在做这些规则的时候,有没有想过,你是因为什么才这样做的?
    试问,在熊猫威金大行其道之前,你可有想过保护gho文件?在AV终结者肆虐之前,你可曾想过保护镜像
    映射功能?在帕虫发现之前,你又可曾保护过安全模式的注册表键值?
    或者你已经发现了,为什么我们的动作总是比病毒要慢一拍?如果是这样的话,跟传统的杀软的防毒手
    段岂不是一样的滞后?

    若不断其源,则水流不止。防毒,我们需要有前摄性。防止病毒进入系统,才是根本之法。
    而与此相反
    ,很多人的做法却是在严格限制本地操作,这样无疑是对自己缚手缚脚。
    当然我不是说本地防御要不得
    。本地病毒防范还是必要的,但要适度,并且最好以不影响或者很少影响正常使用为前提,不然再多的规
    则,再强大的防御,在“失去方便性”这一前提面前,就显得不值一提了。由于主动防御早被大家熟知,
    因此在此不作讨论,而我们要谈的,是另一相似而不相同的概念——前摄防御。

    说到这里,到底何谓前摄防御?我无法下一个准确的定义,因为这个概念比较抽象。以我的理解,就是
    在病毒得以运行之前,就将其拦截住,也就是,阻断病毒的来路。
    (与主动防御相比,主动防御是在病毒运行之时,检测其行为,并将其拦截。前摄防御与主动防御的区
    别就在于时间上,一个是病毒运行之前,一个是病毒运行之时。)

    要做到前摄防御,谈何容易?的确是一件不简单的事,但也不是不可能的。前摄防御也不需要做得滴水
    不漏,能防住大部分未知病毒就很好了,剩下的还可以交给传统防御(监控、扫描杀毒)、本地的其它规则等等。

    一般来说,根据“前摄——主动——传统”的防御顺序,我们可以采取以下思路:

    (1)拒绝入侵:来历不明的入侵软件(尤其是通过网络传过来的)不得进入系统。(重要,这一步是第一步,也是最关键的一步
             在这个环节上,我们的主要工作是:管好浏览器、防范U盘病毒、防范局域网的非法共享访问等等。这些通过咖啡的规则都可以做到。
    (2)防止运行:病毒要成功运行,需要系统环境的支持,例如动态链接库(dll文件)等等。我们不妨尝试不让病毒
             去加载这些文件,那么病毒将不能运行。(即使病毒被执行了,它还是无法运行成功)
    (3)管制好高风险的系统文件,不让病毒利用。如shutdown.exe,format.com,net*.exe,ntvdm.exe,at.exe等等,这些程序大众
             用户极少用到,而病毒却是恰恰相反。
    (4)根据病毒常见的高危行为事先布防。很多时候,只要阻止了病毒的其中一个危险动作,那么病毒的运行就会停止。
             因此我们并不需要防止所有危险行为(那也会为自己带来不便)。
    (5)对于下载或其它途径传入的文件,都应该进行扫描后方可执行之。(这个与咖啡的规则无关了,题外话,^_^)

    小结:写规则时我们要考虑前摄性,如果一开始就假定了病毒已经运行,然后再去写规则应对的话,那
    么你的规则总是要比病毒慢一步,当新病毒出来的时候,可能就会无法适从。所以,我们写规则应当更
    多的考虑病毒运行之前的情况,而不是运行之后的防御。另外,主动防御也带给我们一个思路,那就是
    如何防范流氓——我们应该从流氓的入口把关,而不是防流氓写入到某某目录。

    最后以一句话作结:正如没有最完美的人一样,没有最好用的安全软件,因为用软件的,正是人
    发新话题