これは、 SaaSサービスの構築と運用に必要だったさまざまな側面を取り上げているブログ シリーズの 4 番目のブログです。
前回のブログでは、暗号化技術を使用してプラットフォーム(インフラストラクチャ、アプリ、データ)を保護する際の課題について説明しました。 このブログでは、ネットワーク(インターネットと内部)からの標的型攻撃からプラットフォームを保護するために使用する手法について説明します。 アプリは物理的な場所に制限されなくなったため、従来の境界ベースのファイアウォールや署名ベースのセキュリティ ソリューションは効果を発揮しなくなりました。 当社の最初のゼロトラスト セキュリティ実装の欠点と、分散インフラストラクチャとアプリ クラスターを適切に保護するために機械学習とアルゴリズム技術を使用してそれを強化した理由と方法について説明します。
当社のプラットフォームは、エッジ、グローバル ネットワーク、AWS および Azure パブリック クラウドで独自のクラスターを運用する複数のチームにまたがる多数のアプリを実行します。 ワークロードの大部分は Kubernetes を使用してマイクロサービス オーケストレーションされていますが、Terraform を使用して管理している非常に大規模なモノリス (例: elasticsearch) もいくつかあります。 図 1 は、当社のプラットフォームの分散性を示しています。 たとえば、当社の 18 を超えるグローバル ネットワークPoP (数十台から 100 台強の物理サーバー) のそれぞれで、数千のアプリ ポッドを実行しています。 ただし、エッジでは現在、3,000 を超えるアクティブな場所 (それぞれに 1 ~ 7 台のコンピューティング) で数十のアプリ ポッドを実行する個別の顧客展開が行われています。
このプラットフォームは完全なマルチテナントであり、各ノードは異なる顧客(および当社自身)のワークロードを実行します。 これらのアプリの一部はパブリックインターネットに公開されているため、アプリとの間のすべての通信が安全であることを確認する必要があります。 前回の 2 つのブログで概説したように、私たちはサービス メッシュとAPI ゲートウェイを強化するために使用する独自の L3-L7+ ネットワーク データパス (VoltMesh) とともに、堅牢な ID、認証 + 承認システムを構築しました。 図 2 に示すように、これにより、アプリ クラスター全体 (mTLS)、ユーザー (TLS/mTLS)、従業員 (mTLS) にトランスポート レベルのセキュリティを提供するとともに、認証 + 承認に基づくアクセス制御も実現できるようになりました。
このゼロトラスト実装は多くの利点をもたらしますが、いくつかのセキュリティ問題を自動的に解決するわけではありません。
このプラットフォームでの開発の過去 2.5 年間で、開発者がオープンソース アプリを組み込み、コンテナ化して、DevOps チームにプラットフォームへの展開を依頼することがよくあることにも気付きました。 しかし、これらのアプリ内の API レベルのやり取りに関する詳細が不足していることが多く、セキュリティ チームが通信をホワイトリスト化するポリシーを作成する際に必要となります。 これは、アプリが使用する API のみを許可し、他のすべてのトラフィックをブロックするホワイトリスト ポリシーを義務付けるため、ゼロ トラスト セキュリティ実装にとって大きな障害となります。 この要件に例外を設けた場合には、一部のアプリに非常に基本的なネットワーク レベルのセグメンテーションが残り、攻撃対象領域が拡大しました。
その結果、上記の問題に対処するために、既存のゼロトラスト セキュリティ ソリューションに追加のセキュリティ機能を追加する必要がありました。 プラットフォームに組み込む必要のある追加のセキュリティ機能のリストを特定しました。
私たちは、これらの問題を解決するために、従来の署名ベースの技術、統計アルゴリズム、およびより動的な機械学習アプローチを組み合わせて使用することにしました。 これには、SaaS バックエンドに変更を加え、ネットワーク データパスに新しい機能を追加する必要がありました。
プラットフォームをロックダウンするために、各アプリの API のホワイトリストに基づいてのみネットワーク接続を許可します。そのためには、セキュリティ チームが開発者と連携し、プログラム可能なポリシー エンジンに適切な API 情報が提供されるようにする必要があります。 私たちのサービス フレームワークを使用して構築されていないアプリに対して、開発者がこの情報を提供することは不可能であることにすぐに気付きました。
サービス メッシュ プロキシはアプリへのすべてのアクセスのネットワーク パスにあるため、プロキシを通過するすべてのアクセスの実行時分析を実行して、アプリによって公開される API と静的リソースを学習することにしました。 このアプローチの課題は、URL を検査し、動的に生成されるコンポーネントを分離することで API エンドポイントを識別することです。 たとえば、API「api/user/<user_id>/vehicle/」の場合、プロキシは次のようなアクセスを認識します。
このようなリクエストは数百万件に及ぶ可能性があり、解読するのは非常に困難です。 その結果、これらの関連リクエスト内の動的コンポーネントの識別は、ディープラーニングとグラフ分析を使用して行われます。 URL コンポーネント セット全体をグラフとして表現し、グラフ クラスタリングを実行して、次のような動的に生成されたコンポーネントの特定のプロパティをキャプチャする機能セットを使用して、類似したプロパティを持つサブグラフを見つけます。
その結果、動的コンポーネントが分類され、システムからの出力は次のようになります。
この API の機械学習を使用すると、サービス メッシュ プロキシによって適用できるポリシーを簡単に自動的に生成できます。 検出された API エンドポイントに基づいて、どのアプリがどの API を使用して他のアプリと通信するか、これらの API の一般的な動作など、他のプロパティも学習します。 これにより、セキュリティ チームがフォレンジック、検出、API レベルのマイクロセグメンテーションのためにサービス間の相互作用を視覚化するのに役立つサービス グラフを構築できます。
残りの 2 つの機能 (異常検出と動作プロファイリング) の追加に着手する前に、既存のソリューションが役立つかどうかを確認することにしました。 市場には境界ファイアウォールや Web アプリケーション ファイアウォール製品が数多く存在しますが、これらのソリューションの大部分はインターネットに接続されたアプリケーションの保護を目的としています。 これらは、処理対象のトラフィックが Web トラフィックであるという一定の前提に基づいて、HTML、JavaScript、SQL、CMS などに的を絞った保護を提供します。これにより、脆弱性や既知のエクスプロイトを検出するためのシグネチャやルールの作成が比較的容易になります。
この機能は Web トラフィックにとって重要ですが、私たちの環境では増加し続ける API およびマシン間トラフィックも処理する必要があります。 これを解決するには、セキュリティ チームが、既知の一般的な Web ルール (OWASP CRS など) に該当しないアプリ固有のルールを作成する必要があります。 通常、セキュリティ管理者はアプリについてあまり知識がなく、環境の動的な性質により、アプリの種類と構造を追跡してアプリ固有のルールを記述することがさらに困難になります。 その結果、当社のプラットフォーム チームはネットワーク データパスでこの機能を提供していますが、セキュリティ チームではあまり使用されていません。
私たちのネットワークから大量のデータが収集されるもう 1 つの問題は、アプリ攻撃が時間の経過とともにますます高度化していることです。 攻撃者は、HTTP/TCP 署名などを調べて、API、アプリ、基盤となるインフラストラクチャ、OS の種類の詳細を判断するために、何日もかけて偵察を行います。 従来の署名とルールベースのアプローチは、このような状況では非常に限られた用途しか持たないため、当社は AI ベースのアプローチを継続して、ユーザーの行動を自動的に学習し、良い行動と悪い行動を区別することにしました。
ほとんどのアプリには特定のワークフロー (API のシーケンス) とコンテキスト (API 内のデータ) があり、それに基づいてさまざまなユースケースやデプロイメントが設計され、通常はアプリのユーザーがそれに従います。 私たちはこれらの特性を活用し、機械学習アルゴリズムをトレーニングして、アプリとの一般的なユーザーインタラクションにおける「有効な」行動パターンをモデル化します。
データパスは、各 API のリクエスト/レスポンスと関連データをサンプリングし、図 3 に示すように中央学習エンジンに送信します。 このエンジンは、有効な動作パターンのモデルを継続的に生成および更新し、データパスで実行されている推論エンジンによって使用され、疑わしい動作を警告/ブロックします。
学習エンジンは、API のシーケンス、リクエスト間のギャップ、同じ API への繰り返しリクエスト、認証の失敗など、多くのメトリックを調べます。 これらの指標はユーザーごとに分析され、集計ベースで良い行動と悪い行動を分類します。 また、行動クラスタリングを実行して、「良い行動」の複数の異なるシーケンスを識別します。 これを説明するために例を見てみましょう。
次の一連のAPIは、システムによって疑わしい/不正な動作としてフラグが付けられ、システムによって自動的に軽減されるか、管理者が介入するためのアラートが生成されます。
このシステムを 1 年以上前に実稼働させて以来、使用状況と顧客からのフィードバックに基づいてモデルを継続的に改良してきました。 私たちは以下の種類の攻撃を特定することに成功しました:
とはいえ、このアプローチにはいくつかの問題があることもわかりました。つまり、異常検出技術を適用する必要がある低速で遅い攻撃 (ブルートフォース、アプリのサービス拒否、スキャナー) を発見できないのです。
時には、当社の行動分析技術をすり抜ける大規模な分散ボットネットを使用した、非常に洗練された攻撃が発生することがあります。 このような攻撃の例は次のとおりです。
ネットワーク データパスはグローバル ネットワーク全体の各ノードから情報を収集するため、リクエスト レート、エラー レート、応答スループットなどの特定のアプリの集計メトリックの分析を比較的簡単に実行できます。 この分析により、ボットネットの一部である可能性のあるユーザーを特定することで、分散型攻撃を検出し、(すべてのノードで)攻撃を軽減することができます。 リクエスト レートを確認して、さまざまな時間枠 (過去 5 分、30 分、4 時間、24 時間) にわたって異常を検出しようとしている例を見てみましょう。特定の時間枠内でリクエスト レートが高い場合、システムによってアクセス ログの次の詳細な分析が実行されます。
異常検出はファイアウォール アプライアンスの侵入検知および防止 (IDS/IPS) にとって常に重要な技術ですが、これらのアプライアンスではグローバルなアプリ層攻撃を軽減することはできません。 当社のグローバル プラットフォーム全体で API マークアップと学習を実行できるようになったことで、分散ネットワーク全体のソースで攻撃を抑制できるようになりました。
サービス メッシュと API ゲートウェイに基づくゼロ トラストの実装には非常に満足していましたが、分散アプリケーション クラスターを脆弱性や悪意のある攻撃から保護するには包括的ではないことに気付きました。 より優れたセキュリティ ソリューションを提供するために、従来のシグネチャ + ルールベースの手法に加えて、動作分析 + 異常検出のための機械学習を追加する必要がありました。
集中型 SaaS で実行される学習コアに加えて、L3-L7+ ネットワーク データパスに分散推論を追加することで、次の 3 つの大きなメリットが得られました。
ネットワークとアプリのセキュリティは終わりのない滑走路であり、追加すべき新機能のバックログがまだたくさんあるようです。 近い将来、私たちが実装した増分アルゴリズムとテクニックに関する追加の洞察を共有するために戻ってきます。
このブログ シリーズでは、パブリック クラウド、プライベート ネットワーク PoP、エッジ サイトにある多数のアプリ クラスターを使用して、グローバルに分散された SaaS サービスを構築および運用するために必要なさまざまな側面について説明します。 次は「グローバルに分散されたプラットフォーム全体の可観測性」です(近日公開予定)…