概要
Curiefense (キュリーフェンス)1 はサイト、アプリ、API など、あらゆる形式の Web トラフィックをサイバー攻撃から保護する、オープンソースのクラウドネイティブアプリ向けのセキュリティプラットフォームです。WAF、DDoS 保護、レート制限、セッションフロー制御など様々な機能が備わっており、CNCF の Sandbox Project として開発が進められています2。
Curiefense は Nginx と Envoy の拡張機能として利用できるので、ロードバランサーやサービスメッシュなどのレイヤーで敵対的なトラフィックをブロックすることができます。また、メトリクス収集やログ収集の機能も提供されているので、管理者はメトリクスやリクエストの詳細 (ヘッダーとペイロード) をリアルタイムで確認することができます。
※ この記事は執筆時点の最新バージョン 1.5.0 の仕様を元にしています
各機能の詳細
主要な機能をピックアップして説明します。
WAF (Web Application Firewall)
OWASP Top 103 をはじめとする多くの脅威から Web アプリケーションを保護する機能です。Curiefense の WAF では、ネガティブセキュリティとポジティブセキュリティの両方のモデルが採用されています。
シグネチャ (不正な通信、不正な攻撃パターンをまとめた定義ファイル) やブロックリストなどネガティブセキュリティモデルの仕組みで既知の脅威を防ぎ、リクエストデータの検証などポジティブセキュリティモデルの仕組みで異常なリクエストやゼロデイ攻撃を防ぎます。
また、The Spamhaus DROP list などの外部の脅威インテリジェンス (サイバーセキュリティの専門家がまとめた脅威情報) のフィードを登録して、サイバー攻撃の進化に合わせて定期的にシグネチャや IP のブロックリストを自動更新する機能も備わっています。デフォルトで複数のフィードが登録されており、追加で登録することもできます。
レート制限 (DDoS 保護を含む)
Web サービスのアカウントへの不正アクセス、クレジットカードの不正利用、クーポンコードの特定などを目的としたブルートフォース攻撃や DDoS 攻撃を防止する機能です。グローバルな設定から個々の URL まで、任意のスコープでレート制限を定義することができます。
多層的なレート制限もサポートされているので、複数の閾値を設定して徐々に増加するリクエスト数に対してトリガーとなる処理を段階的に設定できます。多層的なレート制限のユースケースとしては、最初の閾値を超えたクライアントは警告ページにリダイレクトさせて、最終の閾値を超えたクライアントはレート制限の違反者として特定の期間ブロックする (503 を返し続ける) ことなどが挙げられます。
セッションフロー制御
定義されたセッションフローのシーケンスを元に敵対的なリクエストをブロックする機能です。攻撃者はスピードと効率のために正規のユーザーとは異なる行動を取るため、予想される行動パターンから大きく外れる傾向にあります。例を挙げると、正規のユーザーが Web アプリケーションにログインする場合、最初のアクセスでログインページを GET リクエストした後に、認証情報を含む POST リクエストをする流れが予想されますが、攻撃者は GET リクエストせずに POST リクエストのみをすることが多いので、ログインページを GET してからログインページを POST というフローをn秒以内に完了することを正規のフローとして定義することで、定義から外れたリクエストを異常と判断してブロックできます。
アーキテクチャ
Server は Curiefense で保護されるリソースで、User はそのリソースにアクセスするリクエスト元となります。Curiefense はそれ以外のコンポーネントによって構成されています。コンポーネント群は独自のソフトウェアと別の OSS が混在しているため、わかりやすいように独自のソフトウェアには Curiefense のロゴを付与しています。それでは、各コンポーネントの役割を説明していきます。
Curiefense Proxy
実体は Curiefense がフィルターとして統合された Nginx または Envoy となっていて、保護リソースの前段でリクエストを受けて Web トラフィックのフィルタリングを行い、アクセスログを Elasticsearch に送信します。また、トラフィックに関するメトリクスを Prometheus 形式で公開する Exporter としても振る舞います。ログ転送とメトリクス公開は必要に応じて無効化することも可能です。
設定の更新は動的に行える仕組みになっていて、Curiefense Proxy は定期的に Cloud Storage をチェックして、新しいセキュリティポリシーが存在する場合は、Cloud Storage からダウンロードして自らに適用するようになっています。
なお、レート制限やセッションフロー制御など一部の機能を使用する場合はローカルのデータストレージが必要になるため、Curiefense Proxy では内部的に Redis を使用します。ソースコードまでは追えていませんが、ストレージ種別は必要に応じて変更することもできるそうです。
Cloud Storage
Git でバージョン管理された Curiefense Proxy の設定が格納されています。全ての変更はバージョン管理されているので、いつでも設定を巻き戻すことができます。Cloud Storage としては、Amazon S3、Google Cloud Storage、MinIO、ローカルのファイルシステムなどがサポートされています。
Config Server
Curiefense Proxy の設定を管理するサーバーです。Web Console や REST API 経由で設定変更のリクエストを受け取り、Cloud Server に設定を格納します。なお、現バージョンでは保護された環境で稼働させていることが前提とのことで認証機能は実装されていないようです。
Web Console
Config Server の Web UI です。
Prometheus / Grafana
Prometheus で Curiefense Proxy からメトリクスを収集して、そのメトリクスを Grafana の専用ダッシュボードで可視化します。Curiefense Proxy の説明でメトリクス収集機能を無効化できると書いたように、これらは必須なコンポーネントではありません。
Elasticsearch / Kibana
Elasticsearch に保存されたアクセスログを Kibana で参照します。Curiefense Proxy の説明でログ収集機能を無効化できると書いたように、これらは必須なコンポーネントではありません。
さいごに
今回は、オープンソースのクラウドネイティブアプリ向けのセキュリティプラットフォームである Curiefense を簡単に紹介しました。Curiefense は Nginx と Envoy に統合可能なので、Kubernetes 環境であれば Ingress や Service Mesh のレイヤーでサービスのセキュリティを高めることができます。セキュリティ面で課題を抱えている場合は導入を検討してみるのも良いでしょう。
この記事を読んで Curiefense に興味が湧いて詳細が知りたくなった方は、公式サイト https://www.curiefense.io をご参照ください。
-
Curiefense という命名は Marie Curie という著名な科学者に敬意を評して名付けられたそうです。公式ブログでコミュニティメンバーが Marie Curie に関する記事を公開しています。https://www.curiefense.io/blog/inspired-by-marie-curie/ ↩
-
元々は Reblaze によって開発されました。それもあってか Curiefense のロゴには Reblaze のロゴの一部がプリントされているように見受けられます。Sandbox Project として承認された際のアナウンスは https://www.curiefense.io/blog/now-a-cncf-sandbox-project/ をご参照ください。 ↩
-
OWASP Top 10 は OWASP (Open Web Application Security Project, オワスプ) というソフトウェアのセキュリティ向上を目的とする団体が公開している、Web アプリケーションに対する脅威の中で危険性が高いと判断された項目をまとめたセキュリティレポートです。 ↩