瑞星卡卡安全论坛

首页 » 个人产品讨论区 » 瑞星杀毒软件 » 瑞星杀毒软件2011 » 瑞星工程师2009开发手记一,为什么瑞星不对冰刃做攻防
瑞星工程师12 - 2008-9-25 17:02:00
    从瑞星2008版开始,大家最关注的是“主动防御”功能,与此有关的负面评论中,最集中的就是瑞星不能拦截冰刃或狙剑,现在09公测了,好像大家对这个问题依然重视。那么,瑞星真的这么弱么,别人一两年前就能做到的,瑞星却做不到?被冰刃过,是不是意味着瑞星很弱?

    在我们开发2009之初,也讨论过这个问题。最终的结论是,瑞星不会对冰刃、狙剑等安全工具做攻防,就算继续被别人指指点点,瑞星的工程师也坚持做自己认为对的事情。

    1、像冰刃、狙剑这种安全工具结束进程时,并不是直接去结束进程,换句话说不像大家看到的这么简单。Windows系统下的所有操作,都是通过对象形式进行的,例如:窗口、文件、个体。这类安全工具都是通过更底层的系统内部函数,如:结束系统对象来实现的,通过先打开要结束进程的对象,再进行结束对象的操作。瑞星如果要拦截此类操作,首先要检测打开对自身程序进行打开或删除的对象,然后再拦截其的打开或删除对象的操作。如果拦截冰刃和狙剑,会严重影响电脑资源占用率、拖慢机器。在一些老机器上效果相当明显,我们目前还保留着一台老机器用于诸如此类的测试,特别是这种在速度方面的差距影响。如果使用该方式必然会使用驱动技术,在同级对抗中是没有意义的。

    2、无论是病毒或者是安全工具,同级代码之间的对抗,胜利者永远是后出招的,谁在明处谁倒霉。病毒或安全工具放出驱动后,与瑞星的驱动进行对抗,如果要保持对抗的优势,就必须频繁分析对方的招数并升级,双方这样频繁的升级,对于用户电脑安全而言,没有半点好处。 如果我们把冰刃干掉,那么冰刃会不会为了“技术的尊严”针对我们做优化,然后我们再研究新的破解之道……?

    3、从另外的角度上说,瑞星是杀毒软件,杀毒软件为什么要拦截安全工具呢?安全工具又为什么要关闭杀毒软件呢?花时间花精力浪费用户的系统资源去对抗别的安全工具,除了显摆自己的技术强,还有别的意义么?瑞星2009真正要做的,是帮助用户解决病毒和黑客攻击的问题,而不是和安全工具较劲。

    4、有人说瑞星工程师太拧,没办法,整天跟病毒还折腾不过来呢,时间、精力都是有限的,还有许许多多该做的事情没做呢。因此,如果谁要说某个病毒过了瑞星,我们会非常重视,马上研究、处理;如果谁要说冰刃、狙剑等安全工具过了瑞星,那就让他过吧。

    总之,不能把能不能放过冰刃啊、狙剑啊这类安全工具作为评判杀毒软件好坏的标准,我们应该把眼光放的更远一点儿。真正好的杀毒软件是能够保护用户电脑安全的。不管我们做得好不好,至少我们是这么想的,因此在09版中,我们的策略是拦截、防御和查杀。

    在和病毒的对攻中,没有一款杀毒软件可以保证100%地干掉对方;也没有一款杀毒软件可以100%地截获并处理病毒,那么,为什么我们不把病毒拦截在电脑之外呢?一旦它进入电脑了,那么能不能及时截获并分析处理、能不能把病毒干掉,都是两说的事情。因此,与其关注瑞星09能不能被冰刃过,不如关注我们的“木马入侵拦截(网站入侵和U盘入侵)”,要知道目前90%以上的木马和病毒,都是通过挂马的方式感染用户电脑的。
