コンテンツに移動
セキュリティ & アイデンティティ

reCAPTCHA Enterprise と Apigee X で API を不正行為や悪用から守る方法

2022年10月19日
https://storage.googleapis.com/gweb-cloudblog-publish/images/apigee_x.max-2000x2000.jpg
Google Cloud Japan Team

※この投稿は米国時間 2022 年 10 月 8 日に、Google Cloud blog に投稿されたものの抄訳です。

包括的な API セキュリティ戦略には、不正行為や悪用からの保護が不可欠です。不正行為に関与する悪意あるソフトウェアから、公開中の API を保護するため、CAPTCHA を配備して悪用パターンを阻止できます。Google Cloud の reCAPTCHA Enterprise と Apigee X のソリューションを導入すれば、攻撃を防ぎ、API の攻撃対象領域を縮小し、ユーザーへの影響を最小限に抑えることができます。

Google Cloud の API 管理プラットフォームである Apigee X は、HTTP リクエストとレスポンスに対するリバース プロキシ アプローチを使用して API を保護します。Apigee X の重要な特長の一つとして、リクエストの認証(AuthN)段階で reCAPTCHA Enterprise の課題を含められることが挙げられます。

この投稿では、API を保護するために reCAPTCHA プロキシフローをプロビジョニングする方法を示します。完全なコードサンプルは、この GitHub リポジトリから入手できます。

CAPTCHA の実装に Apigee X を使用すべき場合とその理由

reCAPTCHA Enterprise をウェブ アプリケーションと API の保護(WAAP)ソリューションの一部として使用する第一の方法は、Cloud Armor を介して reCAPTCHA Enterprise を利用することです。純粋に API ベースのソリューションを求めているデベロッパーは、Apigee X を使用して reCAPTCHA プロセスを一連の Apigee X プロキシフローとして定義できます。この専用ソリューションでは、可能な限りの API セキュリティ コードが Apigee に組み込まれています。

この方法を採用すると、コードの保守も容易になり、API ビジネスルールをコードで管理できます。reCAPTCHA プロセスは、個別に、または共有フローの形で、Apigee プロキシに直接含めることができます。その後、API ビジネスルールに従って、このコードをすべての Apigee プロキシコードと同じソース管理に追加できます。

まずは reCAPTCHA Enterprise の実装をいくつか見てから、それらを Apigee X の実装例と比較してどちらが自社に適しているかを判断してください。

reCAPTCHA Enterprise の概要

reCAPTCHA 課題ページは、受信した HTTP リクエストを reCAPTCHA Enterprise にリダイレクトできるため、悪意のある攻撃の阻止に役立ちます。reCAPTCHA Enterprise が Cloud Armor と統合されていて、課題ページ オプションが選択されている場合、Cloud Armor のポリシールールが受信 URL / トラフィック パターンと一致すると、reCAPTCHA がトリガーされます。

CAPTCHA 疲れ(CAPTCHA による確認が多すぎることによるマウスクリックの疲労)を防ぐため、デベロッパーは reCAPTCHA セッション トークン(これについては後述します)の使用を検討する必要があります。課題ページは、HTTP リクエストをプログラムで反復的に発行する bot に対処する場合に最も有効です。課題ページのリダイレクトと reCAPTCHA による確認により、悪意のある bot からのリクエストを阻止できます。ただし、課題ページは正当なユーザーの操作も妨げる可能性があります。reCAPTCHA 課題ページは、悪意のない人間のユーザーにとっては望ましくありません。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_sequence_diagram_redirect.max-1100x1100.jpg

詳細については、reCAPTCHA 課題ページのドキュメントをご覧ください。

重要なユーザー インタラクションを保護するため、reCAPTCHA Enterprise ではアクション トークンというオブジェクトが使用されます。これにより、人間のユーザーとその正当なやり取り(ショッピング カートの精算や、セキュリティ対策が必要な機密情報を含むナレッジベースへのリクエストなど)を保護できます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_sequence_diagram_action_token.max-1100x1100.jpg

reCAPTCHA Enterprise アクション トークンの詳細については、reCAPTCHA アクション トークンのドキュメントをご覧ください。

アクション トークンの代用となるセッション トークンは、サイトのドメインでのユーザー セッション全体を保護します。これを使用すると、デベロッパーは既存の reCAPTCHA Enterprise 評価を再利用できます。これは(暗号化用ではなく)認証用のセッションキーに似ています。サイトのすべてのウェブページで reCAPTCHA セッション トークンを使用することをおすすめします。これにより、reCAPTCHA Enterprise でサイト全体を保護し、サイトをクロールしている bot のような人間のブラウジング パターンから逸脱したものを認識できます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_sequence_diagram_session_token.max-1100x1100.jpg

詳細については、reCAPTCHA セッション トークンのドキュメントをご覧ください。

Apigee X と reCAPTCHA Enterprise の併用

