首页 理论教育 Linux内核安全模块深入剖析

Linux内核安全模块深入剖析

时间:2023-11-22 理论教育 版权反馈
【摘要】:一条audit规则有四个组成部分:队列、动作、系统调用、域。队列队列就是前面提到的五个规则队列:User、Task、Entry、Exit与Type。分别表示不审计和审计。域域的结构是name op value,如euid=1000。&操作是将左值和右值做与操作,非0即为满足条件。在SELinux中,level由sensitivity和category组成。以上是规则的基本构成,在代码中还规定了一些限制:队列entry对应的动作只能是“never”。域msgtype所在的规则只能出现在队列type或队列user中。

Linux内核安全模块深入剖析

14.2节讲述了内核audit子系统的架构,下面梳理一下audit的规则。一条audit规则有四个组成部分:队列、动作、系统调用、域(field)。

(1)队列

队列就是前面提到的五个规则队列:User、Task、Entry、Exit与Type。

(2)动作

动作有两个选项:never与always。分别表示不审计和审计。

(3)系统调用

系统调用表示在哪个或哪些系统调用下做审计。系统调用可以多选,甚至全选。内核用一个bit表示一个系统调用。

(4)域

域的结构是name op value,如euid=1000。“name”是“euid”;“op”是“=”;“value”是“1000”。下面系统地解释一下name op value。

先说value,value是整数或字符串。再说op,op的值限定为:=、!=、<、>、<=、>=、&、&=。前几个操作好理解,最后两个不大直观。&操作是将左值和右值做与操作,非0即为满足条件。&=是将左值和右值做与操作,然后判断操作的结果和右值是否相等,相等才视为满足条件。

最后看最复杂的name,name的可选值为:

●uid:进程的uid。

●euid:进程的euid。

●suid:进程的suid。

●fsuid:进程的fsuid。

●loginuid:进程的loginuid。它是通过接口/proc/[pid]/loginuid设置的,后续的setuid等系统调用不会改变loginuid。一般是负责用户登录的系统进程设置loginuid,记录用户登录时的id

●obj_uid:文件的属主uid。

●gid:进程的gid。

●egid:进程的egid。

●sgid:进程的sgid。

●fsgid:进程的fsgid。

●obj_gid:进程的属组id。

●pid:进程的pid。

●pers:进程的task_struct中的personality。personality的本意是帮助Linux内核运行其他类UNIX系统的应用程序。这个目标并没有完成。在第23章中提到了利用personality配置进程地址随机化。

●msgtype:audit消息类型。

●ppid:父进程pid。

●devmajor:设备的主设备号。

●devminor:设备的次设备号。

●exit:系统调用的返回值

●success:系统调用是否成功返回,非0值表示成功,0表示失败。

●inode:文件的inode号。(www.xing528.com)

●arg0:系统调用的第一个参数。

●arg1:系统调用的第二个参数。

●arg2:系统调用的第三个参数。

●arg3:系统调用的第四个参数。

●subj_user:与SELinux相关,主体的user。

●subj_role:与SELinux相关,主体的role。

●subj_type:与SELinux相关,主体的type。

●subj_sen:与SELinux相关,主体的sensitivity。

●subj_clr:与SELinux相关,主体的category,clr来自category的另一个名称clearance。

●obj_user:与SELinux相关,客体的user。

●obj_role:与SELinux相关,客体的role。

●obj_type:与SELinux相关,客体的type。

●obj_lev_low:与SELinux相关,客体的低level。在SELinux中,level由sensitivity和category组成。客体的level可以设定为一个范围。

●obj_lev_high:与SELinux相关,客体的高level。

●obj_watch:文件的路径名。

●obj_dir:目录的路径名。

●filter_key:filter_key的作用是设置一个出现在审计消息中的字符串,通过它可以方便分类审计消息。

●loginuid_set:loginuid_set对应的value是一个bool值(1或0),代表进程的loginuid是否被设置过。

●arch:架构,在支持多架构的内核上使用。

●perm:文件的允许位。

●filtertype:文件的类型,包括普通文件、目录、块设备……

以上是规则的基本构成,在代码中还规定了一些限制:

(1)队列entry对应的动作只能是“never”。

(2)域msgtype所在的规则只能出现在队列type或队列user中。

(3)以下域的op不能是“&”和“&=”:uid、euid、suid、fsuid、loginuid、obj_uid、gid egid、sgid、fsgid、obj_gid、pid、pers、msgtype、ppid、devmajor、devminor、exit、success、inode

(4)域loginuid_set对应的value只能是0或1,对应的op只能是“=”或“!=”。

(5)域arch对应的op只能是“=”或“!=”。

(6)域perm对应的value是一个整数,只有最低4个bit可以被置为1。

(7)域filetype对应的value是一个整数,对它的合法性检查为:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