我正在学习一些关于访问控制的知识。并尝试用LSM api实现自己的钩子函数。但我发现我必须在kernel版本3.1.4中编写内核源代码。那么,我该如何开始呢?
有没有人能举个例子?非常感谢。
PS:我找到了一些例子,但是是在内核版本2.6.20中。由于LSM已被修改,因此这些示例无法工作。
发布于 2012-05-03 20:37:13
从2.6.35开始,您不能加载LSM模块(请参阅c1e992b99603a84d7debb188542b64f2d9232c07提交)。因此,在内核之外获取LSM不是一个有效的任务。但是你总是可以尝试在运行时反汇编内核,并找到所有的私有符号,比如security_ops指针。
例如,查看导出的security_sb_copy_data元件:
int security_sb_copy_data(char *orig, char *copy)
{
return security_ops->sb_copy_data(orig, copy);
}
EXPORT_SYMBOL(security_sb_copy_data);It转储可能如下所示(x86_64):
(gdb) x/7i security_sb_copy_data
0xffffffff811f61b0: push %rbp
0xffffffff811f61b1: mov %rsp,%rbp
0xffffffff811f61b4: data32 data32 data32 xchg %ax,%ax
0xffffffff811f61b9: mov 0x881690(%rip),%rax # 0xffffffff81a77850
0xffffffff811f61c0: callq *0x98(%rax)
0xffffffff811f61c6: pop %rbp
0xffffffff811f61c7: retq因此,0xffffffff81a77850地址就是确切的security_ops指针。让我们通过以下命令来查看它:
(gdb) x/s* 0xffffffff81a77850
0xffffffff81850fa0: "default"好了,现在我们有了有效的security_ops指针,可以在内核之外使用LSM做任何事情。
P.S.有一个很棒的Linux内核安全项目-- AKARI。它实现了无需反汇编即可解析私有符号的有趣方法(有关详细信息,请参阅sources )。
https://stackoverflow.com/questions/10428212
复制相似问题