罰金担当の高橋です。WAFを弊社のWebサービスでも導入したので、導入するにあたって検討したことや導入後のトラブルなどをまとめました。
WAFとは
WAFとはWeb Application Firewallの略で、WAFは「ワフ」と読みます。Webアプリケーションへの脆弱性をついた攻撃を守るための装置やアプリケーションのことを指します。同様に攻撃からシステムを守るシステムとして、IPS(Intrusion Prevention System:侵入防止システム)やIDS(Intrusion Detection System:不正侵入検知システム)がありますが、IPSやIDSはアプリケーションではなくインフラに対しての攻撃に防御を行います。
WAFを導入した理由
セキュリティ対策として、攻撃を受けても問題がないようにシステムを作るのはもちろんですが、攻撃側が圧倒的に強い近年のセキュリティ事情から、攻撃を受けた時の対策が非常に重要であると考えています。サーバーの監視などである程度攻撃の検知はできるようになっていますが、WAFを活用することでより正確に攻撃を検知し、自動化かつ、最新の攻撃に対応した防御策が適用できます。
WAFの種類
WAFには以下の種類があります。
- ネットワーク型
- ソフトウエア型
- サービス型
1. ネットワーク型
ネットワークの機器としてWAFの機能を提供します。
[メリット]
- 管理台数が多くなるほど、管理コストが安価になる
- サーバーに負荷がかからない
[デメリット]
- 初期費用が高い(数十万から数百万)
- チューニングのコストが必要
2. ソフトウエア型
対象のサーバーにインストールするタイプのWAFです。Apacheのモジュールとして提供されているModSecurityなどがあります。
[メリット]
- オープンソースを利用すればコストを抑えて導入することが可能
[デメリット]
- WAFの処理の負荷がサーバーにかかる
- チューニングが必要
- サーバー単位での導入が必要なので、対象の台数が増えると管理コストが増加
3.サービス型
サービス提供事業者がWAFを用意し、共有で利用するタイプです。
[メリット]
- 初期投資がネットワーク型より安価
- システムのアップデート、チューニングはサービス提供事業者が対応してくれる
- サーバーに負荷がかからない
[デメリット]
- 長期間利用するのであれば、価格は高くなる
- WAF側でトラブルが発生した場合、Webアプリも動かなくなる
WAFの選定
導入するWAFを選定するにあたって、弊社側の条件や重視した点は下記の通りです。
- システムはAWS上にある
- 初期費用はできるだけ抑えたい
- WAFの運用管理のコストを出来るだけ少なくしたい
ネットワーク型は初期費用が高いものが多く、また弊社のWebシステムは全てAWS(Amazon Web Services)にあるため、ネットワーク型の導入は難しいという判断をしました。ソフトウエア型はサーバーのWAFのログを確認し、チューニングを行うためには社内コストがかかることと、どうしても最新パターン適用のスピード感は落ちてしまいます。以上のことから、社内コストも含めた総コストが良い点と、運用管理、チューニングを行ってもらえ、サービスレベルも高い、サービス型のWAFを選択しました。
サービス型WAFの導入作業
WAFを導入する際の作業は以下の2点でした。
1.トライアル導入しての動作確認
導入を行う前に、現在のアプリケーションがWAF経由でも問題なく動作するかの確認を行います。方法は動作確認を行うクライアントマシンのhostsファイルを書き換え、WAFを経由して、アプリケーションにアクセスできるようにし、動作確認を行います。
2.DNSの切り替え
トライアル導入で問題がなければ、DNSを切り替えて、すべてのアクセスをWAF経由で行うようにします。作業は、DNSサーバーのCNAMEをAWSからWAFを経由でアクセスするようにします。作業自体は5分もかからずにできました。
WAF導入後に発生した問題点
WAFを導入後に下記の2点の問題点が発生しました。
1.環境変数のIPアドレスが全てWAFのIPアドレスに変わってしまう
システム内にクライアントのIPアドレスによって処理を切り替える仕組みがあるのですが、取得したIPが全てWAFのIPアドレスになってしまいました。対応策は、今までIPアドレスを取得していた変数(HTTP_X_FORWARDED_FOR)とは別の変数(HTTP_X_FORWARDED_FOR2)にクライアントのIPアドレスが格納されているので、その値を使用するようにプログラムを修正しました。
データをCSV形式で出力する処理で処理時間が長い機能があるのですが、WAFが導入される前までは問題なく動作していたのですが、WAFを導入後は、約1分ほど処理を行うとリクエストがタイムアウトしてしまうという事象が発生しました。WAFとクライアントのリクエストタイムアウトは10分以上あるとのことなので、クライアントとWAFの接続の部分以外で原因がありそうということまではわかりましたが、現在も原因を調査中です。
まとめ
WAFの導入をしてみた感想は、導入自体は楽でしたが、導入後に思っていた以上にアプリケーションに影響が出てしまいました。(どこかでメリットでほぼ修正無しで導入できますよと読んだ記憶があるのですが。。。)トライアル導入時に、ネットワークの変更で影響がありそうな機能の動作確認をもっとすべきであったことが今回の反省点でした。