ipsec and getpeercon()

最近気になったSELinux-MLのスレッドを紹介するシリーズ
(続くのかどうかは神のみぞ知る)

ipsec and getpeercon()
http://marc.theaimsgroup.com/?t=115687514000004&r=1&w=2

getpeercon()というのはlibselinuxのAPIで、ソケットで接続された相手側プロセスのセキュリティコンテキストを取得することができる。しかし、無条件にと言うワケには行かず、UNIXドメイン/Streamソケットのみが対象だった。

しかし、SELinuxのXFRMサポート(2.6.16)によって、TCP/IPソケットでもこれが可能になると言う触れ込みで最近盛り上がっている。

Joshua Brindle@Tresys
TCP/IPソケットでgetpeercon()を使ったら、サーバソケットのコンテキストしか返さない。例えば、initrc_tでサーバを動かしたら、getpeercon()は常にinitrc_tを返すといった具合だ。クライアントでも同様に機能していない。

Paul Moore@HP
最新のFedora FC6カーネルと、David S.Millerのnet-2.6.19.gitではNetLabel/CIPSOは期待通りに動いたぜ!


フォローになってないって…。
今、network labelingの方式は2つの方法が提案されていて、IBM, TrustedCSのIPsecを使った方法と、HPのIPヘッダオプションにCIPSOラベルを詰め込む方法がある。CIPSOは2.6.19に入る予定。

Stephen Smalley@NSA

kernelとipsec-toolsのバージョン、それにSecurity Policy Databaseの内容のダンプ(setkey -DP)を見せてくれないか?あとは、setkeyに渡した-ctx引数の内容を覚えているかい?

それと、IPsec Labelingに関するドキュメンテーションがあると助かるね。> Joy Latten & Venkat Yekkirala

まだ開発途上ということもあり、バージョン差分は結構でかい。それと、設定に関するドキュメンテーションが全く揃っていない。実は私もドキュメントに関してはJoy&Venkat氏にリクエストを出しておいた。
設定ガイドが出たら、速攻で邦訳はしたいと思う。

Venkat Yekkirala@TrustedCS

ドキュメントに関しては、Joy Lattenが書いている。また、usageに関しては私の投稿したメールが参考になるだろう。

ここで一旦論点を整理

Joshua Brindle

getpeercon()をIPsec上のソケットに対して使用した場合、UNIXドメインソケットの場合と同じように、接続相手のコンテキストが返ってくると考えていいんだよね?

Venkat Yekkirala

それでOKです。でも、今のバージョンの挙動はバグってるように見えるな。

Stephen Smalley

予想だけど、IPsecラベル付けのルールが足りない→SAがUnlabel状態になる→変な動作って流れじゃないかな?
で、JoshuaはSPD(Security Policy Database)のエントリをマニュアルで追加する必要があるって指摘してるけど、それで正しいの?

Venkat Yekkirala

それだったら、unlabeled_tが返ってくるよ。:D

マニュアルで設定というのはYes。静的にSPI値とセキュリティコンテキストを関連付けるか、それともracoonでネゴシエートさせるか。ちなみに、複数のドメインがSPDを共有するには、secmarkで適切なルールを設定しなければならない。

Venkat Yekkiralaの回答を見て、自分も設定方法を誤っていた可能性に気が付く。もしかしてSPDのコンテキストって、ドメイン毎に設定しなくちゃいけない??

Joshua Brindle

チョイ待ち。それって、IPsecでは実際にラベルを送受信せずに、送信元{IP,port}と送信先{IP,port}の組み合わせとセキュリティコンテキストを保持しなくちゃいけないってこと?効率悪くない??

Paul Moore

CIPSOはラベルをパケットに埋め込む。でも、現状ではMLSラベルのみ(将来拡張予定)で、しかもIPsecのような認証機構を持たないので、基本的に危険だよ。

Venkat Yekkirala

セキュリティコンテキスト文字列は、ネゴシエーションの際に交換される。パケットに付与されるのはそのIDだけ。

その他、ちょっとしたやり取りが幾つかあったが、肝心の設定方法についてはまだ不明。
racoonがネゴシエーションの過程で、セキュリティコンテキストと一意なIDを関連付けるということだから、これをどうやって設定したらよいものか。
そもそもFC6のipsec-toolsのracoonはこれに対応してるんだろうか。

調べないといけないことが山盛りです。orz