叶陵君 - 2008-9-25 17:40:00
希望能读到更多瑞星工程师的开发手记。
大将风度 - 2008-9-25 17:46:00
支持瑞星的工程师!继续努力吧~把瑞星2009弄好!
远去の誓言 - 2008-9-25 18:47:00
顶,支持
最硬的石头 - 2008-9-25 18:54:00
驱动之间的对抗:kaka18:
DoctorLc - 2008-9-25 19:06:00
:kaka9:
瑞星的工程师们好好干活~~~~
支持你们!
vdsvf - 2008-9-25 19:57:00
工程师的说法确实有道理,但瑞星杀软被病毒干掉的情况还是比较多的,在这方面瑞星需要加强,希望工程师们在这方面关注一下,毕竟现在主动攻击杀软病毒越来越多,比如"磁碟机"
无羽の翼 - 2008-9-25 20:34:00
如果说IceSword干掉了瑞星是无意的那也就罢了。
但是万一某病毒采用了和IceSword相似的技术过了瑞星,那怎么办?
会痛的呼吸 - 2008-9-25 21:43:00
:kaka9: 楼上的说得有道理啊!
★蓝色羽毛★ - 2008-9-25 22:08:00


引用:
原帖由 无羽の翼 于 2008-9-25 20:34:00 发表
如果说IceSword干掉了瑞星是无意的那也就罢了。
但是万一某病毒采用了和IceSword相似的技术过了瑞星,那怎么办?


现在病毒要做到驱动级也不是太容易的事,通过加载驱动来破坏系统的病毒,瑞星主防基本上都能监控到,以后就看病毒制造者能不能做到无驱动来终止瑞星了
majia001 - 2008-9-25 22:14:00


引用:
原帖由 无羽の翼 于 2008-9-25 20:34:00 发表
如果说IceSword干掉了瑞星是无意的那也就罢了。
但是万一某病毒采用了和IceSword相似的技术过了瑞星,那怎么办?


所以瑞星专门有帖子收集能杀瑞星的样本啊。
轩辕小聪 - 2008-9-26 2:47:00
虽然为了通俗易懂而使语句显得不那么“专业”,但是的确还是提到了重点。我就来补充一下好了。

结束进程,一般来说前提首先是NtOpenProcess(PsLookupProcessByProcessId->ObOpenObjectByPointer)得到有相应权限的进程句柄,只要得到句柄之后方法就多了,不一定用ZwTerminateProcess(冰刃1.22据说用的是PspTerminateProcess)结束进程,各种能使程序崩溃的方法包括内存清零等都能搞得出来。也不必非要NtOpenProcess,完全可以自己调用内核函数得到进程句柄。

以上是一般来说的,其实为了达到让目标进程崩溃的目的,甚至可以不要进程句柄。

比如内存清零或写入垃圾代码的方式,其实只要驱动下获得_EPROCESS结构中的DirectoryTableBase得到页目录物理地址,切换cr3就可以读写其他进程的虚拟内存空间了(没记错的话早有POC了吧),而对于获得_EPROCESS结构,任何在任务管理器中未被隐藏的进程,其_EPROCESS结构指针都可以非常容易得到的(PsLookupProcessByProcessId就可以直接得到,如果没有被做手脚的话。遍历ActiveProcessLinks双向链表也可以,既然任务管理器能看见进程说明这个链表相应项没有被摘链)。所以不要怀疑,只到POC层次的话,驱动下的确很容易实现,而且这方法你还很难有针对性地拦截和判断(把_EPROCESS给藏起来任务管理器里就看不见此进程了,用户不会答应;过程中的其他步骤则简单到你根本无从判断它的好坏)。当然以上的作法都是要有Ring0权限的。

双方都进了Ring0的话,本来就是endless war,只要对方研究了你的技术,就可以见招拆招,在这一点上安全软件和病毒rootkit没有什么区别,一般用户就是想不通这一点,才会老是纠缠在“冰刃能够结束瑞星”这种事情上。其实阻止冰刃结束瑞星即使在Ring0做也不难,但是由此带来的稳定性、兼容性、运行速度等等的影响却不能不考虑(比如PsLookupProcessByProcessId要是做掉的话,估计任务管理器对此进程的显示就会不正常的,这是用户不会接受的。ObOpenObjectByPointer打开的不仅仅是进程句柄,很多对象的访问都可以通过它,被调用的越频繁,HOOK掉之后就越会影响稳定性和响应速度,KiInsertQueueApc就更不用说了,看到号称不会被冰刃结束的安全软件们的inline hook,我都怕了)。

与其他安全工具做这种技术竞赛,吃亏的永远是瑞星这样的正规商业软件,因为说白了,很多在底层上做得很大胆的工具,基本都是免费工具,而且不是常驻内存的工具,既不必担心长期使用导致的稳定性等问题,也不必担心用户因此找他们的麻烦,而这些因素瑞星这样的商业软件却不得不考虑。用户电脑系统稳定性是第一位的,你保护做得再牛,如果系统因为稳定性原因而崩溃,也是得不偿失。

