第5章 暴露対策
Webサーバからのファイル流出対策
Webサーバコンピュータ上の本来保護されるべき重要なファイルの内容を、インターネット越しに容易に読み出せる場合がある。
このファイル流出の問題は、Webサーバのファイル公開機能によりファイルが漏れ出す「Webサーバからのファイル流出」と、Webアプリケーションプログラムのディレクトリトラバーサル脆弱性等によって起こる「プログラムからのファイル流出」のふたつに分けられる。ここでは前者について説明する。また、後者については、次の記事において説明する。
Webサーバからのファイル流出は、さらに「データファイルの誤った公開」と「Webプログラムソースコードの流出」のふたつに分かれる。
このファイル流出の問題は、Webサーバのファイル公開機能によりファイルが漏れ出す「Webサーバからのファイル流出」と、Webアプリケーションプログラムのディレクトリトラバーサル脆弱性等によって起こる「プログラムからのファイル流出」のふたつに分けられる。ここでは前者について説明する。また、後者については、次の記事において説明する。
Webサーバからのファイル流出は、さらに「データファイルの誤った公開」と「Webプログラムソースコードの流出」のふたつに分かれる。
データファイルの誤った公開
データファイルの誤った公開は、個人情報を含む顧客リスト等の重要なデータファイルをWeb公開領域に誤って設置してしまう問題である。この問題が生じる要因として次が想定される。
- 要因1
Webアプリケーションの設計時に問題があると意識せずに公開領域に重要なファイルを置く設計を行った。あるいは、Webプログラムの実装時にプログラマの裁量で重要なファイルの置き場所を決めたが、それがWeb公開領域であった - 要因2
画像、文書、表計算ワークシート等、ファイルの形をしたコンテンツであって、特定のユーザのみに開示すべきものを、ファイルの形のままWeb公開領域に配置した - 要因3
Webサーバコンピュータの運用時に、誤って重要なファイルのバックアップコピーをWeb公開領域に置いたままにした

図15:データファイルの誤った公開
このような脆弱性要因が生じないようにするためには、次の対策を講じる。
- 対策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 | △ | △ | ◎ | △ |
凡例: ◎ 大きな関連がある △ 関連がある ─ 関連がない