2010年10月11日

[jsosug:00140] Re:AKARI 1.0 をリリースしました。

KaiGai Kohei さんは書きました:
> 一応フォローしておくと、モジュールのロード時に「安全と認めたカーネルモジュール
> だけをロードできる」という事になっているので、出所の怪しいモジュールはそもそも
> カーネルに入れてもらえない事になります。

誰がどうやって安全と認めるのでしょう?

> もっとも、システムのセキュリティ管理者が、そういったカーネルのお作法を確信犯的

> に無視するモジュールをロードしてしまえばお仕舞いなので、LSMをビルトイン関数専用
> にしても、あまり意味のある修正ではないですね。確かに。

アドレス直指定で呼び出せば non-GPL なコードでも EXPORT_SYMBOL_GPL() なものに
アクセスできてしまうので、 EXPORT_SYMBOL() を EXPORT_SYMBOL_GPL() に修正する
のもあまり意味が無いかと。いや、 AKARI は GPL なコードですけれど。(笑)

> ちらっとシンボル解決の部分を見ましたが、苦労の跡が偲ばれます。

はい。 grsecurity の IRC で x86_64 への対処方法を教えていただきました。
一応 x86_64 で RHEL5 カーネルとバニラ 2.6.36-rc7 カーネルでの動作を確認したのですが、
まだ他のバージョンを試していないので、とりあえず x86_32 専用ということでリリースしています。

> ただ、プラットフォームによっては変態的な関数ポインタのフォーマットを持っているので、
> 注意が必要です。
>
> (もう5年も前の事なので細部がちょっとあやふやですが…。)
> 昔、Itanitum (ia64) というプロセッサを扱っていたんですが、そこでは関数ポインタが
> 以下のようなフォーマットを持っていました。
>
> struct {
> unsigned long segment; /* kernel text なら 0xa0000000 00000000 固定 */
> unsigned long addr; /* いわゆる、/proc/kallsyms に出るような値 */
> } p;
>
> で、関数ポインタの指すアドレスは &p.addr なんですが、その一つ前のワードに適切な
> セグメント値が入っていないと、正しく関数をコールできません。
>
はい。「 itanium は strange だ」「 function descriptors というのを使っている」と
教えてもらいました。私は IA64 な環境にアクセスできないので、 QEMU でテストすることに
なるかと思います。

> この辺はまぁ、、、自力でシンボル解決する以上、致し方ないというか…。
>
LSMコミュニティがもっとオープンだとこんな奇妙な処理をしないで済むんですけどねぇ。
既存のコードでできるものは追加しないという方針なので、なんでも「 SELinux で実現できる。
設定方法を覚えろ。」「 netfilter で実現できる。設定方法を覚えろ。」になってしまうんですよ。
現実には SELinux や netfilter ではカバーできない要望は存在するし、誰もが設定方法を
マスターできるわけではないから、いろんな人がいろんなLSMモジュールを開発しているのに、
カーネル本体に含まれていないLSMモジュールを使わせないというのは悲しい制約です。

_______________________________________________
Japan secure operating system users group
users-ml@xxxxx
http://lists.sourceforge.jp/mailman/listinfo/jsosug-users


投稿者 xml-rpc : 2010年10月11日 15:30
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/99039
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。