最近WAFについて学ぶ機会があったので、今日はWAFについて少し書きたいと思います。
ちなみに私は今までWAFという単語はどっかで聞いたことあるけど何かはわからんな〜..
程度の入門レベルです。
ちなみにWAFの話をする上で、「ファイアウォール」「IPS/IDS」といった単語も一緒に知っておいた方が良いと思うので、そちらについても軽く触れます。
WAFとは?
WAFとは、Web Application Firewallの略で、Webアプリケーションに対する攻撃へ対処するセキュリティ対策のひとつです。
Webアプリケーションとは具体的に言うと、
・ネット銀行
・ECサイト
などの個人情報やカード情報を取り扱うwebサービスのことで、近年ではwordpressなどのCMSも保護の対象になっています。
ファイアウォールとは?
セキュリティ関連で出てくるキーワードで、WAFとは別に「ファイアウォール」というものがあります。
これは、外部からの不正なアクセスに対して、内部のネットワークを保護するものです。
通信の内容そのものを見て判別しているのではなく、送信元の情報・外部からの情報を元に判別します。
IPS/ IDSとは?
IPS/ IDSとは、ネットワーク上の通信を監視・遮断するセキュリティシステムのことです。
IDSとは、Intrusion Detection Systemの略で、不正侵入の「検知」の役割をもっています。
IPSとはIntrusion Prevention Systemの略で、不正侵入の「検知+防御」の役割をもっており、IPSとIDSで二段構えのセキュリティ対策を行います。
参考にしたサイトにわかりやすい表現がありましたので、引用させていただきます:
例えるなら、監視カメラと警備員による2段構えの対応です。監視カメラで発見した不正侵入を、常駐する警備員が駆けつけて排除します。
https://cybersecurity-jp.com/column/56491
IPS/IDSは、通信内容を監視して、必要に応じて遮断する仕組みなので、送信元が正常だと判断されファイアウォールを突破してきたアクセスであっても、IPS・IDSによって通信内容が不正だと判断された場合には、ここでアクセスが遮断されることになります。
それぞれの働きのまとめ
まとめるとこんな感じです。
「それぞれ守る対象や得意分野が違うんだな〜」ぐらいで良いとおもいます。
図解すると手前からファイアウォール→IPS/IDS→WAFの順番にセキュリティがおかれているイメージです。WAFはWebサイトを守るものなので、その手前に置かれているイメージですね。
*それぞれ「どのように」「どんな攻撃を」を検知・制御・遮断するのかといった具体的な部分はすでにいろんなサイトが詳しく紹介しているので、ここでは割愛します。
不正アクセスじゃないのに、WAFにより不正アクセスと検知されてしまった!
さてここからは実際に先日直面した出来事と、その解決方法をメモとして残しておきます。
問い合わせフォームでいきなり送信完了画面まで進めなくなった
先日、あるお客さまのお問合せフォームの改修を行なっており、その際に同じ時間帯に何度も該当のフォームページへアクセスし、メールのテスト送信を行なっていました。通常だと「確認画面へ」ボタンをクリックすると、確認画面ページに遷移はしませんが、その場で送信内容確認画面に切り替わる仕様です。ですが、下記の通りぐるぐる更新マークが出てきて次の画面に進めません。
使用プラグイン:Contact Form 7
開発モードで見てみると、入力時点ではコンソールエラーは出ていなかったのですが、
ぐるぐるが発生した状態でみると、「Failed to load resource: the server responded with a status of 403」というエラーが表示されています。「ページ自体はあるけど、特定のアクセス者に対してページを表示する権限を与えずに、そのページにアクセスを拒否されたことを示すメッセージ」ということになります。
今まで問題なかったのに、突然アクセスを拒否されてしまいました。
403が表示されるケースはさまざまですが、WordPressの場合は、WAFの誤検知が要因となるケースがあるようです!
突然のアクセス拒否は、セキュリティ関連の誤検知を疑え
ということで、サーバーの管理画面を確認します。(今回のケースはロリポップサーバーです)
管理画面 > セキュリティ > WAF設定 を開くと、対象のドメイン一覧と、それぞれに「設定変更]「ログの参照」
という2つのボタンがあります(すみません画面キャプチャがなく)
対応方法1 (非推奨)
「設定変更] で「有効」を「無効」にすることができます。
これを行うと、WAFの設定そのものをなくすことになるので、セキュリティ対策上あまりよろしくありません。
対策方法2
「ログの参照」を開きます。すると、こんな感じで情報が記載されています。
・不正にアクセスされたと思われる該当ページURL
・アクセス元のIPアドレス
・アクセスのあった日時
・「シグネチャ」とよばれるウイルスに関するデータの特徴をまとめた文字列のようなもの
この「シグネチャ」というものを覚えておきます。
シグネチャ=行動パターンと覚えておけばわかりやすいでしょうか。
ワードプレスに入れているSite Guardに、この行動パターンは不正じゃないよ!と教える
WordPressの管理画面に入って、Site Guardのダッシュボードを開きます。(インストールしていない人は、まずSite Guardプラグインをインストールしましょう)
さらに設定の中に「WAFチューニングサポート」がありますので、こちらをクリックします。
下記の画面が開きますので、「新しいルールを追加」をクリックします。
「シグネチャ」というフィールドがあるので、ここにさっきサーバーのWAF設定画面でみた、シグネチャ(行動パターンを示す文字列)を入力します。入力したら保存します。
再度ダッシュボードに戻ると、先程保存したシグネチャが表示されているので、こちらのチェックボックスをクリックし、「ルールを適用」を押します。作業は以上です。
再度お問合せフォームのテスト送信を実施
ぐるぐるせず、問題なく送信できました!今回の件は、これにて一件落着です。
注意点:すべてのレンタルサーバーがこの機能を使えるわけではない!
このSite GuardのWAFチューニングサポートという機能は、どうやらレンタルサーバーのサービス側で、JP-Secure製の WAF ( SiteGuard Lite ) が導入されている必要があるようです。
ロリポップは、このSiteGuard Liteをデフォルトで全プランに導入しているため、 今回の手順で解決できたのでした…
*さくらサーバーも標準搭載しているようです。
他のレンタルサーバーの場合はどうする?
他のレンタルサーバーはどうでしょうか?よく使う2つのサーバーについてしらべました。
Xサーバー
Xサーバーは残念ながらこのSite Guard Liteはサーバー側に導入されていません。
方法1 WAF設定をOFFにする
Xサーバーにも、コントロールパネルから > 「セキュリティ」 > 「WAF設定」という項目があります。開くと以下のようなリストが出てきます。
デフォルトでは、これらの機能はONにしておくのが望ましいと思いますが、正常なアクセスなのに、突然403が発生してしまい、コンテンツの保存やフォームの送信ができない
場合は、一度この機能をOFFにして、再び保存や送信ができるか確かめる。確認ができたら、再度機能はONにして、元の状態に戻します。
ただしこんなケースもあるようです..
参考サイト
XサーバーのWAF設定をすべてONにしているかつGoogle Tag Managerを導入していると403エラーが発生する
方法2 .htaccessに特定のIPアドレスのアクセスを許可する記述を追加
下記の記述を書くことで、そのIPアドレスからのアクセスを許可することができます。記述をそのままにすればずっと適用されますが、これも面倒ですが必要な作業が一旦終わった段階で削除しておくのが安心ですね。
<IfModule mod_siteguard.c>
SiteGuard_User_ExcludeSig ip(111.111.111.111)
</IfModule>
参考サイト
特定のIPアドレスだけWAFを除外する方法
WADAX
WADAXはそもそもWAFの設定が有償のようです。ドメインごとではなく、契約単位で設定可能なようで、WAF設定を契約すると、コントロールパネルからドメインごとにWAF利用の「有効」「無効」を設定する事が可能になるとのこと。有償契約した場合には、WADAXではSite Guard Serverというものを導入しているので、Site GurardプラグインのWAFチューニングサポートも使えるかと思います。
方法1 WAF設定をOFFにする
Xサーバーと同じく、サーバーのコントロールパネルからWAF利用の「有効」「無効」を設定を、「無効」にする
方法2 .htaccessに特定のIPアドレスのアクセスを許可する・またはシグネチャを許可する記述を追加
Xサーバーではシグネチャの確認方法がなかったのでIPアドレスによる制限しかできなかったのですが、WADAXではWAF設定管理画面より、シグネチャの確認ができるようです。ブロックされている特定のシグネチャを許可する・またはIPアドレスを許可する記述を.htaccessに追記することで対応可能です。
//特定のシグネチャを許可する場合
<IfModule mod_siteguard.c>
SiteGuard_User_ExcludeSig **001**1 (*の箇所にも数字が入ります)
</IfModule>
//特定のIPアドレスを許可する場合 (Xサーバーのところで記載したのと同じ)
<IfModule mod_siteguard.c>
SiteGuard_User_ExcludeSig ip(192.168.0.1)
</IfModule>
参考サイト
[共用] WAFオプションで必要なWebサイトがブロックされてしまいます
方法3. WAF チューニングサポートを利用 (一番簡単)
WADAXのWAF設定管理画面でシグネチャが確認できるので、そのシグネチャをコピーして、ロリポップの時と同様、WordpressのSite Guardプラグインで、WAFチューニングサポートにコピーしたシグネチャを貼り付けてルール適用させることができます。htaccessをいじるのはドキドキするので、この方法が一番簡単で安心な気がします。
まとめ
長くなりましたが、まとめますと
- WAFはwordpressや大事な個人情報が入ったwebアプリケーションを守ってくれるセキュリティ対策のひとつだよ。
- WAF以外にも、ファイアウォール・IPS/IDSというセキュリティ対策があるよ。
- WAFは便利だけど、たまに正常なアクセスも遮断してしまうよ。その時は403エラー(アクセス拒否)がでるよ。
- 遮断されてしまった場合は、使っているサーバーによってアクセスを許可する方法がいろいろあるよ。
こんな感じです。ロリポップ以外のサーバーの状況についてはネットで調べた限りになるので、実際直面してみないとどんな感じかわかりませんが、403エラーが突然発生した場合には、セキュリティによるものかも?と疑ってみてください!
*WAF設定を無効にすることは、セキュリティ的にそもそもあまりよくありませんので、やる際は自己責任でお願いします。