F5 XC WAAPのアドバンストなWAF機能紹介(Part.3 GraphQL Inspection)
目次[非表示]
はじめに
以前のブログ「F5 XC WAAPで実現!ベーシックなクラウドWAF」では、F5社のWAAPサービス「F5 XC WAAP」のベーシックなWAF機能「App Firewall」をご紹介しました。
F5 XC WAAPには他にもアドバンストなWAFの機能として以下が提供されています。
・Data Guard Rules
・Cross-Site Request Forgery Protection
・GraphQL Inspection
・Cookie Protection
上記機能の中で、今回は「GraphQL Inspection」 をご紹介します。
以下機能については以前のブログで紹介しているのでご覧ください。
・Data Guard Rules
「F5 XC WAAPのアドバンストなWAF機能紹介(Part.1 Data Guard)」
・Cross-Site Request Forgery Protection
「F5 XC WAAPのアドバンストなWAF機能紹介(Part.2 Cross-Site Request Forgery Protection) 」
GraphQLとは
GraphQLは、API向けに開発されたQuery言語です。GraphQL Queryを処理するサーバサイドのランタイムのことも意味します。
これまでAPIといえばREST APIが主流でしたが、それに代わるより効率的で柔軟な方法としてGraphQLが登場しました。REST API では、複数あるエンドポイントに、必要な複数回のリクエストを送信し、エンドポイントごとに事前に定義されたデータを取得する必要があります。GraphQLではユーザが必要なデータをQueryとして指定し、単一のエンドポイントに対して1回のリクエストで複数の情報を取得可能です。そのため、ネットワークの使用量を削減し、効率的なデータ取得が可能になります。また、GraphQLはバージョン管理が容易であるなど、開発の効率性が向上しています。
「GraphQL Inspection」とは
指定したGraphQL サーバエンドポイントのPathへのリクエストに対して検査を行うことができる機能です。GraphQL Queryの長さ、階層の深さや単一バッチ内のQueryの数を検査し、事前に指定した値以上の場合ブロックすることで、Queryを複雑化した悪意のあるリクエストによるQueryインジェクションやその他の攻撃の被害を軽減できます。
また、GraphQL schemaにサポートされているQueryに関する情報の問い合わせを行うIntrospectionについても制御可能です。アプリケーションでIntrospectionが有効となっている場合に、Introspection Queryを遮断する設定が可能です。開発の際は、Introspectionにより利便性の向上が期待できますが、攻撃者にとっては貴重な情報となるため、本番環境ではセキュリティ上の注意が必要になります。
「GraphQL Inspection」の設定方法
GraphQL Inspectionを利用するにあたって必要な設定は以下の2つのみです。
① HTTP Load BalancerでWAFを有効化
② GraphQL Inspectionを設定
それぞれの設定の詳細を以下でご紹介します。すべてHTTP Load Balancerの設定画面内でおこないます。
① HTTP Load BalancerでWAFを有効化
HTTP Load BalancerでWAF(App Firewall)を有効化します。
WAFの有効化手順は、以前のブログ「F5 XC WAAPで実現!ベーシックなクラウドWAF」でご紹介しています。こちらのブログにてご確認ください。
② GraphQL Inspectionを設定
GraphQL Inspectionの「Configure」からGraphQL Inspection設定画面に遷移し、「Add Item」からルールを追加します。
選択できる設定は以下の通りです。Description以外は必須設定です。
設定項目 |
設定内容 |
Name |
作成するルールの名前を入力する |
Description |
作成するルールの説明を入力する |
Domain |
GraphQL Inspectionを適用するDomainの条件を以下で指定する。
Any Domain:すべてのDomain名に対して適用
Exact Value:Domain名を完全一致で指定
Suffix Value:Domain名のSuffixを指定
|
Path |
GraphQL サーバエンドポイントのPathを入力する |
HTTP Method |
GraphQL サーバエンドポイントのPathにアクセスする際のHTTP MethodをGETまたはPOSTから選択する |
Maximum Total Lenght(B) |
Queryの最大合計長をバイト単位で指定する |
Maximum Structure Depth |
Queryの階層の最大深さを指定する |
Maximum Batched Queries |
単一バッチリクエスト内のQueryの最大数を指定する |
Introspection Queries |
Disable:Introspection Queryを拒否にする
Enable:Introspection Queryを許可にする
|
以下は、設定画面のサンプルとなります。
下記設定では、名前を「graphql-test-01」、HTTP MethodをPOSTとし、その他の設定はデフォルト値としています。
実際に攻撃を検知した場合、「Overview > Security > 該当のLB > Security Analytics」より、該当のSecurity Eventを確認することができます。
以下は、Maximum Total Lengthに設定した5000Bを超えるリクエストに対して、GraphQL Inspectionによりリクエストをブロックした際のSecurity Eventのサンプルとなります。
画像の様に、Event TypeはWAF、Violation nameは"VIOL_GRAPHQL_FORMAT"と表示され、matching_infoの”max length of query exceeded. Limit: 5000”からQueryの最大長5000Bを超えたことにより検知したことがわかります。
おわりに
今回は、F5 XC WAAPで利用できるアドバンストなWAF機能のうち、GraphQL Inspectionをご紹介しました。REST APIの代わりとして登場したGraphQLにより利便性が向上した一方、攻撃者にその機能を利用される可能性もございます。アプリケーションに合わせてGraphQL Inspection設定をすることで、GraphQLを利用した攻撃による被害を軽減できると考えております。
次回は、「Cookie Protection機能 」について、ご紹介する予定です。以前のブログ「F5 XC WAAPで実現!ベーシックなクラウドWAF」でベーシックなWAF機能(App Firewall)についてもご紹介しておりますので、こちらも是非ご確認ください。
F5 XC WAAPにご興味ございましたら、以下サイトからお気軽に弊社までお問い合わせください。
「F5 Distributed Cloud Web Application and API Protection (F5 XC WAAP)」