文章总结: 文档详细介绍了恶意代码的防范技术原理,包括恶意代码的定义分类、生存技术(反跟踪、加密、模糊变换等)、攻击技术(进程注入、端口反向连接等)以及分析方法(静态分析和动态分析)。文章为安全工程师提供了全面理解恶意代码工作原理和防范措施的知识框架,有助于提升对恶意代码的识别和防护能力。
综合评分: 87
文章分类: 恶意软件,漏洞分析,安全建设,安全培训,逆向分析
信安工程师学习笔记(14)恶意代码防范技术原理(上)
原创
Caigensec
菜根网络安全杂谈
2025年11月1日 19:49
安徽
点击上方蓝字关注我们
免责声明:本公众号尊重知识产权,如有侵权请联系我们删除。
一、恶意代码概述
恶意代码的英文是Malicious Code,它是一种违背目标系统安全策略的程序代码,会造成目标系统信息泄露、资源滥用,破坏系统的完整性及可用性。它能够经过存储介质或网络进行传播,从一台计算机系统传到另外一台计算机系统,未经授权认证访问或破坏计算机系统。通常许多人认为“病毒”代表了所有感染计算机并造成破坏的程序。事实上,“恶意代码”的说法更为通用,病毒只是一类恶意代码而已。恶意代码的种类主要包括计算机病毒(Computer Virus)、蠕虫(Worms)、特洛伊木马(Trojan Horse)、逻辑炸弹(Logic Bombs)、细菌(Bacteria)、恶意脚本(Malicious Scripts)和恶意ActiveX控件、间谍软件(Spyware)等。
二、恶意代码生存技术
1.反跟踪技术
恶意代码靠采用反跟踪技术来提高自身的伪装能力和防破译能力,使检测与清除恶意代码的难度大大增加。
1)反动态跟踪技术
· 禁止跟踪中断。针对调试分析工具运行系统的单步中断与断点中断服务程序,恶意代码通过修改中断服务程序的入口地址来实现其反跟踪的目的。
·检测跟踪法。根据检测跟踪调试时和正常执行时的运行环境、中断入口和时间的不同,采取相应的措施实现其反跟踪目的。
· 其他反跟踪技术。如指令流队列法和逆指令流法等。
2)反静态分析技术
·对程序代码分块加密执行。为了不让程序代码通过反汇编进行静态分析,将分块的程序代码以密文形式装入内存,由解密程序在执行时进行译码,立即清除执行完毕后的代码,力求分析者在任何时候都无法从内存中获得执行代码的完整形式。
·伪指令法。伪指令法指将“废指令”插入指令流中,让静态反汇编得不到全部正常的指令,进而不能进行有效的静态分析。
2.加密技术
加密技术是恶意代码进行自我保护的手段之一,再配合反跟踪技术的使用,让分析者不能正常调试和阅读恶意代码,无法获得恶意代码的工作原理,自然也不能抽取特征串。从加密的内容上划分,加密手段有三种,即信息加密、数据加密和程序代码加密。
3.模糊变换技术
·指令替换技术。模糊变换引擎(Mutation Engine)对恶意代码的二进制代码进行反汇编,解码并计算指令长度,再对其同义变换。例如,指令XOR REG,REG被变换为SUB REG,REG;寄存器REG1和寄存器REG2互换;JMP指令和CALL指令变换等。Regswap就使用了寄存器互换这一变形技术。
·指令压缩技术。经恶意代码反汇编后的全部指令由模糊变换器检测,对可压缩的指令同义压缩。压缩技术要想使病毒体代码的长度发生改变,必须对病毒体内的跳转指令重定位。例如指令MOV REG,12345678/PUSH REG变换为指令PUSH 12345678等。
·指令扩展技术。扩展技术是对汇编指令进行同义扩展,所有经过压缩技术变换的指令都能够使用扩展技术来进行逆变换。扩展技术远比压缩技术的可变换空间大,指令甚至能够进行几十或上百种的扩展变换。扩展技术也需要对恶意代码的长度进行改变,进行恶意代码中跳转指令的重定位。
·伪指令技术。伪指令技术主要是将无效指令插入恶意代码程序体,例如空指令。
·重编译技术。使用重编译技术的恶意代码中携带恶意代码的源码,要在自带编译器或者操作系统提供编译器的基础上进行重新编译,这种技术不仅实现了变形的目的,而且为跨平台的恶意代码的出现提供了条件。
4.自动生产技术
普通病毒能够利用“多态性发生器”编译成具有多态性的病毒。多态变换引擎能够让程序代码本身产生改变,但却可以保持原有功能。例如保加利亚的“Dark Avenger”,变换引擎每产生一个恶意代码,其程序体都会发生变化,反恶意代码软件若只是采用基于特征的扫描技术,则无法检测和清除这种恶意代码。
5.变形技术
在恶意代码的查杀过程中,多数杀毒厂商通过提取恶意代码特征值的方式对恶意代码进行分辨。这种基于特征码的病毒查杀技术的致命缺点是需要一个特征代码库,同时这个库中的代码要具有固定性。病毒设计者利用这一漏洞,设计出具体同一功能不同特征码的恶意代码。这种变换恶意代码特征码的技术称为变形技术。常见的恶意代码变形技术包括如下几个方面:
·重汇编技术。变形引擎对病毒体的二进制代码进行反汇编,解码每一条指令,并对指令进行同义变换。
·压缩技术。变形器检测病毒体反汇编后的全部指令,对可进行压缩的一段指令进行同义压缩。
·膨胀技术。压缩技术的逆变换就是对汇编指令同义膨胀。
·伪指令技术。伪指令技术主要是对病毒体插入废指令,例如空指令、跳转到下一指令和压弹栈等。
·重编译技术。病毒体携带病毒体的源码,需要自带编译器或者利用操作系统提供的编译器进行重新编译,这为跨平台的恶意代码的出现打下了基础。
6.三线程技术
恶意代码中应用三线程技术是为了防止恶意代码被外部操作停止运行。三线程技术的工作原理是一个恶意代码进程同时开启了三个线程,其中一个为负责远程控制工作的主线程,另外两个为用来监视线程负责检查恶意代码程序是否被删除或被停止自启动的监视线程和守护线程。注入其他可执行文件内的守护线程,同步于恶意代码进程。只要进程被停止,它就会重新启动该进程,同时向主线程提供必要的数据,这样就使得恶意代码可以持续运行。
7.进程注入技术
在系统启动时操作系统的系统服务和网络服务一般能够自动加载。恶意代码程序为了实现隐藏和启动的目的,把自身嵌入与这些服务有关的进程中。
8.通信隐藏技术
实现恶意代码的通信隐藏技术一般有四类:端口定制技术、端口复用技术、通信加密技术、隐蔽通道技术。
·端口定制技术,旧木马几乎都存在预设固定的监听端口,但是新木马一般都有定制端口的功能。优点:木马检测工具的一种检测方法就是检测缺省端口,定制端口可以避过此方法的检测。
·端口复用技术利用系统网络打开的端口(如25和139等)传送数据。木马Executor用80端口传递控制信息和数据;使用端口复用技术的木马在保证端口默认服务正常工作的条件下复用,具有很强的欺骗性,可欺骗防火墙等安全设备,可避过IDS和安全扫描系统等安全工具。
·通信加密技术,即将恶意代码的通信内容加密发送。通信加密技术胜在能够使得通信内容隐藏,但弊端是通信状态无法隐藏。
·隐蔽通道技术能有效隐藏通信内容和通信状态,目前常见的能提供隐蔽通道方式进行通信的后门有:BO2K、Code RedII、Nimida和Covert TCP等。但恶意代码编写者需要耗费大量时间以便找寻隐蔽通道。
9.内核级隐藏技术
1)LKM隐藏
LKM是可加载内核模块,用来扩展Linux的内核功能。LKM能够在不用重新编译内核的情况下把动态加载到内存中。基于这个优点,LKM技术经常使用在系统设备的驱动程序和Rootkit中。LKM Rootkit通过系统提供的接口加载到内核空间,将恶意程序转化成内核的某一部分,再通过hook系统调用的方式实现隐藏功能。
2)内存映射隐藏
内存映射是指由一个文件到一块内存的映射。内存映射可以将硬盘上的内容映射至内存中,用户可以通过内存指令读写文件。使用内存映射避免了多次调用I/O操作的行为,减少了不必要的资源浪费。
三、恶意代码攻击技术
1.进程注入技术
系统服务和网络服务在操作系统中,当系统启动时被自动加载。进程注入技术就是将这些与服务相关的嵌入了恶意代码程序的可执行代码作为载体,实现自身隐藏和启动的目的。
2.超级管理技术
部分恶意代码能够攻击反恶意代码软件。恶意代码采用超级管理技术对反恶意代码软件系统进行拒绝服务攻击,阻碍反恶意代码软件的正常运行。
3.端口反向连接技术
防火墙对于外网进入内部的数据流有严格的访问控制策略,但对于从内到外的数据并没有严格控制。指令恶意代码使用端口反向连接技术使攻击的服务端(被控制端)主动连接客户端(控制端)端口。最早实现这项技术的木马程序是国外的“Boinet”。“网络神偷”是我国最早实现端口反向连接技术的恶意代码。“灰鸽子”则是这项技术的集大成者,它内置FTP、域名、服务端主动连接这3种服务端在线通知功能。
4.缓冲区溢出攻击技术
恶意代码利用系统和网络服务的安全漏洞植入并且执行攻击代码,攻击代码以一定的权限运行有缓冲区溢出漏洞的程序来获得被攻击主机的控制权。缓冲区溢出攻击成为恶意代码从被动式传播转为主动式传播的主要途径之一。例如,“红色代码”利用IIS Server上Indexing Service的缓冲区溢出漏洞完成攻击、传播和破坏等恶意目的。
四、恶意代码分析技术
恶意代码的分析方法由静态分析方法和动态分析方法两部分构成。其中,静态分析方法有反恶意代码软件的检查、字符串分析和静态反编译分析等;动态分析方法包括文件监测、进程监测、注册表监测和动态反汇编分析等。
1.静态分析方法
恶意代码的静态分析主要包括以下方法:
(1)反恶意代码软件的检测和分析。反恶意代码软件检测恶意代码的方法有特征代码法、校验和法、行为监测法、软件模拟法等。根据恶意代码的信息去搜寻更多的资料,若该恶意代码的分析数据已被反恶意代码软件收录,那就可以直接利用它们的分析结果。
(2)字符串分析。字符串分析的目的是寻找文件中使用的ASCII或其他方法编码的连续字符串。一些有用的信息可以通过在恶意代码样本中搜寻字符串得到。比如:①恶意代码的名字;②帮助和命令行选项;③用户对话框,可以通过它分析恶意代码的目的;④后门密码;⑤恶意代码相关的网址;⑥恶意代码作者或者攻击者的E-mail地址;⑦恶意代码用到的库,函数调用,以及其他的可执行文件;⑧其他的有用的信息。
(3)脚本分析。恶意代码如果是用JS、Perl或者shell脚本等脚本语言编写的,那么恶意代码本身就可能带有源代码。通过文本编辑器将脚本打开查看源代码。脚本分析能帮助分析者用较短时间识别出大量流行的脚本类型。
(4)静态反编译分析。对于携带解释器的恶意代码可以采用反编译工具查看源代码。反编译工具码在编译时,代码会被编译器优化,组成部分被重写,使得程序更适合解释和执行,上述面向计算机优化的特性,使得编译的代码不适合逆向编译。
(5)静态反汇编分析。有线性遍历和递归遍历两种方法。GNU程序objdump和一些链接优化工具使用线性遍历算法从输入程序的入口点开始反汇编,简单地遍历程序的整个代码区,反汇编它所遇到的每一条指令。
2.动态分析方法
恶意代码的动态分析主要包括以下方法:
(1)文件监测。恶意代码在传播和破坏的过程中需要依赖读写文件系统,但存在极少数恶意代码只是单纯依赖内存却没有与文件系统进行交互。恶意代码执行后,在目标主机上可能读写各文件,修改程序,添加文件,甚至把代码嵌入其他文件,因此对文件系统必须进行监测。FileMon是常用的文件监测程序,能够记录与文件相关的动作,例如打开、读取、写入、关闭、删除和存储时间戳等。另外还有文件完整性监测工具,如Trip wire、AIDE等。
(2)进程监测。恶意代码要入侵甚至传播,必须有新的进程生成或盗用系统进程的合法权限,主机上所有被植入进程的细节都能为分析恶意代码提供重要参考信息。常用的进程监测工具是Process Explorer,它将机器上的每一个执行中的程序显示出来,将每一个进程的工作详细展示出来。虽然Windows系统自己内嵌了一个进程展示工具,但是只显示了进程的名字和CPU占用率,这不足以用来了解进程的详细活动情况。而Process Explorer比任何的内嵌工具更有用,它可以看见文件、注册表键值和进程装载的全部动态链接库的情况,并且对每一个运行的进程,该工具还显示了进程的属主、独立细致特权、优先级和环境变量。
(3)网络活动监测。恶意代码经历了从早期的单一传染形式到依赖网络传染的多种传染方式的变化,因此分析恶意代码还要监测恶意代码的网络行为。
(4)注册表监测。Windows操作系统的注册表是个包含了操作系统和大多数应用程序的配置的层次数据库,恶意代码运行时一般要改变Windows操作系统的配置来改变Windows操作系统的行为,实现恶意代码自身的目的。常用的监测软件是Regmon,它能够实时显示读写注册表项的全部动作。
(5)动态反汇编分析。动态反汇编指在恶意代码的执行过程中对其进行监测和分析。其基本思想是将恶意代码运行的控制权交给动态调试工具。该监测过程从代码的入口点处开始,控制权在程序代码与调试工具之间来回传递,直到程序执行完为止。这种技术能得到正确的反汇编代码,但只能对程序中那些实际执行的部分有效。目前主要的动态反汇编分析方法有以下两种:
·同内存调试。这种方法使调试工具与被分析恶意代码程序加载到相同的地址空间里。该方法的优点是实现代价相对较低,控制权转交到调试工具或者从调试工具转回恶意代码程序的实现相对来说比较简单;缺点是需要改变被分析程序的地址。
·仿真调试,即虚拟调试。这种方法是让调试工具与分析的恶意代码程序处于不同的地址空间,可绕过很多传统动态反跟踪类技术。这种方法的优点是不用修改目标程序中的地址,但在进程间控制权的转移上要付出较高的代价。
END
亲爱的朋友,若你觉得文章不错,请点击关注。你的关注是笔者创作的最大动力,感谢有你!
往期推荐
Recommended in the past
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:菜根网络安全杂谈 Caigensec《信安工程师学习笔记(14)恶意代码防范技术原理(上)》