2010年(41)
分类:
2010-06-18 14:42:51
关键字: linux安全体系 系统审计 audit
很久没写kidlinux了,今天的高度高点吧,呵呵。
最近公司在做基于我们自己RBA框架的审计,为了对这个东西做测试,写图形界面吃尽了苦头,这个东西刚搞完又得过国家认证,最近很是紧张了一把。
网上关于审计的资料太少了,有也是高深的不适合我们低级程序员阅读的。本着我为人人人人为我的精神,特拟此文。
审计(audit)是linux安全体系的重要组成部分,他是一种“被动”的防御体系。在内核里有内核审计模块,核外有核外的审计后台进程auditd。
应用程序给内核发送审计消息,内核的审计模块再把消息转发给用户空间的后台进程auditd处理。大概就是这么回事,我不是太深入,如果需要更多的内容,自己去查阅相关资料。如果没有好的资料,我推荐一本,《linux安全体系分析与编程》作者倪继利 。
审计说穿了就是把和系统安全有关的事件记录下来:谁谁谁在什么时候做了什么事,结果是啥。
审计的消息来源主要有两方面:1.内核(我不太确定)、应用程序(audit-libs-devel包里面有编程接口)产生的。2.系统管理员添加的审计规则,匹配规则的事件都将被记录下来。
规则添加:
1 添加文件监视:
该规则能监视文件被读、写、执行、修改文件属性的操作,并记录
auditctl -w /etc/passwd -p rwax
上述命令记录/etc/passwd 被读、写、执行修改属性的操作
2 系统调用入口监视(entry链表)
该规则在进入系统调用的时候触发,记录此时的执行上下文
auditctl -a entry,always -F UID=root -S mkdir
上述命令记录uid为root的用户调用mkdir系统调用的情况
3 系统调用出口(exit链表)
同系统调用入口规则,不同的是在退出系统调用的时候被触发
4 任务规则(task表)
该规则在调用fork() 或者clone()产生新进程的时候触发,因此,该规则适用的“域”仅仅是此时可见的,例如uid gid pid 等等。(参见man auditctl和
auditctl -a task,always -F uid=root
5 可信应用程序规则(user表)
按照各种资料上的说法,这里的user表是用来过滤消息的,内核传递给审计后台进程之前先查询这个表。
但是,不管怎么设置规则都达不到这个效果。如下:
auditctl -a user,always -F uid=root
添加上述规则,发现root的行为被记录。这样添加规则还是被记录:
auditctl -a user,never -F uid=root
后来发现我的CentOS里面system-config-audit上面,该链表被命名为“可信应用程序”。受此启发写了个小程序,向审计内核里写消息,发现这样的消息被过滤了。
这点需要进一步验证。
6 过滤规则(exclude表)
这个表是用来过滤消息的,也就是不想看到的消息可以在这里写规则进行过滤。
例如:不想看到用户登陆类型的消息,可以如下添加规则:
auditctl -a exclude,always -F msgtype=USER_LOGIN
这里过滤是以“消息类型”为对象的。