2012-05-03 8 views
2

私はアクセス制御について何か学んでいます。 LSM APIを使用して独自のフック関数を実装しようとします。 しかし、私はカーネルバージョン3.1.4のカーネルソースでコードを作成する必要があることを発見しました。 どうすれば始めることができますか?LSMで私自身のフック機能を実装するにはどうしたらいいですか?

誰かがそれについての例を挙げることができますか? ありがとうございました。

PS:いくつかの例が見つかりましたが、カーネルバージョン2.6.20にあります。 LSMが変更されたため、これらの例は機能しません。

答えて

0

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を参照)。

+0

ありがとう〜あかりは智代に基づいていますか? OK、私は試してみるよ。 – KMHook

関連する問題