ホームページのセキュリティ対策
技術情報
安心してホームページの公開ができるよう、ホームページ作成とレンタルサーバーとセキュリティ対策についてまとめています。
トップ >ホームページのセキュリティ対策
目次
この記事の目次です。
1. どのようなセキュリティリスクが想定されるか
2. レンタルサーバーで行えるセキュリティ対策
3. レンタルサーバーで使える脆弱性スキャンツール
4. その他ツール
1. どのようなセキュリティリスクが想定されるか
どのようなセキュリティリスクが想定されるのでしょうか。 想定されるセキュリティリスクをまとめてみました。
Webレピュテーション
Webレピュテーションは、ブラックリストなどのホームページに関連したWebの評価や評判のことです。 ブラックリストにリストされてメールが送信できなくなった、Googleサーチコンソールで警告が表示された、Googleアドセンスの申請が通らない、などの影響を与えるリスクです。
ブラウザーサイドのコンテンツ
HTMLやCSS、JavaScriptは、ブラウザー(ユーザーの端末)で動作するコンテンツですので、ユーザーに直接影響を与えます。 代表的な脆弱性(セキュリティの欠陥)としては、XSS(クロスサイトスクリプティング)があげられ、ホームページの表示が改ざんされ、ユーザーがだまされてしまうリスクです。 またhttpsやクリックジャッキングなどの欠陥を利用した攻撃は、サーバー側で実行されるわけではなく、レンタルサーバーのWAFでは防げないので、レンタルサーバーの設定で対策する必要があります。
サーバーサイドのコンテンツ
PHPは、サーバーで動作するコンテンツです。 脆弱性があると、サーバーにある情報が漏えいしたり、サーバー自体が乗っ取られてしまうリスクとなります。 WordPressのプラグインで防げるものもありますが、WordPressはメモリなどのリソースをたくさん消費しますので、プラグインで余計重たくなり、メモリ不足で停止させられるリスクが増すのでプラグイン頼みは注意が必要です。
レンタルサーバーの設備
レンタルサーバーは、さまざまな利用者を想定してソフトウェアがインストールされ、メールやファイル転送などのリモート接続の入口が公開されていることが多いです。 ソフトウェアの数やリモート接続の数が増えるとリスクも増しますので、必要ないものは使えないように設定する工夫も必要です。 たとえば、PHPMyAdminなどは、ログが閲覧できなことが多く、監視が難しいです。
作成手順
ホームページ作成時は、未完成のものが置かれるセキュリティレベルが低い状態から始まりますので、完成するまではアクセス制限を掛けるなど注意が必要です。 たとえば、WordPressをインストールしようとセットアップまで行なって翌日作業しようとしたときに、1時間で検索エンジンにインデックスされ、2時間後に第三者にセットアップが実行される被害を見たことがあります。
運用管理
バックアップファイルがWeb公開ディレクトリに置かれて、ダウンロードされてしまうなど無いように運用管理の面も注意が必要です。 また気付かずにセキュリティ被害に遭っている恐れもあります。 Web公開ディレクトリに不審なファイルがないかやログの確認など定期的なチェックを行っていく必要があります。
2. レンタルサーバーで行えるセキュリティ対策
レンタルサーバーで行えるセキュリティ対策について紹介していきます。
アクセス制限
例えば、WordPressを構築中にセットアップ画面にアクセスされた場合、乗っ取りにあってしまう恐れがあります。 また、クローラに巡回され検索エンジンに工事中のコンテンツが表示されると問題になることがあります。
工事中のコンテンツなどに設定するアクセス制限の方法について見ていきます。
BASIC認証によるアクセス制限
BASIC認証は、ベーシック認証や基本認証とも呼ばれる、Webサーバで設定が行えるID/パスワードの入力ダイアログを表示して行う認証です。
.htaccessでの設定例
.htaccessでの設定例は以下です。「.htpassword」のようなファイル名の認証ファイルを指定します。
AuthUserFile <パス>/.htpassword AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user
認証ファイル「.htpassword」の作成方法
認証ファイルは「htpasswd」コマンドで作成が行えます。 SSHなどでWebサーバのターミナルに接続して「htpasswd」コマンドが利用できます。
htpasswd -c -b .htpasswd <ユーザ名> <パスワード>
上記コマンドで生成された「.htpasswd」ファイルを任意の場所に配置して、AuthUserFileにパスを設定します。
HTTPの脆弱性とBASIC認証
HTTPは暗号化されない仕様上の脆弱性があります。 BASIC認証もフォーム認証と同様にID/パスワード情報を送信しますので、HTTPSによる暗号化を行わないとID/パスワード情報の漏洩リスクが高い状態になります。
IPによるアクセス制限
.htaccessでIPによるアクセス制限も行えます。 Apache 2.4からはRequireディレクティブを使用します。
Apache 2.2
order deny,allow deny from all allow from <許可するIPアドレス>
Apache 2.4
Require all denied Require ip <許可するIPアドレス>
HTTPレスポンスヘッダの設定
.htaccessでHTTPレスポンスヘッダの設定が行えます。
mod_headers
mod_headersを利用することで、HTTP リクエストのヘッダと応答のヘッダのカスタマイズが行えます。
Strict-Transport-Security
httpからhttpsにリダイレクトする設定を行っても、訪問者はリダイレクトされる前にまず、暗号化されないhttpでサイトと通信する可能性があります。 それを改善するのが「Strict-Transport-Security」です。 「Strict-Transport-Security」をレスポンスヘッダに設定することで Webサイトにアクセスすると、以降の指定された期間、当該サイトには全てHTTPSによって接続するようブラウザに指示が行えます。
.htaccessでの設定例は以下です。
<ifModule mod_headers.c> Header add Strict-Transport-Security "max-age=15768000" </ifModule>
X-Frame-Options
外部サイトでFrameタグを使用して表示できる場合、クリッククリックジャッキング攻撃が行われる恐れがあります。
クリックジャッキングは、ターゲットのWebページの上に、透明なレイヤー(罠となるWebページ)を重ねます。 ユーザーにボタンやリンクをクリックさせ、意図しないコンテンツにアクセスさせます。 文字の入力など、情報窃取にも利用できる攻撃です。
HTTPレスポンスヘッダ―のパラメータに「X-Frame-Options」を設定することで、 Frameタグの機能に制限を与えて、クリックジャッキングなどの攻撃を防ぎます。
.htaccessでの設定例は以下です。
<ifModule mod_headers.c> Header always append X-Frame-Options SAMEORIGIN </ifModule>
X-XSS-Protection
HTTPレスポンスヘッダ―のパラメータの「X-XSS-Protection」を設定することで、ブラウザのクロスサイトスクリプティング防止機能を有効にするよう指示が行えます。
.htaccessでの設定例は以下です。
<ifModule mod_headers.c> Header always append X-XSS-Protection: "1; mode=block" </ifModule>
mod_php
mod_phpを利用することで、PHP関連の設定が行えます。
Set-Cookieのsecure属性
セッションを利用している場合、Cookieの値によりユーザを識別しており、http(暗号化されていない)で表示した際に通信経路でCookieの値が窃取される恐れがあります。
HTTPレスポンスヘッダのSet-Cookieのsecure属性を設定することにより、 ブラウザにURLのスキームがhttpsのときだけ、Webブラウザからcookieが送出するよう指示を与えます。
.htaccessでの設定例は以下です。
# PHP7の場合 <ifModule mod_php7.c> php_flag session.cookie_secure On </ifModule> # PHP5の場合 <ifModule mod_php5.c> php_flag session.cookie_secure On </ifModule>
Set-CookieのHttpOnly属性
JavaScriptからCookieへのアクセスが行えますと、万が一悪意のあるスクリプトが実行されてしまった場合、Cookieが摂取され、セッションハイジャックが行われるリスクが高くなります。
HTTPレスポンスヘッダのSet-CookieのHttpOnly属性を設定することにより、 JavaScriptのDocument.cookie APIからCookieにアクセスできないようブラウザに指示が行えます。
.htaccessでの設定例は以下です。
# PHP7の場合 <ifModule mod_php7.c> php_flag session.cookie_httponly On </ifModule> # PHP5の場合 <ifModule mod_php5.c> php_flag session.cookie_httponly On </ifModule>
PHPの設定
.htaccessでPHPの設定が行えます。
display_errors
ブラウザにPHPのエラー情報が表示されるとエラーに含まれるパス情報からサーバのアカウント名の露呈など重要な情報が取得されてしまう場合があります。 display_errorsで制御が可能です。
.htaccessでの設定例は以下です。
php_flag display_errors Off
ブラックリスト対策
気付かずにセキュリティ被害に遭っている恐れもあります。 最悪な状態として、ブラックリストにリストされてしまう状態が挙げられます。 未然防止やもっと早い段階で気付く必要がありますが、定期的にチェックすることをお勧めいたします。
簡単なチェック方法
以下のWebツールを利用すると88個ものブラックリストをドメインまたはIPアドレスを入力するだけでチェックしてくれます。
https://mxtoolbox.com/SuperTool.aspx
Spam RATSについて
RATS-Dyna(On the list. Worst Offender Alert:最悪の犯罪者アラート)にリストされてしまう相談がよくあります。 RATS-Dynaは、トロイの木馬やボット、スパムメール配信プログラムなどに感染した疑いのあるサーバのIPアドレスが登録されるようです。 もしリストしていたら感染している疑いがあるので原因を調査してください。
共用のレンタルサーバの場合は他の利用者のサイトやメールがハッキングされている影響をうけます。 また、このリストはIPアドレス帯でブラックリストに乗ることもあります。 管理外のところが原因の場合はサービス提供元に問い合わせて解除申請してもらう必要があります。
3. レンタルサーバーで使える脆弱性スキャンツール
レンタルサーバーで使える脆弱性スキャンツールについてまとめています。
Qualys SSL Labs
SSL関連の診断ツールです。詳細な解説だけでなく、SSLの設定状態をA+、A、A-、B、C、D、Fとスコアがでて便利です。
URL)https://www.ssllabs.com/ssltest/index.html
OWASP ZAP Zed Attack Proxy
OWASPが提供する無料のWebアプリケーション脆弱性診断ツールです。自動スキャンや機能追加できるさまざまなプラグインも提供されています。
URL)https://owasp.org/www-project-zap/
Burp Suite Professional
PortSwigger社が提供するWebアプリケーション脆弱性診断ツールです。
有料版のBurp Suite Professionalには自動スキャン機能があり、経験的にOWASP ZAPとは異なる脆弱性が検出されるイメージです。
URL)https://portswigger.net/burp/
WPScan
WordPress専用のスキャンツールです。本体、プラグインの公開されている脆弱性やPHP、Webサーバの設定確認、ログインなどの設定のチェックが行えます。
利用にはオンライン登録が必要ですが、WordPressの脆弱性が公表されるとメールで知らせてくれるので便利です。1日50回までは無料で利用できます。
URL)https://wpscan.org/
4. その他ツール
レンタルサーバーでは使えませんが、以下の脆弱性診断ツールもあります。
OpenVAS
SSL関連の診断ツールです。詳細な解説だけでなく、SSLの設定状態をA+、A、A-、B、C、D、Fとスコアがでて便利です。
URL)https://www.ssllabs.com/ssltest/index.html
5.1. OpenVAS
OpenVAS(GVM)は、オープンソースとして開発されていたNessusから派生したネットワーク診断ツールです。 Nessusは年間30万円~と高価ですが、OpenVASは無料で利用できます。レンタルサーバでは利用機会はないと思いますが、自前でサーバを構築した場合は相棒といえるツールであります。 記事作成時点で最新だったGVM-11のインストール方法を紹介いたします。
更新履歴
更新履歴になります。
- 2022/7/29 HTTPの脆弱性とBASIC認証について追記しました。
- 2020/7/17 レンタルサーバーで使える脆弱性スキャンツールについて追記しました。
- 2020/6/13 どのようなセキュリティリスクが想定されるかについて追記しました。
- 2020/5/4 Spam RATSについて追記しました。
- 2020/3/15 運用監視について追記しました。
- 2019/9/7 PHPの設定について追記しました。
- 2019/8/18 記事をアップしました。
トップ >ホームページのセキュリティ対策