Linux kernel 如何使用LSM实现自己的钩子函数?
我正在学习一些关于访问控制的知识。 并尝试用LSMAPI实现自己的钩子函数。 但是我发现我必须在内核版本3.1.4中的内核源代码中进行编码。 那么,我如何开始呢 有人能举个例子吗? 非常感谢Linux kernel 如何使用LSM实现自己的钩子函数?,linux-kernel,Linux Kernel,我正在学习一些关于访问控制的知识。 并尝试用LSMAPI实现自己的钩子函数。 但是我发现我必须在内核版本3.1.4中的内核源代码中进行编码。 那么,我如何开始呢 有人能举个例子吗? 非常感谢 PS:我发现了一些例子,但是在内核版本2.6.20中。由于LSM已被修改,这些示例无法工作 自2.6.35起,您无法加载LSM模块(请参阅c1e992b99603a84d7debb188542b64f2d9232c07提交)。因此,在内核之外获取LSM不是一个有效的任务。但您始终可以尝试在运行时反汇编内核,
PS:我发现了一些例子,但是在内核版本2.6.20中。由于LSM已被修改,这些示例无法工作 自2.6.35起,您无法加载LSM模块(请参阅c1e992b99603a84d7debb188542b64f2d9232c07提交)。因此,在内核之外获取LSM不是一个有效的任务。但您始终可以尝试在运行时反汇编内核,并找到所有私有符号,如指针 例如,查看导出的
security\u sb\u copy\u data
符号:
int security_sb_copy_data(char *orig, char *copy)
{
return security_ops->sb_copy_data(orig, copy);
}
EXPORT_SYMBOL(security_sb_copy_data);
它可能看起来是这样的(x86_64):
因此,0xFFFFFF81A77850
地址就是确切的security\u ops
指针。让我们看看:
(gdb) x/s* 0xffffffff81a77850
0xffffffff81850fa0: "default"
好了,现在我们有了有效的security\u ops
指针,可以在内核之外使用LSM做任何事情
p.S.
有一个很棒的Linux内核安全项目——AKARI。它实现了一些有趣的私有符号解析方法,而无需反汇编(有关详细信息,请参见)。自2.6.35以来,您无法加载LSM模块(请参见c1e992b99603a84d7debb188542b64f2d9232c07提交)。因此,在内核之外获取LSM不是一个有效的任务。但您始终可以尝试在运行时反汇编内核,并找到所有私有符号,如指针
例如,查看导出的security\u sb\u copy\u data
符号:
int security_sb_copy_data(char *orig, char *copy)
{
return security_ops->sb_copy_data(orig, copy);
}
EXPORT_SYMBOL(security_sb_copy_data);
它可能看起来是这样的(x86_64):
因此,0xFFFFFF81A77850
地址就是确切的security\u ops
指针。让我们看看:
(gdb) x/s* 0xffffffff81a77850
0xffffffff81850fa0: "default"
好了,现在我们有了有效的security\u ops
指针,可以在内核之外使用LSM做任何事情
p.S.
有一个很棒的Linux内核安全项目——AKARI。它实现了有趣的私有符号解析方法,无需反汇编(详见)。非常感谢~我发现AKARI基于Tomoyo?好的,我试试。非常感谢~我发现AKARI是基于Tomoyo的?好的,我试试看。