资源描述
,计算机病毒与反病毒技术,主要内容,计算机病毒的隐藏技术计算机病毒驻留内存技术计算机病毒的变形技术计算机病毒的反跟踪、反调试、反分析技术,第8章计算机病毒常用技术综述,8.1.1引导型病毒的隐藏技术,引导病毒的隐藏方法,8.1计算机病毒的隐藏技术,修改INT13H入口地址,修改INT21H功能4BH,8.1.2文件型病毒的隐藏技术,文件型病毒在打开文件的时候将文件的内容恢复到未感染的状态,在关闭文件的时候重新进行感染由于访问文件的方式、方法非常多,所以实现完全的文件型病毒隐藏是一件非常困难的事情。一套较完整的隐藏技术应该改包括对如图所示几个方面的处理,8.1计算机病毒的隐藏技术,8.1.3宏病毒的隐藏技术,宏病毒的隐藏技术比较简单在Word、Excel等软件中禁止菜单“文件模板”或者“工具宏”通过宏病毒代码删除菜单项宏病毒用自己的FileTemplates和ToolsMacro宏替代系统缺省的宏也可以采用5.3节中讨论的隐藏技术,8.1计算机病毒的隐藏技术,8.1.4Windows病毒的隐藏技术,以系统服务程序方式进行隐藏拦截枚举进程的API函数动态嵌入式隐藏,8.1计算机病毒的隐藏技术,8.2.1加密解密技术与病毒的多态性,多态病毒的框架多态病毒是改进了的加密病毒,由变化的解密头和加密的代码组成。多态病毒运行时,先执行的是解密代码,对加密代码解密,然后执行刚解密的代码,也就是实现传播的主体代码,8.2病毒的加密与多态(变形)技术,8.2.1加密解密技术与病毒的多态性,8.2病毒的加密与多态(变形)技术,8.2.1加密解密技术与病毒的多态性,多态病毒加密与普通加密的差别每条解密指令都不是固定的,上面的固定代码实际上只是一种可能,病毒每次复制自身的时候,这些代码都会随机改变密钥在复制自身时,也要重新生成宏I3、I2使得每条指令占用10个字节的空间(之所以选择10个字节,是因为几乎所有指令,特别是病毒常用的,都小于10个字节,保证了有剩余空间,又不会造成太大浪费,是一种折衷),在10个字节的剩余空间中插入随机生成的垃圾代码,这些垃圾代码也是随机选择的,8.2病毒的加密与多态(变形)技术,8.2.1加密解密技术与病毒的多态性,8.2病毒的加密与多态(变形)技术,8.2.2使用改变可执行代码技术的多态病毒,由于在运行过程中改变机器语言的指令是非常困难的,所以这种技术主要使用在宏病毒中。在运行过程中,病毒可以随机的改变变量名,指令的顺序等,但是不影响病毒所实现的功能一些复杂的引导型病毒也采用了这种技术,在引导区或者分区表中,包含了一小段代码来加载实际的病毒代码,这段代码在运行的过程中是可以改变的由于动态修改机器语言代码的复杂性,完成在文件型病毒中使用动态代码修改技术有相当的难度,但是已发现存在病毒使用了这种技术“厚度”(Ply)病毒在病毒体中随机的移动指令,然后利用跳转(JMP)或者调用(CALL)指令使病毒代码仍然可以实现原来的功能“TMC”病毒没有在运行过程中改变代码,但是在感染的时候,整个代码的分段、偏移量和填充代码的分布都是可以随机变化的,8.2病毒的加密与多态(变形)技术,8.2.3多态性的级别,根据病毒使用多态技术的复杂程度,可以将多态病毒划分成以下几个级别:半多态病毒拥有一组解密算法,感染的时候从中随机的选择一种算法进行加密和感染具有不动点的多态病毒有一条或者几条语句是不变的,其他病毒指令都是可变的带有填充物的多态解密代码中包含一些没有实际用途的代码来干扰分析者的视线算法固定的多态解密代码所使用的算法是固定的,但是实现这个算法的指令和指令的次序是可变的,8.2病毒的加密与多态(变形)技术,8.2.3多态性的级别,算法可变的多态使用了上述所有的技术,同时解密的算法也是可以部分或者全部改变的完全多态算法多态,同时病毒体可以随机的分布在感染文件的各个位置,但是在运行的时候能够进行拼装,并且可以正常工作对于前面3种多态病毒,使用病毒特征码或者改进后的病毒特征码是可以发现病毒的(所谓改进后的特征码,就是包括一些非比较字节的特征串)对于第4种多态病毒,由于代码的变化是有限的,所以通过增加多种情况的改进后的特征码,应该也可以处理至于第5和第6种多态病毒,依靠传统的特征码技术是完全无能为力的,8.2病毒的加密与多态(变形)技术,8.2.3多态性的级别,一个真正意义的多态应该可以创建每次都不同的自解密代码和不同的加密代码一个优秀的多态引擎可以作到:创建不同的解密代码:产生不同的指令,完成相同的功能;这些指令集可以交换位置在真实的解密代码中间创建垃圾指令可移动(可以包含在任意程序中)所有的是机制必须随机进行解密器大小可变尽量快且小解密器越大越复杂,效果越好,但也越慢,必须找到一个平衡点,8.2病毒的加密与多态(变形)技术,8.2.4多态病毒的原理,最简单的多态病毒,8.2病毒的加密与多态(变形)技术,8.2.4多态病毒的原理,这段代码的工作流程是:获得重定位信息将加密代码的偏移保存在edi中,将加密代码的大小保存在ecx中循环解密每一个字节解密完成后,病毒主体开始执行,进行获得地址、判断发作、感染文件、返回宿主等病毒的常规工作,8.2病毒的加密与多态(变形)技术,8.2.4多态病毒的原理,改变指令顺序多态很重要的一个工作就是可以交换解密指令位置,仅这个特性就可以使特征字符串扫描失效上面19可排列的指令具有如下规则:指令13顺序不能改变指令4可以在VStart、DecryptLoop之间的任何地方指令5必须在指令3之后、指令6之前指令69顺序不能改变根据这个原则,可能改变采用的指令序列是:123456789142356789124356789412356789123546789,8.2病毒的加密与多态(变形)技术,8.2.4多态病毒的原理,改变解密指令把单条指令展开为复杂的指令集把已知的指令集转换为单条指令,8.2病毒的加密与多态(变形)技术,8.2.4多态病毒的原理,把指令变换为相同功能的指令以上指令都做相同的事情,可以随机选择一个,然后再在空隙中插入垃圾指令来达到每条指令占用的最大空间。下面以mov指令为例,说明变换的过程,8.2病毒的加密与多态(变形)技术,8.2.4多态病毒的原理,8.2病毒的加密与多态(变形)技术,8.2.4多态病毒的原理,随机数的生成多态必须建立在随机过程上,避免有规律可寻,8.2病毒的加密与多态(变形)技术,8.2.4多态病毒的原理,垃圾代码的产生选择垃圾代码的原则:不能影响任何寄存器(当然,eip是一定要改变的)和标志位的状态不能修改程序中的任何数据总之,不可以干扰程序的正常运行可以选择的垃圾代码指令单字节垃圾指令双字节垃圾指令三字节垃圾指令,8.2病毒的加密与多态(变形)技术,8.2.4多态病毒的原理,多态病毒复制自身时的特殊性普通病毒复制自身只要简单的调用WriteFile(offsetVStart,VIRUS_SIZE)多态病毒的复制过程要复杂一些,可以分为3个步骤:生成并写入解密代码每次感染文件的时候,都要变化解密代码,这就要先对解密代码进行一次处理,用相同功能的指令以一定的概率替换原有指令,再以随机的垃圾代码填充空隙后即可写入到宿主文件生成并写入密钥密钥是要每次重新生成的,动态生成一个新的密钥,然后写入写入病毒加密部分这部分也是病毒的主体,不能直接写入,用新密钥加密后写入,8.2病毒的加密与多态(变形)技术,8.2.5多态病毒的对抗,对付多态病毒的最好办法是某种形式的虚拟执行技术,也就是仿真出一个80 x86的CPU,让解密代码自己解密完成之后,再使用通常的特征码识别法进行病毒检测针对这种仿真技术也出现了一些具有反仿真技术的病毒例如根据执行所需要的时间判断是否处于虚拟机的监视下,在监视下和非监视下表现出完全不同的行为衡量多态病毒的难度、复杂性和检测的困难程度可以从下面几个方面进行:采用算法的复杂性,是否采用了非公开、非标准的80 x86指令,是否使用了大量的寻址方法和多种类型的指令实现解密算法是否使用了反仿真(反虚拟执行)技术是否采用了可变的加密/解密算法解密代码是否具有充分的随机性,8.2病毒的加密与多态(变形)技术,EPO技术简介,EPO是EntryPointObscuring技术的简写,意即入口模糊技术,该技术改变了传统的修改PE头部的入口点、使其指向病毒代码入口而使病毒代码得以执行的典型方法EPO技术的产生,源于计算机病毒对抗很多杀毒软件为了避免耗时太多只是对PE入口处的代码进行启发式检查如果只是简单地修改PE的入口,则很容易被杀毒软件识别如果可以把病毒代码隐藏在PE文件的某个中间的位置,那么要想找出病毒来势必要困难的多,8.3EPO技术简介,EPO技术简介,最早的EPO并不改变PE头中入口点的值,相反,它改变了程序入口处的代码,比如改成JMPVirStart跳转到病毒体执行另外一种实现EPO的方法是在PE文件代码中的任意指令位置,将其替换成JMPVirStart或CALL或其他转移指令跳转到病毒体去执行EPO存在如下缺陷:搜索任意指令的方法有一定的局限被替换的指令可能是废代码,也就是说在程序执行过程中,几乎永远不会执行到如果因为上面原因,导致病毒设计失败,导致目标程序无法正常执行,病毒几乎无法传播,而且由于杀死了目标程序,不但起不到EPO的作用,反而有可能暴露自己,8.3EPO技术简介,8.4.1核心态与用户态,操作系统代码、设备驱动程序代码使用特权级0(Ring0),工作于系统核心态普通的用户程序使用特权极3(Ring3),工作在用户态,8.4病毒进入系统核心态的方法,Windows2000/XP下普通应用程序对核心态功能的调用示意,8.4.2病毒进入系统核心态的方法,病毒就可以在GDT(全局描述符表)、LDT(局部描述符表)中随意构造门描述符并借此进入核心态通过调用门(Callgate)、中断门(INTgate)、陷阱门(Trapgate)、异常门(Fault)、中断请求(IRQs)、端口(Ports)、虚拟机管理器(VMM)、回调(Callback)、形式转换(Thunks)、设备IO控制(DeviceIOControl)、API函数(SetThreadContext)、中断2E服务(NTKERN.VxD)得到Ring0,8.4病毒进入系统核心态的方法,8.5.1DOS环境下文件型病毒的内存驻留,对于标准的DOS下TSR可以使用两种方法实现驻留通过在CONFIG.SYS中作为设备驱动程序加载调用DOS中断INT21H的31H功能或INT27H病毒不是常规的TSR程序,病毒通常会使用更加巧妙的方法驻留内存,8.5病毒驻留内存技术,病毒常用的内存隐身之所,8.5.2引导区病毒的内存驻留,引导区内存驻留程序使用与文件型病毒类似的方法将病毒代码放入系统内存中,由于引导病毒通常都比较小,所以一般减少的内存都只有1K或者几K引导区内存驻留程序往往不包括重入检测部分,因为引导区病毒只会在系统启动的时候加载一次,8.5病毒驻留内存技术,8.5.3Windows环境下病毒的内存驻留,内存分配对于驻留型病毒,分配驻留所需内存是必需的在Win32下,每个应用程序都有自己的线性地址空间,必须使用特殊的函数分配内存内存驻留进入系统核心态的病毒可以利用系统服务来达到驻留内存的目的处于用户态的程序要在程序退出后仍驻留部分代码于内存中,似乎是不可能的,因为无论用户程序分配何种内存都将作为进程占用资源的一部分,一旦进程结束,所占资源将立即被释放关键问题是分配一块进程退出后仍可保持的内存,8.5病毒驻留内存技术,8.5.4宏病毒的内存驻留方法,宏病毒是一类特殊的病毒,一旦运行Word/Excel,病毒就会被加载并且一直存在于系统中,所以在某种意义上,宏病毒都是内存驻留病毒。宏病毒通常也会进行重入检测,发现一个文档中已经包含了病毒的特征就不会再对这个文档进行感染,这样可以防止反复感染造成文档不断增大甚至损坏,8.5病毒驻留内存技术,8.6.1DOS病毒截获系统服务的方法,在DOS下的所有代码都可被看作运行在核心态文件型病毒可以通过在中断向量表中修改INT21H的入口地址来截获DOS系统服务(DOS利用INT21H来提供系统调用,其中包括大量的文件操作)大部分引导区病毒盗取截流BIOS中断INT13H(提供磁盘操作服务)从而取得对磁盘访问的控制,8.6计算机病毒截获系统操作的方法,8.6.2Windows病毒截获系统服务的方法,Windows下的应用程序,一般工作在用户态,不可能像在DOS下那样随心所欲地调用系统中断实现特殊功能Windows下的病毒同样找到了钩挂系统服务的办法截留文件I/O操作驻留型的病毒通过截留文件I/O来激活自己,可以通过使用VxD服务IFSMgr_InstallFileSystemAPIHook(如CIH)或截留VxDCall中的DOSServicescallback(如HPS)勾挂API函数,8.6计算机病毒截获系统操作的方法,8.7.1直接API调用技术,直接API调用是当今Win32病毒常用的手段,它指的是病毒在运行时直接定位API函数在内存中的入口地址然后调用该API函数的一种技术病毒为了避免感染一个可执行文件时在文件的导入节中构造病毒体代码中用到的API的链接信息,它选择运用自己在运行时直接定位API函数地址的代码,8.7计算机病毒直接API调用与异常处理技术,8.7.2异常处理,病毒与众多设计严谨的实用系统一样,也常使用异常处理技术进行隐藏和自我保护,有时还有意制造并捕捉异常,以获取Ring0结构化异常处理(StructuredExceptionHandling,SEH)是Windows操作系统提供给程序设计者的强有力的处理程序错误或异常的武器最终(final)异常处理无论进程中哪个线程发生了异常,操作系统都将调用在主线程中调用SetUnhandledExceptionFilter建立的异常处理函数,退出时,无需人为拆去自行安装的处理代码,系统将自动清除之每线程异常处理异常处理是呈链状的,如果你自己的处理函数捕捉并处理了这个异常,那么当你的程序发生了异常时,操作系统就不会调用它缺省的处理函数,也就不会出现一个讨厌的执行了非法操作的警告,8.7计算机病毒直接API调用与异常处理技术,8.7.2异常处理,异常处理的过程系统按照调试器、SEH链上从新到旧的各个回调函数的顺序逐个调用,直到存在一个回调函数处理异常为止,如果不存在这样的回调函数,则由系统默认的异常处理程序终止发生异常的程序必须有存在的一个最基本的观念SEH只不过是系统在终结应用程序之前给你的一个最后处理错误的机会,从程序设计的角度来说就是给你自己设计的一个回调函数执行的机会。这也给病毒一个机会:利用异常进入Ring0,如CIH病毒,8.7计算机病毒直接API调用与异常处理技术,8.8.1防调试器技术,句柄检测用CreateFileA()或_lopen()函数试图获得SoftICE等调试器的驱动程序的句柄,如果成功,则说明相应的调试器驻留在内存中,8.8计算机病毒的反调试、反跟踪、反分析技术,8.8.1防调试器技术,利用调试器后门指令或调试器自带的接口函数进行检测如SoftICE的后门指令(BackDoorCommands)通过INT03H来进行DOS时代,用后门指令可以获得SoftICE版本信息、设置断点和执行命令等,8.8计算机病毒的反调试、反跟踪、反分析技术,8.8.2反静态分析技术花指令,好的反汇编软件,应该能够正确地区分程序文件中的指令和数据。变形病毒所采用的多态技术及其他技术,均能干扰反汇编,达到反静态分析的目的,花指令实验1,8.8计算机病毒的反调试、反跟踪、反分析技术,8.8.2反静态分析技术花指令,反汇编部分结果,8.8计算机病毒的反调试、反跟踪、反分析技术,8.8.2反静态分析技术花指令,花指令实验2,8.8计算机病毒的反调试、反跟踪、反分析技术,8.8.2反静态分析技术花指令,反汇编部分结果,8.8计算机病毒的反调试、反跟踪、反分析技术,8.8.3其它技术,反跟踪、反调试的其他技术指令动态执行加密技术反虚拟机技术用时间差反跟踪用指令预取技术反跟踪,8.8计算机病毒的反调试、反跟踪、反分析技术,超级病毒技术,超级病毒技术是一种很先进的病毒技术,其主要目的是对抗计算机病毒的预防技术超级病毒技术就是在计算机病毒进行感染、破坏时,使得病毒预防工具无法获得运行机会的病毒技术,8.9超级病毒技术,
展开阅读全文