信安学习笔记之恶意代码攻击及分析技术
一、恶意代码攻击技术
1、进程注入技术
系统服务和网络服务在操作系统中,当系统启动时被自动加载。进程注入技术就是将这些与服务相关的嵌入了恶意代码程序的可执行代码作为载体,实现自身隐藏和启动的目的。这类恶意代码只需要安装一次,就能被服务加载到系统中运行,并且可以一直处于活跃状态。
2、超级管理技术
部分恶意代码能够攻击反恶意代码软件。恶意代码采用超级管理技术对反恶意代码软件系统进行拒绝服务攻击,阻碍反恶意代码软件的正常运行。例如,“广外女生”是一个国产特洛伊木马,对“金山毒霸”和“天网防火墙”采用超级管理技术进行拒绝服务攻击。
3、端口反向连接技术
防火墙对于外网进入内部的数据流有严格的访问控制策略,但对于从内到外的数据并没有严格控制。指令恶意代码使用端口反向连接技术使攻击的服务端(被控制端)主动连接客户端 (控制端)端口。最早实现这项技术的木马程序是国外的“Boinet",它可以通过ICO、IRC、HTTP和反向主动连接这4种方式联系客户端。 “网络神偷”是我国最早实现端口反向连接技术的恶意代码。 “灰鸽子”则是这项技术的集大成者,它内置FTP、域名、服务端主动连接这3种服务端在线通知功能。
4、缓冲区溢出攻击技术
恶意代码利用系统和网络服务的安全漏洞植入并且执行攻击代码,攻击代码以一定的权限运行有缓冲区溢出漏洞的程序来获得被攻击主机的控制权。缓冲区溢出攻击成为恶意代码从被动式传播转为主动式传播的主要途径之一。例如,”红色代码“利用 IIS Server上Indexing Service 的缓冲区溢出漏洞完成攻击、传播和破坏等恶意目的。
二、恶意代码的分析技术
恶意代码的分析方法由静态分析方法和动态分析方法两部分构成。其中,静态分析方法有反恶意代码软件的检查、字符串分析和静态反编译分析等;动态分析方法包括文件监测、进程监测、注册表监测和动态反汇编分析等。

1、静态分析方法
恶意代码的静态分析主要包括以下方法:
(1) 反恶意代码软件的检测和分析。反恶意代码软件检测恶意代码的方法有特征代码法、校验和法、行为监测法、软件模拟法等。根据恶意代码的信息去搜寻更多的资料,若该恶意代码的分析数据已被反恶意代码软件收录,那就可以直接利用它们的分析结果。
(2) 字符串分析。字符串分析的目的是寻找文件中使用的ASCII或其他方法编码的连续字符串。一些有用的信息可以通过在恶意代码样本中搜寻字符串得到,比如:恶意代码的名字、帮助和命令行选项、用户对话框,可以通过它分析恶意代码的目的、后门密码、恶意代码相关的网址、恶意代码作者或者攻击者的E-mail地址、恶意代码用到的库,函数调用, 以及其他的可执行文件、其他的有用的信息。
(3)脚本分析。恶意代码如果是用JS、Perl或者shell脚本等脚本语言编写的,那么恶意代码本身就可能带有源代码。通过文本编辑器将脚本打开查看源代码。脚本分析能帮助分析者用较短时间识别出大量流行的脚本类型。

(4)静态反编译分析。对于携带解释器的恶意代码可以采用反编译工具查看源代码。源代码在编译时,代码会被编译器优化,组成部分被重写,使得程序更适合解释和执行,上述面向计算机优化的特性,使得编译的代码不适合逆向编译。因此,逆向编译是将对机器优化的代码重新转化成源代码,这使得程序结构和流程分离开来,同时变量的名字由机器自动生成,这使得逆向编译的代码有着较差的可读性。下表列出了一些反编译工具,它们能够生成被编译程序的C或者Java语言的源代码。