因此,呼吁杀软阻止冰刃,并最终导致这种技术上的无休止竞赛,从而使用安全软件稳定性兼容性隐患越来越大的话,最终吃亏的还是用户自己。

说了这么多,听起来Ring0级的驱动攻防对主动防御的形势好像很严峻,其实并不是这样的,我只是想说要在Ring0级搞破坏有多么容易。

一般用户提起这个问题时,也忽略了一个前提,即冰刃进Ring0这个前提。
用户根本忽略了杀毒软件主动防御的真正特性,就是利用高优先级启动的优势,抢先占领内核底层这个“制高点”,以拒绝后来的一切有害操作。实际操作中,如果冰刃是个病毒,它一加载驱动,瑞星拦截提示后,用户马上选择拒绝,冰刃就会初始化失败,就直接没戏了。所有谈论冰刃结束瑞星并因此担忧的用户,无一例外地都是直接允许了冰刃加载驱动,这本身就已经是自己无视了主动防御的作用,自己把这个问题带入了Ring0的endless war的范畴。而一旦进入了驱动攻防的状态,主动防御的优势就将丧失,不懂技术的用户根本就没有意识到这个问题。

同样的,担心有病毒利用冰刃的技术的用户,大可不用担心,这种病毒早就出现过了,在某些版本的机器狗驱动里就有这部分按照冰刃的结束进程原理进行操作的代码,但是这个版本根本没有大规模流行。原因正是基于上一段所讲的事实,机器狗的加载驱动方式是最传统的CreateService(或者通过替换beep.sys再启动其服务方式加载病毒驱动),在现今杀毒软件普遍拦截驱动加载的情况下,实际上已经没有了在防护完整的系统中继续肆虐的空间了。只要拦截并拒绝这种病毒加载驱动,这个问题就将不再存在。

因此,真正需要担心的不是这种传统的驱动型的Ring0级对抗,对于主动防御软件来说,这种对抗更多的只是一种技术层面的讨论,更应该引起注意的是通过Ring3级的代码就可以做到的对付杀毒软件包括结束瑞星的一些方法,以及时不时冒出来的可以被称为主动防御的恶梦的内核权限提升漏洞。

主动防御的机制看起来复杂,最终其实归结于三步:

拦截->判断->放行/拒绝

最难做的是哪一步?
是拦截吗?不是,只要插入系统底层,进占内核“制高点”,拥有了完全的权限之后,在POC级别上可以说只要病毒能做的,我们至少不会输,而从POC到实用软件,则是稳定性和兼容性的问题了(当然有时这个问题很难解决,以致于一些目前其实早已了解的技术因此根本无法在商业安全软件中采用)。

其实最难的是判断。主动防御软件被终结,往往并不是因为拦载不住某个操作,而是拦住了之后并没有把它当成恶意行为,于是又放行了。这种放行,当然有用户自己无法判断情况下自主放行,也有安全软件完全没有“意识”到其为危险操作而自动放行的。

举个例子,用NtOpenProcess获取不了句柄的话,就用ZwQuerySystemInformation->ZwDuplicateObject就好了,就如我之前在样本区看到一个Ring3下结束杀软的样本,都是早就公开了的代码了,害我逆了半天VB程序最后发现没有什么收获。这些API都是安全软件早已知道的,对其调用的拦截也是完全有拦截的,但是就是因为难以判断其操作的好坏,就放行了,因此造成了意料不到的结果。在主动防御时代,这种东西将越来越多,病毒不再是企图用直接冲进Ring0的方法来对占据“制高点”的杀软进行强攻,而是采取这种“不按常理出牌”的方式让安全软件措手不及。从这一点上看,至少瑞星如果把在csrss.exe进程中保存的自身进程的句柄抹掉,应该是有好处的。

另一种就是让人兴叹的内核权限提升漏洞了。如之前的win32k.sys的漏洞,一个SendMessage就可以触发,触发后可以添加GDT,然后就可以操作内核空间了,漏洞利用的POC当时放出来的时候任何主动防御软件都没能阻止。同样也并不是拦不到,一个SendMesage只要SSDT Shadow HOOK就行了嘛,早就有了,但是问题是当时安全软件还根本不“知道”这个看似普通的调用就是可以导致溢出的信号。

因此,从主动防御这个角度来看,规规矩矩加载驱动的软件,包括正常的安全工具,绝不是杀毒软件自我保护的大敌,没有必要对冰刃能结束瑞星耿耿于怀。

