[#45670] ruby-1.9.1-preview2のruby-tk on OSX — 天野竜太郎 <wn9r-amn@...>

天野です。

40 messages 2008/12/02
[#45673] Re: ruby-1.9.1-preview2のruby-tk on OSX — Nobuyoshi Nakada <nobu@...> 2008/12/03

なかだです。

[#45676] Re: ruby-1.9.1-preview2のruby-tk on OSX — 天野竜太郎 <wn9r-amn@...> 2008/12/03

天野です。

[#45678] Re: ruby-1.9.1-preview2のruby-tk on OSX — Nobuyoshi Nakada <nobu@...> 2008/12/03

なかだです。

[#45680] Re: ruby-1.9.1-preview2のruby-tk on OSX — Hidetoshi NAGAI <nagai@...> 2008/12/03

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

[#45701] Re: ruby-1.9.1-preview2のruby-tk on OSX — 天野竜太郎 <wn9r-amn@...> 2008/12/04

天野です。報告遅れてすみません。

[#45707] Re: ruby-1.9.1-preview2のruby-tk on OSX — Hidetoshi NAGAI <nagai@...> 2008/12/05

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

[#45708] Re: ruby-1.9.1-preview2のruby-tk on OSX — 天野竜太郎 <wn9r-amn@...> 2008/12/07

天野です。

[#45709] Re: ruby-1.9.1-preview2のruby-tk on OSX — Hidetoshi NAGAI <nagai@...> 2008/12/07

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

[#45710] Re: ruby-1.9.1-preview2のruby-tk on OSX — 天野竜太郎 <wn9r-amn@...> 2008/12/08

天野です。

[#45711] Re: ruby-1.9.1-preview2のruby-tk on OSX — Hidetoshi NAGAI <nagai@...> 2008/12/08

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

[#45712] Re: ruby-1.9.1-preview2のruby-tk on OSX — 天野竜太郎 <wn9r-amn@...> 2008/12/08

天野です。

[#45713] Re: ruby-1.9.1-preview2のruby-tk on OSX — Hidetoshi NAGAI <nagai@...> 2008/12/08

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

[#45714] Re: ruby-1.9.1-preview2のruby-tk on OSX — 天野竜太郎 <wn9r-amn@...> 2008/12/08

天野です。

[#45715] Re: ruby-1.9.1-preview2のruby-tk on OSX — Hidetoshi NAGAI <nagai@...> 2008/12/08

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

[#45716] Re: ruby-1.9.1-preview2のruby-tk on OSX — 天野竜太郎 <wn9r-amn@...> 2008/12/08

天野です。

[#45717] Re: ruby-1.9.1-preview2のruby-tk on OSX — Hidetoshi NAGAI <nagai@...> 2008/12/08

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

[#45721] Re: ruby-1.9.1-preview2のruby-tk on OSX — Hidetoshi NAGAI <nagai@...> 2008/12/17

天野さん,

[#45722] Re: ruby-1.9.1-preview2のruby-tk on OSX — 天野竜太郎 <wn9r-amn@...> 2008/12/17

天野です。

[#45725] Re: ruby-1.9.1-preview2のruby-tk on OSX — Hidetoshi NAGAI <nagai@...> 2008/12/17

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

[#45726] Re: ruby-1.9.1-preview2のruby-tk on OSX — Hidetoshi NAGAI <nagai@...> 2008/12/18

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

[#45727] Re: ruby-1.9.1-preview2のruby-tk on OSX — 天野竜太郎 <wn9r-amn@...> 2008/12/19

天野です。

[ruby-list:45660] セキュリティ制御モデルの改善について

From: Kiyotaka ATSUMI <kiyotaka@...>
Date: 2008-12-01 07:37:44 UTC
List: ruby-list #45660
渥美と申します.

セキュリティ制御モデルの改善について研究しています.以前関連論文を発表
したことも有りますので,詳細は以下を御覧下さい.

オブジェクト毎にセキュリティ制御可能なtaintモデル
https://www.ka-lab.jp/index.cgi?c=plugin;plugin=attach_download;p=%B8%A6%B5%E6%B6%C8%C0%D32005-2009;file_name=IPSJ.PRO66.paper.pdf

オブジェクト毎にセキュリティ制御可能なtaintモデルのRuby言語への実装について
https://www.ka-lab.jp/index.cgi?c=plugin;plugin=attach_download;p=%B8%A6%B5%E6%B6%C8%C0%D32005-2009;file_name=IEICE.SS69.paper.pdf

これについて,皆様からの御意見を伺いたく,投稿します.簡単なアイディア
を以下に述べます.もし,ruby-devで議論すべしということでしたら,そのよ
うにご指示下さい.

以下,長文ですが,御了承下さい.

対象としているセキュリティ制御モデルはtaintモデルの方です.rubyのセキュ
リティレベル4のサンドボックスモデルではありません.

現在のtaintモデルは,rubyに限らずシステム保護を前提としており,セキュ
リティレベルに応じて,評価の実行や入出力を制限してシステムを保護しよう
とするものと理解しています.しかし,それでは,HTMLのクロスサイトスクリ
プティグや,SQLインジェクション攻撃に対しての有効な対策とならず,CGI作
成者やDBサービス提供者が個別アプリケーション毎に対策を施しているのが実
態です.

そこで,各サービスは全てオブジェクトで扱うことを前提とし,オブジェクト
にメソッドを通してデータを送る時に,そのオブジェクトにとって安全なデー
タしか受け取らないようにする機構と,そのオブジェクトにとって安全になる
よう,データを洗浄する機能をセットにしたらどうかと考えるようになりまし
た.つまり,アプリケーション作成者が個別に洗浄機能を付加するのではなく,
クラス設計者が洗浄機能まで提供できるようにするということです.

この方法には2つの利点が有ります.

1. 個別アプリケーション作成者は洗浄機能追加という作業から開放されます.
   個別アプリケーション作成者はクラス設計者の提供する洗浄機能を利用す
   れば良いのです.

2. これまで同じクラスに対して洗浄方法がまちまちであり,時おりセキュリ
   ティホールを作成してしまうことがありましたが,当該クラスのことを良
   く知っているクラス作成者が洗浄方法を提供するので,セキュリティ上の
   リスクの軽減が期待できます.

具体的には以下のようにプログラムを書くことが出来るようになります.

----- BEGIN ----- BEGIN ----- BEGIN ----- BEGIN ----- BEGIN -----
 1: class Html
 2:   def wash(a)
 3:     a.gsub!(/</, '&lt;')
 4:     a.gsub!(/>/, '&gt;')
 5:     return true
 6:   end
 7:   
 8:   gate_public
 9:   def foo(a)
10:     puts a
11:   end
12: end
13: 
14: html = Html.new
15: str = gets       # safe for nil
16: html.clean(str)  # safe for Html
17: html.foo(str)
----- END ----- END ----- END ----- END ----- END ----- END -----

クラス設計者はwashというプライベートメソッドを定義します.ここで,受け
取ったデータの洗浄を試みます.受け取ったデータの洗浄に成功した場合は
trueを,失敗した場合はnilを返すように作成します.

gate_public以降に書かれたパブリックメソッドはこのメソッドによって送ら
れてきたデータがこのオブジェクトにとって安全かどうかを判断してからメソッ
ドの実行をします.他のクラスで安全とされたデータで有っても,このクラス
で安全と記されていなければ実行は遮断されます.gate_public以外に,
gate_protected, gate_privateも有ります.今までのpublic, protected,
privateもありますので,今まで作成されたコードとも互換性が有ります.

クラスの利用者は,あるクラス用に洗浄したいデータについて,そのクラスが
用意したcleanメソッドを当該データを付けて呼び出すだけです.上記のよう
に15行で読み込んだデータは外から取り込んだデータなので安全ではありませ
ん.これをcleanメソッドで安全になるよう加工できます.もし,16行目をコ
メントアウトし,プログラム実行時に適当な文字列を入力すると,17行目実行
時に

test.rb:17: Arguments are tainted @ foo (MethodCallError)

といったソフトウェア割り込みを発生させて停止します.

cleanメソッドの実体は,washメソッドの実行と,washメソッド実行成功時に,
洗浄したデータについて,当該クラスにとって安全であるというマークを付け
る2つの作業から成っています.

なお,プログラム中にハードコードされたデータは,どのクラスに対しても安
全であるとしています.

これだけだと分かり難いと思うので,ruby-1.8.7-p72に対するパッチを下記の
場所に用意しました.もし,お時間があり,面白そうだと思われた方は実行し
ていただき,コメントを頂戴出来れば幸いです.よろしくお願いします.

パッチデータの場所

https://www.ka-lab.jp/~kiyotaka/ruby-1.8.7-p72-sec-ruby-0.1.diff

パッチの適用は以下の通り

1. 適当なディレクトリに,
     ruby-1.8.7-p72.tar.bz2
     ruby-1.8.7.p72-sec-ruby-0.1.diff
   を置く.

2. 以下の通り実行してrubyバイナリを作成する.
   $ tar xvjf ruby-1.8.7-p72.tar.bz2
   $ cd ruby-1.8.7-p72
   $ patch -p1 <../ruby-1.8.7.p72-sec-ruby-0.1.diff
   $ ./configure
   $ make
   $ make test

3. カレントディレクトリにrubyバイナリが出来ている.

--
Kiyotaka ATSUMI, Suzuka National College of Technology
Web: https://www.ka-lab.jp/
PGP Public Key: https://www.ka-lab.jp/pubkey/kiyotaka-at-ka-lab.jp.asc
Finger Print: 9E2A 80B4 0F3D 424E 035F B594 991F 7795 DD6D 560F





In This Thread

Prev Next