LSM简介

Linux安全模块(Linux Secrity Module,简称LSM)是一种轻量级通用访问控制框架。

作为通用访问控制框架,LSM本身并不提供任何的安全策略,而是为各种安全策略提供了通用的框架。
安全策略以安全模块的形式实现,并加通过LSM加载进入系统,为系统提供安全保障。为此保证此目的,LSM对系统内核做了如下修改:
1.为内核关键数据结构增加安全域字段,用以关联安全信息;
2.在关键系统调用之前插入hook函数,对访问进行判断;
3.提供模块注册与卸载函数,用于安全模块的加载与卸载;
4.提供通用的安全系统调用接口,用以安全系统调用的扩展;
5.部分分离capabilities机制,将其作为独立的安全模块。

关键数据结构包括:

task_struct结构:代表任务(进程)
linux_binprm结构:代表程序
super_block结构:代表文件系统
inode结构:代表管道,文件,或者Socket套接字
file结构:代表打开的文件
sk_buff结构:代表网络缓冲区(包)
net_device结构:代表网络设备
kern_ipc_perm结构:代表Semaphore信号,共享内存段,或者消息队列
msg_msg:代表单个的消息

hook函数调用
LSM在执行对内核关键资源访问之前,插入对hook函数的调用。这些hook函数从功能上讲,大致可分成两类:
1> 用于管理内核对象安全域的hook函数
2> 用以执行访问控制的hook函数。

所有的hook函数都是由具体的安全模块根据其自身的安全策略实现的。
安全模块加载后,将自己实现的hook函数(如:selinux_hooks)通过LSM_HOOK_INIT宏挂接在LSM框架的security_hook_heads链表上,在执行对系统关键资源访问之前,LSM将通过security_hook_heads调用安全模块的hook函数,对访问行为进行安全控制,此时调用的hook函数一般属于第二类。第二类hook函数的返回值一般为整数,若为0,则表示安全模块允许对内核对象的访问;否则,表示拒绝访问。

LSM在内核中插入了非常多的hook函数。根据所针对的内核对象不同,这些hook函数可以分为七类:进程、程序加载、IPC(进程间通信)、文件及文件系统、网络、Linux动态加载模块及一个系统hook函数类。
如在linux系统下打开一个文件的流程:
open -> SYSCALL_DEFINE3(open…) -> do_sys_open -> get_unused_fd_flags(分配一个未使用过的文件操作符) -> do_filp_open -> path_openat -> do_o_path -> vfs_open -> do_dentry_open -> security_file_open -> call_int_hook(file_open, 0, file);
在这个call_int_hook函数中会遍历注册在security_hook_heads链表上的安全模块,并运行file_open对应的检测函数。
以selinux_hooks为例:
static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {

LSM_HOOK_INIT(file_open, selinux_file_open),

};
系统会调用selinux_file_open函数:
selinux_file_open ->
1>inode_security->
1>avc_policy_seqno->
1>file_path_has_perm->主要是这个
2>inode_has_perm -> avc_has_perm ->
3>avc_has_perm_noaudit :实现权限的判断
3>avc_audit:实现审计功能, 并非每个操作都需要记录审计日志。在写策略文件的时候可以关闭某个策略的审计
4>avc_audit_required:判断是否需要记录审计日志
4>slow_avc_audit:进行审计日志的封装和记录

安全模块加载与卸载
主流安全模块:
selinux: MAC强制访问策略(基于属性),具有复杂性和强大的功能。
smack: 简单强制访问控制内核(基于属性),轻量级的 Linux 内核 MAC 实现,是专为嵌入式系统设计的,对于系统管理员来说更简单。
apparmor:基于path的MAC实现,
优点:基于Path的策略可以保护任何文件系统的文件
缺点:对于不同硬链接的同一个物理文件,可能存在多个Path,单个文件的安全策略可能会因为不同的Path而不同,这可能会导致安全漏洞。
tomoyo:基于path的MAC实现,是专为嵌入式系统设计的,允许安全管理员在测试时记录所有的用户进程交互。

安全系统调用
允许安全模块实施自己的系统调用,对已有的系统调用进行扩展,以保证安全策略的实施。

Capabilities机制
Capabilities机制的基本思想是分割超级用户权限,防止超级权限的误用和滥用,以实现最小特权原则。LSM的设计目标之一是把传统的分散在内核多处的capabilities机制分离出内核‘,形成一个独立的capabilities安全模块。Capabilities机制的分离,具有两方面的优势:首先,用户对capabilities机制的使用更加灵活,不需要该机制的用户只需将其从LSM卸载;其次,capabilities机制的分离,使得对capabilities的后继研究对Linux内核影响变得很小。

在Linux中,除了SUID权限之外,还有一种更为细粒度的权限控制机制,称为Capabilities(能力)。Capabilities提供了对特定操作或系统资源的更细粒度的权限控制,以允许用户或进程执行特定的特权操作,而无需完全提升到超级用户(root)权限。

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值