アーカイブ
第5章 1.Webサーバからのファイル流出対策
公開日:2007年6月28日
独立行政法人情報処理推進機構
セキュリティセンター
本ページの情報は2007年6月時点のものです。
記載の資料は資料公開当時のもので、現在は公開されていないものも含みます。
Webサーバコンピュータ上の本来保護されるべき重要なファイルの内容を、インターネット越しに容易に読み出せる場合がある。
このファイル流出の問題は、Webサーバのファイル公開機能によりファイルが漏れ出す「Webサーバからのファイル流出」と、Webアプリケーションプログラムのディレクトリトラバーサル脆弱性等によって起こる「プログラムからのファイル流出」のふたつに分けられる。ここでは前者について説明する。また、後者については、次の記事において説明する。
Webサーバからのファイル流出は、さらに「データファイルの誤った公開」と「Webプログラムソースコードの流出」のふたつに分かれる。
データファイルの誤った公開
データファイルの誤った公開は、個人情報を含む顧客リスト等の重要なデータファイルをWeb公開領域に誤って設置してしまう問題である。この問題が生じる要因として次が想定される。
- 要因 1
Webアプリケーションの設計時に問題があると意識せずに公開領域に重要なファイルを置く設計を行った。あるいは、Webプログラムの実装時にプログラマの裁量で重要なファイルの置き場所を決めたが、それがWeb公開領域であった - 要因 2
画像、文書、表計算ワークシート等、ファイルの形をしたコンテンツであって、特定のユーザのみに開示すべきものを、ファイルの形のままWeb公開領域に配置した - 要因 3
Webサーバコンピュータの運用時に、誤って重要なファイルのバックアップコピーをWeb公開領域に置いたままにした
-
図5-1: データファイルの誤った公開
このような脆弱性要因が生じないようにするためには、次の対策を講じる。
- 対策 1
重要なファイルはWebサーバ公開領域に置かない設計・実装・設定を行う。[要因 1] - 対策 2
特定のユーザのみに開示すべきコンテンツは、それがファイルの形で存在したとしても、アクセス制御ロジックをもつプログラムを通じて提供するよう、設計・実装する。 [要因 2] - 対策 3
一時的バックアップコピーの制限。本番運用しているWebサーバ上に重要なファイルの一時的バックアップコピーを作らないようにする。 [要因 3] - 対策 4
初期設定ならびに運用時、あらかじめリストに掲載されているもの以外のファイルをWeb公開領域に置かないようにする。違反がないか、シェルスクリプト等を用いて定期的に検査することも、ひとつの方法である。 [要因 1, 要因 2, 要因 3]
Webプログラムソースコードの流出
JSP、Perl、PHP等、スクリプトの形で記述されるWebアプリケーションプログラムの場合、これらのソースコードが誤ってWebサーバコンピュータから流出することがある。その要因として次が想定される。
- 要因 4
include, require, use等の命令で取り込むためのインクルードファイル名に「.inc」「.pm」等、標準ではWebサーバ(ソフトウェア)やWebアプリケーションサーバがスクリプトとして認識しない拡張子をもたせている。これらのインクルードファイルはURLさえ見当がつけばインターネットから閲覧できるおそれがある - 要因 5
Webアプリケーションの修正を行った際ソースコードのバックアップ・ファイルが作られて、それがWebサーバコンピュータ上に放置されている。プログラマが意図的に旧バージョンの写しを作る場合と、テキストエディタが自動でバックアップファイルを作ってしまう場合の 2通りがあり得る
これらの要因が生じないようにするには、次の対策を講じることになる。
- 対策 5
標準的な拡張子の使用。インクルードファイルに与える拡張子には、スクリプトの標準的な拡張子(PHPであれば.php等)を用いる。非標準の拡張子(.inc、.pm等)を用いない [要因 4] - 対策 6
非標準拡張子の動作の定義。インクルードファイルに .inc のような標準では動作が定義されていない拡張子を与えるのであれば、WebサーバもしくはWebアプリケーションサーバにおいて、この拡張子をもつファイルの内容をブラウザに開示するのではなくスクリプトとして処理するよう定義する [要因 5] - 対策 7
プログラム保守の制限。本番運用している WebサーバコンピュータにおいてWebアプリケーションプログラムの修正を行わないようにする。別のコンピュータで動作確認を済ませてから必要なもののみファイルの入れ替えを行う[要因 5]
厳格なアクセス許可設定
Webサーバからのファイル流出に関する共通の対策として、プログラムのソースコード上の論点ではないが、厳格なアクセス許可設定が挙げられる。これは、次の要領でアクセス許可を設定することによりファイルが Webサーバ外から読み出されることを避けるものである。
- 対策 8
厳格なアクセス許可設定。次のように設定する。
- Webサーバ(ソフトウェア)、Webアプリケーションサーバ、およびそれらの配下で動作するWebアプリケーションプログラムのすべてを権限の小さなアカウントで稼働させる。システム管理者あるいはシステムそのもののアカウントでは稼働させない
- Webサーバコンピュータ内のすべてのファイルには、次のものを除き、Webサーバ(ソフトウェア)、Webアプリケーションサーバ、Webアプリケーションプログラムのそれぞれのアカウントからのアクセスを一切許さない設定を施す
- Web公開領域上で一般に公開するファイル。これらには、Webサーバ(ソフトウェア)のアカウントに対し読み出し許可を与える
- Webプログラムが内容を読み取る必要のあるファイル。これらには、Webアプリケーションプログラムのアカウントに対し読み出し許可を与える
- Webサーバ、Webアプリケーションサーバの諸設定ファイル。これらにはWebサーバ、Webアプリケーションサーバのアカウントに対する読み出し許可をそれぞれ与える
対策と開発フェーズ
ファイル流出の対策は、Webアプリケーション設計、プログラム実装、サーバ設定、および運用の 4つのソフトウェア開発フェーズに対し、次のように関連する。
凡例: ◎ 大きな関連がある △ 関連がある ─ 関連がない
| 対策1 |
設計 ◎、実装 △、設定 ◎、運用 ─ |
|---|---|
| 対策2 |
設計 ◎、実装 ◎、設定 △、運用 ─ |
| 対策3 |
設計 ─、実装 ─、設定 ─、運用 ◎ |
| 対策4 |
設計 △、実装 ─、設定 △、運用 ◎ |
| 対策5 |
設計 ◎、実装 ─、設定 △、運用 ─ |
| 対策6 |
設計 △、実装 ─、設定 ◎、運用 ─ |
| 対策7 |
設計 ─、実装 ─、設定 ─、運用 ◎ |
| 対策8 |
設計 △、実装 △、設定 ◎、運用 △ |
対策と開発フェーズの関連図