学位論文要旨



No 116826
著者(漢字) 光來,健一
著者(英字)
著者(カナ) コウライ,ケンイチ
標題(和) サーバソフトウェアのための動的なセーフティネットの研究
標題(洋) A Study of a Dynamic Safety Net for Server Software
報告番号 116826
報告番号 甲16826
学位授与日 2002.03.29
学位種別 課程博士
学位種類 博士(理学)
学位記番号 博理第4089号
研究科 理学系研究科
専攻 情報科学専攻
論文審査委員 主査: 東京大学 教授 米澤,明憲
 東京大学 助教授 森下,真一
 東京大学 教授 萩谷,昌己
 東京大学 助教授 石川,裕
 東京大学 教授 平木,敬
内容要旨 要旨を表示する

 ソフトウェア技術の飛躍的な進歩により、ソフトウェアはますます肥大化・複雑化してきている。この流れの中で、ソフトウェアは安全面で2つの大きな問題を抱えている。一つはソフトウェアに対する攻撃である。インターネットを利用するソフトウェアは常にバッファオーバフロー攻撃などの攻撃を受ける危険にさらされている。一旦攻撃に成功すると、攻撃者は犠牲となったソフトウェアの持つ権限を悪用することができる。このような攻撃を防ぐために様々な手法が提案されているが、多くの手法はまだ知られていない新しい攻撃を防ぐことができない。

 ソフトウェアが抱えるもう一つの問題は、製品のベータ版や一部のフリーソフトのように不安定なソフトウェアが存在することである。不安定なソフトウェアはその内部にデータのチェックの不備などのエラーの引き金を持っており、いくつかの条件が満たされるとその引き金が引かれる。ソフトウェアが内部エラーの引き金を引いてしまうと、そのソフトウェアの権限の範囲内で何が起こるか分からない。プログラミング言語やコンパイラのサポートによりこのようなエラーの発生を減らすことはできるが、全てのエラーを取り除くのは難しい。

 攻撃と不安定化の主な原因はソフトウェアの不具合である。攻撃は普通のユーザが使っていると表面化しない隠れた不具合を利用する。逆に、不安定化は普通のユーザが使っていても特定の条件で表面化する。ソフトウェアの不具合には実装上の問題と設計上のミスがある。実装上の問題は比較的検出しやすいので様々な手法が提案されているが、それでもなお数多くのソフトウェアに未知の不具合が残されている。また、プログラマはよく設計上のミスを犯すが、この種の不具合を自動的に検出するのは難しい。

 そのため、万一ソフトウェアが不具合のせいで異常な動作をした場合でも、被害を最小に抑えることができる機構が必要とされる。この機構をセーフティネットと呼ぶ。セーフティネットはこのような場合に被害が外に拡がるのを防止する。たとえソフトウェアが攻撃を受けたとしても、攻撃者はセーフティネットの範囲を越えて保護されている資源にアクセスすることはできない。同様に、不安定なソフトウェアがセーフティネットの外の他のソフトウェアを不安定にすることもない。現在、既に様々なセーフティネットが提案され、実際に利用されている。

動機

 本論文は特にサーバソフトウェアのためのセーフティネットに焦点を当てる。サーバソフトウェアのためのセーフティネットを構築するにあたって2つの障害がある。(1)サーバソフトウェアは常に動いていて、同時に様々なユーザからの要求を処理しなければならないので、それぞれのユーザ毎に異なるセーフティネットが必要となる。(2)サーバソフトウェアは安全性と同時に十分な性能も実現しなければならないが、その両方を満たすのは難しい。これらの2つの障害を克服するには、サーバソフトウェアが動的にそのセーフティネットの範囲を変更できる動的なセーフティネットが不可欠である。

 ウェブサーバのようなユーザレベル・サーバはクライアントに応じてセーフティネットの範囲を変更するべきである。ユーザレベル・サーバにとっては悪意を持ったクライアントからの攻撃が最大の脅威だからである。しかしながら、サーバにこのような機能を提供すると攻撃者も悪用することができるので、セキュリティ上危険である。万一サーバが乗っ取られた場合、攻撃者はセーフティネットの範囲が最大になるように変更することにより、セーフティネットを無力化することができる。また、トロイの木馬がサーバに送り込まれ、サーバがセーフティネットの範囲を変更した後でそのコードが実行された場合、送り込まれたトロイの木馬は適切でないセーフティネットの中で実行される可能性がある。システムが正常なサーバだけにセーフティネットの変更を許すようにすればこの危険性を回避できるが、サーバが攻撃されているかどうかを判断するのは容易ではない。

 一方、サーバ専用のファイルシステムのようなオペレーティング・システム(OS)のモジュールは、そのセーフティネットの範囲を安定性に応じて変更するのが望ましい。OSモジュールが直接攻撃を受けることは少ないので、誤動作への対処の方が重要になる。そのためには、OSモジュールの安定性に応じて性能と安全性の適切なトレードオフを取れるようにする必要があるが、従来のシステムのほとんどはそのようには設計されていない。適切なトレードオフが取れるシステムを設計するにあたって、トレードオフの変更はユーザに意識させずに行えることが要求される。加えて、トレードオフを変更する機構がモジュールの性能を低下させないことも重要である。モジュールを範囲の最も広いセーフティネットの中で動かせば、セーフティネットを使わないモジュールと性能がほとんど等しくなるべきである。