(5)静态反汇编分析。有线性遍历和递归遍历两种方法。GNU程序objdump和一些链接优化工具使用线性遍历算法从输入程序的入口点开始反汇编,简单地遍历程序的整个代码区, 反汇编它所遇到的每一条指令。虽然方法简单,但存在不能够处理嵌入指令流中的数据的问题,如跳转表。递归遍历算法试图用反汇编出来的控制流指令来指导反汇编过程,以此解决上面线性遍历所存在的问题。直观地说,无论何时反汇编器遇到一个分支或者CALL指令,反汇编都从那条指令的可能的后续指令继续执行。很多的二进制传输和优化系统采用这种方法。其缺点是很难正确判定间接控制转移的可能目标。恶意代码被反汇编后,就可用控制流分析来构造它的流程图,该图又可以被许多的数据流分析工具所使用。由于控制流程图是大多数静态分析的基础,所以不正确的流程图反过来会使整个静态分析过程得到错误的结果。
2、动态分析方法
恶意代码的动态分析主要包括以下方法:
(1) 文件监测。恶意代码在传播和破坏的过程中需要依赖读写文件系统,但存在极少数恶意代码只是单纯依赖内存却没有与文件系统进行交互。恶意代码执行后,在目标主机上可能读写各文件,修改程序,添加文件,甚至把代码嵌入其他文件,因此对文件系统必须进行监测。 fileMon 是常用的文件监测程序,能够记录与文件相关的动作,例如打开、读取、写入、关闭、 删除和存储时间戳等。另外还有文件完整性监测工具,如Trip wire、 AIDE等。
(2) 进程监测。恶意代码要入侵甚至传播,必须有新的进程生成或盗用系统进程的合法权限,主机上所有被植入进程的细节都能为分析恶意代码提供重要参考信息。常用的进程监测工具是Process Explorer, 它将机器上的每一个执行中的程序显示出来,将每一个进程的工作详细展示出来。虽然Windows系统自己内嵌了一个进程展示工具,但是只显示了进程的名字和 CPU 占用率,这不足以用来了解进程的详细活动情况。而Process Explorer 比任何的内嵌工具更有用,它可以看见文件、注册表键值和进程装载的全部动态链接库的情况,并且对每一个运行的进程, 该工具还显示了进程的属主、独立细致特权、优先级和环境变量。
(3) 网络活动监测。 恶意代码经历了从早期的单一传染形式到依赖网络传染的多种传染方式的变化,因此分析恶意代码还要监测恶意代码的网络行为。使用网络嗅探器检测恶意代码传播的内容,当恶意代码在网络上发送包时,嗅探器就会将它们捕获。下表列出了一些网络监测工具。

(4) 注册表监测。 Windows 操作系统的注册表是个包含了操作系统和大多数应用程序的配置的层次数据库,恶意代码运行时一般要改变Windows 操作系统的配置来改变 Windows 操作系统的行为,实现恶意代码自身的目的。 常用的监测软件是 Regmon, 它能够实时显示读写注册表项的全部动作。
(5) 动态反汇编分析。动态反汇编指在恶意代码的执行过程中对其进行监测和分析。其基本思想是将恶意代码运行的控制权交给动态调试工具。该监测过程从代码的入口点处开始,控制权在程序代码与调试工具之间来回传递,直到程序执行完为止。这种技术能得到正确的反汇编代码, 但只能对程序中那些实际执行的部分有效。目前主要的动态反汇编分析方法有以下两种:
• 同内存调试。这种方法使调试工具与被分析恶意代码程序加载到相同的地址空间里。 该方法的优点是实现代价相对较低,控制权转交到调试工具或者从调试工具转回恶意代码程序的实现相对来说比较简单;缺点是需要改变被分析程序的地址。
• 仿真调试,即虚拟调试。这种方法是让调试工具与分析的恶意代码程序处于不同的地址空间,可绕过很多传统动态反跟踪类技术。这种方法的优点是不用修改目标程序中的地址,但在进程间控制权的转移上要付出较高的代价。
