From: matz@... (Yukihiro Matsumoto) Date: 2003-08-29T15:35:17+09:00 Subject: [ruby-dev:21285] Re: 大量メモリ消費攻撃に対する対応 まつもと ゆきひろです In message "[ruby-dev:21281] 大量メモリ消費攻撃に対する対応" on 03/08/29, Hidetoshi NAGAI writes: |現状では少なくとも,オブジェクトを多量に生成することで |OS をメモリ不足に陥らせる攻撃が可能となっています. |この攻撃に対しては,multi-tk のレベルではどうしようもありません. メモリ消費攻撃については以下のように考えました。 * $SAFE=4ではmalloc(3)の失敗に対してNoMemoryErrorを発生さ せ、そのスレッドを終了させる。 しかし、これでは * malloc(3)が失敗するまで、つまりかなりの量のメモリを実際 に割り当てるまで検出できない。 * 例外を捕捉されたら、検出がますます遅れる。その間に $SAFE<4のスレッドが終了してしまうかも。 という問題が残ります。 |そこでなのですが,次のようなことは可能でしょうか. |---------------------------------------------------------------------- | ・スレッドないしスレッドグループ単位でメモリ制約を設定する. | | ただし,個々のスレッドないしスレッドグループが使用しているメモリを | カウントすることは困難と思われるため,新しいオブジェクトの生成時に | add_heap() が呼ばれたなら,その時点で Ruby 全体が使用している heap | のサイズが与えられたメモリ制約値を越えているかを調べ,越えていれば | エラーを生じるようにするという方法を取る. | | スレッドないしスレッドグループを新しく生成する場合には,生成元のメ | モリ制約を引き継ぐこととし,メモリ制約の変更も利用可能量を減らす方 | 向にしか許さないこととする. |---------------------------------------------------------------------- |実現可能性があって,かつ,処理負担が小さく有効に機能するように |思える案といして出してみたものですが,いかがなものでしょうか? 早めに検出すると言う意味で現状よりは望ましい性質があるとは思 います。制約値をどう定義するかなど悩ましい問題はありますが、 議論を深めたいと思います。 まつもと ゆきひろ /:|)