上記のことはすべて、Cloud Armor がなくても Apigee X で行うことができます。reCAPTCHA Enterprise による確認を開始する Apigee X フローのコードを以下に示します。このコードは、GitHub リポジトリ ファイルの SC-AccessReCaptchaEnterprise.xml からも入手できます。

読み込んでいます...

最も重要な行は、(上の図に示す)POST リクエストによる reCAPTCHA handshake の開始です。この POST リクエストには、reCAPTCHA トークン(前述のアクション トークンとセッション トークンのどちらか)と reCAPTCHA サイトキー(reCAPTCHA Enterprise でどのようにして API エンドポイントを保護するか)の両方が含まれます。

読み込んでいます...

次の図は、この GitHub リポジトリに含まれるすべてのプロキシ定義について説明したものです。reCAPTCHA トークンはクライアント アプリによりサイレントかつ周期的に取得され、API の呼び出し時に Apigee ランタイムに送信されます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/4_sequence_recaptcha_enterprise.max-1500x1500.jpg

この例の共有フロー構成では、reCAPTCHA トークンの検証ステータスとリスクスコアを Google reCAPTCHA Enterprise 評価エンドポイントから取得できます。sf-recaptcha-enterprise-v1 Apigee X 共有フローは、reCAPTCHA トークンの検証ステータスとリスクスコアを Google reCAPTCHA Enterprise 評価エンドポイントから取得します。リスクスコアは、0.0~1.0 の範囲の小数値です。スコア 1.0 は、そのインタラクションのリスクが低く、正当である可能性がきわめて高いことを示します。それに対して 0.0 は、そのインタラクションのリスクが高く、不正アクセスの可能性があることを示します。それらの間の数値については、共有フローの処理によって API 呼び出しを拒否するかどうかが決定されます。このリファレンスの目的では、最小スコアを 0.6 にします。この値は構成可能で、クライアント アプリケーションのリスク プロファイルに応じて増減できます。

共有フロー(sf-recaptcha-enterprise-v1)は、パイプライン スクリプトによって Apigee X にデプロイします。これには、reCAPTCHA Enterprise 参照の完全な構成に加えて、以下のアーティファクトが含まれます。

  • recaptcha-data-proxy-v1: reCAPTCHA Enterprise 共有フローを呼び出すデータプロキシ。このプロキシのターゲット エンドポイントは httpbin.org です。

  • recaptcha-deliver-token-v1: 有効な reCAPTCHA トークンを含む HTML ページを提供するために使用される API プロキシ(上記のオプション 2 を参照)。このプロキシは、本番環境で使用することは想定されておらず、テスト段階でのみ使用します。

  • reCAPTCHA Enterprise API プロダクト

  • デベロッパー(Jane Doe)

  • app-recaptcha-enterprise: オプション 1 が選択された場合の 1 つのデベロッパー アプリ

  • オプション 2 が選択された場合の、実際のアプリ認証情報と reCAPTCHA Enterprise サイトキーを含む次の 2 つのデベロッパー アプリ

    • app-recaptcha-enterprise-always0

    • App-recaptcha-enterprise-always1

Google Cloud のウェブアプリと API の保護(WAAP)ソリューション

この実装は、Google Cloud の WAAP ソリューションの一部です。Google の WAAP セキュリティ ソリューション スタックは、ウェブ アプリケーション ファイアウォール(WAF)、DDoS 回避、bot 対策、コンテンツ配信ネットワーク、ゼロトラスト、API 保護を一つにまとめた包括的なソリューションです。Google Cloud WAAP ソリューションは、Cloud Armor(DDoS とウェブアプリの防御)、reCAPTACHA Enterprise(bot 防御)、Apigee(API 防御)で構成されています。このソリューションは、ウェブ アプリケーション、API、関連するアセットを保護するために設計された一連のツールおよびコントロール群です。WAAP ソリューションの詳細については、こちらをご覧ください。
https://storage.googleapis.com/gweb-cloudblog-publish/images/5_waap_solution_architecture.max-1200x1200.jpg

Google の WAAP セキュリティ ソリューションは、以下の原則に基づきます。

デフォルトで安全

  • テスト済みの実証されたコンポーネントとコードを基に構築されている

危険な機能を検出

  • 新しいコードをレビューする

  • 安全なパターンをバイパスする場合は正当な理由が必要

  • リスクの高いアクティビティを精査する

自動化 

  • ユーザーが複数回行う処理は自動化する

次のステップ

こちらからコードを入手し、reCAPTCHA Enterprise Apigee プロキシフローのコードをご自身でお試しください。既存の reCAPTCHA トークンとサイトキーが必要なので、最初にそれらを取得してください。準備ができたら、プロキシの保護Advanced API Security の概要のドキュメントを読んで Apigee X のすべてのセキュリティ機能を調べることができます。


- 戦略的クラウド エンジニア Waheed Brown
- プロダクト マネージャー Nandan Sridhar

投稿先