基于属性数据的系统调用过滤方法

2014-11-30 07:49连一峰
计算机工程与设计 2014年8期
关键词:精简调用日志

郭 航,连一峰

(1.中国科学院 软件研究所,北京100190;2.中国科学院大学,北京100049)

0 引 言

通过对内核系统调用的侦听和分析发掘网络攻击行为,是信息安全领域的重要研究方向。文献 [1-8]均通过对日志中系统调用及其参数的分析获得系统可能遭受的攻击的信息。在受到攻击的情况下,系统产生的系统调用数量十分庞大。如何对系统调用进行合理有效地精简和过滤,成为一个亟需解决的问题。当前不同研究提出了不同的系统调用过滤规则,针对特殊进程和文件对系统调用进行删减。如删去包含文件 “/dev/pts”、 “/dev/ptmx”、 “/var/log/*”等对于攻击分析无作用的系统调用。文献 [9]在此基础上提出应删去只被进程读取而未被更改的文件所对应的系统调用。

以上过滤规则的提出均依赖于已知的与攻击无关的文件、进程信息,这些信息内容繁多,且与攻击类型密切相关。由于过滤规则的局限性和专一性,可能无法对其它攻击行为所产生的系统调用进行有效地精简。由此,本文提出一种基于属性数据的系统调用过滤方法,并实现了一个名为 “系统调用分离器”的过滤工具。与现有的过滤方式相比,本文方法通过侦听和分析系统调用的属性数据,引入系统调用依赖规则,将恶意系统调用从庞杂的日志中分离并组成精简日志。

1 基于属性数据的系统调用过滤方法

1.1 相关定义

定义1 系统对象:表示系统中进程、文件、套接字、内存页等对象信息。

定义2 系统调用的属性数据:表示由系统调用参数直接或间接获得的系统调用所包含的系统对象的详细信息。

间接的属性数据如文件路径名、文件索引节点号、IP地址、端口号等需要在侦听脚本中嵌入相应代码才能得到。

表1 给出了系统调用的各类属性数据。如系统调用“open:syscall:open start:1349914348.877244end:1349914348.877247pid:6811ppid:6803pcmd:useradd pathname:/etc/gshadow inode:1493098O_CREAT:0”,其中包含了系统调用名、起止时间、进程、文件、标志位等属性数据信息。

表1 系统调用的属性数据

本文重点分析表1中字体 “加粗”的属性数据:

(1)对于一个文件,虽然可通过其文件路径名 (pathname)和文件索引节点号 (inode)进行唯一标识,但即使是同一个文件路径名,当这个文件被重新创建时,系统依然会为它分配一个不同的文件索引节点号。若仅使用文件路径名和索引节点号进行分析,则会遗漏相应的恶意调用。因此,本文选取文件路径名 (pathname)对文件进行分析。

(2)对于一个进程,本文选取进程ID (pid)进行分析。进程执行命令名 (pcmd)因进程在执行不同文件时会发生变化,因此不作为分析对象。

(3)对于一个套接字,选取其IP地址信息进行分析。同一个恶意IP地址会对应很多不同端口号,若加入端口号进行分析则增加了分析复杂度。

(4)对于一个内存页,选取其起始地址 (如addr、startaddr等)和映射到该地址空间的字节数 (len)信息进行分析。

定义3 系统调用依赖规则:表示将系统调用按照其所包含的系统对象间读取、写入、更改、创建等不同操作关系进行分类的规则。

表2 列出了系统调用依赖规则。本文仅针对表2的35种系统调用进行研究。

表2 系统调用依赖规则

其中,第2行与第7行所包含的系统调用为 “读”类系统调用,这些系统调用所包含的进程对文件或套接字仅进行了读取,并未对其进行更改和写入。而其余行所包含的系统调用则被规定为 “写”类系统调用。这些系统调用所包含的进程对文件、套接字或另一个进程进行了更改、写入或创建操作。套接字之间的通信,如第九行的 “socket socket”也被视为 “写”类操作,相应系统调用也被归入“写”类。某些系统调用因标志位的不同取值或包含不同的系统对象信息,可能出现在表2不同的行中,此处不再赘述。

定义4 恶意系统对象:表示由网络攻击直接包含或产生的,与攻击有直接关系的进程、文件和套接字,以及被其所感染的系统对象。标记为 “red”,如red进程、red文件等。其余不是网络攻击直接包含或产生的,且未被感染的系统对象则被视为 “安全的”,标记为 “blue”,如blue进程、blue文件等。

定义5 恶意系统调用:表示直接或间接由网络攻击产生的系统调用,标记为 “red”;其余不是由网络攻击产生的系统调用均被视为 “安全的”,标记为 “blue”。

定义6 Red预知信息:表示在进行系统调用日志的精简之前,得到的攻击方初始IP地址及初始恶意文件路径名等信息。

在本文模拟的攻击场景下,根据Snort等入侵检测系统的报警信息,使用工具 “BackTracker”分析系统调用日志,从而获取Red预知信息。

定义7 Blue预知信息:表示系统中与网络攻击分析无关的文件信息。

系统中某些文件,如/dev/pts、/dev/ptmx、/var/log以及PIPE等,虽然会被恶意进程进行 “写”操作,但这些文件不会被感染为恶意文件,且包含它们的系统调用对于攻击分析也没有帮助。因此,将这些文件信息记作 “Blue预知信息”。

本文提出的Red预知信息和Blue预知信息见表3。

表3 预知信息

针对套接字,本文仅关注AF_INET类型的套接字,用IP地址和端口信息进行唯一标识。AF_UNIX类型的套接字由于不包含IP地址信息,本文不做探讨。

1.2 系统调用过滤算法

本文的研究基于对 “Red预知信息”及 “Blue预知信息”的已知,对网络攻击所使用的木马文件具体内容及攻击过程则设为未知。“Red预知信息”分为 “初始red文件信息”和 “初始red套接字信息”。二者分别放入red文件集合以及red套接字集合,并建立red进程集合。blue文件集合用于存储 “Blue预知信息”。

针对系统调用日志中每一条系统调用信息进行如下分析。

如图1所示,当一个系统调用为 “写”类系统调用时,如果这个进程属于red进程集合,该文件或套接字将被该进程感染为red,则将该文件加入red文件集合,将该套接字加入red套接字集合,系统调用标记为red;如果这个进程不属于red进程集合,则需要确定被 “写”的文件或套接字是否为red文件或red套接字。若是,则该进程被感染为red,加入到red进程集合中,系统调用被标记为red。若不是,则将系统调用标记为blue。

如图2所示,当一个系统调用是 “读”类系统调用时,如果这个文件或套接字属于red文件集合或red套接字集合,读取或使用它们的进程被感染为red,将其加入到red进程集合中,将系统调用标记为red;如果这个文件或套接字不属于red文件集合或red套接字集合,即使读取或使用他们的进程为red进程,被读取的文件和套接字也不会被感染为red,系统调用也将被标记为blue。

当涉及进程之间的操作时 (例如一个进程创建或终止另一个进程),如图3(a)所示,若该进程为red进程,其产生的所有子进程均被感染为red,系统调用被标记为red。而当一个red进程杀掉一个已有进程时,系统调用被标记为red。

有一类系统调用包含了2个套接字信息,如connect、accept、sendto、recvfrom等。如图3(b)所示,当一个套接字为red时,意味着其IP地址信息属于red套接字集合,与它通信的套接字被感染为red,系统调用也标记为red。

对于mmap2和mprotect系统调用的属性数据,由于映射内存页PAGE 0(Memory:0~4096)可能引起空指针解引用去执行恶意代码,因此本文重点关注特殊内存页PAGE 0。针对mmap2,当其地址信息 (addr)为NULL,而映射字节数 (len)为4096时表示PAGE 0。若该系统调用满足上述特征,则被标记为red,否则为blue。针对mprotect,当其映射起始地址 (startaddr)为0,且其映射字节数 (len)为4096时该系统调用被标记为red,否则为blue。

当一个系统调用中包含的文件路径名属于blue文件集合时,由于该集合中的文件不会被感染为red文件,且其相应的系统调用与网络攻击分析无关,因此无论该系统调用包含的进程是否为red进程,都将此系统调用标记为blue。

以下为系统调用过滤算法伪代码。

输入:系统调用属性数据信息

输出:red或blue系统调用

算法:

(1)If(syscall is a read_class_syscall) //若为“读”类系统调用

(2) if check_red_file (pathname)or check_red_socket(IP): //检查文件或套接字是否为red

(3) check_and_add_pid (pid) //进程被感染为red,加入red进程集合

(4) red_fp.write (line_str) //该系统调用被标记为red

(5) else:

(6) blue_fp.write (line_str) //该系统调用被标记为blue

(7)elif (syscall is a write_class_syscall)//若为 “写”类系统调用

(8) if check_red_process (pid)://检查进程是否为red

(9) check_and_add_file (pathname)or check_and_add_socket(IP): //文件或套接字被感染为red,加入各自red集合

(10) red_fp.write (line_str) //该系统调用被标记为red

(11) else:

(12) if check_red_file (pathname)or check_and_add_socket(IP): //若进程不为red,则检查文件或套接字是否为red

(13) check_and_add_pid (pid) //进程被感染为red,加入red进程集合

(14) red_fp.write (line_str) //该系统调用被标记为red

(15) else:

(16) blue_fp.write (line_str) //该系统调用被标记为blue

2 实验与分析

2.1 工具架构

本文采用Python语言实现名为 “系统调用分离器”的过滤工具。工具架构如图4所示,输出的包含所有red系统调用的文件便是精简后的日志文件。

图4 “系统调用分离器”架构

2.2 实验环境

本文参考文献 [10]所提出的网络攻击情景,模拟了一个 “三步”远程网络攻击。如图5所示,第1步:攻击者利用SSH 服务器 (OpenSSL 0.9.8g)的漏洞CVE-2008-0166,发起蛮力密钥猜测攻击 (brute-force key guessing),可获得root权限。第2步:当NFS服务器 (UNFS3)的共享表 (export table)被错误配置时,允许任意用户通过一个公共文件夹 (/export)共享任意文件。因此可通过SSH服务器上载一个木马文件到该文件夹。该木马文件包含了针对受害主机 (Linux kernel 2.6.24)存在漏洞 CVE-2009-2692的利用代码。第3步:当用户无意间装载了该木马文件时,木马文件首先获取受害主机的root权限,并创建一个用户账号,以便攻击者登录受害主机并获取主机上的重要文件等信息。

2.3 Linux内核系统调用的侦听

为了避免遗漏重要的恶意系统调用,需要侦听Linux内核所有正在运行的进程,并同时侦听网络中主机间套接字的通信信息。根据本次研究对于系统调用属性数据的定义及设置,应侦听每一个系统调用中全部属性数据信息。本文选取了SystemTap工具对系统调用进行侦听及获取。SystemTap是一个开源的、可监控和侦听运行中的Linux系统操作的软件。SystemTap可嵌入由C语言编写的脚本代码,从而实现功能的扩展。通过编写侦听脚本文件,可侦听Linux内核系统调用的全部属性数据。本次研究中编写的脚本 “trace.stp”包含对全部属性数据的侦听脚本代码。

2.4 实验结果与分析

表4 列出了本文模拟攻击场景下SSH服务器、NFS服务器,以及受害主机所产生的系统调用日志,通过 “系统调用分离器”进行精简后的效果及耗费时间。为进行对比分析,分别记录3次精简过程的用时。

表4 “系统调用分离器”精简日志的精简时间及效果

由表4可清楚看到系统调用被精简前后的数量变化。其中SSH服务器的系统调用数量由82242个精简为10673个,精简率87.02%;NFS服务器的系统调用精简率22.11%;而受害主机的系统调用精简率90.94%;由于本次模拟的攻击情景首先利用SSH服务器的漏洞,发起蛮力密钥猜测攻击,导致系统产生大量包含恶意IP地址的 “套接字”类系统调用,如accept、sendmsg、recvmsg等。这使得SSH服务器系统调用精简率略低于受害主机情况。在蛮力密钥猜测攻击成功后,攻击者通过SSH服务器上传恶意文件到NFS服务器,而受害主机用户则从NFS服务器装载该恶意文件,这导致系统产生大量对恶意文件的读写操作,其系统调用日志中包含了大量涉及恶意文件的 “读”、“写”类系统调用。因此,NFS服务器系统调用日志的精简率与SSH服务器及受害主机相比差距较大。

在耗时方面,针对SSH服务器、NFS服务器及受害主机所产生的系统调用日志进行精简,平均用时分别为1.087 s、0.130s,以及0.823s。

文献 [10]提出了一种基于系统调用日志的网络攻击分析工具,其第一步便是通过系统调用日志生成 “系统对象依赖图”(SODG)。通过本文方法对系统调用日志进行精简,可大大降低分析工具的时间开销。表5给出了未精简和精简后系统调用的数量、生成SODG的时间开销、系统对象数等数据的对比信息。

可见,本文提出的方法在精简系统调用日志数量方面,以及在精简日志被用于网络攻击分析的效率方面都呈现了很好的效果。

为了验证本文实现的 “系统调用分离器”在精简过程中有无错删、误删重要的、恶意的系统调用,我们首先通过文献 [10]提出的方法对未精简的系统调用日志进行分析,绘制出系统对象依赖图 (SODG),使用该方法进行路径分析得到一条潜在的网络攻击路径 (如图6所示),该路径中包含全部恶意的系统对象及其相应的系统调用。而通过本文方法所得到的恶意 (red)系统对象及恶意 (red)系统调用实际上是真正起到攻击效果的恶意系统对象及系统调用的超集。

表5 精简与未精简数据分析的对比结果

图6 中,被标记为灰色的图形表示真正起到攻击效果的恶意系统对象。其中,椭圆代表恶意文件,菱形代表恶意套接字,矩形代表恶意进程。而它们之间的连线则代表不同的恶意系统调用。

通过将攻击路径中包含的全部恶意系统对象放入精简后的系统调用日志中进行查找匹配。使用本文提出的 “系统调用分离器”所精简的系统调用日志包含全部起到攻击效果的、恶意的系统对象及系统调用。与此同时,通过查找匹配,精简日志也包含出现在图6攻击路径中其它的系统对象及系统调用。可知,“系统调用分离器”在大幅提升分析效率的同时,保证了精简日志的准确性。

3 结束语

如何对系统调用进行高效、合理地精简,在基于系统调用的网络攻击分析中成为一个亟需解决的问题。现有的系统调用精简方法均依赖于特定的过滤规则,精简结果差强人意。由此,本文提出了一种基于属性数据的系统调用过滤方法。通过侦听和分析系统调用的属性数据,引入系统调用的依赖规则,总结出一套判断系统调用恶意性的分析方法。在此基础上实现了名为 “系统调用分离器”的过滤工具,对该工具进行了测试及实验分析。实验结果表明,该方法可有效地精简系统调用日志,且保持了精简的准确性。

下一步将研究系统调用依赖规则对过滤效果的影响程度,并提出更完善的过滤方法,实现对系统调用日志的合理精简。

[1]TAO Fen,YIN Zhiyi,FU Jianming.Software behavior model based on system calls [J].Computer Science,2010,37 (4):151-157(in Chinese).[陶芬,尹芷仪,傅建明.基于系统调用的软件行为模型 [J].计算机科学,2010,37 (4):151-157.]

[2]HUANG Guoyan,GAO Jianpei,CHANG Xuliang.Intrusion detection method based on parameters of system call[J].Computer Engineering,2010,36 (12):153-156 (in Chinese).[黄国言,高建培,常旭亮.基于系统调用参数的入侵检测方法 [J].计算机工程,2010,36 (12):153-156.]

[3]FAN Enkui,CHEN Yajun.Analysis of system call based on Linux operating system [J].Journal of Chongqing University of Science and Technology,2008,10 (6):124-126 (in Chinese).[范恩魁,陈亚军.基于Linux操作系统的系统调用分析 [J].重庆科技学院学报,2008,10 (6):124-126.]

[4]SUN Xiaoyan,ZHU Yuefei,HUANG Qian,et al.Generation of system malicious behavior specification based on system call trace [J].Journal of Computer Applications,2010,30(7):1767-1770 (in Chinese).[孙晓妍,祝跃飞,黄茜,等.基于系统调用踪迹的恶意行为规范生成 [J].计算机应用,2010,30 (7):1767-1770.]

[5]TIAN Xinguang,QIU Zhiming,LI Wenfa.Anomaly detection of program behavior based on system call and data mining [J].Computer Engineering,2008,34 (2):1-3 (in Chinese).[田新广,邱志明,李文法,等.基于系统调用和数据挖掘的程序行为异常检测 [J].计算机工程,2008,34 (2):1-3.]

[6]WANG Qiong,NI Guiqiang,PAN Zhisong,et al.Anomaly detection of program behavior based on improved hidden Markov model(HMM) [J].Journal of Data Acquisition & Processing,2009,24 (4):508-513 (in Chinese).[王琼,倪桂强,潘志松,等.基于改进隐马尔可夫模型的系统调用异常检测[J].数据采集与处理,2009,24 (4):508-513.]

[7]LIU Zhu,CHEN Jing,FANG Liang.Anomaly detection on system call trace based on support vector data description [J].Computer Acquisition and Software,2012,29 (1):291-293(in Chinese).[刘竹,陈晶,方良.基于支持向量数据描述的系统调用轨迹异常检测 [J].计算机应用与软件,2012,29(1):291-293.]

[8]SHI Jingxiang,CHEN Shuyu,HUANG Hanhui.Research on kernel level Rootkit technology based on Linux system call[J].Computer Technology and Development,2010,20 (4):175-178(in Chinese).[石晶翔,陈蜀宇,黄晗辉.基于Linux系统调用的内核级Rootkit技术研究 [J].计算机技术与发展,2010,20 (4):175-178.]

[9]Xiong X,Jia X,Liu P.Shelf:Preserving business continuity and availability in an intrusion recovery system [C]//In ACSAC,2009.

[10]Dai Jun,Sun Xiaoyan,Liu Peng.Patrol:Revealing zero-day attack paths through network-wide system object dependencies[C]//In ESORICS,2013.

猜你喜欢
精简调用日志
一名老党员的工作日志
基于区域分割的多视角点云精简算法
很美,很暖,很享受 Unison Research(优力声) MAX Mini书架音箱 Simply Italy精简意大利真空管合并放大器
读扶贫日志
系统虚拟化环境下客户机系统调用信息捕获与分析①
精简、综合、用足——神木持续优化考核机制
雅皮的心情日志
雅皮的心情日志
利用RFC技术实现SAP系统接口通信
C++语言中函数参数传递方式剖析