PS:说实在,现在驱动级技术的讨论,早就超越了冰刃的范畴,冰刃以前使用的那些手段,在驱动技术爱好者看来,已经变成早已被挖掘公开了的“科普”级技术了。但是为什么冰刃还在普通用户的手工杀毒操作中扮演着重要的角色?那是因为技术讨论中的POC是一回事,真正能够实用的成品又是另外一回事,实际出现的病毒所使用的技术,一般来说与真正的技术讨论者所讨论的技术,要有几年的差距。
因此,从普通用户的角度出发,我们不应该过份关注于这种技术层面的讨论,而更应该关注杀毒软件在实际使用中到底能不能发挥作用,这对于普通用户来说才是最实际的,也是杀毒软件最应该做好的。
山芋0798 - 2008-9-26 8:39:00
说点题外话,这些年我们单位的十多台机子在我的要求下,大多数机子一直用瑞星,可以这样说我是一位瑞星的忠实拥护者,:default6: 可是在今年以来,我不得不说,我自己现在基本不用瑞星杀毒了,但是卡卡一直在用,因为用卡卡查看系统进程及启动项我已经用惯了,也很好用,究其原因当然是我在这一年内不至一次地被病毒攻击,而瑞星总是被过了,:default8: 甚至连U盘都插不上。不过我还是动员单位的机子用瑞星杀毒,我用卡巴,单位的哥们很不会保护机子,什么软件下载下来安装时只会点下一步,根本不看什么选项之类的,所以经常会流氓软件满机子飞,进程多达四十来个了,不过只是用来打打字字,不会太影响工作,而我的机子有点密级的东西,所以只好说“想说爱你不是很容易,爱你了,你爱我吗”。衷心祝愿瑞星越走越好,我依然是你的忠实用户。
xqe - 2008-9-26 9:10:00
要是病毒使用了冰刃技术把瑞星关了呢????
krea - 2008-9-26 10:04:00
现在是道高一尺魔高一丈的时代,瑞星要好好加油了!期待瑞星09的表现
路边一棵草 - 2008-9-26 10:56:00
其实瑞星的自我保护也可以走走偏门,比如江民就是以随机数产生自己的进程,避免了病毒根据进程名称来关闭杀毒软件本身。不在乎瑞星杀毒软件对新病毒个个能防,但是如果在瑞星病毒库升级能辨认该病毒后,瑞星却起不来了,搞的用户还得重新作系统,那不是让用户觉得用你瑞星和没有用瑞星没有什么区别了?所以要求不高,只要你瑞星能在被病毒入侵后,能不被病毒关闭,哪么我相信会有更多人继续支持你的!
逗你玩xixi - 2008-9-26 11:57:00
做的好。。我们大家都会给你们开工资的哈哈:default6:
Frank3160449 - 2008-9-26 12:34:00
支持啦。。。。
锦江山6158 - 2008-9-26 12:43:00
支持!
gregory - 2008-9-26 12:48:00
读过后才知道,瑞星是有意放过安全软件的结束动作的.
支持瑞星!
专治不服120 - 2008-9-26 14:51:00
:kaka12: 顶你一下!
heibing19 - 2008-9-26 19:23:00
说白了,瑞星的技术含量还是比不上卡巴,和江民,今后的病毒,木马,恶意程序都会向驱动级别复合型的编程技术发展,如果病毒利用了冰刃、狙剑等安全工具的一些特性,比如SSDT HOOK技术等系统底层还原,瑞星就毫无招架之力,还如何保护用户系统安全呢?
哈你哟 - 2008-9-26 20:17:00
:default6: 2009加油`希望越做做强`越做越强`我顶`````
无羽の翼 - 2008-9-26 20:20:00
现在大大小小的下载站点很多啊
有些下载站的所有软件都是带病毒的,难保不会出现带病毒的Icesword呢。
用户使用带毒的IceSword,就算瑞星弹出主动防御拦截,用户以为是正常软件,放行了,咋办?
zayoo - 2008-9-26 22:14:00
敬礼
假日之夜 - 2008-9-26 22:32:00
菜菜的方法关闭冰刃和狙剑http://www.7747.net/Article/200802/24089.html
最近看炉子VB写的防杀和关冰刃受挫匪浅.
人家强人没办法,VB都可以做出这么强大的东西...
在郁闷半天后,突然飘过一个想法:
人家能做关冰刃,自己咋就不可以捏?高手有自己的思路,菜鸟也有自己的方法的..
条条大路通罗马的说=0=

