ディレクトリリスティングを無効にしよう。ApacheWEBサーバー脆弱性
ディレクトリリスティングとはApacheなどのWEBサーバーの持つ本来の設定(脆弱性)です。
「/」などのURLで指定した場合、indexファイルが無いと指定ディレクトリ内の項目を第三者に見られてしまいます。
無効にするにはApacheのhttpd.confを設定するか.htaccessでアクセス拒否できます。
ディレクトリリスティングとは
ApacheのWEBサーバーが持つ便利な機能の1つとしてディレクトリリスティング(DirectoryIndex)という機能があります。
サーバーのディレクトリ内にあるデータファイルを「一覧リスト」として表示する機能ですね。
この機能が悪用されると、WEBサイト内の隠されたファイルや個人情報が他人に読み取られてしまう可能性があります。
本記事ではディレクトリリスティングの危険性と対策方法について解説します。
サイト制作環境の変化で重要視されなくなった
今現在中小規模でWEBサイトを作る場合には、Wordpressシステムを使ったサイト制作が大部分となっていますね。
Wordpressは基本的にディレクトリリスティングを考慮した仕組みになっているので、今回の危険性を考慮する事はあまり無いかも知れません。
しかしそれより前、HTMLファイルによるWEBサイト構築をしていた頃は、各ディレクトリ内にindexと名の付くファイルを必ず置く様にしていました。
必ずindexファイルを置く癖をつけていた
新しい区画を作る場合は必ず区画内TOPの位置づけで、例え中に何も書かれていなくてもindex.htmlあるいはindex.phpのファイルを置くルールでした。
そうしないとディレクトリリスティング機能により区画内のファイル一覧が表示されてしまうからでした。
便利な機能というよりも余計なファイル一覧を見せないため、という主旨が強かったですね。
ディレクトリリスティングの仕組み
繰り返しになりますがディレクトリリスティングは「/」で終わるURLを指定すると、最後のディレクトリ内ファイル一覧を表示するWEBサーバー(ApacheやIIS) の機能です。
Apacheの設定ファイルに「Directory Index」という項目があり、ファイルをインデックス(項目一覧表示)する機能が搭載されているのです。
大まかな2つの機能
Apacheの「Directory Index」設定には大きく2つあります。
アドレスを「/」で終わるURLで指定する事で、以下のディレクトリリスティングの機能が働きます。
・indexの名前の付いたファイルがあれば表示する
・indexの名前が無かった場合は区画内に存在するファイルの一覧を表示する
※「index」とは本来「項目一覧」の意味ですからね
ファイル名の記載を省略できるメリット
このディレクトリリスティングの機能は本来は便利な機能です。
例えばURLを指定する時
https://llpeg.info/index.html
と最後まで書かなくても
https://llpeg.info/
とだけ書けば、自動的にindex.htmlかindex.phpのファイルが映る様になるのですからね。
これはWEBの世界では一般認識された機能であり、名刺などでも長々とURLを書かずに済みます。
※これはindexというファイルの場合に有効です。それ以外の場合はURLにそのファイル名を記載する必要があります。
indexとなるファイルには優先順位がある
アクセスされたディレクトリ内にindex.htmlがあればそのページが自動で表示されます。
この時例えばindex.htmlではなくindex.phpが存在していた場合はそちらが表示されます。
優先順位としてはindex.htmlの方が高いので、htmlとphpの両方が存在する場合は、index.htmlの方が表示される訳ですね。
ディレクトリリスティングのデメリット
indexファイルがある場合
例えば下記URLのtestディレクトリ内にindexファイルがある場合、そのファイルを表示させます。
URL:https://llpeg.info/test/
上記のようにURLを打つと
https://llpeg.info/test/index.html
管理者が用意したindex.htmlのファイル内容が表示されます(index.phpでも同様)。
indexファイルが無い場合
仮にtestディレクトリ内にindexファイルが無い場合、下図のようにファイル一覧が表示されます。
中に入っているファイル一覧が表示されます。
この様にディレクトリリスティングされた時にindex等のファイルが置かれていないと、ファイル全容が第三者に知られてしまうのです。
ディレクトリリスティングの被害
ディレクトリのファイル一覧が表示されてしまうと、どのような問題が出てくるのでしょうか。
ディレクトリのファイル一覧を見れるという事は、どんなファイル名があるかがわかりますよね
例えば画像ファイル様な見られても問題がなく重要度も低いものならば問題はないでしょう。
しかしログインパスワードなど重要な個人情報が記載されているファイルの場合、その中身を見られてしまう事になります。
一覧(ファイル名)が見えればそれぞれにアクセスできる
区画内にどのようなファイルがあるのかがわかったら、当然一つずつそのファイルURLを手打ちして表示する事ができます。
これにより普段見せるつもりの無いファイル内データを閲覧されてしまうのです。
WEBサーバーは命令された事には素直に従う癖があるからですね。
公開ファイル以外の存在は知られない様にするべき
このような事にならない様に、WEBサイトは通常公開ファイル部分のみをリンクでつないでサイト構造を実現しています。
逆に言えばそれ以外の裏方ファイルをユーザーに見せない様にしている訳です。
TVドラマや舞台でも画面枠外・舞台袖の部分を見せたりしませんよね。それと同じです。
特にWEBサーバーの場合はTVや舞台と違って、正確なURLを打てば裏方ファイルを見る事ができる危険な環境なのです。
過去にディレクトリリスティングされて個人情報が漏えいしてしまった被害事例もあります。
ディレクトリリスティングの対策
まず基本は、Apacheのディレクトリリスティング機能自体を無効にする事でしょう。
無効にするためには主に2つの方法があります。
・httpd_confファイルを編集する
・.htaccessファイルを設定する
httpd.confファイルを編集する
Apacheの設定ファイル(/usr/local/conf/httpd.confなど)をエディタで開きます。
記載された下記コードの中にある「Indexes」の部分を削除すると、一覧リストを表示する機能が停止します。
httpd.conf編集前
<Directory "/var/www/subs"> Options MultiViews Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all
httpd.conf編集後
<Directory "/var/www/subs"> Options MultiViews FollowSymLinks AllowOverride None Order allow,deny Allow from all
2行目のMultiViewsの欄を探し、その中の「Indexes」の単語だけ消す事になります。
こうすればそのWEBサイト内全域でファイル一覧を表示する機能が効かなくなります。
※このコード表記は複数個所あるので、全箇所削除する必要があります。
下図のようにディレクトリの表示が拒否(アクセス禁止)されるようになります。
.htaccess でファイルの一覧表示を制御する
もう一つが.htaccessでアクセス制限をする方法です。
「サイト全体」でアクセス制限をしたい場合には、ドキュメントルートにアクセス制限を記述した.htaccessファイルを配置します。
特定のディレクトリだけファイル一覧表示をさせたくないような場合は、そのフォルダ内に.htaccessファイルを別途置く事になります。
.htaccessの特徴
基本的に上位の階層ディレクトリに配置した.htaccessの設定は、下位の階層ディレクトリ内も全て反映されます。
下位ディレクトリに上位階層のディレクトリとは別の.htaccessがあれば、下位ディレクトリの.htaccessの設定が優先されます。
※.htaccessが使えるようにするためには、httpd.confのAllowOverrideで許可する必要があります。
.htaccessの設定方法
Options -Indexes ##一覧表示を禁止する場合 Options Indexes ##一覧表示を許可する場合
.htaccess内に上記1行を追記するだけです。
他にいろいろ記載をしている場合も気にせずに1行追加して下さい。
レンタルサーバー側で既にアクセス禁止されている場合
これまでApacheやhtaccessで設定をする対策を説明しましたが、最近のレンタルサーバーでは既に「設定済み」となっている事が多いと思います。
「403エラー」によるアクセス禁止が表示される場合ですね。
indexファイルが存在しない場合のアクセス拒否
このように最近のサーバーは管理者がうっかりindexファイルを置かなかった場合を想定して、あらかじめアクセス拒否設定がされています。
ただ本当にアクセス拒否しているかどうかのテストチェックはしておくべきでしょう。
ファイルリスト攻撃をどう防ぐか
こういったディレクトリリスティングを防ぐためには、攻撃側である「敵を知る事」も重要です。
今回紹介した方法でディレクトリリスティングを無効化していても、ファイル名を直接指定すればファイルが閲覧できる事は変わりありません。
一覧が見えないだけで一つ一つあたりを付けてファイル名を打っていけば、いつかは到達する事になりますよね。
重要な機密情報ファイル・不要ファイルを置かない
前述したようにWEBサーバーは、「ファイル名さえ正しければ中身を見られてしまう」というリスクを持っています。
中には想定される中身や付けられやすいファイル名を予測して、総当たり攻撃を掛ける攻撃者もいます。
※当然手作業ではなくツールを使った機械的なアプローチですので、瞬間的に大量のパターンが試行できます。
ですのでサーバーの公開ディレクトリには重要な機密情報を含むものや、不要なファイルを置かないようにしましょう。
ファイル名突破防止のポイント
・公開ディレクトリに重要なファイルは置かない事
・ファイル名は想定されにくいような名前にする事
・ディレクトリ内にサブディレクトリを入れて攪乱する
サブディレクトリによる防止
上記のポイントの3つ目にある「サブディレクトリを入れた攪乱」は有効です。
とある区画の中のファイルの存在を知ろうと総当たりを仕掛けたとしても、その中にさらにディレクトリがあれば、突破難易度は各段に上がります。
このように間にディレクトリを挟めば、contentsの次が直接ファイルなのかさらにディレクトリがあるのかまで、外からはわかりません。
こうすれば簡単には突き止められないので有効な手段と言えるでしょう。
Googleハッキングに注意
グーグルハッキングはグーグルドーキングとも呼ばれ、グーグルの高度な検索技術を利用した攻撃者の情報収集技術を指しています。
ハッキング向けの特殊検索クエリを使用して、WEBアプリケーションのセキュリティの脆弱性を検索特定するものです。
検索クエリ例
一つ例を挙げると、ディレクトリリスティングの不備があり一覧を表示してしまうWEBページは一つの癖を出します。
それがタイトルタグに「Index of~」というテキストが表示される事です。
Googleはどのようなページも制限がない限りは情報をインデックス収集しますから、この様なページも収集します。
これを悪用して「index of」で検索を掛けてディレクトリリスティングの不備がある先を調べるのです。
intitle:"Index of" inurl:"aaa.com"
上記はaaa.comWEBサイトの中で「Index of」で始まるページを検索しています。
これが仮にヒットすれば、indexファイルが置かれておらず項目一覧が表示されているページがaaa.comの中に存在する事を示しています。
高度な検索オプションを利用
・「intitle:」…ページのタイトル部分にある文字列に絞って検索を行うオプション
・「inurl:」…URLの中にある文字列を検索対象とするオプション
脆弱性サイトが吐き出すエラー表示には様々ある
攻撃者は高度な検索文字列を使い、WEBアプリケーションの脆弱性のあるバージョンや特定のファイルタイプ(.pwdや.sql)に絞り込んで検索します。
WEBサイトの様々なエラーページを収集する事で、パスワード情報およびその他の機密データを盗める可能性のあるURLが発見されます。
その数こそ少ないものの、Google検索によって「脆弱性サイトのリスト化」がされてしまうのです。
まさに高齢者の住まいの電話名簿と同じですね。
このようにして作成した「WEBサイトリスト」を他社に提供・販売する攻撃者さえいるのです。
まとめ:WEBサイトだけの脅威ではない
ここまでディレクトリリスティングの仕組みと対策をご紹介しました。
本記事の性質上、WEBサーバーApacheに焦点を当てた紹介になってしまいましたが、この件はWEBサイトだけに起こるものではありません。
ネットワーク端末やゲーム機器などは設定・管理画面にWEBブラウザで操作するインターフェイスを備えているものがあります。
中にはApacheをベースに開発されているものもあり、これらもWEBサーバーとして動作しているのですね。
LoTにもディレクトリリスティングの危険が
という事は本記事で紹介したような、ディレクトリや情報格納するフォルダの脆弱性がその機器に存在している場合があり得るのです。
ディレクトリリスティングの餌食になり、ファイルの中身を第三者に見られてしまうと致命的です。
世界ではルーターなどの端末に入っているパスワード等のデータ情報がハッキングされて、端末自体が乗っ取りに遭う事件が頻発しています。
セキュリティ自衛の心がけ
このディレクトリリスティングはWAFやウイルスソフトで防げる類のものではなく、ご自身の危機意識のみが唯一の手立てとなります。
デバイス危機は設定変更によってこのようなハッキングを回避できる場合が多いので、開発元に問い合わせるかご自身で機器自体へのアクセス制御を行いましょう。
そしてWEBサイトの管理者の方は今一度サーバーの設定を確認しておいてください。