问题标签 [linux-security-module]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1596 浏览

linux-kernel - 如何在内核 2.6 中注册 Linux 安全模块?

我想将 LSM 框架与内核 ubuntu 2.6.36 一起使用。

当我编译内核模块时,它写道:

警告:“register_security”未定义!

经过大量的谷歌搜索,我发现原因是该register_security()符号不再在 2.6 内核中导出。

所以我EXPORT_SYMBOL(register_security)在 ../security/security.c 文件中添加,并重新编译内核。

用新内核启动后,我添加extern int register_security(struct security_operations *ops)了我的内核模块文件,并再次编译了模块。但是,警告信息仍然存在。如果我继续学习insmode该模块,则dmesg告诉我

未知符号 register_security

我应该怎么办?如何注册 Linux 安全模块?

0 投票
3 回答
936 浏览

compilation - LSM-Howto:具有非导出函数的内核模块

我目前正在编写一个依赖于 Linux 安全模块 (LSM) 的 Linux 内核模块,目前它真的没什么,我只想在打开文件时打印一条简单的消息。问题是:要注册到钩子,我需要函数 register_security,我在谷歌搜索后发现它不再被导出,因此不能被可加载的内核模块使用——只能被直接编译到内核中的模块使用. 当然,这对于安全模块来说是有意义的,但它对我的开发来说很糟糕。所以现在给你的问题是:有没有办法将我的模块修补到内核中?我的意思是,我不想在每次错误修复或每次微小更改后重新编译我的内核。我可以忍受每次新尝试都重新启动我的电脑,但我猜重新编译会花费一点时间。

