您所在的位置: 首页>>读书频道>>操作系统>>Linux>>

2.3.1 进程审计上下文

http://book.51cto.com  2007-12-22 16:40  倪继利 著  电子工业出版社博文视点  我要评论(0)
  • 摘要:《Linux安全体系分析与编程》第二章分析了日志系统的记录机制,阐述了审计系统的原理,并说明了文件系统变化监视机制。本文主要介绍的是进程审计上下文。
  • 标签:Linux  审计   进程  系统  Linux安全体系分析与编程

2.3  进程的审计

进程的审计包括系统调用的审计和一些内核函数的审计。系统调用的审计是在系统调用的入口和出口处加上审计函数,内核函数的审计是在函数内部的审计点加上审计hook函数,这些审计函数将需要截获的消息通过规则过滤后,填充到审计上下文,在系统调用退出时,进程将审计上下文发送给审计后台。

2.3.1  进程审计上下文

每个进程的进程结构(或者进程上下文)含有审计上下文结构audit_context指针,审计上下文记录进程上下文的审计信息,当进程从进入系统调用和退出系统调用时,使用审计上下文结构audit_context记录系统调用进入和退出的各种属性数据,如:时间戳、参数、调用号等。审计上下文还通过辅助数据结构链表记录进程运行中的各种关键数据结构的审计信息。

对于系统调用来说,审计上下文只能记录系统调用进入和退出时的审计信息,审计上下文所描述的数据在系统调用退出时可以通过内核审计系统发送给审计后台,由审计后台写入到log文件中。这样,审计上下文的使用周期为一个系统调用过程,每完成一次系统调用过程,就将审计上下文信息写出一次。审计信息写出后,审计上下文就可以清空,为下次系统调用做好准备。

每个进程的进程结构task_struct含有审计上下文结构audit_context指针,其列出如下(在linux26/include/linux/sched.h中):

struct task_struct {
  ......
   struct audit_context *audit_context;
   ......
}

审计上下文结构audit_context列出如下(在linux26/kernel/auditsc.c中):

/* 每个任务的审计上下文*/
struct audit_context {
int    dummy;     
/*必须是第一个元素*/
int    in_syscall;     
/*如果任务在一个系统调用中,设置为1 */
enum audit_state    state;
/*审计状态*/
unsigned int    serial;
/*记录的序列号*/
struct timespec    ctime;
/*系统调用入口的时间*/
uid_t    loginuid;   
 /*注册的用户uid */
int    major;      
/*系统调用号 */
unsigned long    argv[4];    
/*系统调用参数*/
int    return_valid; 
/*返回代码有效*/
long    return_code; 
/*系统调用返回代码*/
int    auditable;   
/*为1表示记录已被写入log文件*/
int    name_count;
struct audit_names  names[AUDIT_NAMES];
//存储getname()得到的文件名和文件属性信息,以便记录
char *    filterkey;/*触发记录的规则的关键字*/
struct dentry *    pwd; /*当前目录*/
struct vfsmount *   pwdmnt;    /*文件系统挂接的当前目录*/
struct audit_context *previous;    
/* 以前的审计上下文,用于系统调用进入到退出时配对*/
struct audit_aux_data *aux;

/* 用于存储需要打印的task_struct结构信息*/
pid_t    pid, ppid;
uid_t    uid, euid, suid, fsuid;
gid_t    gid, egid, sgid, fsgid;
unsigned long    personality;
int    arch;

#if AUDIT_DEBUG
int    put_count;
int    ino_count;
#endif
};

在任务启动时,用每个任务的过滤器设置审计上下文中的audit_state值,在系统调用入口,系统调用过滤器设置audit_state值。枚举变量audit_state列出如下:

enum audit_state {
AUDIT_DISABLED,
/*不创建审计上下文,不产生系统调用审计记录*/
AUDIT_SETUP_CONTEXT,
/*创建审计上下文,但在系统调用进入时,不必填充审计上下文*/
AUDIT_BUILD_CONTEXT,
/*创建审计上下文并总是在系统调用进入时填充它,由内核其他部分决定是否产生完全的系统调用记录*/
AUDIT_RECORD_CONTEXT
/*创建审计上下文并总是在系统调用进入时填充它,总是在系统调用退出时写出记录*/
};

结构audit_aux_data用来存储审计辅助数据,包括进程运行过程中的各种关键结构信息等,其列出如下:

struct audit_aux_data {
struct audit_aux_data*next;
inttype;
};

结构audit_aux_data是其他派生结构的基类,派生结构描述了具体的审计信息,派生结构一般将基类结构作为第一个成员。通过基类结构指针,可将描述具体信息的派生结构形成链表放在审计上下文中。

派生结构可根据需要记录信息的任意扩展,例如:记录执行应用程序环境信息和路径信息的结构分别列出如下(在linux26/kernel/auditsc.c中):

struct audit_aux_data_execve {
struct audit_aux_datad;
int argc;
int envc;
char mem[0];
};
struct audit_aux_data_path {
struct audit_aux_datad;
struct dentry*dentry;
struct vfsmount*mnt;
};

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
如何有效提升企业安全审计应用水平
系统应用日志分析管理
Linux——从菜鸟到高手
网络管理系统如何支撑ITSM
企业Web安全威胁在线评估系统
 
 验证码: (点击刷新验证码)   匿名发表
  • 野蛮生长

  • 作者:冯仑著
  • “地产界的思想家”冯仑纵横生意江湖20年来,第一次系统梳理出书。  三十年来中国民营企业从前公司时代发展到公司时代,21..
Copyright©2005-2008 51CTO.COM 版权所有