アプローチ

 本論文ではこのような動的なセーフティネットを提供するシステムについて述べる。このシステムはユーザレベル・サーバのためのアクセス制御機構とOSモジュールのための保護機構からなる。開発したアクセス制御機構はクライアントとクライアントからの要求の内容に応じたアクセス制限によって、動的なセーフティネットを実現する。この機構を使って、サーバプロセスはクライアントからの要求を処理している間、そのクライアントに合ったアクセス制限を自分自身にかけることができる。

 このアクセス制御機構の特徴はサーバプロセスが動的にアクセス制限を変更することを許している点である。サーバプロセスがアクセス制限を弱めるときに伴う危険を避けるため、この機構はアクセス制限を弱める前にプロセスをクリーンにし、送り込まれているかもしれない悪意あるコードを除去する(図1)。これをプロセスクリーニングと呼ぶ。プロセスクリーニングを行うために、OSはサーバが攻撃される前のサーバプロセスの状態を保存しておく。そしてアクセス制限を解除する時には保存しておいた状態を復元し、攻撃者によってなされている可能性がある変更を元に戻す。復元される状態はプロセスの制御やメモリイメージなどである。

 プロセスクリーニングは攻撃者が許可されていない権限を手に入れるのを防ぐ。乗っ取られたサーバが高い権限を手に入れるためにアクセス制限を解除しようとしても、プロセスクリーニングによりサーバはプロセスの制御を取り戻すことができる。攻撃者はプロセスの制御を保ったまま、アクセス制限を解除することはできない。また、アクセス制限の解除後に実行する目的でトロイの木馬としてのコードがサーバプロセスに送り込まれていても、アクセス制限を解除する時にプロセスクリーニングによってメモリから除去される。

 一方、開発した保護機構はデフォルトでOSモジュールを最も狭いセーフティネットの中で動かし、モジュールとOSカーネルの間のインタフェースを厳しく制限する。それぞれのOSモジュールはOSカーネル、他のOSモジュールやユーザレベル・プロセスから切り離され、OSモジュールの異常な動作がシステムの他の部分に影響を及ぼすことはない。例えば、OSモジュールはユーザレベル・プロセスとして動かされ、そのOSモジュールに必須のカーネルの機能だけを使うことが許される。

 動的なセーフティネットを実現するために、開発した保護機構はユーザがOSモジュールの安定度に応じて保護レベルを変更することを可能にしている(図2)。これをマルチレベル・プロテクションと呼ぶ。マルチレベル・プロテクションはOSモジュールに様々な保護レベルを提供しており、それぞれの保護レベルは検出・回復できるエラーの種類が異なる。マルチレベル・プロテクションは様々な保護レベルを実現するために、アドレス空間の切替やカーネルデータの複製などの様々な保護技術を用いる。例えば、OSモジュールを異なるアドレス空間に配置することにより、メモリアクセス違反を検出することができる。

 保護レベルはOSモジュール毎に提供されている保護マネージャを交換することによって変更することができる。保護マネージャはカーネルとOSモジュールの間の中継器の役割を果し、それらの間の相互の呼び出しを中継する。その時に様々な保護技術を用いて、カーネルをOSモジュールの誤動作から保護する。また、様々な保護レベルを実現している全ての保護マネージャが、OSモジュールに対して共通のアプリケーション・プログラミング・インタフェース(API)を提供している。そのため、保護レベルを変更する際にモジュールへの変更は全く必要ない。

実験

 我々は開発したアクセス制御機構をLinux上に実装し、Apacheウェブサーバにおけるプロセスクリーニングのオーバヘッドは最大で35%であることを確かめた。また、我々のアプローチと同様にアクセス制限を安全に解除することができる従来のfork-join法と比べると、平均で45%高速化することができた。また、開発した保護機構をNetBSD上に実装し、我々が作成したファイルシステムとネットワーク・サブシステムのOSモジュールを使って実験を行った。その結果、最大の保護レベルで動かすと現実的なアプリケーションで最大75%程度のオーバヘッドがかかることが分かった。一方で、最小の保護レベルで動かした場合は、マイクロベンチマークでも最大で12%程度しかオーバヘッドがかからないことが分かった。

