XAMMPでWEBサーバーを立てる機会があったので、 セキュリティについて調べました。
※以下のQiita記事を基に、適用されている作業の中身を独自で調べ直したものになります。
最低限の知識はあるつもりですが(実は情報セキュリティスペシャリスト所持)、 あくまでネット上の情報をまとめただけです。 以下に記載された情報を基にされた作業に関して一切責任を持ちません。
条件
- Win10 64bit
- XAMMP 7.2.7 (PHPのバージョンと同じ)
設定ファイル
超雑に調べた
- httpd.conf (Apacheのhttp(デフォルトポート80)へのアクセスの設定)
- httpd-ssl.conf (Apacheのhttps(デフォルトポート443)へのアクセスの設定)
- httpd-xammp.conf (PHP関連の設定がされている?PHPのバージョンを変更する際にここを編集するみたい)
- php.ini (PHP自体の設定)
- config.inc.php (phpMyAdmin(ブラウザからサーバー設定できるサイト)の設定ファイル)
対策
NW設定
特定のIP、セグメント、ポートからしか見る必要がない場合、設定しておいた方が無難。
httpd.confの設定では、ディレクトリ、ファイル単位で、許可/拒否 制御することが可能。
ファイル一覧出力の禁止
閲覧者(攻撃者含む)に対して余計な情報を与えないようにする。
隠してしまうほうが良い
↓
バージョン情報の隠ぺい
バージョンが分かると、「この攻撃方法はまだ対策されてないな」と攻撃者に情報を与えてしまう。
隠してしまう方がよいと私は思っています(賛否両論あり)
↓
httpoxy対策
httpoxy は脆弱性の名前
HTTPリスエストのヘッダの一つにPROXY
がある。
脆弱性があるサーバーは、リクエストヘッダの情報を、(環境)変数に入れてしまう。
PROXY情報は通常クライアント側からはアクセスできないが、設定できてしまう。 これにより、不正なプロキシサーバーを設定して、そのサーバーに情報を流し続ける、ということができてしまう
クリックジャギング対策
正常なWEBサイトを、iframeから呼び出す。 さらにそのiframeの上に、透明な悪意のあるリンクをかぶせる これにより、正常なWEBサイトのリンクをクリックしたつもりが、遷移先は別の悪意のあるサイトに飛ばされる
外部から呼び出すことを想定していないサイトについては、ブロックする(特定のWEBサイトのみ、iframe呼び出しを許可する)
- https://cybersecurity-jp.com/security-measures/6935
- https://nulab-inc.com/ja/blog/typetalk/measure-clickjacking/
XSS対策
XSS=Cross Site Scripting クロスサイトスクリプティング
文字列のエスケープをしていないため、悪意のあるHTMLやJavaScriptが埋め込まれる。
文字入力欄に
名前 「田中 太郎」
とかいれる想定なところに
名前 「田中太郎;<script>alert(`不正なプログラムです`)</script>」
などと入力する。
DBにはこの文字列がそのまま登録される。
HTMLとして表示される時に、JSが実行されてしまう。
XST対策
XST=Cross Site Tracing クロスサイトトレーシング
XSSではブラウザ(クライアント)からサーバーへのHTTPリクエストヘッダを取得できない(らしい。なぜ?)。 なので、ヘッダ内に含まれる認証情報(クッキーや認証IDPWなど)は取れない。
話は変わるが、HTTPリクエストメソッド(GET,POST,PUT,DELETE)などの一種にTRACEがある。 TRACEはHTTPリスエストをオウム返しするメソッドである。
なので、XSSを利用して、TRACEメソッドでリクエストを送ると、リクエストヘッダを取得できる。 前述したクッキーや認証情報も取得できてしまう。
なお、攻撃方法としては現役引退(化石化)している。
現在ではすべてのブラウザでXST対策がとられ、XST攻撃を行うことはできなくなっています https://blog.tokumaru.org/2013/01/TRACE-method-is-not-so-dangerous-in-fact.html
DOS攻撃対策
おなじみのF5アタックなどが該当。
パケットを送りまくって、サーバーに異常な負荷をかける攻撃。
slowloris対策
slowloris=ツール名。スローロリスと読むらしい
Apacheサーバーに不完全なリクエストヘッダーを送ると、サーバー側が最後のヘッダーを待ち続ける。 この脆弱性を利用して、slowlorisを用いて不完全なヘッダーを送り続け、Apacheのプロセスを消費させる。
https://www.drk7.jp/MT/archives/001527.html
作業内容
httpd.conf 設定
例のQiita記事の内容を参考に、httpd.conf
へ適用します。
Windowsなのでディレクトリのパスだけ変更する必要があります。
/var/www/html
→C:\xampp\htdocs
/var/www/cgi-bin
→C:\xampp\cgi-bin
になるはず
httpd-xammp.conf 設定
PHP無効化
httpd-xammp.conf
内に「この拡張子ならPHPファイルとして処理しろ」と設定している箇所がある。
これをコメントアウトすればよい
<FilesMatch "\.php$"> SetHandler application/x-httpd-php </FilesMatch> <FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch>
コメントアウト後は、何も表示されなくなる(正確には<?php ?>
で囲まれた部分が全く処理されなくなる)
CGIスクリプト無効化
httpd.conf内で「この拡張子ならCGIとして認識しろ」と設定している箇所がある これをコメントアウトすればよい
AddHandler cgi-script .cgi .pl .asp
コメントアウト後は下記のようになる(ソースがそのまま表示)
まとめと感想
XAMMPは手軽に環境を構築できますが、そのまま使ってセキュリティ的に大丈夫なのかずっと不安だったので、 今回調査しました。