因为我喜欢你,喜欢得想吃掉你啊! 收藏本站
登陆 / 注册 搜索

阅读: 5.7K   回复: 5

[# 系统基础] 恶意程序破坏的小伎俩

仗剑天涯论坛大牛 2015-12-2 07:00 |显示全部楼层

今生相逢便是缘分,何苦去怨恨,何苦去仇视。

主题破百
  在虚拟机里出的恶意程序(包括病毒、木马、广告软件、间谍软件等),发现大多数的恶意程序都没什么技术含量,无非就是恢复个SSDT来逃避主动防御什么的,这些代码在网上都很普遍了,但也发现一些技术含量不高,却能使目前的主动防御手段失效的办法。
8 p/ B( }3 B! q7 a
  利用社会工程学的方法加载驱动
& n; f& q5 m4 W8 H% c" a/ u
一般来说杀毒软件都带有驱动加载防御(如果杀毒软件没有驱动加载防御,可以说是等死,因为简单无硬编码的内存清零可以结束包括江民在内的任意杀毒软件,一般HOOK SSDT保护自己的杀毒软件更是不值一提),当出现有应用程序要加载驱动的时候就会提示用户。
3 [! d7 y& ^' p# V' Q9 ]4 C
但大多数普通用户都只认识诸如QQWORD之类的常用软件,以及模糊的知道杀毒软件的概念,根本不知道什么进程、驱动程序之类的知识,更加不知道驱动程序崩溃与普通程序崩溃的后果以及区别。

; ?/ ^5 u% b  c/ D/ }. ]/ u
仅仅这一点,就可以利用欺骗的手法加载驱动了。首先把屏幕分辨率调成640×[email protected]色,然后提示“显示适配器驱动程序崩溃!需要重新加载才可以恢复分辨率以及颜色!按【确定】确定重新加载显示适配器的驱动程序(如果被杀毒软件拦截,请点击允许)!”,标题栏还写着:Windows设备管理器。
, c/ E3 z6 q3 F* j( x- O  S! d
我们玩驱动的一眼就看出这句话纯属扯淡,如果真的显卡驱动崩溃,唯一的后果就是蓝屏甚至直接黑屏重启,根本不可能弹出个框框来,但是普通用户哪里知道呢?基本只能乖乖地按照我们的方法去做了。
) z- h( ~8 E% {
Rootkit的驱动程序加载完毕之时,就是计算机世界改朝换代之刻了!有人说,如果杀毒软件在SSDT Shadow上挂钩NtUserChangeDisplaySettings来拦截应用程序修改屏幕分辨率不就行了吗?且不说目前没有任何杀毒软件挂钩这个函数,就算真的挂钩这个函数也行不通,因为把电脑当成游戏机的用户绝对不是少数,而进入游戏(如“使命召唤”)之时游戏程序都会修改屏幕到合适的分辨率来播放游戏剧情。

- F4 E' k9 |! @3 x
如果这么平常的操作都拦截,就会让用户不厌其烦,还会有用户用这种杀毒软件吗?其实这仅仅是社会工程学最简单的一个应用,如果大家还想继续了解社会工程学,请参考世界上最著名黑客凯文·米特尼克的巨著:《欺骗的艺术》。据说还有的安全软件默认允许名为IsDrv122.sys(这是冰刃的驱动名)的驱动加载,而没有校验MD5或者CRC32

- k. v$ i$ N. d8 g

; t# r0 w3 m: l" c5 g- {  o, p$ u
  在驱动程序里动态调用敏感函数躲避导入表智能分析

2 s5 Q7 n; R4 b! D3 T$ ]5 ^
某些杀毒软件在驱动加载之前会分析驱动的导入表,并通过一定的规则来判断是合法驱动还是非法驱动。根据我的经验,瑞星杀毒软件如果发现驱动的导入表同时含有PsLookupProcessByProcessId、ZwTerminateProcess这两个函数名时,就会判定这是Rootkit驱动并予以清除。为了逃避这种分析的方式,我们可以简单地利用函数指针的形式来动态调用敏感的内核函数。比如要调用PsLookupProcessByProcess,可以这么写:
9 b% A2 ?  k# |$ _2 a  K* A
[mw_shl_code=c,true]ULONG GetFunctionAddr(IN PCWSTR FunctionName)  g! g6 a; [6 C; y
{! g; d" M0 [1 t) V% V& Q
UNICODE_STRING UniCodeFunctionName;
) n$ {& ]/ U) P& D$ y! R6 c, q/ VRtlInitUnicodeString(&UniCodeFunctionName,FunctionName );
. G. X# ~) c& preturn (ULONG)MmGetSystemRoutineAddress(&UniCodeFunctionName);   $ B7 B. D" {" j9 e6 x+ j5 G; O, f, d
}" Q+ s6 T; b4 N* T
void LookupProcess4 ()  |# V/ h  O3 L' E
{
8 k) h# z; U8 I8 x/ v' C0 NPEPROCESS eProcess;! A4 y9 {" ~$ \$ z0 ^
ULONG      xxPid=4;
4 c& U1 Q. T- zPUCHAR     addr;1 X1 X( x, q6 `( U3 U% y
NTSTATUS        (*p)(IN ULONG ProcessId,OUT PEPROCESS *Process);
4 d% J0 a& i( Daddr = (PUCHAR)(GetFunctionAddr(L"PsLookupProcessByProcessId"));$ N* P6 H; A: B7 p" `2 Y/ W
p=addr;
9 U1 u9 }1 M1 i2 c- zif NT_SUCCESS((*p)(xxPid,&eProcess))
! ^0 ^5 I+ t& h8 R/ Y{. ~# K6 b6 [; W; O
dprintf("EPROCESS OF 4:=%x",(ULONG)eProcess);2 A. D9 I0 l0 L
}* \- I) p* ?9 _' L' u
}[/mw_shl_code]+ a2 D' q6 F$ O( f. T
* `! Y  {, A, l0 d9 T
编译驱动之后,PsLookupProcessByProcessId没有出现在驱动的导入表之中,但是我们确实使用到了这个函数。据说360判断驱动的危险性也是靠分析导入表,所以这个方法十分有效。

+ P' Y6 v7 E# i8 ]1 X2 O
; y" f  P3 g% ?' I8 I! F7 l8 z/ Q
  驱动占位阻止ARK启动
3 T; i5 f% j' C5 H1 Y& t4 A5 ~
众所周知,几乎所有ARK都是靠驱动程序吃饭的。如果驱动程序无法加载,ARK就没有任何作用。有的恶意程序利用这点,预先把与所有著名ARK同名的驱动事先加载,使得ARK无法加载驱动。这比做强大的进程保护好多了(现在ARK的进程杀戮功能非常强大,基本上能通杀包括KV2009在内的杀毒软件)。比如冰刃的驱动名是IsDrv122.sys、XueTr驱动名是XueTr.sys、IceLight的驱动名是ILDriver、狙剑的驱动名是SnipeSword.sys等。这个的做法很简单,只要把驱动程序的设备名和链接名改成要阻止加载的驱动名就可以了。
, Z0 \0 G6 j# y* O2 T/ i9 X3 P; R0 H! R

2 e; E8 z* @7 }" s) f  w# @) j  X. I$ T
  动态查找并结束AV/ARK的进程

5 ^$ T! i1 L' J6 P5 D( R2 A0 Q
病毒都是通过ToolHelp系列函数得到系统中所有的进程名,然后和已知的AV/ARK名称对比来得到AV/ARK的PID。但这招对付已知的AV/ARK尚可,如果对付未知的AV和改名的ARK就不行了。于是恶意程序的作者们想到了一种新办法,先在用户态用PROCESS_TERMINATE权限打开得到的所有进程,如果返回的句柄是0,则说明此进程有保护,就用各种恶心的方法结束或者破坏此进程。

4 G; `$ p, j; R

