查看: 1757|回复: 1
收起左侧

[技巧] 启!发!式!杀!毒!的!研!究!

[复制链接]
淼楠
发表于 2008-7-28 11:36:52 | 显示全部楼层 |阅读模式
代码和代码的关系比我们想象更要密切其实看着启发杀毒是赢得了一场战役,但大家想想如果有那一个钉子,不丢那个马掌,不折那匹战马,不伤那位将军………… 有太多不确定了,只要我们破坏了其中任何一个环节启发杀毒就会全线溃败。 NOD32通过PE结构寻找特征代码 以导入表函数的修改为例 (这个简单,其实还有更复杂的上次那个木马就是12处关联,但是12处关联破坏一个就免杀了)首先他会从PE MZ那里开始计算PE HARD的位置 在从PE HARD处寻找数据段 计算数据段位置寻找指针的提示位置,然后通过指针的提示位置找到指针,通过指针找到导入表函数。启发杀毒理解比较困难但是修改还是很简单的,可以说比普通的特征码更容易。我们只要破坏他以上分析的任何一个环节他就会全线溃败。其实卡巴为我们提供了更多修改的机会因为他的特征是关联的,只要破坏他的关联就行了就好像 1+2+3+4+5+6+7+8+9=45一样特征码是45.当然会有很多选择我们可以改"1"也可以改“2”还可以改“3”…… 改掉一个他下面的关联就被破坏了,也就免杀了,在透漏点 启发杀毒的经典改法 ………………………………………………………………………………………… 《子程序加花法》——请注意寄存器数据《 调用移位法》 ——多级“跳” 《结构修改法》——pe结构 程序关键跳 子程序调换《大小写调换法》——修改push 和 寄存器 ………………………………………………………………………………………… 单独做成一个帖子,方便以后我继续补充昨天免杀pcshare的时候给大家共享了特征码 《NOD32 I 服了U》其中——流动的火在一楼说引用: 流动的火:启发,基因启发啊。你会越查越多,其实他没有那么多的。这里我我纠正一下引用: 基因启发,基因启发是通过比对文件当中的关键代码,来查杀新病毒以及变种,这种方式在现阶段的优势比较明显,查杀率高,占用内存少,但从缺点来看,这种启发技术在现阶段已经暴露出来了一个很严重的问题就是误报过于严重,在国外的误报测试当中,使用这项技术的杀软普遍误报十分厉害,像蜘蛛,红伞,飞塔等等。而从长远来看,这种技术随着时间的增长,病毒的种类越来越多,必定造成基因库的臃肿,随之造成的结果就是杀软的运行效率降低,占用资源量的提升,甚至出现不同基因代码间的冲突,所以这项技术虽然在现阶段被看好,而且在技术上也没什么难度。这个是基因启发启发的定义,但是NOD32这么多特征完全来自广谱查杀jack的文章曾说过:引用: 例如,如果一段程序以如下序列开始:MOV AH ,5/INT,13h,即调用格式化盘操作的BIOS指令功能,那么这段程序就高度可疑值得引起警觉,尤其是假如这段指令之前不存在取得命令行关于执行的参数选项,又没有要求用户交互性输入继续进行的操作指令时,就可以有把握地认为这是一个病毒或恶意破坏的程序。例子:一个免杀卡巴的木马加一个被杀的花卡巴会提示type win32病毒 和感染pe的病毒一样卡巴会确定他的入口点,一般程序的入口点一般不会在程序的最后一个PE节里。如果OEP在最后一个PE节里就值得卡巴怀疑。所以有的“牛人”在2007年初提出了OEP虚拟化…………但是我不懂编程但是我们可以修改PE结构让入口不在最后一个PE节里,比如在木马修改(非PE感染形)用跳转法移动头部某些代码,在头部空出广大区域加花。或者加完花(感染以后)在加一个空文件节。(这个适用与病毒编程)写着写着就有点跑题…………………… 对于NOD32 pcshare特征码超多的问题解释很简单 pcshare是一个典型的4代木马(也有人称为3代,看分代标准)很多代码很典型,适用于杀软研究广谱查杀。NOD32的启发更偏向于基因启发,但他没有独立的基因库,用病毒库代替了基因库,通过在病毒库里比对代码,确认病毒,看到我前面对基因启发的介绍,相信对NOD32病毒库小不难理解吧,很明显NOD32的开发者也意识到了这点,所以NOD32对启发可以报的病毒是不入库的。对于pcshare4处关键作为启发杀毒,剩下26个特征是辅助定位,4处关键修改后少量修改辅助定位就可以了。流动的火给出的解决方案正确但是理论不对。但是如果大家把那个dll下载下来分析代码你可以发现只有 [特征] 00001B34_00000002 [特征] 000015C6_00000002 [特征] 00002468_00000002 [特征] 000025C6_00000003 这4个属于高级启发杀毒特征码(看代码关联)其中[特征] 00002468_00000002修改时要注意子程序关联了2处调用关于卡巴斯基8.0,对现在启发技术的一些理解最近看到卡巴斯基8的描述中说引擎采用的是基因启发技术,个人觉得基因启发不是一个很好的启发方式,而且将来一定会被淘汰。现如今的启发技术大体可以分为两类,第一类是基因启发技术,第二类是虚拟机启发技术,还有个别杀软用的启发技术是介于两者之间。 首先说下基因启发,基因启发是通过比对文件当中的关键代码,来查杀新病毒以及变种,这种方式在现阶段的优势比较明显,查杀率高,占用内存少,我想这也是卡巴8采用这个启发技术的主要原因,但从缺点来看,这种启发技术在现阶段已经暴露出来了一个很严重的问题就是误报过于严重,在国外的误报测试当中,使用这项技术的杀软普遍误报十分厉害,像蜘蛛,红伞,飞塔等等。而从长远来看,这种技术随着时间的增长,病毒的种类越来越多,必定造成基因库的臃肿,随之造成的结果就是杀软的运行效率降低,占用资源量的提升,甚至出现不同基因代码间的冲突,所以这项技术虽然在现阶段被看好,而且在技术上也没什么难度,但从长远看,后患无穷。卡巴这样做,在我看来未免在启发技术上急于求成。 接下来说下虚拟机启发技术,虚拟机启发是一种难度很大的启发技术,实现它在技术上的要求相当高,虽然这项技术很早之前就已经有杀软使用了,但始终是半成品,在我看来至今没有一个杀软能完美的实现虚拟机启发技术。我在这里先简单的通过我的理解解释下虚拟机技术,虚拟机技术就是在系统中创建一个虚拟的环境,在这个虚拟环境中通过对病毒的运行进行行为分析,来判断是否为病毒,前面也说到虚拟机技术很难实现,大家可以这样想像,在一个系统中创建一个虚拟的环境,在这个环境装上个微点,让真实系统里运行的文件,现在虚拟环境中让微点分析下,再运行。相信大家光听我说就脑子一团乱了,可想要真正的做到是十分困难的,这项技术的优点就是误报低,而且不会出现效率越来越低的现象,而且随着行为技术的发展,查杀率也会超过基因启发,真正做到能抓坏人又不冤枉好人,这个启发技术的至高境界。从现阶段来看,存在的唯一缺点是需要一个较大的内存,但这个问题从长远看应该不是问题 上面还提到一些介于两者之间的启发技术,首先有一种就是类似于金山的数据流杀毒,他和虚拟机启发相同的是它是通过运行病毒实现启发,但因为行为分析技术的不完善,所以依旧采用代码比对的方法,就像基因启发,这种方法由于是通过比较数据流,所以可以一定限度减小误报,但换汤不换药,还是不能完全根除基因启发的缺点,现在有许多国外大厂如赛门铁克也采用类似于金山数据流的虚拟机启发半成品,可能比金山离真正的虚拟机技术更近一步。还有一种就是类似于NOD32的启发,NOD32的启发更偏向于基因启发,但他没有独立的基因库,用病毒库代替了基因库,通过在病毒库里比对代码,确认病毒,看到我前面对基因启发的介绍,相信对NOD32病毒库小不难理解吧,很明显NOD32的开发者也意识到了这点,所以NOD32对启发可以报的病毒是不入库的,想尽办法让病毒库精简下来,从而才能使引擎有较高的工作效率。 ======================================================================================== 启发杀毒启发式扫描是通过分析指令出现的顺序,或组合情况来决定文件是否感染,每个对象都要检查,这种方式查毒效果是最高的,但也最可能出现误报。 其实就是分析对象文件与病毒特征库中的病毒原码进行比较,当二者匹配率大于某一值时(通常这一值较小,所以容易误报),杀毒软件就会将其列为可疑文件以进行下一步的处理。这就是所谓启发式杀毒。病毒和正常程序的区别可以体现在许多方面,比较常见的如:通常一个应用程序在最初的指令,是检查命令行输入有无参数项、清屏和保存原来屏幕显示等,而病毒程序则没有会这样做的,通常它最初的指令是直接写盘操作、解码指令,或搜索某路径下的可执行程序等相关操作指令序列。这些显著的不同之处,一个熟练的程序员在调试状态下只需一瞥便可一目了然。启发式代码扫描技术实际上就是把这种经验和知识移植到一个查病毒软件中的具体程序体现。  启发式指的“自我发现的能力”或“运用某种方式或方法去判定事物的知识和技能。”一个运用启发式扫描技术的病毒检测软件,实际上就是以特定方式实现的动态高度器或反编译器,通过对有关指令序列的反编译逐步理解和确定其蕴藏的真正动机。例如,如果一段程序以如下序列开始:MOV AH ,5/INT,13h,即调用格式化盘操作的BIOS指令功能,那么这段程序就高度可疑值得引起警觉,尤其是假如这段指令之前不存在取得命令行关于执行的参数选项,又没有要求用户交互性输入继续进行的操作指令时,就可以有把握地认为这是一个病毒或恶意破坏的程序。  启发式杀毒代表着未来反病毒技术发展的必然趋势,具备某种人工智能特点的反毒技术,向我们展示了一种通用的、不需升级(较省需要升级或不依赖于升级)的病毒检测技术和产品的可能性。由于诸多传统技术无法企及的强大优势,必将得到普遍的应用和迅速的发展。纯粹的启发式代码分析技术的应用(不借助任何事先的对于被测目标病毒样本的研究和了解),已能达到80%以上的病毒检出率, 而其误报率极易控制在0.1%之下,这对于仅仅使用传统的基于对已知病毒的研究而抽取“特征字串”的特征扫描技术的查毒软件来说,是不可想象的,一次质的飞跃。在新病毒,新变种层出不穷,病毒数量不断激增的今天,这种新技术的产生和应用更具有特殊的重要意义。 虚拟机杀毒虚拟机技术并不是新生事物,杀毒软件提供的启发式查毒技术,其本质就是虚拟机技术。两款最常见的虚拟机软件 VMWare和VirtualPC可以虚拟出完整的计算机系统,对于已经面世的64位Windows操作系统,也使用了WOW64作为平台,以兼容模式运行32位应用程序。2005年Intel和AMD都推出了具备虚拟化技术的CPU虚拟化可以帮您将一台物理服务器变成多个“虚拟”系统或分区,以支持多个操作系统和应用在单个平台内部独立运行。杀毒软件厂商对虚拟机技术的研究也从没停止过,“虚拟机杀毒技术”即是在内存中虚拟一个程序运行环境,将被检测程序在虚拟环境中执行,根据其行为或释放出的已知病毒特征码,来判断是否是病毒程序。日前被某杀毒软件大肆鼓吹的“虚拟机杀毒技术”,其核心只是脱壳技术。大家知道病毒程序加壳可以逃避杀毒软件检测,而杀毒软件要能检测到已经被加壳的程序,可以采取脱壳,或者增加新的病毒特征码来解决。金山毒霸就是采用这样的代码脱壳技术,目前金山毒霸引擎已经支持UPX、FSG、LZH、RAR、 ASPack、ZIP、PETite、PEX、PECompact、WWWPack32、EXE32Pack、7zip等10多种加壳工具数10个不同版本的代码脱壳杀毒。简单说来,代码脱壳是引擎自己分析加壳算法,杀毒引擎完成脱壳。虚拟机脱壳相当于执行加壳代码,然后暴露真实代码。二者各有优劣,代码脱壳因为分析了加壳工具的算法,处理速度更快,缺点在于,对新的加壳工具,需要重新分析算法。虚拟机执行壳代码,不需要分析算法,但虚拟机环境会对系统资源要求更高,执行速度逊色于代码脱壳。目前,杀毒软件厂商都看好虚拟机技术,但基于病毒特征码比对检测的杀毒技术仍是反病毒软件采取的主流技术,虚拟机技术在相当长的时期内仍将是病毒检测的辅助手段。 主动防御目前,很多安全厂商在推出新产品时,总是强调该产品具有“主动防御”技术,可以防御未知病毒、未知威胁、ZeroDay攻击等。根据安全专家的分析,所谓“主动防御”其实是针对传统的“特征码技术”而言的。 一般意义上的“主动防御”,就是全程监视进程的行为,一但发现“违规”行为,就通知用户,或者直接终止进程。它类似于警察判断潜在罪犯的技术,在成为一个罪犯之前,大多数的人都有一些异常行为,比如“性格孤僻,有暴力倾向,自私自利,对现实不满”等先兆,但是并不是说有这些先兆的人就都会发展为罪犯,或者罪犯都有这些先兆。 因此“主动防御”并不能100%发现病毒或者攻击,它的成功率大概在60%--80%之间。如果再加上传统的“特征码技术”,则有可能发现100%的恶意程序与攻击行为了。从国外的情况看,诺顿、Kaspersky、McAfee等主流安全厂商,都已经向“主动防御”+“特征码技术”过渡了,可以说这是安全系统的必然发展趋势。 此外,防火墙也是一个运用“主动防御”技术的典型例子。目前的企业都在使用防火墙,很多用户对于防火墙经常询问是否放行一个进程访问网络,或者有不明连接进入本机而发出警告印象深刻。 其实防火墙就是在全程监视进程的网络行为,一但发现违反规则的行为就发出警告,或者直接根据用户设定拒绝进程访问网络。当然,现在的防火墙一般都把系统网络进程,如Services.exe、Svchost.exe、Lsass.exe记在“受信名单”里,这些进程是默认允许访问网络的,如果禁止的话,操作系统就不正常了,这也是现在很多病毒和木马都喜欢远程注入这些系统进程,以求突破防火墙而访问网络的原因。 “主动防御”的技术实现 在“主动防御”技术的的实现上,主要是通过函数来进行控制。因为一个程序如果要实现自己的功能,就必须要通过接口调用操作系统提供的功能函数。以前在DOS里几乎所有的系统功能或第三方插件都是通过中断提供的,在Windows里一般是通过DLL里的API提供,也有少数通过INT 2E或SYSENTER提供。一个进程有怎么样的行为,通过看它调用了什么样的API就大概清楚了,比如它要读写文件就必然要调用CreateFile(),OpenFile(),NtOpenFile(),ZwOpenFile()等函数,要访问网络就必然要使用Socket函数。因此只要挂接系统API(尽量挂接RING0层的API,如果挂接RING3层的API将有可能被绕过),就可以知道一个进程将有什么动作,如果有危害系统的动作该怎么样处理等等。例如瑞星反病毒系统,用户可以在它的安装目录里找到几个驱动文件,其实这些驱动就是挂接了ntoskrnl.exe,ndis.sys等系统关键模块里的API,从而对进程的普通行为,网络行为,注册表行为进行监视的。 在此基础上,用户可以自己设想一下一个“主动防御”型安全系统的一般操作流程:通过挂接系统建立进程的API,系统就在一个进程建立前对进程的代码进行扫描,如果发现SGDT,SIDT,自定位指令(一般正常软件不会有这些指令),就进行提示,如果用户放行,就让进程继续运行;接下来监视进程调用API的情况,如果发现以读写方式打开一个EXE文件,可能进程的线程想感染PE文件,就发出警告;如果收发数据违反了规则,发出提示;如果进程调用了CreateRemoteThread(),则发出警告(因为CreateRemoteThread()是一个非常危险的API,正常进程很少用到,倒是被病毒、木马用得最多)。 可以想象,未来企业用户在运行程序时可能会被提示多次,访问网络也可能被提示多次,各种各样的提示有可能将大多数人搞的昏头转向。不过这就是安全,也是主动防御的魅力,一句话,企业想安全就要管严,放松就不安全了!
三人行
发表于 2008-7-28 12:05:11 | 显示全部楼层
沙发,启发式杀毒是不是相当于主动防毒
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-9 17:03 , Processed in 0.132398 second(s), 17 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表