第 25卷 第 12期
2005年 12月
计 算机 应用
Computer Applications
Vo1.25 No.12
Dec.2005
文章编号 :1001—9081(2005)12—2739—03
对计算机 系统 中程序行为的分析和研究
朱国强 ,刘 真 ,李 宗伯
(国防科 学技术大学 计算机学院,湖南 长沙 410073)
(qqrilxk@newhua.corn)
摘 要 :对程序行为的三种提取方法进行 了分析 比较 ,并采用 LKM(Linux Kernel Module)方式对
程序行为进行提取分析。从字符 串参数长度分布 ,字符 串参数字符特征分布及特殊 系统调用参数三
个方面来对 系统调用参数进行分析 ,丰富了程序行为分析手段 ,提 高了程序异常检测精度。
关键词:程序行为 ;系统调用参数;Linux内核模块
中图分类 号:TP309 文献标识码:A
Analyses and research of the program behavior in computer system
ZHU Guo—qiang,LIU Zhen,LI Zong—bo
(School of Computer Sconce,National University ofDefense Technology,Changsha Hunan 410073,China)
Abstract:Three methods of distillation in the program behavior were introduced,and the program behavior was distilled
and analyzed in LKM .The system call arguments was anlalyzed from the length distribution of character string,characteristic
distribution of character string and special system call arguments,which rich the technique to an alyze the program behavior and
improve the exactness of detection of program anomalism.
Key words:program behavior;system call arguments;Linux Kernel Module(LKM)
0 弓l言
计算机安全问题很大程度上表现为软件的脆弱性,各种
程序不可避免地存在设 计上 的缺 陷,这 常常 被黑客所利用。
然而 ,存储在硬盘上的代码只有 当它运行并执行了系统调用
时才可能破坏系统 J。因此,若能 约束应 用程序所能执行的
操作就能限制入侵者对 系统所 造成的影响,进而从根 本上解
决由于程序的不可靠性所带来的问题。因此对程序行为进行
分析,从系统调用级对程序行为进行约束是一个十分有意义
的选择。
本文将在系统调用级阐述怎样提取计算机系统中的关键
程序行为,并对其进行分析 ,为入侵检测提供准确而详细的参
考资料。
1 程序行为的提取
计算机系统中程序的行为集中表现为系统调用序列。无
论对系统的攻击采用何种 手段 ,最终造成 的伤害都是通过某
些系统调用来完成的。因此 ,如果 能截获每个进程的系统调
用,并对其进行控制(不执行该系统 调用 、改变调用参数等),
就可 以预先避免攻击 的发生 。
在 Linux系统中对系统 调用的截获可以有以下方法 :
1)执行跟踪技术
执行跟踪是一个程序监视另一个程序执行的技术。被跟
踪的程序一步步执行,直到接收到一个信号或调用一个系统
调用 。
在 Linux中通过 ptrace()系统调用执行跟踪。ptrace()系
统调用修改被跟踪进程描述符的 P-pptr域 以使它指向跟踪
进程,因此,跟踪进程就变为了被跟踪进程的有效父进程。当
一
个监控事件发生时,被跟踪的程序停止,且将信号 SIGCHID
发送 给它 的父进程。父进程在此时可完成对被跟踪进程的信
息采集 。传递及修改工作,然后再发出命令恢复被跟踪进程的
执行。执行跟踪往往在用户态下运行 ,系统开销较大,实时性
不强,并且不能较好地提取系统调用参 数等信息 。因此不适
合用在入侵检测这一类 对实时性要求较高的场合。
2)直接修改并编译 内核
直接修改并编译 内核通过对内核中系统调用 的关键点进
行修改并重新编译 内核来实现。所 有的系统调用在经过 INT
8O后都会经过一个公共的入口点 system_call。修改内核方法
就是当 system—call函数进行寄存器值保存之后,在系统调用
处理程序之前截获系统调用。在 entry.S中如下修改:
,
获取 当前进程程序名
保存eax寄存器 / 判断是否是受跟踪进程
调用截获函数intercept—idsO,\ 获取系统调用号及参数
恢复eax内容 \ 作出相应处理
返回
修改并编译内核的方法能高效实现 ,实时性较强,处理灵
活。但对用户要求较高 ,需 要用户对内核知识有所 了解并能
自己编译内核。
2 编 写 LKM
编写 LKM方法能够在 不修改 内核 的情 况下 在内核 态截
获系统调用,实时性较强 ,可根据要 求动态 加载卸载,这样 方
便了用户而又不用冒着编译内核的风险。
在Linux 2.4.18-14及其以后内核版本中sys—call_table[]
不再导出,因此我们也就无法通过截获系统调用函数来截获系
统调用。在此,我们通过修改中断向量表的方法来实现截获功
能。我们知道一条系统 调用的发生在经 过_syscallN宏后转化
收稿 日期 :2005-06-21;修订 日期 :2005—08-29
作者简介:朱国强(1979一),男,湖南娄底人。硕士研究生,主要研究方向:计算机网络信息 安全 ; 刘真(1964一)。男。湖南长沙人,教授,
主要研究方向:计算机网络信息安全; 李宗伯(1972一),男.湖南长沙人 。副教授 ,主要研究方向:计算机体系结构.
维普资讯 http://www.cqvip.com