From: matz@... (Yukihiro Matsumoto) Date: 1997-04-10T11:36:01+09:00 Subject: [ruby-list:2742] Re: security model まつもと ゆきひろです. In message "[ruby-list:2736] Re: security model" on 97/04/10, 石塚圭樹 writes: |けいじゅ@SHLジャパンです. |親スレッドって何ですか? スレッドを生成する時の実行しているスレッド? そうです. |あと, evalやsendは問題ない? 実際に実行する時に上記のコマンドに還元され |るから問題ないのかな? そう思っています. |汚れているないに関わらずファイルへの書き込みは常に制限する必要はないの |かな? オープンできれば書き込みは自由だと考えています.すでにオープ ンしているラインに汚れた文字列を書き出す事は禁止した方が良い ことのでしょうか? |あと, socket通信など 信頼できる相手との通信は汚れなくできればいいんで |すけど, 信頼できるかどうか判断できないから無理ですよねえ... 無理ですね.安全レベルの低いスレッドで通信して,渡してもらう しかないでしょう. |生成だけでなく, 変更sub!() とかもですよね? 文字列の汚れの伝搬に付いてはまだ厳密に決めていません.でも, あんまり要らないかなあともおもっています. というのも,低いレベル(1とか2)はsetuidスクリプトでのうっかり ミスの防止のためですから,あまり一生懸命伝搬しなくても良いよ うにも思えます(もちろんdupとcloneでは伝搬します). 高いレベルではそのスレッド内部で生成される文字列全てが汚れて いますから,文字列操作によってできた新しい文字列も当然汚れて いるわけで,こちらについてもわざわざ伝搬する必要もない気がし ます. |あと, 間接的に文字列生成のともなう, printf, << などは禁止する必要があ |る? 汚れた文字列の出力は禁止していませんから,これは禁止していま せん. |>セキュリティレベルが3以上の時,以下の操作は禁止される. |> * Process.kill |> * その他プロセスに関する危なそうな処理(思い付いたら追加) | |forkは問題ない? でも, forkを無限に起こしてOSを落すという技もあるので |level3とか4辺りで禁止しても良いかも? あ,forkもkillと同じレベルで禁止します. |>セキュリティレベルが4以上の時,以下の操作は禁止される |> |> * 大域変数の値の変更 | |* 環境変数の設定もここになるかな? 環境変数はキーも値もきれいな文字列の場合に変更できるようにし ようと思っていましたが,一定のレベル以上の時には変更そのもの をできなくした方が良いですかね? で,いろいろ考えた結果,こうなりました. レベル0(デフォルト) 外部から得た文字列は汚れている レベル1(setuidチェックレベル) 汚れた文字列で危険な操作を行う事はできない レベル2 さらに,いくつかの危険な操作(kill,fork)は全面禁止 レベル3 さらに,生成された文字列は全て汚れている レベル4(アプレットレベル) さらに,グローバル変数の値が変えられない これならARGVの汚れも検出できるし,普段は制限無しで実行できそ うでしょ? まつもと ゆきひろ /:|)