发明名称 Linux环境下基于调用栈图的入侵检测方法
摘要 Linux环境下基于调用栈图的入侵检测方法,本发明通过获取系统调用对应的调用栈信息建立指定进程的调用栈图,并结合带最大匹配度的优先搜索和带滑动窗口的异常度度量方法,实现了对指定进程的系统调用调用链的异常检测机制。通过带最大匹配度的优先搜索,可以把被检测进程的系统调用的调用链在其对应的调用栈图上进行匹配,以获得到最大匹配度。实验结果表明在攻击检测水平相当的情况下,本发明系统的误警率要远低于国内外的同类系统。
申请公布号 CN1710866A 申请公布日期 2005.12.21
申请号 CN200510042882.9 申请日期 2005.06.30
申请人 西安交通大学 发明人 管晓宏;冯力;孙杰;杨力伟
分类号 H04L12/24;G06F9/46 主分类号 H04L12/24
代理机构 西安通大专利代理有限责任公司 代理人 徐文权
主权项 1、Linux环境下基于调用栈图的入侵检测方法,其特征在于:1)首先,获取调用栈数据首先通过Ptrace机制实时获取操作系统中每个进程产生的每个系统调用的调用栈数据,由父进程通过fork()产生一个子进程,然后父进程进入等待;在子进程中通过PTRACE_ME主动请求被其父进程跟踪,然后在子进程中通过系统EXECVE函数运行被跟踪的父进程,进程返回标志为正数则表示为成功执行,否则,再次创建子进程,则会在执行第一个系统调用前停下来,并发送一个SIGCHILD信号给等待的父进程,父进程停止等待后发出PTRACE_SYSCALL请求重新启动停止的系统调用,父进程重新进入等待;子进程继续执行,在系统调用的入口处被信号SIGTRAP停止并发出SIGCHILD信号中止父进程的等待状态,父进程退出等待状态,此时获取到系统调用入口处的调用号、传入参数、返回地址以及调用函数的栈帧指针EBP,并进行相应调用栈图的生成或实时检测;然后父进程发出PTRACE_SYSCALL请求重新启动停止的系统调用,父进程第三次进入等待子进程停止信号的状态,子进程将被停止的系统调用运行结束,在系统调用退出前被信号SIGTRAP停止并通知父进程,父进程在此时获取系统调用运行后的返回值和系统调用中分配的栈帧信息,然后再发出重新启动信号让子进程继续运行下一个系统调用,开始新的一轮对系统调用数据的控制和观察,直到子进程结束;2)其次,用调用栈数据生成调用栈图通过调用栈图生成算法(Call Stack Graph Building Algorithm,CSGBA)对得到的调用栈数据即调用号、传入参数、返回地址以及调用函数的栈帧指针EBP进行训练,从而形成指定进程的由不同的实时检测的数据建成的调用栈图;将获得的实时检测的数据在建立的调用栈上进行分层匹配,调用栈图是有向图,由第i层的节点指向第i+1层的节点,在每个节点的数据结构中保存了与之相连的下一层节点的关联信息,其中包括关联节点和对应的关联边,调用栈图构建算法:是循环地将调用链的第i个节点Ch[i]在调用栈图上对应的第i层进行匹配,当第i层上存在这样的节点Ch[i]时,通过获取节点Ch[i]的关联边数据结构判断它与第i+1层的节点Ch[i+1]的关联关系,如果节点Ch[i]和节点Ch[i+1]在原有的图上不存在关联关系,则在原有的图上添加Ch[i]节点与Ch[i+1]节点之间的边建立它们之间的关联,而当第i层上不存在这样的节点Ch[i]时,在第i层上创建新的节点Ch[i],并将Ch[i+1]作为下一层的关联节点,并以此建立第i层节点Ch[i]和第i+1层节点Ch[i+1]之间的关联边,通过i次递归,将不同的多个调用链利用调用栈图描述出来,其中每个节点可能拥有多个关联边和下层关联节点,它们的数量和节点的分歧因子是一致的;3)再次,将调用链与调用栈图相匹配带最大匹配度的深度优先搜索将从调用栈图中的第一层的第一个顶点v1出发,按如下过程进行:如果实时检测的数据中的第一个节点与第一层的第一个顶点v1匹配,则将第一层的第一个顶点v1标记为已到达顶点,然后选择一个与第一层的第一个顶点v1邻接的尚未到达的第二层的第一个顶点u1,如果实时检测的数据的第二层节点与第二层第一个顶点u1不匹配,则搜索中止,得到一个对应的匹配度;假设第二层第一个顶点u1与实时检测的数据的第二层节点匹配,则匹配度加1,那么从第二层第一个顶点u1又开始一个新的最大匹配度的深度优先搜索;反之如果实时检测的数据中的第一个节点与第一层的第一个顶点v1不匹配则选择第一层中的第二个顶点v2,如果第一层中的第二个顶点v2与实时检测的数据中的第一个节点匹配则开始一个新的最大匹配度的深度优先搜索;当从第二层第一个顶点u1开始的搜索结束时,再选择另外一个与第一层中的第一个顶点v1邻接的尚未到达的顶点,如果这样的顶点不存在,那么搜索终止;而如果存在这样的顶点,则匹配度加1,又从这个顶点开始最大匹配度的深度优先搜索,如此循环下去,直到在调用栈有向图中找到所有的实时检测的数据或其子集,如果在调用栈图中完全找到了被检测的调用链实时数据,则匹配系数μ等于匹配度除以实时检测的数据的长度,如果实时检测的数据在调用栈图中不能完全被匹配,则以最大匹配度作为实时检测的数据在调用栈图中的匹配度;4)最后,通过最大匹配度和异常度的映射检测入侵将滑动窗口内的每个系统调用产生的实时检测的数据在调用栈图中的最大匹配值进行累加再减窗口长度,用所得到的值来检测窗口内所有系统调用对应的实时检测的数据是否是异常还是正常,从而建立了最大匹配度和异常度之间的映射关系,针对异常度的具体度量方法如下:<math> <mrow> <mi>Ad</mi> <mo>[</mo> <mi>w</mi> <mo>]</mo> <mo>=</mo> <mi>WL</mi> <mo>-</mo> <munderover> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>0</mn> </mrow> <mrow> <mi>WL</mi> <mo>-</mo> <mn>1</mn> </mrow> </munderover> <mi>Max</mi> <mrow> <mo>(</mo> <mi>MD</mi> <mo>)</mo> </mrow> <mo>[</mo> <mi>i</mi> <mo>]</mo> <mo>,</mo> <mrow> <mo>(</mo> <mn>0</mn> <mo>&le;</mo> <mi>MD</mi> <mo>[</mo> <mi>i</mi> <mo>]</mo> <mo>&le;</mo> <mn>1,0</mn> <mo>&le;</mo> <mi>Ad</mi> <mo>[</mo> <mi>w</mi> <mo>]</mo> <mo>&le;</mo> <mi>WL</mi> <mo>)</mo> </mrow> </mrow> </math> 5)其中Ad[w]为第w个滑动窗口处的异常度值,Max(MD)[i]为滑动窗口中第i个系统调用的调用链在对应的调用栈图中的最大匹配度,WL为窗口长度,当Ad[w]越小则越正常,当Ad[w]越大则越异常,通过设置特定的阈值,当Ad[w]超过特定的阈值则系统发出报警,当Ad[w]低于阈值则系统不发出报警,以此系统通过报警通知系统管理员采取必要的安全防卫措施,在实际测试中,系统把WL/2做为报警阈值。
地址 710049陕西省西安市咸宁路28号