一般的なクエリ言語 GraphQL API をエクスプロイトから保護する方法

GitHub、Credit Karma、Intuit、PayPal などの多くの企業が、アプリケーション プログラミング インターフェイス (API) のクエリ言語であり、既存のデータを使用してクエリを実行するランタイムである GraphQL を使用しています。

Gartner の最近のレポートによると、2021 年の 10% 未満の企業が、2025 年までに 50% 以上の企業が本番環境で GraphQL を使用するようになるとのことです。もともと Facebook によって開発された GraphQL は、アプリケーション プログラミング インターフェイス (API) の構築に代替手段として使用されています。よく知られている REST と SOAP に。

オープン ソース言語は、2012 年の登場以来、API の構築と呼び出しにネイティブの柔軟性が提供されるため、人気を博しています。 GraphQL サーバーとクライアントは連携して動作するため、クライアントはクエリを指定し、サーバーはさまざまな言語で動作する GraphQL 実装でデータを検証します。

そこで、GraphQL API に関連する API セキュリティの問題と、Open Web Application Security Project OWASP API Security Top 10 で取り上げられている脅威を含む、GraphQL API を保護するためのベスト プラクティスについて説明しましょう。

GraphQL を使用すると、1 回のクエリ呼び出しで複数のリソース リクエストを作成できます。これにより、サーバーへのネットワーク ラウンド トリップの回数が減り、時間と帯域幅が節約されます。 また、IT が以前の要求に依存するリソースを解決する必要がある場合に、ウォーターフォール ネットワーク要求を節約するのにも役立ちます。

これにより、大規模なデータ リソースをフレームワークに簡単に取り込めるようになり、Facebook などのページに自分のプロフィール、友達のデータ、オンライン広告、地図を含めることができます。

GraphQL API が正しくコーディングされていない可能性があるため、潜在的なセキュリティの問題が発生する可能性があり、データの侵害、アクセス制御の問題、およびその他の高リスクの脆弱性が発生します。 Open Web Application Security Project (OWASP) が公開している GraphQL チート シートのいくつかの項目に取り組むと、GraphQL API を保護するために最低限必要なものがわかります。

インジェクションには、OS コマンド インジェクション、SQL スタイル インジェクション、およびファイル インクルージョン タイプ インジェクションが含まれます。 これは、入力の検証が非常に重要であることを意味します。 クライアントが提供するデータを、何らかのタイプの検証なしに信頼すると、これらのインジェクション スタイルのいずれかが発生する可能性があります。

OWASP GraphQL チート シートから得られるインジェクションの最大のポイントは、ホワイトリストを介して特定の入力のみを許可し、過度の詳細がなければ不十分な入力を適切に拒否することです。

ほとんどすべてのサービス拒否攻撃は、リソースの消費に基づいています。 サーバーが 1 秒あたり 10 億の要求に応答するために拘束されている場合、サーバーの速度が低下してクラッシュし、バックアップ デバイスまたは負荷分散デバイスでより多くのリソースが消費されます。

幸いなことに、単純な深さと要求制限で、再帰攻撃や標準的なリソース消費攻撃を含むサービス拒否攻撃を阻止することができます。 同様に、ページネーションを追加すると、サーバーは大量のデータ フェッチでメモリを占有せず、一度に 1 ページしかフェッチしません。

タイムアウトなどの他の多くの手法は、コンテンツ配信ネットワーク (CDN) フロント エンド プロバイダーに移行するだけでなく、簡単に実装できます。

承認の単純なルールは、エンド ユーザーが何に触れていても表示/変更/作成/削除が許可されていることを検証することであり、リクエストごとに検証する必要があります。 これにより、安全でない直接オブジェクト参照 (IDOR) 攻撃やミューテーション攻撃を防ぐことができます。

バッチ攻撃の場合、機能するいくつかのクエリを見つけ出し、それらを 1 つの大きなクエリに投入して、サーバーにデータをバッチでフェッチさせることができます。 これにより、特定のタイプのすべてのレコードのデータをプルするなどのことが可能になります。 バッチ処理により、被害者 API を使用して大量のデータを盗み出し、重労働を行うことができます。

私の重要な提案は、イントロスペクションが有効になっていないことを確認し、GraphQL プレイグラウンドが無効になっているか、少なくとも公開されていないことを確認することです。 API をテストするとき、または単純に API の要求と応答を確認するときは、API を悪用するために何ができるかを考えてください。 エラーメッセージが表示された場合は、それを読んでください。 それは役に立ちますか、まだ過剰なエラーを有効にしていますか?

OWASP GraphQL チート シートを見て、GraphQL 環境を提案と比較すると、確かにいくつかの優れた最初のステップがアドバイスされます。 次にどこへ行くかは、個人のリスク許容度とセキュリティ ジャーニー次第です。

包括的な API 保護には、完全な API の可視性、ランタイム リスク評価、修復をネイティブのインライン攻撃防御と組み合わせた防御優先のアプローチが必要です。 GraphQL API に関連する潜在的なセキュリティ イベントを最小限に抑えるのに役立つベスト プラクティスをまとめました。

ステップ1: API の検出とインベントリの追跡: 見えないものを保護することはできません。 インラインまたはアウトオブバンド データ コレクションを使用した API 管理インフラストラクチャの要素との統合により、GraphQL API を含むすべての API が検出、追跡、分類され、それぞれの所有者に割り当てられます。

ステップ2: API のリスク評価と修正: 事前定義済みまたはカスタムのリスク評価ルールを使用して、最終的なセキュリティ チェックとして機能することで、認証が弱い、機密データが公開されている、詳細なエラー メッセージが使用されている、または公開されている仕様に準拠していない API を発見して修正できます。

ステップ 3: 攻撃および脆弱性エクスプロイトからのネイティブなインライン保護: 完全にコード化された API でさえ攻撃される可能性があるため、事前定義されたカスタマイズ可能なポリシーと、ログ、ブロック、レート制限、アプリまたは API ごとに構成されたジオフェンス、ヘッダー インジェクション、または欺瞞。

GraphQL API を攻撃から保護する場合、API 保護ソリューションには、OWASP API Security Top 10 にリストされているすべての脅威に対する包括的でネイティブな保護が含まれている必要があります。

避けるべき落とし穴

# 攻撃者が簡単に回避できる WAF などの署名ベースのツールは避けてください。

# DevOps のみに焦点を当てたツールから離れて、コードの修正中に脅威を防止するためのバランスの取れたアプローチを欠いています。

# この機能を検証するためにベンダー独自のテスト スイートを使用することは避けてください。 API とそれらを標的とする脅威に基づいて一連のテストを作成します。

# 脅威をネイティブに軽減できず、WAF などのサードパーティ製ツールのみに依存する API セキュリティ ツールは使用しないでください。 このようなツールは、検出と応答の間に時間の遅延を引き起こし、平均よりも高い誤検知を引き起こし、API が侵害されやすくなります。

統合 API 保護 (UAP) ソリューションを選択するには、API セキュリティ ライフサイクルのすべてのフェーズに対応して、GraphQL API を攻撃者から保護し、データ損失、詐欺、およびビジネスの中断につながる可能性のある未知の軽減されていない API セキュリティ リスクを排除するものを探します。

包括的な UAP は、すべてのマネージド API とアンマネージド API の完全なランタイム インベントリを作成する必要があります。 検出された API のリスクは修復のためにフラグを立てる必要がありますが、高度な脅威はリアルタイムで検出および軽減されます。

その結果、データの損失、盗難、詐欺、ビジネスの中断を引き起こす API の脅威から完全に保護されます。

.

Leave a Comment

Your email address will not be published. Required fields are marked *