機能

GraphQL Deep Inspection

GraphQLトラフィックを単純なPOSTボディとして扱わない — WAAP内でイントロスペクション、ネストDoS、クエリバッチングパターンを検出します。

TR7 GraphQL Deep InspectionはGraphQLトラフィックをRESTと同じように処理しません。単一のGraphQLエンドポイントは通常、複数のオペレーション、ネストクエリ、変数、バッチクエリ構造を運びます — URLとメソッドレベルで止まるセキュリティコントロールは重大なリスクを見えなくします。 TR7 WAAPはシグネチャベースの検出を使用してイントロスペクション試行、過度なネストクエリパターン、クエリバッチング動作を検出します。TR7エンリッチドルール50100、50101、50102はそれぞれスキーマ漏洩、ネストクエリDoS、バッチクエリ悪用に焦点を当てています。 GraphQLコントロールはquery、raw、json、formスコープで動作できます。`/graphql`などのエンドポイントに対して、メソッドallow-list、許可されたJSONキーチェック、ボディサイズ制限、カスタムルールでセキュリティポリシーをさらに絞り込むことができます。 結果:TR7はネイティブパーサーまたはスキーマを認識したフィールド検査を主張しません — しかし、最も一般的な本番環境のGraphQLリスク(イントロスペクション、ネストDoS、クエリバッチング)をWAAPシグネチャエンジン内で可視化して管理可能にします。

3
TR7エンリッチドGraphQLルール:50100イントロスペクション、50101ネストDoS、50102バッチ
5+
waf_db GraphQLバリアント:21360ファミリーとイントロスペクションバリアント
4
検査スコープ:query、raw、json、form

GraphQLは単一のエンドポイントで多くの機能を運びます — クラシックなWAAPロジックはそのほとんどを見逃します。

RESTトラフィックでは、エンドポイント、メソッド、パスが通常リクエストの内容を説明します。GraphQLでは、その情報はほとんどボディにあります。同じ`/graphql`エンドポイントが読み取り、書き込み、ネストクエリ、イントロスペクション、フラグメント、変数を使ったオペレーションを運ぶことができます。URLとメソッドレベルのみをチェックするセキュリティ層はGraphQLが実際に何をしているかを見ることができません。

GraphQLイントロスペクションが本番環境で開いたままであれば、アプリケーションスキーマが漏洩する可能性があります。どのタイプ、フィールド、関係が存在するかを知った攻撃者はより標的を絞ったクエリを作成できます。これは直接的なデータ漏洩ではないかもしれませんが、攻撃面をマップする深刻な情報開示です。

ネストクエリとフラグメントは異なるリスクを生み出します。過度にネストされたクエリは単一のHTTPリクエストでバックエンドに重い処理負荷を課すことができます。標準的なレート制限はリクエストを数えます — 単一リクエストのコストは見えません。GraphQLでは、DoSリスクは通常リクエスト量ではなくクエリ構造から来ます。

クエリバッチングも同様のギャップを生み出します。複数のクエリが1つのボディで送信されると、外部からは単一のHTTPリクエストのように見えますが、内部で複数のオペレーションが実行される可能性があります。これはクラシックなレート制限とエンドポイントベースのセキュリティコントロールを弱めます。

TR7 GraphQL Deep InspectionはパターンベースのWAAPルールでGraphQLトラフィックを検査します:イントロスペクション、ネスト深度DoS、クエリバッチング動作がquery、raw、json、formスコープで検出され、本番ポリシーに結び付けられます。

私たちのアプローチ

TR7はGraphQLセキュリティをスキーマ認識を主張するのではなく、最も一般的な本番GraphQL悪用パターンをWAAPシグネチャエンジンに取り込むことで対処します。

イントロスペクションパターンは本番環境でブロックできる

TR7は`__schema`、`__type`、`IntrospectionQuery`、`fragment FullType`などのイントロスペクション指標をregexベースのルールで検出します。これらのルールは本番環境でブロックモード、ステージング環境ではモニターモードまたは低いスコアで実行できます。

