发新话题
打印

[原创]浅析ring3下对抗08瑞星主动防御

[原创]浅析ring3下对抗08瑞星主动防御

文章作者:willy123
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

注:文章已经发表在2007年12期《黑客防线》,后由原创作者提交到邪恶八进制信息安全团队,转载请注明原始出处。

其实我对瑞星杀毒软件的印象一直还是不错的,占用资源不大,效率也还不错,而且能看到软件本身在不断进步,毕竟是国产的杀毒软件,还是应该支持一下的。废话不多说了,我们来进入正题,08瑞星不久前刚刚上市,其最主要的技术亮点在于其公司宣传的“主动防御”,下面引用瑞星公司的介绍“瑞星杀毒软件2008中采用的主动防御技术包含三个层次,资源访问规则控制;资源访问扫描;程序活动行为分析引擎,其中尤其以行为分析引擎技术最为关键。”
从图二中我们可以清楚的看到,在资源访问规则控制里列举了大量hips规则,比如关键进程保护,防Dll注入,限制全局钩子等等,以往对瑞星有效的如模拟发送消息和模拟按键等方法通通失效。
那么我们就真的没有办法对抗瑞星的主动防御技术吗?答案当然是否定的,所谓知己知彼,百战不殆,首先有必要了解瑞星采取了哪些措施来实现其主动防御规则,才能找到相应的突破办法。通过使用Rootkit Unhooker之类的anti-rootkit工具对瑞星的分析,我们可以发现,瑞星主要采取以下手段实现其主动防御的措施
一:SSDT HOOK,这是一种很多杀毒软件和安全工具使用的方法(具体资料大家可以上网搜索,这里就不占用黑防的版面了),瑞星挂钩了ZwLoadDriver用来防止通过SCM的驱动加载,挂钩了ZwCreateThread、ZwWriteProcessMemory来防止远程线程注入,注册表方面挂钩了ZwCreateKey、ZwDeleteKey、ZwDeleteKey等等来防止程序对注册表的修改,在自我保护方面挂钩了ZwTerminateProcess来保护自身程序不被结束。
二:Shadow SSDT HOOK ,挂钩了NtuserSetWindowsHookex用来拦截全局钩子,挂钩NtuserSendInput来拦截键盘鼠标等模拟输入
三:HOOK了\Filesystem\ntfs\下的一些IRP用于拦截文件操作等等
还有一些HOOK这里就不多说了,有兴趣的朋友可以自己用anti-rootkit工具去扫描看看
好了,现在分析完了08瑞星为主动防御采取的措施,我们来看看如何绕过,很多牛人都给出了一些绕过的方法,基本思路有以下几种
一:采用特殊方法加载驱动,如使用ZwSetSystemInformation加载驱动,进入内核后恢复SSDT,然后做自己想做的事
二:利用瑞星没有拦截的api来操作系统,如使用ZwSaveKey,ZwRestroeKey等方式写入注册表
但这些技术对于广大的菜鸟朋友来说还不容易做到,况且ring0下的程序通用性和易用性都不很好,不适合不同操作系统之间的移植。今天我要介绍一种ring3 下安全结束瑞星进程的方法,即“利用作业对象结束进程”。首先让大家看一段关于作业对象的介绍
“作业对象是Windows 2000进入企业应用的标志之一,是NT新的一个内核对象,与线程和进程有相似的特性。我们可以把一系列相关的进程集合在一起,关联到一个可以进行整体管理的作业对象上。作业对象可以被命名、共享和设置访问许可,关联在作业对象中的进程有继承性,即作业对象中任何进程的子进程也属于同一个作业对象。类似于磁盘配额,我们可以把一个应用程序的所有进程关联到一个作业对象中,通过对作业对象加以各种限制(CPU时间、RAM分配、安全性等),我们可以实现对应用程序完全的控制、管理和跟踪”
说白了就是给你需要操作的进程,应用程序创建一个新的名字,规定一种特殊的机制来管理这些程序,还可以为这些程序加上各种限制,比如限制程序的CPU时间, RAM分配等等,说到这里,聪明的读者可能已经想到我要说什么了,对!把瑞星程序关联到我们自己创建的一个作业对象中去,这样我们就可以对这个作业对象为所欲为了。
下面来讨论下具体程序的实现,这里主要运用了三个API函数,CreateJobObject,ssignProcessToJobObject,TerminateJobObject,从字面上我们就可以知道这个程序的思路了:首先,调用CreateJobObject来创建一个作业对象,然后调用AssignProcessToJobObject函数把进程关联到作业对象中,最后我们调用TerminateJobObject函数,这时与作业对象关联的所有进程都被终止。呵呵是不是很简单,比起那些让你头大的驱动更加简便实用。
下面是程序的主要代码,
Code Language : C
  1. #include \"stdafx.h\"
  2. #include <string.h>
  3. #include <iostream.h>
  4. #include<stdio.h>
  5. #include <stdlib.h>
  6. #include <windows.h>
  7. #pragma comment(lib,\"Kernel32.lib\")
  8. #include <WinBase.h>
  9.  
  10. int main(int argc, char* argv[])
  11. {
  12.    BOOL res=FALSE;
  13.   HANDLE hjob=CreateJobObject(NULL,TEXT(\"killrav\")); //建立job对象,命名为killrav
  14.  
  15.  HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,0,atoi(argv[1]));//打开进程
  16.  
  17.  if (hProcess==NULL) //打开失败
  18.    
  19.  {
  20.    printf(\"\t\t OpenProcessError!please Look up your Privilege first ^_^\n\");
  21.  
  22.    return 0;
  23.  }
  24.  
  25.  AssignProcessToJobObject(hjob,hProcess);//将进程和对象关联起来
  26.  
  27.  res=TerminateJobObject(hjob,0);//结束对象
  28.  if (res==FALSE) printf(\"\t\t Sorry ,can't kill the process you want \n\");
  29.  
  30.  else
  31.     printf(\"\t\t Ok ,Now you can check if the process still exists \n\");
  32.  
  33.   return 0;
  34. }
Parsed in 0.006 seconds
代码很简单,我已经做了比较详细的注释,不懂的朋友可以去查msdn,上网搜索也可以,顺便说下stdafx.h这个头文件的第一行要加一句“#define _WIN32_WINNT   0x0500”的宏定义,否则程序会编译失败,程序在windows xp sp2 home版和vc++6.0环境下编译成功,其它的我就不多说了.
      最后我们来实验下程序(编译好的程序我已打包放在附件中),来到命令提示符下,运行killrav.exe 2788,这里的2788是 Ravmon.exe 在我的机子上的pid号,呵呵,成功了,瑞星的小绿伞消失了,对于瑞星其他的程序需要先提升权限,代码我就不提供了,大家可以翻看往期的黑防。


ps:在est发个帖子真不容易,潜水啊潜水...
just try ,good life !

TOP

编译好的程序我已打包放在附件中...
请问一下附件在哪里下载?

TOP

瑞星的小绿伞消失了,对于瑞星其他的程序需要先提升权限,不会.本机测试,小绿伞消失了,但是防护还在,结束这个有什么意思,关键是结束防护模块

TOP

回一楼:在黑防12期光盘里,自己编译下不就ok了

回二楼:你如果研究过rav的主程序的话就知道,一般还有ravmond.ravtask等,不是说了先提权在结束吗,方法都一样,提权不用我说吧
just try ,good life !

TOP

有些东西还是自己留着好,省的放出来,让XXX人干坏事去
我觉的过主防,还是采用ring3模式一些技术绕过好,核心态搞驱动很容易BSOD
且不通用
嘿嘿,自己捣毁出来了点东西,能过瑞星2008最高级别主防和卡6,卡7的主防
关键是技巧
貌似以后木马的生存空间越来越小了,,

TOP

我不懂VC,试着把你的代码改为Delphi码,编译成功了.
想问一下能否把Ravmon.exe的pid号(我有另一涵数找出其pid号)直接写进代码里?该写在什么位置?
为什么不能直接用进程名呢?
另外此方法对卡吧6,7有效吗?
我只是个编程菜鸟,问题底级,还望不吝赐教,谢谢.

TOP

引用:
引用第4楼evilcoder于2007-12-20 14:45发表的 :
有些东西还是自己留着好,省的放出来,让XXX人干坏事去
我觉的过主防,还是采用ring3模式一些技术绕过好,核心态搞驱动很容易BSOD
且不通用
嘿嘿,自己捣毁出来了点东西,能过瑞星2008最高级别主防和卡6,卡7的主防
关键是技巧
.......
其实我觉得有些东西还是让更多人知道好,因为如果所有人都知道了那么这种技术也就被淘汰了,如果只掌握在少数人手了那么结果很难讲~~

不过的确现在xxxx人比较多~,普及的代价很大
just try ,good life !

TOP

引用:
引用第5楼takdick于2007-12-20 19:56发表的 :
我不懂VC,试着把你的代码改为Delphi码,编译成功了.
想问一下能否把Ravmon.exe的pid号(我有另一涵数找出其pid号)直接写进代码里?该写在什么位置?
为什么不能直接用进程名呢?
另外此方法对卡吧6,7有效吗?
我只是个编程菜鸟,问题底级,还望不吝赐教,谢谢.
OpenProcess的一个参数就是pid,你问微软为什么不弄成进程名,呵呵
至于卡巴什么的自己测试好了,我只是提供一个思路,仅次而已~
just try ,good life !

TOP

引用:
引用第7楼willy123于2007-12-21 15:16发表的 :


OpenProcess的一个参数就是pid,你问微软为什么不弄成进程名,呵呵
至于卡巴什么的自己测试好了,我只是提供一个思路,仅次而已~
哈哈...开心,终于干掉瑞星了,谢谢willy的无私奉献.
但是同样的方法对卡巴6无效,请问还有其他办法吗?

TOP

我在学校机房测试的时候,其他进程都可以杀,但瑞星07版的进程都结束不了...
不是权限的问题,我已经提升自身进程的权限了.

TOP

引用:
引用第11楼7个b于2007-12-25 23:07发表的 :
我在学校机房测试的时候,其他进程都可以杀,但瑞星07版的进程都结束不了...
不是权限的问题,我已经提升自身进程的权限了.
07版的我没试过.
08版的RavMon,RavMond,RavStub进程用willy123的方法是可以干掉的.

TOP

估计是07版的瑞星挂钩了OpenProcess函数,而08只挂钩了TerminateProcess终止进程函数的...
而上面的代码用到了没挂钩的函数实现终止进程...
所以对07版无效...

TOP

瑞X连个KTIMER都不加。恢复SSDT后就可以干自己想干的事啦~`
WINDOWS内核疯狂爱好者

TOP

恢复SSDT能否对付卡巴?
能否提供一下源码?

TOP

引用:
引用第11楼7个b于2007-12-28 15:44发表的 :
估计是07版的瑞星挂钩了OpenProcess函数,而08只挂钩了TerminateProcess终止进程函数的...
而上面的代码用到了没挂钩的函数实现终止进程...
所以对07版无效...
07的以前记得xyzreg大哥说过endtask就可以搞定,我实验过,的确可以~~

如果没挂OpenProcess和suspendthread等函数可以先打开进程,一个个杀线程,不过卡巴什么的是不行的,方法应该还是不少的,可以慢慢研究~
just try ,good life !

TOP

恢复NtTerminateProcess吧,貌似瑞星就是SSDT来hook了这个函数..恢复了就可以用任务管理器kill它了..卡吧也是..主动防御,只要我们的驱动能顺利加载,主动防御就是垃圾..
游戏吧  http://www.game8.cc/MyBlog    http://www.asm32.cn

TOP

楼上说的甚是,不过主动防御最大的特点就是封住了猥亵操作的门路
都加载不了还能做什么事呢
Welcome to My Blog :  http://www.huihu32.cn 金麟岂是池中物,一遇风云便化龙!

TOP

最新的瑞星20.26.22版本测试没有效果

TOP

现在瑞星最新版修正了这个所谓的BUG....
对AssignProcessToJobObject的底层API函数进行挂钩了...
郁闷,无法好好地"和谐"它了....

TOP

引用:
引用第18楼7个b于2008-01-21 14:32发表的 :
现在瑞星最新版修正了这个所谓的BUG....
对AssignProcessToJobObject的底层API函数进行挂钩了...
郁闷,无法好好地"和谐"它了....
呵呵迟早的事情

其实要想bypass rav自启动还是很easy的,只要你够细心,rav必须考虑到软件资源消耗,用户体验等等繁琐的方面

一句话,破坏永远比建设来的更容易
just try ,good life !

TOP

对付卡6,7可以先把他的保护驱动卸载了 然后挂起进程

TOP

现在瑞星已经封了NtAssignProcessToJobObject...楼主的那一招估计已经不好使了
Delphiscn Blog
http://blog.csdn.net/delphiscn

TOP

用NtUnmapViewOfSection也可以关小绿伞的说
'人外有人天外有天'我永远都是只菜鸟=  =|||

TOP

发新话题