図1:プロセスクリーニングによるプロセスの健全化

図2:マルチレベル・プロテクションの取るトレードオフ

審査要旨 要旨を表示する

 近年のソフトウェアの複雑化・肥大化に伴い、ソフトウェアはインターネットからの攻撃や不安定なソフトウェアの存在などの安全面における問題を抱えている。これらの問題の主な原因はソフトウェアの不具合であるが、現状ではソフトウェアから全ての不具合を除去するのは難しい。そのため、万一不具合のせいでソフトウェアが異常な動作をした場合でも被害をできるだけ抑えることができるセーフティネットが利用されてきている。セーフティネットとはソフトウェアの異常な動作を検出するための防衛ラインである。不具合の被害を常に最小に抑えるには、サーバを利用するクライアントやオペレーティングシステム(OS)モジュールの安定度に応じて、セーフティネットの適用範囲が変更可能であるのが望ましい。しかし、セーフティネットの適用範囲を動的に変更するには、安全性や性能の点で問題があった。本研究では、OSのサポートにより安全に、かつ、性能をできるだけ犠牲にせずに、セーフティネットの適用範囲を変更できるシステムを設計し実装することを目標としている。この主題の設定は、学位論文の主題として十分かつ妥当であると認められる。

 本論文は6つの章からなる。第1章は序論であり、本論文の研究の動機について論じている。

 第2章は動的なセーフティネットを実現するための問題について、従来の研究をサーベイするとともに、詳しい分析を行っている。本研究では、クライアントに応じてサーバのセーフティネットを変更する場合と、OSモジュールの安定度に応じてセーフティネットを変更する場合を対象としている。クライアントに応じたセーフティネットの変更は、万一攻撃された場合でも常に被害を最小に抑えるのに役立つ。しかし、乗っ取られたサーバにセーフティネットの変更を許してしまうと危険である。一方、OSモジュールの安定度に応じたセーフティネットの変更は、安全性と性能のトレードオフを取ることを可能にする。しかし、この変更をユーザに透過にし、かつ、性能を犠牲にしないようにするのは容易ではない。それぞれの動的なセーフティネットの実現方法について以下の3章と4章で説明している。

 第3章ではサーバプロセスに対して動的なセーフティネットを実現するためのアクセス制御機構について述べている。サーバプロセスにアクセス制限の変更を許すために、サーバプロセスから攻撃の影響を除去するプロセスクリーニングという手法を提案している。この手法を用いることにより、セーフティネットの範囲を動的に変更する場合の安全性を確保している。また、クライアントを正しく判定し、サーバに適切なアクセス制限をかけられるようにするために、クライアントの行動の追跡や、ネットワークレベルでのユーザ認証を行っている。

 第4章ではOSモジュールに対して動的なセーフティネットを実現するための保護機構について述べている。OSモジュールの安定度に応じた保護レベルの変更を許すために、マルチレベル・プロテクションという機構を提案している。この機構はOSモジュールに変更を加えることなく保護レベルを変更することを可能にしている。さらに、保護レベルを最小にした時に余分なオーバヘッドがかからないように注意深くシステムを設計することにより、性能が犠牲にならないようにしている。

 第5章では3章と4章で述べたシステムの性能を測定し、実験結果についての考察を行っている。まず、安全にサーバのアクセス制限の変更を行うために使われるプロセスクリーニングのオーバヘッドを、ウェブサーバを対象にして測定している。その結果、従来の手法を用いるより高速化できていることが示されている。次に、作成したOSモジュールについてマルチレベル・プロテクションを用いることにより、安全性と性能のトレードオフが取れていることを示している。

 第6章は論文全体の内容をまとめ、今後の研究課題について論じている。本論文の成果は、性能について十分考慮した上で動的なセーフティネットを実現した点にあることが述べられている。さらに、より粒度の細かい処理が要求されるミドルウェアへのプロセスクリーニングの適用、およびマルチレベル・プロテクションにおける保護レベルの変更の指針について議論されている。

 本学位論文は、ソフトウェアの安全面での問題を緩和するために、動的なセーフティネットの設計と実装方法について提案したものであり、安全性と性能の点からその有用性を検証している。性能をできるだけ低下させずに、状況に応じて適切なセーフティネットを構築することを可能にした点で、今後の関連分野の研究に寄与するところ大であると認められる。

 なお、本論文の内容の一部は、千葉滋・益田隆司との共同研究であるが、論文提出者が主体となって研究および開発を行なったもので、論文提出者の寄与が十分であると判断する。

 したがって、博士(理学)の学位を授与できると認める。

UTokyo Repositoryリンク