Web Application Firewalls (WAF)は、脆弱性に対するウェブサイトの防御の最前線を提供する、現代のウェブセキュリティにおける重要なレイヤーである。 WAFは、攻撃の試みに対する防御と通知に使用できるため、脆弱なソフトウェアにパッチを適用するよりも迅速に緩和を行うことができる。 この機能は、グローバルCDNのパフォーマンスに敏感な方法で実装され、ミリ秒単位の応答時間を提供する必要がある。 3年前、Verizon Digital Media Services (現在のEdgio )にWAFエンジンを導入したとき、ModSecurity Rules Engineを選択した。これは個々のWAFユースケースで最高の性能を発揮した。 さらに、ModSecurityのOWASP Core Rule Set (CRS)、強力なルール言語、HTTPトラフィックストリームへのAPIアクセスのサポートにより、大きな柔軟性が提供された。
waflzを入力
しかし、WAFを利用する顧客が増えるにつれ、パフォーマンスとリソースのボトルネックが発生した。 ModSecurityの緻密なルールセットがすべての顧客インスタンスに伝播され、ネットワーク全体でメモリとCPUの使用率が上昇し、運用コストが増加した。 新しいルールのテストと展開も、ルール言語が扱いにくく、記述と解析が困難であったため、困難であった。 これらの問題と既存のModSecurityライブラリの開発の複雑さは、Apache 2.0ライセンスで公開されたオープンソースWAFエンジンであるwaflzの開発につながった。
Edgioにとって、waflzはModSecurityの大幅な改善である理由は次のとおりである。
- メモリ消費量が少ない。
- パフォーマンスが向上。
- API駆動型。
WaflzはModSecurity機能のサブセットであるOWASPコアルールセットをサポート 2.xおよび 3.x、およびいくつかのサードパーティルールセット。
ウェアラブルズの設計
Waflzは、高性能とマルチテナンシーを提供するためにゼロから設計されている。 必要に応じて、設計は柔軟性よりも性能を優先した。 最終的に、waflzはModSecurity機能の制限されたサブセットをサポートする。 例えば、セキュリティやパフォーマンス上の理由から、SecRemoteRulesやinspectFileのようなModSecurityディレクティブはエッジ上で実行するのには不適切であると判断された。
エンジンはModSecurity形式またはJSON形式のルールで設定できる。 WAF製品全体が「APIファースト」であるように設計されている。 そのために、waflzは入出力としてファーストクラスのJSONをサポートしている。 WaflzはGoogleプロトコルバッファを内部的に使用して、設定(ルールを含む)とアラート形式の両方を表現する。 プロトコルバッファを選択することで、JSONの入力と出力との相互運用性が可能になり、両方に厳密に型指定されたスキーマを追加できる。
CDNの主要なエンジニアリング上の課題のいくつかは、何千もの顧客にサービスを提供することから生じる高い同時性とマルチテナンシーに対処することである。グローバルエッジサーバーのすべてが、可能な限り迅速に顧客のリクエストを処理できる必要がある。 さらに、エッジサーバアプリケーションは、顧客の設定に対してリアルタイムのパッチ適用と処理を提供しなければならない。
すべての顧客のエッジで実行中のHTTPアプリケーションサーバプロセスのメモリに多くのWAFルールセットをロードすることは、スケーラビリティの課題を提示した。 WaflzはWAFルールセットをメモリに一度だけ作成し、顧客の設定とルールカスタマイズの間で読み取り専用参照を共有することでこの問題を解決している。 さらに、いくつかの潜在的な性能最適化が特定され、要求処理時間が改善され、いくつかの重要な内部データ構造のスペースと時間の節約が含まれた。
Waflzには、エンジンの動作の検証や1回限りのModSecurityルールのテストを容易にする機能が組み込まれており、複雑なスタンドアロンテストハーネスが不要になる。
結論
Waflzは当社のCDNテクノロジースタックの一部であり、大規模に動作しながら、効率的なきめ細かいルールテストとカスタマイズを可能にする。 CDNアプリケーションの課題にもかかわらず、ModSecurityと新しいlibmodsecurityは、多くのユースケースに理想的で柔軟なライブラリである。 実際、waflzの開発では、ModSecurityの開発に貢献してきた。 新しいWAFエンジンは、1年以上にわたって世界中で稼働しており、パフォーマンスを損なうことなく、数千もの異なるクライアント構成を同時にサポートし、保護している。
waflzの機能例をもっと見るには、githubを訪問する。