ネストクエリDoSパターンがスコアリングされ検出される

過度にネストされたGraphQLクエリは単一リクエストで重い処理負荷を生成できます。TR7の50101ルールファミリーはパターンレベルで深い`{ ... { ... } }`チェーンを検出し、高いスコアでWAAP決定に含めます。

クエリバッチング動作が単一リクエスト下で可視化される

1つのボディで複数のクエリを送信することはクラシックなレート制限ロジックを弱める可能性があります。TR7ルール50102はバッチクエリパターンを検出し、その動作をログ、スコア、ブロック決定に結び付けることを可能にします。

ボディスコープ検査がGraphQLペイロードを複数の場所で検索する

GraphQLクエリはrawボディだけでなく、JSON、フォーム、クエリ文字列フィールドでも運ばれる可能性があります。TR7ルールはquery、raw、json、formスコープで動作し、異なるクライアント実装を同じWAAPポリシー下に取り込みます。

機能

GraphQL Deep InspectionはシグネチャベースのWAAPルール、スコープ選択、エンドポイント強化コントロールでGraphQL固有のリスクを管理します。

TR7ルール50100がGraphQLイントロスペクション試行を検出する

ルール50100はGraphQLイントロスペクションでよく使われる`__schema`、`__type`、`IntrospectionQuery`、`fragment FullType`パターンを対象とします。デフォルトのリスクレベルは中程度の強さのシグナルとして位置付けられ、スコア4で評価できます。本番環境でイントロスペクションを閉じる必要があるエンドポイントでは、このルールをブロックまたはモニターモードで実行できます。スキーマ発見の試みがWAAPイベントストリームで可視化されます。

TR7ルール50101がネストクエリDoSパターンに焦点を当てる

ルール50101はパターンレベルで過度にネストされたGraphQLクエリを検出するために使用されます。深い`{`チェーンと重くネストされた構造は単一リクエストがバックエンドで高い処理コストを生み出す原因となる可能性があります。このルールはスコア6でより強い攻撃シグナルとして評価できます。目標はスキーマを認識した複雑性の計算を行うことではなく、危険なネストクエリパターンを早期に検出することです。

TR7ルール50102がクエリバッチング悪用を検出する

ルール50102は単一ボディで複数のクエリが送信されるバッチパターンを検出します。クエリバッチングは一部のクライアントにとって正当である可能性があるため、ルールの状態とスコア値はアプリケーションの動作に合わせて調整する必要があります。モニターモードで開始し実際のトラフィック観察で明確にすることが適切なアプローチです。悪用が確認されたら、ルールをブロッキングポリシーに移行できます。

waf_db GraphQLバリアントがイントロスペクションとネストパターンのカバレッジを拡張する

TR7エンリッチドルールに加えて、waf_dbには50100、50101、21360+ファミリーなどのGraphQLバリアントが含まれています。これらのバリアントは`__schema {`、`__type`、`__typename`、ネストmutationパターンなどの代替スペリングをカバーします。これにより単一のregexに依存することなく、イントロスペクションとネストクエリ動作のより広いシグネチャ表面が構築されます。オペレーターはこれらのルールの状態とスコア値をサービスごとにオーバーライドできます。

query、raw、json、formスコープが異なるトランスポート形式をカバーする

GraphQLクエリは常に同じ形式で届くとは限りません。一部のクライアントはJSONボディ内に`query`、`variables`、`operationName`フィールドを送信し、他のクライアントはrawボディまたはフォームフィールドを使用することがあります。TR7ルールはquery、raw、json、formスコープで動作し、これらの異なるトランスポート形式を検査のカバレッジに取り込みます。これはGraphQLエンドポイントで1つのボディ形式のみを信頼する誤りを減らします。

同じルールモデルがAPIエンドポイントとWebアプリケーションの両方のターゲットに適用される

