加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

如何增强Linux内核中的访问控制安全

发布时间:2018-12-20 04:42:26 所属栏目:业界 来源:王张军
导读:配景 前段时刻,我们的项目组在帮客户办理一些操纵体系安详规模的题目,涉及到windows,Linux,macOS三大操纵体系平台。无论什么操纵体系,本质上都是一个软件,任何软件在一开始计划的时辰,都不能百分之百的满意人们的需求,以是操纵体系也是一样,为了

2. 恢复兴状

  1. static void syscall_cleanup_module(void) 
  2. printk(KERN_ALERT "Module syscall unloaded.n"); 
  3. make_rw((unsigned long)sys_call_table); 
  4. sys_call_table[__NR_getdents] = (unsigned long *)orig_getdents; 
  5. make_ro((unsigned long)sys_call_table); 

行使Makefile编译,insmod插入内核模块后,再执行ls时,就会进入到我们的体系挪用,我们可以在hook代码中删掉某些文件,ls就不会表现这些文件,可是这些文件照旧存在的。

仓库式文件体系

Linux通过vfs假造文件体系来同一抽象详细的磁盘文件体系,从上到下的IO栈形成了一个仓库式。通过对内核源码的说明,以一次读操纵为例,从上到下所执行的流程如下:

怎样加强Linux内核中的会见节制安详

内核中回收了许多c说话情势的面向工具,也就是函数指针的情势,譬喻read是vfs提供用户的接口,详细底下挪用的是ext2的read操纵。我们只要实现VFS提供的各类接口,就可以实现一个仓库式文件体系。Linux内核中已经集成了一些仓库式文件体系,譬喻Ubuntu在安装时会提示你是否必要加密home目次,着实就是一个仓库式的加密文件体系(eCryptfs),道理如下:

怎样加强Linux内核中的会见节制安详

实现了一个仓库式文件体系,相等于全部的读写操纵城市进入到我们的文件体系,可以拿到全部的数据,就可以举办做一些拦截过滤。

以下是我实现的一个最简朴的仓库式文件体系,实现了最简朴的打开、读写文件,麻雀虽小但五脏俱全。

https://github.com/wangzhangjun/wzjfs

inline hook

我们知道内核中的函数不行能把全部成果都在这个函数中所有实现,它一定要挪用它的基层函数。假如这个基层函数可以获得我们想要的过滤信息内容,就可以把基层函数在上层函数中的offset替代成新的函数的offset,这样上层函数挪用基层函数时,就会跳到新的函数中,在新的函数中做过滤和挟制内容的事变。以是从道理上来说,inline hook可以想hook那边就hook那边。

怎样加强Linux内核中的会见节制安详

inline hook 有两个重要的题目:

  • 怎样定位hook点。
  • 怎样注入hook函数进口。

1. 对付第一个题目:

必要有一点的内核源码履历,好比说对付read操纵,源码如下:

怎样加强Linux内核中的会见节制安详

在这里当提倡read体系挪用后,就会进入到sys_read,在sys_read中会挪用vfs_read函数,在vfs_read的参数中正好有我们必要过滤的信息,那么就可以把vfs_read当做一个hook点。

2. 对付第二个题目:

怎样Hook?这里先容两种方法:

  • 第一种方法:直接举办二进制替代,将call指令的操纵数替代为hook函数的地点。
  • 怎样加强Linux内核中的会见节制安详

  • 第二种方法:Linux内核提供的kprobes机制。

其道理是在hook点注入int 3(x86)的呆板码,让cpu运行到这里的时辰会触发sig_trap信号,然后将用户自界说的hook函数注入到sig_trap的回调函数中,到达触发hook函数的目标。这个着实也是调试器的道理。

LSM

LSM是Linux Secrity Module的简称,即linux安详模块。是一种通用的Linux安详框架,具有服从高,简朴易用等特点。道理如下:

怎样加强Linux内核中的会见节制安详

LSM在内核中做了以下事变:

  • 在特定的内核数据布局中插手安详域。
  • 在内核源代码中差异的要害点插入对安详钩子函数的挪用。
  • 插手一个通用的安详体系挪用。
  • 提供了函数应承内核模块注册为安详模块可能注销。
  • 将capabilities逻辑的大部门移植为一个可选的安详模块,具有可扩展性。

合用场景

对付以上几种Hook方法,有其差异的应用场景。

  • 动态库挟制不太完全,挟制的信息有也许满意不了我们的需求,尚有也许别人在你之前挟制了,一旦禁用LD_PRELOAD就失效了。
  • 体系挪用挟制,挟制的信息有也许满意不了我们的需求,譬喻不能获取struct file布局体,不能获取文件的绝对路径等。
  • 仓库式文件体系,依靠于Mount,也许必要重启体系。
  • inline hook,机动性高,随意Hook,即时见效无需重启,可是在差异内核版本之间通用性差,一旦某些函数产生了变革,Hook失效。
  • LSM,在早期的内核中,只能应承一个LSM内核模块加载,譬喻加载了SELinux,就不能加载其他的LSM模块,在最新的内核版本中不存在这个题目。

总结

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读