" d2 k3 B+ _- ]) r' ?+ Q
  利用杀毒软件来破坏文件

* s; T3 B( g$ U# T
这个技巧是我发现的最邪恶的一个方法,因为不仅方法十分巧妙地避过了所谓的“智能主动防御”,而且还嫁祸于杀毒软件。在说明这个方法之前,先说几个常识。大家知道,如果有一个已知的病毒文件“bingdu.exe”被创建到硬盘上,就会被杀毒软件的文件防御拦截并删除;如果在“bingdu.exe”后面捆绑上其他文件(比如文档文件),也会被杀毒软件的文件防御拦截并删除;如果把“bingdu.exe”截成两段(bd1.dat、bd2.dat)存放,就没事;如果把bd1.dat和bd2.dat合成一个文件,又会被杀毒软件的文件防御拦截并马上删除。
/ B: _1 l3 U) H5 C7 y) f
有了这四个条件,马上就有了一个阴险的方案:首先释放bd1.datbd2.dat,然后遍历磁盘上的文件(特别是docpptxlsghojpg等私人文件,为了方便表述,假设有一个文件是main.doc),最后合并文件。怎么合并呢?先把bd2.dat合并到main.doc前面生成一个新文件(为了表述方便暂称“bd2_main.doc”,其实还是main.doc,因为新生成的main.doc覆盖的旧的main.doc,下同),然后再在“bd2_main.doc”的前面合并“bd1.dat”生成新文件“bd1_bd2_main.doc”。
7 L1 U6 T$ o& i* ~$ K- k
这是什么情况呢?就相当于直接把“bingdu.exe”合并到“main.doc”前面。新文件的生成自然会被杀毒软件的文件防御截获,此时杀毒软件会做什么呢?就是直接把病毒文件“bd1_bd2_main.doc”删除!也许杀毒软件还会得意洋洋得提示:成功删除了一个病毒文件!只是可爱的main.doc也永远消失了。想恢复?没这么容易!杀毒软件基本都是靠驱动程序来删除文件的,估计只有哭的份了!即使杀毒软件没有直接删除“bd1_bd2_main.doc”,而是把这个文件放到了“病毒回收站”,要想分离出原来的main.doc对于普通用户也是很麻烦的。何况还不是单个文件,而是全盘的私人文件。
7 ^+ v9 d( l+ y! U! u3 N4 D- M
有人说:覆盖文件不会触发主动防御吗?答案是不会。因为这个覆盖文件相当于我们用WORD写稿子按下“保存”按钮一样。还有人说,病毒进程不断地生成已知的病毒文件,杀毒软件不会关闭病毒进程吗?答案也是不会。因为通常会生成病毒文件的网络浏览器(下载的文件带毒),总不能杀毒软件一旦发现浏览器下载了个带毒的文件,就把浏览器的进程结束掉吧?
  q, C+ L8 Q4 R
  标题栏广告
  i4 o' i$ L9 I+ e5 k5 p
  在电脑里,令人头痛的不仅是破坏类的恶意程序,广告程序也很烦人。如果广告程序做得不强制就没有效果,于是有人登峰造极,枚举所有的顶层窗体,然后用SetWindow阿Text这个函数把窗体标题设置为广告内容!或者用GetForegroundWindow得到有焦点的窗体,再用SetWindowText把窗体标题设置为广告内容。这个方法非常强制,因为一般的程序都是有标题栏的,而且一抬头见就看见广告,真是一点办法都没有。
+ x5 C! |# ]) M3 C- t( M6 k" x
从对上述方法的描述,可以看出这些方法并没有什么高深的技术,但是换了一种思维使用这些技术,却造成了完全不同的效果。可见,再好的防护也难以抵挡新思维的攻击。

3 ~3 V$ e/ ~( V9 B# M& t


小小菜鸟 「初入古黑」 2016-9-13 20:39 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

楼主,最后一个,我经常遇到广告太多了。
云襄公子 「初入古黑」 2016-12-20 21:34 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

很强势
渡年 「出类拔萃」 2018-5-3 13:20 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

本来我已决定不会再回任何帖子了,当我览遍无数烂贴、痛恨生不逢时,行走在思想的戈壁荒原、穷山恶水之间,感到前途渺茫、万念俱灰之际,却突然看到这样一篇绝世好贴!我真是热泪纵横、感激涕零告诉自己如此经典之贴是一定要回的!这正是千百年来版友翘首以待的好贴啊!" T3 \: q% y" C5 w
映画 「出类拔萃」 2018-5-4 16:41 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

哈哈富贾,可为吾友乎?#y436:
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2021-1-16 14:25 , Processed in 0.032199 second(s), 20 queries , Redis On.

© 2015-2020 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表