GraphQLコントロールはapi_endpointとweb_applicationの両方のターゲットに適用できます。同じWAAPルールモデルは、サービスタイプに応じて異なる状態、スコア、スコープ値で管理できます。例えば、内部テストエンドポイントではイントロスペクションがモニターモードに留まりながら、公開本番エンドポイントではブロックできます。この柔軟性により、単一のルールセットを異なる環境ポリシーに適応させることができます。

StructureRuleDBがGraphQLエンドポイントの動作を絞り込むことができる

`/graphql`エンドポイントに対してPOSTメソッドのみを許可したり、期待されるJSONキーを`query`、`variables`、`operationName`に制限したり、ボディサイズ制限を適用するなどのコントロールを定義できます。これらのコントロールはGraphQLシグネチャの代替ではなく、それらを補完するポジティブセキュリティ層です。予期しないメソッドや予期しないJSONフィールドは早期段階で拒否できます。これによりエンドポイントの動作がより予測可能になります。

カスタムルールでアプリケーション固有のGraphQLパターンを追加できる

GraphQLトラフィックにアプリケーション固有のmutationパターン、フィールド名、リスクのあるオペレーション名が含まれる場合は、カスタムWAAPルールとして追加できます。例えば、ボディに特定の`mutation`キーワードや機密オペレーション名が現れたときに高いスコアを付けることができます。これらのカスタムルールはメインのWAAPスコアリングシステムに参加し、ログとSIEMストリームで可視化されます。スキーマを認識したフィールド検査なしでも、アプリケーション固有のリスクをパターンベースのルールで検出できます。

運用上の深さ

GraphQL Deep Inspectionは現在の実際の機能においてシグネチャベースです — オペレーションパース、複雑性計算、スキーマを認識したフィールドWAAPの主張はこのページの範囲外です。

01

パターンベースの検査

GraphQLコントロールはregexとスコープベースのパターン検出アプローチで動作します。オペレーションタイプの区別、実際の深さカウンター、クエリ複雑性スコア計算はこのモデルの一部ではありません。この区別は正確な位置付けのために特に重要です。

02

状態とスコアのオーバーライド

ルール50100、50101、50102、およびwaf_dbバリアントはサービスのニーズに応じてenabled、monitor、disabledに設定できます。スコア値もアプリケーションの偽陽性許容度に合わせて調整できます。本番GraphQLエンドポイントでの適切なロールアウトモデルはモニターモードで開始し、実際のトラフィック観察後にブロッキングに移行することです。

03

エンドポイント強化

GraphQLエンドポイントにメソッドallow-list、JSONキーallow-list、ボディサイズ制限を適用できます。これらのコントロールはシグネチャ検出と並んでリクエスト形状が期待されるコントラクトに準拠することを確認します。特に公開APIでは、`/graphql`エンドポイントで期待される形式のみを受け入れることで攻撃面が絞り込まれます。

04

レート制限の境界

オペレーションごとのレート制限はGraphQLパーサーレベルでは適用されません。単一ボディ内のオペレーション数を意味的にパースして各オペレーションに別々の制限を適用するという主張はありません。クエリバッチングパターンはシグネチャとして検出でき、一般的なレート制限ポリシーと組み合わせて使用できます。

05

パーシステドクエリのスコープ

パーシステドクエリに対する専用サポートはこの機能の範囲内には含まれません。リクエストで見えるGraphQLパターンはWAAPシグネチャで検査されます。ハッシュからクエリを解決してスキーマまたは登録されたオペレーションデータと照合することはこのページでは主張されません。

06

スキーマ非認識モデル

特定のGraphQLスキーマフィールド — 例えば`User.email` — のレベルでのネイティブ検査は実行されません。ルールはボディに対するパターンマッチングアプローチで動作します。フィールド固有の要件がある場合は、カスタムregexルールで限定的かつ慎重に対処する必要があります。

使用する場面

本番GraphQLエンドポイントでのイントロスペクションのブロック

セキュリティチームはステージングでイントロスペクションを許可しながら、本番エンドポイントではルール50100をブロックモードで実行できます。スキーマ発見の試みはポリシーに従ってログ、スコアリング、ブロックされます。

