脆弱性って何かを知りませんでした!

以前セーフレベル4関係で送ったパッチが脆弱性ということで報告されててまぁびっくり。

Rubyに複数の脆弱性

なぜびっくりかと言うと、私はこれらを脆弱性だと認識していなかったからです(特に untrace_var のは)。「セキュリティーホール」とかの言葉とごっちゃになっていたのですが、こういうものも脆弱性と呼ぶのですね。

システムの脆弱性となるのはハードウェアの欠陥やソフトウェアのバグが多いが、こうした明白な欠陥だけが脆弱性になるわけではなく、開発者が予想しなかった利用形態や設計段階での見落としなど、形式的には欠陥とはならない潜在的な問題点が脆弱性として後から認知されることも多い。

http://e-words.jp/w/E88486E5BCB1E680A7.html

今回のは「開発者が予想しなかった利用形態」に相当するのでしょうか。これまで認識不足でごめんなさい。

さて、セーフレベル4に関する似たような問題点は、細かいものを含めればまだたくさんあった気がするというかいくつか報告してないものもあるので、現在のところセーフレベル4環境には頼らない方が良いと思います。本来の「信頼できないプログラムを実行する」という意味ではほとんど誰も使ってないと信じたいところです。プログラムのプラグイン(的な機構)がひょっとしたら信用できないかもなぁ、という時の気休めくらいに使っておくのがいいですよ。リファレンスマニュアルに書いてあるようにセーフレベル4環境の安全性は一切保証されていませんから、使うのならば覚悟してソースを読んで自分の身を守るべく行動するしかないのだと思います。

でもどうしても使わざる得ない時には、

  • 拡張ライブラリは Ruby 本体についてくるものであっても使わない。使う時はソースを読んで安全を確認してから。
  • 信頼出来ないプログラムを実行する前に全てのオブジェクトの汚染フラグを取り除いておくこと。セーフレベル0においても汚染されるオブジェクトが存在することを忘れてはなりません。

という事に気をつけておいて下さい。この二つを守るだけでぐっと安全になるだろうと思います。でもこれらを守っても防げない嫌がらせ的なものは、そう、今ひとつ思い出しました。どうしよう。嫌がらせって脆弱性の範疇なのでしょうか?

セーフレベル4は、現在のところ拡張ライブラリがちっともセーフレベルの存在を考慮していないという環境面での問題と、セキュリティーモデルにおいて連続的に存在しているレベル0や1との整合性があまりないという問題をかかえています。前者はみんなで頑張ってパッチを送りまくるだけで解決するので人海戦術的な話で楽勝だと思います。また後者は trust/untrust モデル(現在のレベル 0,1,2 における taint モデルと 3, 4 を切り分けるという話です)だかに変更される予定になっているはずですので、将来的には万事解決するはずです。やったね!本当は今の連続性のあるセキュリティーモデルの方がカッコイイと思うのですが、扱いづらいという点は確かですので、うまく改善されるといいなぁと願っています。

あれ、でも 1.8 に新しいセキュティーモデルが採用されるわけがないから、どのみちセーフレベル4の問題点は潰しておかないとダメなのでしょうか。そんな心配が要らなくなるように早く 1.9 の時代が来るといいですね。

というわけですので、皆様も是非 Ruby のセキュリティーモデルに興味を持って遊んでみて下さい。「$PROGRAM_NAMEがセーフレベル4で変更可能」だとしたら一体何が出来そう?とか考えると、Ruby の標準添付ライブラリのあり方にとっても詳しくなれると思います!