编辑:嗯,还没有人:(我只是有一个想法,也许有人可以告诉我它是否好:我不能在内核源代码中为我需要的函数添加 EXPORT_SYMBOL,然后重新编译它,然后添加我的代码作为一个模块?当然这只是为了测试和调试

0 投票
1 回答
522 浏览

linux - 内核安全模块:struct inode 中的 i_security

我的问题可能又很简单,但我什么也没找到。我正在编写一个 Linux 安全模块。您可能知道内核中的结构 inode 包含一个字段 i_security 来保存 LSM 的安全相关信息。现在只是为了确保:假设没有用户(甚至不是root)将能够读取或写入这个值是否安全,即这个值真的只能从内核空间访问吗?

我的问题的原因是,很明显可以从用户空间访问一些 inode 数据(我猜是通过系统调用,但仍然使用 chmod 等,您可以更改 inode 中的一些值),现在我想知道这是否没有这并不是说,所有 inode 数据(也包括 i_security)都可以通过某种方式从用户空间访问。

干杯

0 投票
1 回答
752 浏览

linux-security-module - Linux 模块:收到关于任务创建和销毁的通知

对于 Linux 上的 Mach 内核 API 仿真,我需要在刚刚创建或终止任务时调用我的内核模块。

在我的内核模块中,这可以通过 Linux 安全模块很好地完成,但几年前,它们通过取消导出所需的符号来阻止外部模块充当 LSM。

我能找到的唯一其他方法是让我的模块像一个 rootkit。找到系统调用表并将其挂在那里。

修补内核是不可能的。我需要轻松安装我的应用程序。还有其他方法吗?

0 投票
1 回答
312 浏览

linux - 新的 linux 内核,没有使用 lkms 的 lsm,现在没有内核挂钩怎么办?

出于安全原因,从版本 2.6.24 开始,内核停止以可加载内核模块(Linux Kernel Module,LKM)的形式导出编写安全模块所需的字符。

sys_call_table出于安全原因,您不能再次导出。

但是,如何过滤文件系统请求

我简单说一下:我要挂钩“打开”功能!

我不想编译自己的内核版本,驱动程序有什么意义?它应该适用于所有内核。

请帮忙,我以为我会比使用 Linux 的 Windows 有更多的自由,但现在我看到我生命中最宝贵的部分被 Linux 封锁了。

0 投票
1 回答
85 浏览

linux - 是否有一些使用 Linux 安全模块的安全软件?

LSM(Linux 安全模块)用于内核 2.6。现在内核到了 4.x,我不知道是否还有一些使用 LSM?最新的内核是否放弃了对 LSM 的支持?

0 投票
0 回答
455 浏览

linux - 实现 LSM 挂钩 bprm_check_security

最近,我正在开发基于 Linux 安全框架的嵌入式 linux 应用程序白名单解决方案。我的 LSM 的主要重点是实现 bprm_check_security 挂钩,当程序在用户空间中执行时调用(我们不考虑内核进程)。这个钩子被赋予了一个“struct linux_binprm *bprm”类型的指针。该指针包括一个文件指针(包括被执行程序的可执行文件)和一个字符指针(包括被执行程序的名称)。

我们的应用程序白名单解决方案基于哈希计算。因此,在我的 LSM 中,我使用文件指针(包含在 bprm 指针中)来计算新的哈希值,并将该值与文件名(在 bprm 指针中)一起存储为列表中的条目。

但是,在 linux 启动期间(在执行 /sbin/init 之前),文件名和文件指针之间存在不匹配。例如,在第一个执行的程序中,bprm 指针中的文件名是“/bin/cat”,然而,同一 bprm 指针中的文件指针并不是/bin/cat 的实际文件,而是busybox。

研究了很久才发现,这些文件是busybox执行的,创建了一个初始的initrd,从而创建了真正的rootfs,所有这些文件都有一个幻数RAMFS_MAGIC(存储在inode->i_sb-> s_magic)。所以我用这个数字来过滤这些进程,但是,我不确定这是否是正确的方法。我会很感激任何帮助。

需要注意的是,我使用文件指针(包含在 bprm 指针中)来计算哈希值,换句话说,我不会根据文件名或文件路径从用户空间读取文件。

谢谢。

0 投票
1 回答
170 浏览

security - 如何在 linux-kernel 4.18 上使用 register_security 注册安全模块?

目前,我正在尝试注册一个带有打开系统调用文件的钩子的 linux 安全模块。我似乎在任何地方都找不到 register_security 函数。有人可以告诉我它在哪里,是否仍然可以做这样的钩子。

这是我尝试过的。

0 投票
0 回答
109 浏览

c - Linux 安全模块是否可以运行时加载?

是否可以将 Linux 安全模块编译为可选模块 (.ko) 并在运行时(或引导时)加载它们?

Linux 源代码树中的模块似乎需要编译到内核中(并且可以通过内核引导参数选择)。

只是想知道可加载的 LSM 是否可以以受支持的方式实现?

0 投票
0 回答
183 浏览

c - LSM - 安全 blob 和主要/次要用例

我目前正在升级 Linux LSM(内核 4.3.5)的源代码以兼容最新版本的 Linux 内核。

我已成功更新代码,因此 GCC 编译器成功编译,但内核无法启动。

到目前为止,我还没有在模块定义中使用 LSM MAJOR 标志或 EXCLUSIVE 标志,但是当启动到非工作内核时,SMACK 和 SELinux(取决于选择哪个作为主要)错误输出和在跟踪中提到 kmem_cache_free。我的理解是,由于这个原因,我的 LSM 必须作为遗留的主要和排他性实施。这是因为 SMACK 或 Selinux 不能很好地与我的 LSM 配合使用,就像它们不能互相配合一样?(作为注释 SMACK 和 Selinux 都使用独占和遗留的主要标志)

我正在开发的 LSM 使用 xattrs 将规则保存到 inode,LSM 根据规则为 inode 提供中介。

在我阅读的所有文档中,安全 blob 不断出现,现在我的理解是它们是内核数据结构,如果我只是访问 inode,我应该不需要实现一个?

LSM 确实使用了内核缓存kmem_cache_create(),SELinux 在其 4.3.5 内核版本中也这样做了,这是一个安全 blob 吗?

回顾一下:

  • 在这种情况下,主要或次要 LSM 的用例是什么?

  • 安全 blob 是否取代了 kmem_cache_create()?