首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用LSM实现我自己的钩子函数?

如何使用LSM实现我自己的钩子函数?
EN

Stack Overflow用户
提问于 2012-05-03 17:04:06
回答 1查看 1.9K关注 0票数 2

我正在学习一些关于访问控制的知识。并尝试用LSM api实现自己的钩子函数。但我发现我必须在kernel版本3.1.4中编写内核源代码。那么,我该如何开始呢?

有没有人能举个例子?非常感谢。

PS:我找到了一些例子,但是是在内核版本2.6.20中。由于LSM已被修改,因此这些示例无法工作。

EN

回答 1

Stack Overflow用户

发布于 2012-05-03 20:37:13

从2.6.35开始,您不能加载LSM模块(请参阅c1e992b99603a84d7debb188542b64f2d9232c07提交)。因此,在内核之外获取LSM不是一个有效的任务。但是你总是可以尝试在运行时反汇编内核,并找到所有的私有符号,比如security_ops指针。

例如,查看导出的security_sb_copy_data元件:

代码语言:javascript
复制
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):

代码语言:javascript
复制
(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指针。让我们通过以下命令来查看它:

代码语言:javascript
复制
(gdb) x/s* 0xffffffff81a77850
0xffffffff81850fa0:  "default"

好了,现在我们有了有效的security_ops指针,可以在内核之外使用LSM做任何事情。

P.S.有一个很棒的Linux内核安全项目-- AKARI。它实现了无需反汇编即可解析私有符号的有趣方法(有关详细信息,请参阅sources )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10428212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档