スコアリングによるネストフラグメントDoS試行のブロック

過度にネストされたフラグメントまたはクエリ構造はバックエンドで高い処理コストを課す可能性があります。ルール50101はスコア6でこれらのパターンを検出し、WAAPブロッキング決定に強いシグナルを提供します。

モバイルAPIへのクエリバッチング攻撃の検出

モバイルクライアントエンドポイントへの単一リクエストで多数のクエリが試みられると、ルール50102がバッチパターンを検出します。運用チームは最初にモニターモードで動作を確認し、悪用が確認されたらenableモードに切り替えることができます。

GraphQLエンドポイントのメソッドとJSONキーのallow-list

APIチームは`/graphql`エンドポイントでPOSTメソッドと`query`、`variables`、`operationName`JSONフィールドのみを許可できます。予期しないメソッドやフィールドはアプリケーションに到達する前に拒否され、エンドポイントの動作が絞り込まれます。

よくある質問

TR7のGraphQLサポートはネイティブパーサーですか、パターンベースですか?
パターンベースです。TR7はGraphQL用の専用オペレーションパーサーまたはスキーマ認識エンジンを実行しません。エンリッチドルール50100、50101、50102はregexとスコープベースのパターン検出で動作します。オペレーションタイプの区別、実際の深さカウンター、クエリ複雑性計算はこのモデルの一部ではありません。このアプローチは最も一般的な本番リスク(イントロスペクション、ネストDoS、クエリバッチング)を検出するように設計されています。
本番環境でイントロスペクションを完全に閉じることができますか?
はい。ルール50100は`__schema`、`__type`、`IntrospectionQuery`、`fragment FullType`パターンを対象とします。このルールを本番エンドポイントでブロックモード、ステージングエンドポイントでモニターモードで実行することが可能です。スキーマ発見の試みはWAAPイベントストリームで可視化され、ポリシーに従ってブロックされます。
クエリバッチング検出は正当な使用に問題を引き起こしますか?
クエリバッチングは一部のクライアントにとって正当である可能性があります。このため、ルール50102をブロックモードで直接開始するのではなく、モニターモードで実行して実際のトラフィック動作を観察することをお勧めします。悪用が確認されたら、ルールをenabledまたはblockポリシーに移行できます。状態とスコア値はサービスごとにオーバーライドできます。
GraphQLルールはどのスコープで動作しますか?
TR7 GraphQLルールはquery、raw、json、formスコープで動作します。GraphQLペイロードがJSONボディ、rawボディ、またはフォームフィールドで運ばれても、同じWAAPシグネチャポリシーが適用されます。異なるクライアント実装が単一のルールセットでカバーされます。
waf_dbバリアントとエンリッチドルールの違いは何ですか?
TR7エンリッチドルール(50100、50101、50102)は特定のGraphQL悪用パターンに焦点を当てた主要ルールとして位置付けられています。waf_dbバリアントは`__schema {`、`__typename`、`mutation.*{.*{.*{`などの代替スペリングや追加のイントロスペクションパターンをカバーします。両方を合わせてより広いシグネチャ表面を構築します。オペレーターはサービスのニーズに応じて両方のレイヤーを独立して管理できます。
StructureRuleDBを使用したGraphQLエンドポイントの強化はどのように行いますか?
StructureRuleDBを使用すると、`/graphql`エンドポイントでPOSTメソッドのみを許可し、期待されるJSONキーを`query`、`variables`、`operationName`に制限し、ボディサイズ制限を適用できます。これらのコントロールはシグネチャ検出の代替ではなく、予期しないメソッドやフィールドを含むリクエストがシグネチャチェックに到達する前に拒否されることを確認するポジティブセキュリティ層です。

GraphQLエンドポイントをWAAPシグネチャエンジンに接続する

イントロスペクション、ネストDoS、クエリバッチングリスクを本番環境で可視化して管理可能にします。お客様自身のサービスでのライブセットアップを一緒に確認しましょう。