QueryPie gRPC DAST セキュリティ: ZAP カスタムスクリプトの例
2025年2月6日
QueryPie gRPC セキュリティ: ZAP スクリプトの適用事例
QueryPie は、高いパフォーマンスと安定性を実現するために、gRPC 通信方式を採用しています。gRPC は、HTTP/2 をベースにプロトコルバッファを使用して高速かつ軽量な形式でデータを送信する効率的な通信プロトコルであり、ネットワークリソースを最適化します。また、クライアントとサーバー間の双方向ストリーミングをサポートし、リアルタイムのデータ処理を実現するとともに、さまざまな言語やプラットフォームとの優れた互換性を提供します。本ホワイトペーパーでは、gRPC で実装されたウェブアプリケーションの脆弱性スキャンで遭遇した主な問題を検証し、解決策を提案しています。
gRPC 脆弱性診断は、なぜ難しいのか?
テキストベースの HTTP/1.1 とは異なり、HTTP/2 のバイナリ形式では、一般的なプロキシツール (例:Burp Suite、ZAP) を使用してリクエストやレスポンスを読み取ったり、変更したりすることが困難です。gRPC は、データシリアライゼーションにプロトコルバッファ (Protobuf) を使用していますが、これは JSON や XML とは異なり、バイナリ形式であり、解析がより困難です。
以下は gRPC で実装されたウェブアプリケーションのパケット例を見てみると、POST リクエストデータは一見、「cat」という文字が Base64 でエンコードされているように見えます。


しかし、「cat」という文字を再度 Base64 でエンコードすると、既存の POST データと異なることがわかり、そのリクエストがサーバーで正常に処理されないことが確認できます。


gRPC データでは、.proto ファイルを通じてメッセージ構造を分析し、追加のエンコード/デコード作業を行う必要があります。しかし、ほとんどのプロキシおよび DAST ツールは、gRPC エンコード/デコードをネイティブにサポートしていないか、サポートが限定的です。さらに、脆弱性スキャン中にこれらの作業を手動で繰り返すのは時間がかかります。この問題に対処するには、DAST スキャン中に gRPC エンコード/デコードプロセスと脆弱性識別を自動化することが不可欠であり、生産性を向上させる必要があります。
効率的な gRPC 脆弱性診断のための ZAP 活用法
ZAP は、ウェブアプリケーションの脆弱性スキャン用として広く使用されているプロキシおよびDAST (動的アプリケーション・セキュリティ・テスト) ツールです。カスタムスクリプト機能により、自動スキャン中にローカルファイルを実行したり、その他のタスクを実行したりすることができます。これにより、gRPC POST リクエストデータのデコード、攻撃ペイロードの挿入、送信のための再エンコードが可能になります。さらに、gRPC サーバーの応答をデコードおよび分析することで、脆弱性検出プロセスを自動化することができます。
ZAP のカスタムスクリプトは3つの異なるエンジンをサポートしており、特に ECMAScript (Graal.js) エンジンは柔軟なコーディングを可能にし、テスターに高い自由度を提供します。これにより、テスターはコードを記述し、シェルコマンドをローカルで実行することができ、幅広いタスクが可能になります。