我正在學習一些關於訪問控制的知識。 並嘗試用LSM API實現自己的鉤子函數。 但我發現我必須在內核版本3.1.4中的內核源代碼。 那麼,我該如何開始?如何使用LSM實現自己的掛鉤功能?
有人可以舉個例子嗎? 非常感謝。 PS:我發現了一些例子,但在內核版本2.6.20中。由於LSM已被修改,這些示例無法工作。
我正在學習一些關於訪問控制的知識。 並嘗試用LSM API實現自己的鉤子函數。 但我發現我必須在內核版本3.1.4中的內核源代碼。 那麼,我該如何開始?如何使用LSM實現自己的掛鉤功能?
有人可以舉個例子嗎? 非常感謝。 PS:我發現了一些例子,但在內核版本2.6.20中。由於LSM已被修改,這些示例無法工作。
自2.6.35以來無法加載LSM模塊(請參閱c1e992b99603a84d7debb188542b64f2d9232c07 commit)。因此,在內核之外獲取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);
它轉儲可能看起來這下(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"
OK,現在我們已經有效security_ops
指針和可以做的內核之外LSM什麼。
P.S.
有一個很棒的Linux內核安全項目 - AKARI。它實現了私有符號解析的有趣方法而無需反彙編(詳情請參閱sources)。
非常感謝〜我發現AKARI是基於Tomoyo?好的,我會試一試。 – KMHook