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);
それは月をダンプは、この(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.
AKARIという素晴らしいLinuxカーネルのセキュリティプロジェクトがあります。これは、分解を行わずにプライベートシンボル解決の興味深い方法を実装します(詳細はsourcesを参照)。
ありがとう〜あかりは智代に基づいていますか? OK、私は試してみるよ。 – KMHook