1.1 网络恶意行为定义 write by winsunxu from uestc,i think this can construct a good auto analyse tools
网络恶意行为是指网络系统的硬件、软件及其系统中的数据受到恶意代码攻击而遭到破坏、更改、泄露,致使系统不能连续可靠正常地运行,网络服务中断的行为。
1.1 网络恶意行为归类
随着信息化的普及,网络新应用的大量出现,网络恶意代码所表现出的行为也层出不穷,目前最流行的网络恶意行为是网页挂马、盗取网游帐号、端口扫描、漏洞扫描、ARP欺骗、IP劫持、DDOS攻击、溢出攻击、木马攻击等。
针对大量的这些网络恶意行为分析,大致可以把网络恶意行为分为四类:信息探测行为(如端口和漏洞扫描)、信息欺骗行为(如ARP欺骗和IP劫持)、信息淹没行为(如SYN Flood和DDOS攻击)、信息伪传递行为(溢出攻击、IMCP木马、HTTP隧道木马)。
从上述的四类行为可知,网络恶意行为总体上可以从两个方面来描述,一个方面是基于协议栈的行为,针对这种行为可以从数据包中给出的信息来刻画;另一方面是基于主机操作系统的行为,针对这种行为可以从进程的行为信息来刻画。
1 两个具体的网络恶意行为攻击过程
2.1 SYN flood攻击
2.1.1 SYN flood攻击的含义
拒绝服务攻击(Denial of Service,DoS)是目前比较有效而又非常难于防御的一种网络攻击方式,它的目的就是使服务器不能够为正常访问的用户提供服务或使主机不能访问网络。
SYN Flood是最为有效和流行的一种DoS攻击形式。它利用TCP三次握手协议的缺陷,向目标主机发送大量的伪造源地址的SYN连接请求,消耗目标主机的资源,从而不能够为正常用户提供服务。
2.1.2 SYN flood攻击的流程
要研究SYN Flood攻击的流程,必须先介绍TCP的三次握手机制。
TCP三次握手过程如下:
1)客户端向服务器端发送一个SYN置位的TCP报文,包含客户端使用
的端口号和初始序列号x;
2)服务器端收到客户端发送来的SYN报文后,向客户端发送一个SYN 和ACK都
置位的TCP报文,包含确认号为x+1和服务器的初始序列号y;
3)客户端收到服务器返回的SYN+ACK报文后,向服务器返回一个确认号为y+1
序号为x+1的ACK报文,一个标准的TCP连接完成。
图2-1显示了TCP三次握手的过程:
SYN Flood攻击流程:
1)攻击者获取目标主机IP地址;
2)攻击者获取目标主机端口;
3)攻击者创建伪装源地址信息的TCP SYN包;
4)攻击者向目地主机的端口发送1)中创建的大量的TCP SYN报文;
图2-2显示了SYN Flood攻击的过程:
2.1.1 SYN flood攻击的行为特点
由SYN Flood攻击流程可见,SYN Flood攻击的特点是攻击机在短时间内大量的向目地机发送大量的TCP SYN报文。
2.2 网页木马
2.2.1 网页木马攻击的含义
用户使用浏览器浏览包含了下载和执行木马服务端代码的网页时,所招受的木马攻击。
2.2.2 网页木马攻击的流程
1) 通过内嵌与html网页内的UrlDownloadFile函数下载木马服务端;
2) 通过内嵌与html网页内的WinExec函数执行木马服务端;
3) 木马服务端执行自我隐藏,反弹通信等木马常见行为实现攻击;
2.2.3 网页木马攻击的行为特点
网页木马的特点是网络行为和进程行为的配合,通过TCP协议建立与服务器的连接,然后通过Http协议下载木马服务端,网络部分行为结束后,然后开始在主机上进行启动,隐蔽,通信等进程行为。
1 网络恶意行为分析的新模型-基于原子行为的攻击树分析模型(以下简称AATA模型)
3.1 攻击树的含义
为了研究描述安全系统的方法,以对系统的安全性进行精确的估价,由卡内基梅隆大学的Bruce Schneler最早提出攻击模型。Attack Tree模型使用树来表示攻击行为及步骤之间的相互依赖关系,树的每个节点代表一个攻击行为或子目标,根节点表示攻击的最终目标。子节点表示在实现父节点目标之前需要成功执行的攻击行为,同一父节点下的子节点具有AND或OR的关系。AND关系表示攻击者完成了子节点的全部攻击行为或子目标才可实现父节点的目标。OR关系表示完成任一个子节点的攻击行为或子目标就可实现父节点的目标。Attack Tree就是由这些AND和OR关系组合而成。我们可以使用深度优先方式从Attack Tree中推导出实现终极目标的攻击路径。图3-1、图3-2分别给出了与节点和或节点的图形与文字描述。
图3-3、图3-4是用攻击树描述的SYN flood攻击和网页木马攻击:
3.1 原子行为的定义
恶意代码为取得某个结果势必会采取各种行为,我们把这些行为进行细分,细分后得到的不可再分行为称为原子行为。比如,对于SYN Flood攻击,发送SYN报文就是个原子行为,而对于网页木马的通过UrlDownloadFile函数下载文件和调用WinExec函数执行木马服务端函数都是原子行为。
3.2 AATA模型的设计与实现
3.3.1 原子行为设计与实现
3.3.1.1 原子行为设计原则
攻击树是由原子行为和攻击步骤构成的,而从恶意行为归类中可以把原子行为分成两大类,分别是基于进程的的原子行为和基于网络的原子行为。攻击树中的叶子节点就代表着原子行为,见图3-3和图3-4。
原子行为的设计必须满足一下三点:
⑴ 可动态地从攻击树上摘除或增加;
⑵ 可显著地与攻击步骤进行区别;
⑶ 尽可能的做到最细化;
3.3.1.2 原子行为实现体
在主机操作系统上,一个应用程序所产生的行为是通过一系列的API调用来完成的,比如线程注入这个恶意行为,可以由VirtualAlloc、WriteProcessMemorry和CreateRemoteThread这三个API调用序列来完成。但是,对于外界系统对主机发起的攻击前奏,比如扫描之类的行为,只能通过某段时间所收到的数据包的信息来反映。
根据原子行为的设计需求和上面对原子行为的理解,原子行为的结构体ATOMACTION如下定义:
typedef struct _ATOMACTION{
struct _ATOMACTION LChild;//指向该节点的左孩子
struct _ATOMACTION RChild;//指向该节点的右孩子
struct _ATOMACTION AndChile;//指向与关系的兄弟节点
BOOL bHit; //值为TRUE时表示命中;否则是没有命中。用于在
//行为判定的过程
BYTE nChild; //子树的数目
WORD ActionID; //行为标示符,赋予原子行为的一个ID
BYTE ActionType; //行为类型,值为1代表是操作系统行为,值为2代表网//络行为,值为3代表是原子行为,值为0代表是攻击步骤
DWORD AttackPath[MAX_PATH]; //如果该节点是攻击树根节点则存放攻击路//径编号,如果有多条攻击路径,则每条攻击//路径以999分割
union{
struct{
ULONG PID; //产生该行为的PID
UCHAR APINAME[MAX_PATH]; // 调用的API函数名称
WORD NumberOfParam; //FuncParam数组中元素个数
UCHAR FuncParam[MAX_PATH]; //保存函数参数
UCHAR Descripotr[MAX_PATH]; //对行为的简单描述
DWORD Value; //行为的权值
}PACTION;
struct{
ULONG PID; //进程PID
UCHAR DestMac[6]; //目地MAC地址
UCHAR SourceMac[6]; //源MAC地址
DWORD DestIP; //目地IP
DWORD SourceIP; //源IP
USHORT DestPort; //目地端口
USHORT SourcePort; //源端口
LARGE_INTEGER DeltTime; //持续时间
DWORD Value; //行为的权值
}NETACTION;
}ACTIONDEF;
}ATOMACTION,*PATOMACTION;//对于行为定义的一个联合体,包含进程行为或网络行为
3.3.2 行为规则库的设计与实现
3.3.2.1 行为规则库的设计
在设计行为规则库之前,先看图3-5,图3-5描述了程序调用API访问系统资源和网络数据包在系统间传递的行为。
由图3-5和对恶意行为的归类,针对网络恶意行为的行为规则库大致分成两类:一种是主机系统内部进程访问主机系统资源的行为规则库;一种是主机系统外部对主机系统访问的行为规则库。行为规则库的设计是以攻击树为基础进行构建,以某种形式的攻击为根节点,然后把构成这一攻击的攻击步骤和原子行为组装成这棵攻击树的其它节点,这样形成的一棵攻击树以及类似所形成的多棵攻击树也就构成了整个行为规则库。
整个行为规则库的设计不仅以攻击树为基础,而且集成了网络协议栈的四个层次结构进行分层构造。整体的行为规则库设计的逻辑结构图见图3-6。
3.3.1.1 行为规则库的实现
由图3-6可知,整个行为规则库的设计是由攻击树和协议栈结构体组成,而攻击树结构体由原子行为结构体组成整棵树,原子行为结构体已经在前面描述,以下是网络协议栈结构体。
typedef struct _NETPROTOCOL{
struct _NETPROTOCOL *Next; //指向下一个协议栈根节点
ATOMACTION *pHead; //指向攻击树根节点
DWORD nAttackTree; //攻击树的个数
CHAR Descriptor[MAX_PATH]; //描述协议信息
}NETPROTOCOL,*PNETPROTOCOL;
3.3.2 行为提取的设计与实现
由图3-5应用程序行为示意图和对行为的分类,行为的提取涉及到如何提取主机系统内进程行为和来自主机系统外的网络数据流行为。
3.3.2.1 行为提取的设计
程序在运行期间所进行的操作被称为“程序行为”,一般泛指程序运行时进行的相对表现较明显的操作,例如创建文件、读写文件、访问注册表、连接网络等,而在这些操作之外的程序内部运算、判断、逻辑等操作并不是我们关心的内容。对程序行为进行监视记录的过程就是“跟踪”(Tracing),如果要进一步深入,则要使用调试器(Debugger)环境进行汇编级的指令分析,这就是“调试”,也可视为更全面的跟踪,因为调试过程可观察到整个程序里的运算和每一步汇编指令的执行过程。
Windows系统中,有三种技术可以实现程序行为记录,甚至控制程序的某些行为,它们分别是虚拟机技术(VM)、系统调用挂钩技术(API Hooking)和API跟踪(API Tracing)技术。
对于来自系统内部的进程的行为采用inline HOOK技术进行行为提取,而对于来自系统外部的网络数据流行为采用TDI HOOK和NDIS HOOK技术进行行为提取。行为提取的逻辑结构图见图3-7。
3.3.1.1 行为提取的实现
行为提取的具体实现根据图3-7可知分成两部分,一个是进程对系统资源访问所提取的原子行为,对于这类提取方式,每个进程拥有一个单链表,这个单链表中储存了以先进的顺序到来的代表原子行为的ATOMACTION结构体地址,每个ATOMACTION代表着一个system call;另一个是通过TDI HOOK和NDIS HOOK提取的原子行为,对于这类提取方式,每个(本地端口,远程端口,远程IP)拥有一个单链表,这个队列中储存了有序到来的代表原子行为的ATOMACTION结构体地址,此时每个ATOMACTION代表着一个网络数据包。单链表的结构体定义如下:
typedef struct _ATOMGATHER{
struct _ATOMGATHER *Next;
PATOMACTION *pNode;
}ATOMGATHER,*PATOMGATHER;
行为提取后的逻辑图见图3-8。
3.3.1 行为判定的设计与实现
行为判定是以提取出的原子行为的集合为输入对象,以行为规则库为匹配对象进行判定的。整个行为判定的过程设计两个过程:一是以提取出的原子行为为输入对象,对攻击树进行打标记的过程;二是搜索攻击树,对打了标记的攻击树进行行为判定的过程。打标记过程见流程图3-9,对标记进行行为判定的过程见流程图3-10。
从上述的四类行为可知,网络恶意行为总体上可以从两个方面来描述,一个方面是基于协议栈的行为,针对这种行为可以从数据包中给出的信息来刻画;另一方面是基于主机操作系统的行为,针对这种行为可以从进程的行为信息来刻画。
总结
4.1 传统分析恶意行为的特点
传统分析方法是通过对恶意代码样本进行分析,确认其类型和种类,了解其大致结构,提取特征识别用的字节串或特征字,用于增添到病毒特征库以供病毒扫描和识别程序使用,进而为制定相应的反病毒措施提供有效的参考。这种传统分析方法大多是从防护的观点出发,旨在针对某种特定的恶意代码提出一个有效的解决方案,通常包括静态分析和动态分析方法,对于一些类似的恶意代码及其变种要进行重复分析,分析效率低,在对付有强大变种和多态变形特征的病毒时往往显得力不从心。
4.2 基于原子行为的攻击树建模特点
本分析方法具有结构清晰的优点,切合了恶意攻击的本质,而且Attack Tree的数据表示更灵活,且具有可重用的特点。
另外,在一个攻击树中,可根据攻击行为,为每个节点赋予一定权值,权值的具体含义可由建模的具体要求而定。在攻击树中,每个节点的文字描述之后是其权值。根据权值可以计算出在各个方面所付出的代价的大小,进而确定最优对策。