[#21338] $SAFE=4 での autoload — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

21 messages 2003/09/04
[#21346] Re: $SAFE=4 での autoload — nobu.nakada@... 2003/09/04

なかだです。

[#21359] Re: $SAFE=4 での autoload — Hidetoshi NAGAI <nagai@...> 2003/09/05

永井@知能.九工大です.

[#21419] Makefile.inのlex.c — Kazuhiro NISHIYAMA <zn@...>

西山和広です。

15 messages 2003/09/28

[ruby-dev:21309] Re: 大量メモリ消費攻撃に対する対応

From: Hidetoshi NAGAI <nagai@...>
Date: 2003-09-03 04:18:17 UTC
List: ruby-dev #21309
永井@知能.九工大です.

私が $SAFE を十分に理解していないことによる間違いがありましたら
ご指摘下さい.

From: matz@ruby-lang.org (Yukihiro Matsumoto)
Subject: [ruby-dev:21306] Re: 大量メモリ消費攻撃に対する対応
Date: Wed, 3 Sep 2003 11:45:02 +0900
Message-ID: <1062557100.960636.23005.nullmailer@picachu.netlab.jp>
> $SAFE=3というのは「$SAFE=4にいたる中間の状態」程度の意味で実
> 用になるかは検証されていません。特に信頼できないプログラムに
> 対しては。$SAFE=4でも動く回避策はないか模索するべきではない
> でしょうか。

そうですね.確かにそれが正しい姿勢だとは思います.

ただ,$SAFE=4 にしてしまうとインスタンス変数の操作や
配列操作も一切できなくなってしまいますので,
ライブラリの実装においてはかなり困ってしまいます.

# もちろん,「それができないなら安全ではないのだから,
# そんなライブラリは信頼できないプログラムには使わせない」
# というのも理解できます.

釈迦に説法ではありますが,例えば
-------------------------------
class A
  @@tbl = []
  def initialize
    @@tbl << self
  end
end
-------------------------------
というようなクラスのオブジェクトは $SAFE=4 では生成できません.

信頼できないプログラムを実行させる際の理想形は,
secure_load 'untrusted-program.rb' あるいは
secure_eval "untrusted-script-string" のようにして
信頼できるマスタースレッドの管理下で安全に実行できること
ではないかと思います.
$SAFE=4 はもっと細かいレベルでのコントロールのためのもので,
このような実行には厳しすぎて使えないと感じています.

# ですので $SAFE=3 に逃げてしまったのですが,ダメでしたか.(^_^;

> |実は「制約値を自動的に」というのはあまり考えていませんでした.
> |信頼できるスレッド (メインスレッド) から信頼できないスレッドを
> |起動する際に適当に制約を与えるというようなことを思っていました.
> |えいやぁでサンプル的な値を決めておいて,後は任せるというのでは
> |だめですかね.(^_^;
> 
> メモリの上限とは必要量というのは環境によって相当異なるのを無
> 視してよいのかというと私にはよくわかりません。「ないよりはマ
> シ」という主張は理解できますが。

ああは書きましたが,実は一律に値をソースに埋め込んでしまうことは
私も良い方法だとは考えていません.

# 「ないよりはマシ」という気持ちがあったのは事実ですが.(^_^)

ですので,実行環境の情報からサンプル値を定めるのに
いい情報/方法がないかと考えてはいましたが,
残念ながらまだ思い付けてはいません.
仮に思い付いたとしても,多分,OS に依存するであろう方法を
埋め込んでしまうことが良いかどうかも心配です.

> |上の状態でメインスレッドはメモリ制約なしに動いてますから,
> |「スレッド(信頼できるスレッド;メインスレッドに限る?)は,
> |自らの制約値までは他のスレッドの制約値を緩めることができる」
> |として,信頼できるスレッドからのメッセージに応じて利用者が
> |許可を出せるようにするというのは難しいですかね?
> 
> 「自らの制約値までは他のスレッドの制約値を緩めることができる」
> というのは分かりますし、ありえる解だと思うのですが、「信頼で
> きるスレッドからのメッセージに応じて利用者が許可を出せるよう
> にする」というのは具体的にどういうことかイメージがつかめませ
> んでした。

メモリサイズオーバー時に,メインスレッド (でなくてもいいのですが) 
からコンソールまたはウィンドウで「信頼できないプログラムがさらに
多くのメモリ使用を求めてきていますが,許可しますか?」というような
メッセージを表示し,それに対してユーザから OK の返事が得られれば
新たにメモリを確保するというようなことです.
...が,そのメッセージが信用できるものであるとの保証はどうする
のだという問題もありますね.
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai@ai.kyutech.ac.jp

In This Thread