SCSでWAF関連の問題でぼこぼこにされたのでWAF勉強中です。
調べていくと躓いた点がいくつかあり、そのうちの一つを取り上げてみます。
前提として、WAFはSSL/TLS終端が大前提である
*便宜上、SSL終端に統一します。
WAFはいわゆるアプリケーションファイアウォールのうち、HTTP通信に特化したものであり、アプリケーション層の通信をフィルタリングするにはプレーンテキストであることが前提であり、つまりSSL終端が大前提ということです。
ファイアウォールはセキュリティ境界点であり、ネットワーク経路に配置されるものであり、エンドツーエンド通信であっても間に入って復号してWAFを実行(※)する必要があります。
※NISTのGuidelines on Firewalls and Firewall Policy の2.1.9 Web Application Firewalls を読みました。
AWS WAFはSSL終端を直接的に提供しない
AWS WAFでは、SSL証明書・中間証明書・秘密鍵を設置したりしません。
SSL終端はALBやCloudFrontで行われます。
AWS公式のアーキテクチャ図ではALBの前段にWAFが配置されている
AWS公式のWAFアーキテクト図では、ALBやCloudFrontの前段に配置されています。
ということで、AWS公式のWAFアーキテクチャ図は論理図であり、もっといえば各サービスコンポーネントの機能にフォーカスした、サービスコンポーネント機能関係図という感じでしょうか。
AWSの設計まではわからないので、一応タイトル回収はできたかなと思いますが、これだと意味ないのでもう少し深堀ってみます。
AWS以外はどうか
パブリッククラウドのサービスではなく一般的な技術としてのWAFについて調べてみると、
- クラウド型
- アプライアンス型
- ソフトウェア型
の3種類があるようです。
アプライアンス型はオンプレミスで、ロードバランス機能がついていれば、DMZにおいてSSL終端とロードバランシングをさせて、ネットワークファイアウォールとは別にシステムの前段に配置する形でしょうか。
クラウド型は自社ネットワークからサードパーティのWAFクラウドネットワークへ接続して、そこにSSL証明書等SSL終端するための設定を実施して利用するみたいです。
ソフトウェア型は上記2つと同じ考え方でよさそうです。
ちなみにVMWareを調べてみると、「NSX Advanced Load Balancer WAF」というのがあるようで、ロードバランサありきの製品でした(こちらのページ参照)。ロードバランサ前提なので特にアーキテクチャ図もありませんでした。
そもそもWAFはロードバランサやCDNと使うのが多いっぽい
そもそもWAFは、一般的なアプリケーションの保護を目的としていて、攻撃はコンピュータによって同時に大量に行われていて、それを受けるのはサービスを提供している側で、サービスを提供する大量のサーバの前段にいるのがALBやCDNなので、ALBやCDNとセットで使われるのは当然といえば当然そうです。
まとめ
タイトルへの答えとしては、「WAFはSSL終端が前提だが、実際の用途を踏まえてWAFの特性を強調すると、ALBの前にWAFを配置する図の方が直接的に本質を表現できるから」、AWS WAFはSSL/TLS終端機能を提供しないのにALBの前段に配置されている、という感じでしょうか。
余談:アプリケーションファイアウォールについて
WAFよりももっと汎用的なアプリケーション通信のファイアウォーリングをするファイアウォールがあり、アプリケーションファイアウォールというらしいです(NISTのGuidelines on Firewalls and Firewall Policy の2.1.3 Application Firewalls参照)。
これもSSL終端前提で、アプリケーションプロキシゲートウェイとか専用プロキシサーバ(Dedicated Proxy Servers)も同様。
最初のアプリケーションをファイアウォーリングしようという考えがあり、それを運用効率や負荷などを見ていくうちに適材適所で細分化されていった歴史があるんだろうなと思いました。