開発者だからこそできるセキュリティ向上策(2/2 ページ)

» 2004年09月10日 17時30分 公開
[高橋睦美,ITmedia]
前のページへ 1|2       

 コードがどこからやってきたのかを示す要素が「エビデンス」である。このエビデンスとしては、ディレクトリやソフトウェア発行元、サイトやURLなどの値を用いることができ、これに.NET Framework 管理ツールで設定されたセキュリティポリシーと、コード(アセンブリ)の権限要求を照らし合わせることで、許される処理――ファイルI/Oやソケットアクセス、Webやデータベースへのアクセスなど――が決定する、という仕組みだ。もしこのアセンブリが、DLLファイルなどを呼び出すようになっていれば、それら呼び出される側のコードの権限情報もスタック的に保持される。

 辻郷氏はこれを端的に示すデモとして、あるフォルダでは問題なく実行されるコードを、別のフォルダにコピー&ペーストして実行すると「セキュリティ例外」が生じる様子を示した。

要件に応じた方法を

 このコードアクセスセキュリティを実現する方法は、3種類ある。

 1つは、管理ツールの.NET Framework Configurationを用いてポリシーをセットする方法だ。「この方法は、コードにはいっさい組み込む必要がないためとてもシンプル」(辻郷氏)。うまく使えば、「このアプリケーションはこのフォルダにしかアクセスできない」といった形の運用が可能だ。「標準のユーザーベースの制御に加え、よりセキュアに、システムごとのポリシーを適用できる」(同氏)。

 ただ、GUI上で設定を行ったつもりでも、試してみると制御がうまくいかない可能性もある。というのは、構成が若干ややこしいからだ。

 .NET Framework Configurationで指定できるポリシーは1つだけでなく、「エンタープライズ」「マシン」「ユーザー」という3つのポリシーレベルがある。そして当該コードに適用されるのは、これら3つのポリシーの「論理積(and)」だ。一方、上記のエビデンスによって分類される「コードグループ」は階層構造をなしており、ここで適用されるのは「論理和(or)」になる。こういった仕組みのため、本人はしっかり設定を行ったつもりでも、見落としが生じる可能性がある。

 それを防ぐためのコマンドラインツールとして、「caspol」がある。これを利用すれば、そのコードにどんな権限が許可されているかを確認し、修正できるようになっている。

 2つめの方法は「宣言スタイル」によるもので、Visual BasicやC#などのコード中に直接、アクセス許可/拒否を記述する。アセンブリレベルとクラス/メソッドレベルの2階層で記述でき、ロード時に実行される仕組みだ。「permview」ツールによる権限内容の確認が可能であり、辻郷氏によると、明示的に権限を指定できること、早期のデバッグが可能なことなどがメリットだ。

 最後の方法は、「命令スタイル」を用いるやり方だ。コードに直接記述するという点では先の宣言スタイルと同じだが、この場合、アクセス許可制御が実行されるのはコード実行時。しかも、同一のコードでもアクセス許可の状況に応じて動的に処理を切り替えられるため、より柔軟なセキュリティ設定が可能になる。

 ちなみに、.NET Frameworkの枠組みの外で動作するアンマネージコードの場合は、ラッパークラスを用いることで同じように制御が可能ということだ。

 このようにさまざまな形で実装が可能なコードアクセスセキュリティだが、辻郷氏は、「まずは、当たり前だが、使用目的を明確化することだ」と述べた。

 これを用いて「不正なコードによるリソースへのアクセスを制御する」のか、「明示的にアクセス許可制御を行う」のか、はたまた「ユーザーに応じてメニュー表示などを変更する」のかによって、最適な方法は異なる。場合によっては上記のいずれかを併用するという手もあるだろう。こうした要件に応じて使い分けを行うことで、「デフォルトの設定よりもさらに(セキュリティを)強いものにできる」と同氏は講演を締めくくっている。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