tainted?

tmpfileを読んでたらハマッタ。セキュリティモデルについて勉強中。
[methods]

  • taint 汚染する
  • untaint 汚染解除
  • tainted? チェック
  • $SAFE セキュリティレベル。

セキュリティレベル

[レベル0]

デフォルトのレベル
汚染条件:
 IOや環境変数コマンドライン引数から得られた文字列

環境変数PATHのみ危険なパスを含む場合のみ危険。
ここでは危険なパスとは誰でも変更/書き込みが可能なパスのこと。
ルートディレクトリから階層が順番にチェックされ、一箇所でも誰でも変
更可能な個所があればそのパスは危険とみなされます

禁止される操作:特になし

[レベル1]

汚染条件:
 レベル0と同じ

禁止される操作:
 汚染された文字列を引数とした、以下の操作。

  1. Dir, IO, File, FileTestのクラスメソッド、メソッド
  2. ファイルテスト演算子の使用、ファイルの更新時刻比較
  3. eval
  4. toplevelへの load 第二要素を指定してラップればOK(トップレベルがmainじゃなくなる)
  5. require
  6. trap

[レベル2]

汚染条件:レベル1と同様

禁止される操作:

  1. Dir.chdir, Dir.chroot, Dirmkdir, Dir.rmdir
  2. File.chown, File.chmod, File.umask, File.truncate, File#lstat,File#chmod File#chown File#delete File#unlink File#truncate,File#flock FileTest
  3. Process.fork, Process.setpgid, Process.setsid, Process.setpriority,Process.egid = Process.kill
  4. 危険なパスからの load
  5. (wrapされていても)汚染されている文字列での load()
  6. syscall
  7. exit!
  8. trap

[レベル3]

生成される全てのオブジェクトが汚染される。レベル4でプログラムを実行する環境を作り上げるのに適する。

汚染条件: 生成される全てのオブジェクト

禁止される操作:
レベル2+ Object#untaint

[レベル4]

信用する事のできないプログラムを実行するためのレベル。
レベル4は信頼できないプログラムの危険な動作をほぼ全て研修可能。完全では無い。
このレベルではレベル3では禁止されている汚染された文字列の evalが許可されている。evalで実行すると危険な操作は全て禁止されているから。

汚染条件: レベル3と同様
禁止される操作

  1. Object#taint
  2. トップレベルの定義の変更 (autoload, load, include)
  3. 既存のメソッドの再定義
  4. Objectクラスの定義の変更
  5. 汚染されていないクラスやモジュールの定義の変更 およびクラス変数の変更
  6. 汚染されていないオブジェクトの状態の変更。
  7. グローバル変数の変更
  8. 汚染されていないIOやFileを仕様する処理
  9. IOへの出力
  10. プログラムの終了(exit, abort) (out of memoryでもfatalにならない)


頭に入んないよー。実例を考えよう。
というかのど痛いので帰ろう。