以前看过个VB发消息关瑞星保护,主要思路是找到瑞星窗口句柄,在发消息关闭.
所有窗口都有自己的句柄,冰刃也一样.
那么我们就来按照这个思路来做一个关闭冰刃的程序吧!

第一步当然是拿冰某的句柄了
冰刃这个程序大家都知道,标题是随机的,那么说用findwindow函数从标题下手拿句柄的路子肯定是不可能的.
那么类名呢?从类名到句柄的方法也是可以的,IS的类名该不会是随机的了吧!
我拿出了Spy++看了下

让人郁闷的一幕发生了~



事实证明,冰刃不仅标题是随机的,类名也如此= =||
XE的IS啊..又一个希望破灭了||

再次受挫..

难道没别的方法了么= =?
本人顺手打开了冰刃的子窗口看了眼..



从图中可以看到,IS的子窗口的类名是固定的哈!
我又分析了IS的几个别版本发现子窗口类名完全相同~~~~

新的方法如下:
GetForegroundWindow拿到当前窗口句柄
FindWindowEx查找当前窗口的子窗口类名,如果查到子窗口类名符合冰刃的特点,那么这个程序一定是冰刃了哈~
拿到了冰刃的句柄,发个wm_close就可以了,对于之后那个是否关闭的提示框,模拟按键就可以无视掉了~

有了思路就自己动手用VB编了个关冰刃的程序,经过调试后,此方法成功关闭冰刃.

'==================================================================

呵呵,看来窗口句柄下手这个思路挺强大的哈.
这个方法连冰刃都可以关,那么关别的程序就应该更简单了吧~
我吧下一个目标放在了狙剑身上0 0....

还是老方法,先用S某分析狙剑,然后想办法拿到狙剑句柄
(由于本人比较懒,这里我测试的只是0117版本的)



大家可以看到狙剑的窗口类名貌似是固定的--"ClientWindow"
PS..狙剑的标题受版本号影响,所以从标题下手比较麻烦(其实标题下手也可以拿句柄,具体思路不说了先)

类名固定,所以用findwindow函数就可直接拿到句柄料..激动ing.
用过狙剑的人知道,关闭必须从右下角的小图标点右键按退出才可以.
实现这个很简单,关瑞星保护不就是这么个原理么?

接着用S某记录关闭狙剑的消息就可以了
在众多消息中找到wm_command



好了,句柄知道,消息也有,发个消息即可关闭我们的狙剑了呵呵^ ^
假日之夜 - 2008-9-26 22:33:00
支持瑞星
majia001 - 2008-9-27 4:02:00


引用:
真正需要担心的不是这种传统的驱动型的Ring0级对抗,对于主动防御软件来说,这种对抗更多的只是一种技术层面的讨论,更应该引起注意的是通过Ring3级的代码就可以做到的对付杀毒软件包括结束瑞星的一些方法,以及时不时冒出来的可以被称为主动防御的恶梦的内核权限提升漏洞


好!
劲量老子 - 2008-9-27 13:48:00
只希望国产的杀软能争口气
相信瑞星会做得更好
轩辕小聪 - 2008-9-27 13:54:00


引用:
原帖由 heibing19 于 2008-9-26 19:23:00 发表
说白了,瑞星的技术含量还是比不上卡巴,和江民,今后的病毒,木马,恶意程序都会向驱动级别复合型的编程技术发展,如果病毒利用了冰刃、狙剑等安全工具的一些特性,比如SSDT HOOK技术等系统底层还原,瑞星就毫无招架之力,还如何保护用户系统安全呢?

无论是工程师的主题帖内容,还是我的回帖内容,都已经很明确地说明了:对于驱动型病毒,只要阻止它加载驱动(杀毒软件提示的时候用户选择了拒绝),它就没有戏唱了,所以不存在“毫无招架之力”的情况。而如果允许了驱动型病毒加载驱动,那么卡巴、江民也一样无济于事(驱动下结束江民的POC早已公开,另外,就算进程不被结束,也不等于还能正常发挥功能)。
所以从主动防御的问题上没必要恐慌。
而如果从驱动技术层面,SSDT HOOK还原,你太落伍了,这个都是科普级内容了,这样的驱动我都会写。
123
查看完整版本: 瑞星工程师2009开发手记一,为什么瑞星不对冰刃做攻防