目次:
intitle: index of /concrete/passwordで検索されてしまう
Concrete CMS にて会員制サイトを制作させていただき、その後保守をさせていただいているクライアント様から「 Search Consoleから下記のようなメッセージが届いたので、チェックしてほしい」とのご連絡をいただきました。
貴サイトの上位検索クエリの変化 example.com の所有者様 最近、貴サイトへのアクセスに結び付く Google 検索の上位検索クエリに変化が生じたことが、Search Console により検知されました。この変化を把握しておくことは、サイトの所有者の方にとって有用と考えられます。 貴サイトの上位検索クエリの 2024/xx/xxから 2024/xx/xxの週におけるパフォーマンスを以下に示します。 クエリ: intitle: index of /concrete/password 貴サイトの検索クエリ中 1 位 390 回表示 サイトの総表示回数の 42.53%(これまでの週の more than0%) 下記のリンクから、検索における貴サイトのパフォーマンスをより詳しく確認できます
実際にGoogle検索でクエリのとおり検索してみると、Concrete5(Concrete CMS)で構築されているWebサイトにて下記のような画面が表示されるものを検索しているようでした。
検索回数からみて、おそらくbotによる偵察行動でしょう。
どうやらWebサーバーを構成するミドルウェアであるApacheは、デフォルトで上記のようなファイル・フォルダの一覧画面を表示する機能(ディレクトリリスティング機能・AutoIndex機能)がONになっているようでした。
クライアント様サイトも「intitle: index of /concrete/password サイト名」でGoogle検索すると、クエリの階層のファイル一覧画面が検索画面にインデックスされている状態でした。
適切なファイルパーミッションが施されていれば、たとえ上記のようなファイル一覧画面が表示されても機密情報等は何ら閲覧されることはありませんが、ファイル・フォルダ構成によって使用しているConcreteのバージョンを推測されてしまう可能性があるなど、間接的にはセキュリティ上好ましくない機能です。
そこで、Apacheによるファイル一覧が表示されないように設定を変更していきます。
Apacheでindex of/ (ファイル一覧)を表示させない方法
Apacheでindex of/ (ファイル一覧)を表示させない方法には、いくつか方法があることが分かりました。
- 該当の階層に空のindex.htmlを置く
- .htaccessでアクセスを制限
- Apache設定ファイル(httpd.conf)の設定を変更して、ApacheがIndex of/(ファイル一覧)を出力しないようにする
1の方法ですとすべての階層にindex.htmlを設置するのは若干面倒ですし、2の方法も悪くはありませんがルールの記述がやや面倒になりそうと感じました。
そこで王道である3の方法、Apache設定ファイルの設定内容を変更してindex of/(ファイル一覧)を出力しないようにする方法をとります。
Apache2系、かつsnapコマンドでconcreteイメージをインストールしたUbuntuの場合
通常、Apacheの設定ファイルhttpd.confは下記のような場所にあることが多いです。
Fedora Core 3の場合は、/etc/httpd/conf/httpd.conf
@IT:Apacheでファイル一覧を表示させないようにするには
しかし、私のケースではApache2系かつsnapコマンドでconcrete CMSアプリケーションをインストールしたUbuntuという環境でした。
Apache2系ではapache2.confファイルを親として、様々な他設定ファイルが用意されている
Apache2系では、親となるapache2.confファイルが、他の複数の設定ファイルをインクルードして読み込むという形を取っています。
私の場合、 /etc/apache2/apache2.conf に親設定ファイル(apache2.conf)がありました。
apache2.conf設定ファイル内冒頭のコメントには、次のような構成図があります。
# It is split into several files forming the configuration hierarchy outlined
# below, all located in the /etc/apache2/ directory:
#
# /etc/apache2/
# |-- apache2.conf
# | `-- ports.conf
# |-- mods-enabled
# | |-- *.load
# | `-- *.conf
# |-- conf-enabled
# | `-- *.conf
# `-- sites-enabled
# `-- *.conf
同階層にある xxx-enabledフォルダの中に、カテゴリごとに分けて有効になっている設定が保存されているようです。
xxx-availableにはxxx-enabledに書き込みが可能な設定項目が保存されているようです。
Directory > Options からIndexesを削除してディレクトリリスティングを無効化
変更したい内容は下記のような内容。
Directory (中略) Optionsディレクトリに対してのオプションを設定する。
Indexs
セキュリティ面を考慮して、ディレクトリリスティングを無効化する。 無効化するにはOptionsからIndexsを削除する。
Apache2.4に設定しておきたい設定項目 #Linux - Qiita
apache2.confのファイル最後のほうに、下記のような記述がありました。
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
公開Webフォルダとして利用している /var/www/ ディレクトリに関する記述です。
ここの Options Indexes の、Indexes の文字を削除しApacheを再起動させればOKのようです。
(私は設定時、この箇所を見つけることができず下記の設定で解決しました)
mod_autoindex.soをコメントアウトしても解消が可能
「mod_autoindex.so」をapache DSOから削除する「httpd.conf」を編集し、デフォルトで有効になっている「mod_autoindex.so」をコメントアウトします。
「mod_digest.so」のDSOからの削除
#LoadModule autoindex_module libexec/apache/mod_autoindex.so
#AddModule mod_autoindex.c
上記の通り設定が完了したら、設定を反映させるためにapacheを再起動させます。
mod_autoindexについて詳細は mod_autoindex - Apache HTTP サーバ バージョン 2.4 から。
上記設定がありそうな /etc/apache2/mods-enabledへ移動。ファイル一覧に autoindex.confとautoindex.loadというファイルがありました。
LoadModuleに関連のありそうなautoindex.loadを開き、記述されている1行を下記のようにコメントアウトします。
# LoadModule autoindex_module /usr/lib/apache2/modules/mod_autoindex.so
下記のApacheの再起動コマンドを実行。
$ service apache2 restart
これで、検索結果画面に表示されたIndex of/ページにアクセスしても、Not Found(404)エラーが表示されるように設定されました!
検索結果画面からもじきにインデックス消去されるはずです。
Concrete CMSにおいても最低限のセキュリティ対策はやっておこう
Concrete CMS は(プラグインもりもりで会員サイトを開発していくWordPressと比べて)そもそもセキュリティ面には定評のあるCMSです。
しかし、今回のような一般的なWebサーバーに要求されるセキュリティ対策・インフラレベルのセキュリティ対策は別途検討していく必要があるでしょう。
Concrete CMSで最低限必要とされるソフトウェア設定上のセキュリティ対策については 【concrete5】concrete5だったらやってみようセキュリティ対策(初級編) @Meetup Tokyo #19 | PPT の記事が有用です。
この記事の気になる箇所を読み返す:
Category: