第4回 Apacheセキュリティチェック、PCI DSSの場合


川島 祐樹
NTTデータ・セキュリティ株式会社
コンサルティング本部 PCI推進室
CISSP

2008/12/1

 サーバ全体設定の確認

 上記、プロセス情報やバイナリから得られた情報から正確に設定ファイルを識別し、その内容を確認します。各項目について確認する際の観点はずばり「カード会員データの漏えいにつながるか?」です。

 設定ファイルはすべての内容を確認し、不明点があれば担当者の方に質問することになります。httpd.confで設定できる項目は膨大です。すべてここで取り上げることは難しいですから、いくつかの例を挙げたいと思います。

 まずはApacheサーバ全体の設定を確認しましょう。

ServerTokens OS
ServerSignature On

ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 120
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
リスト4 Apacheの設定を確認する

 ServerTokensやServerSignatureなどは、バージョン情報の見せ方の設定ですので、攻撃者に情報を与えてしまうことから、「セキュリティ上」はProd、およびOffにするのが望ましいですが、PCI DSS準拠という観点で「カード会員データの漏えいにつながる」とはいいがたいため、指摘となることはまずないでしょう。これ以外のKeepAlive関連のパラメータはパフォーマンスの設定ですから、それほど細かくは確認しません。

【関連記事】
セキュリティ対策の「ある視点」
第1回 たった2行でできるWebサーバ防御の「心理戦」

http://www.atmarkit.co.jp/fsecurity/rensai/view01/view01.html

 実行ユーザーの設定を見る

 実行ユーザーとグループの設定がrootになっていることはまずありませんので、ここでは実行されているプロセスと同一になっているかどうかを確認します。

User wwwrun
Group www
リスト5 実行ユーザー設定

 これは要件A.1.2.c.「いかなるアプリケーションプロセスのユーザーIDも、特権ユーザー(root/admin)ではないことを確認する」の確認事項でもあります。先ほどプロセス一覧(psコマンド)で確認したユーザーと異なる場合、Apache起動後に設定ファイルが変更されていることも考えられますので、変更管理の手順が適切に実施されていない可能性があります。そのような場合はインタビューや文書確認で、なぜプロセス一覧のユーザーと設定ファイル上のユーザーが異なるのかを確認することになるでしょう。

 ロードモジュールを確認する

 読み込まれるモジュールは、必要最小限である必要があります。すべてのモジュールがどのような機能を持っているのかを調査するのは時間がかかるかもしれませんが、必ず実施する必要があります。リスト6は、rpmでインストールした際にデフォルトで読み込まれるモジュールです。ここですべて説明することはできませんが、リスト6に表示したすべてのモジュールが読み込まれているのであれば、指摘事項は1つ、「必要のないモジュールをロードしないようにしてください」となります。

 この項目は、要件2.2.4「システムコンポーネントのサンプルを選択し、不要な機能(スクリプト、ドライバ、機能、サブシステム、ファイルシステムなど)がすべて取り除かれていることを確認する」に対応するためのものです。

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cgi_module modules/mod_cgi.so
リスト6 rpmでインストールされるモジュール一覧

 Proxy、WebDAV、UserDir、CGIモジュールなどは特に注意して確認します。例えば、企業で使用しているのであれば通常WebサーバでWebDAVを使うことはないでしょうし、ユーザーごとにコンテンツを公開していることもないでしょう。また、サーブレットエンジンのフロントエンドで稼働しているようなApacheについては、CGIを使わない場合もあると考えられます。それぞれ、ProxyRequestsやUserDir、ScriptAlias、"AddHandler cgi-script .xxx"などのディレクティブ、ExecCGIオプションも併せて確認します。

 これらのモジュールは、ロードしていても設定によっては無効になったり意味をなさない場合もありますが、その機能を使用しないようにするためには「モジュールはロードしているが設定でオフにしている」場合と「モジュール自体ロードしていない」場合で、どちらが確実であるかは簡単に予測できるはずです。

 さらに、特定のモジュールで有効な脆弱性が発表されるたびに、そのモジュールが読み込まれているかどうか、読み込まれていれば設定上問題があるかないか、問題があれば設定を変更するためのシステム変更手順を実施しなくてはならなくなりますので、運用の手間とコストを考えても不要なモジュールはすべてロードしない設定にするのが最善であるといえるでしょう。

2/3

Index
Apacheセキュリティチェック、PCI DSSの場合
  Page1
稼働プロセスの確認
バージョン、バイナリの確認
Page2
サーバ全体設定の確認
実行ユーザーの設定を見る
ロードモジュールを確認する
  Page3
コンテンツ関連の設定を見る
ログ設定を確認する
環境に合ったセキュリティ対策を


オール・ザッツ・PCI DSS 連載インデックス


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間