gRPCテスト・スイートとgRPCウィザードにより、Defensicsでプロトコル・バッファ定義から独自のテスト・シーケンスを作成する方法についてご紹介します。
著者:Janne Ruotsalainen、Synopsysのシニア・ソフトウェア・エンジニア、およびAndy Pan、セキュリティ・ソリューション・マネージャー
Synopsys Defensics®ファジングテストは、ネガティブ・テスト市場をリードするツールとして、現在300を超えるテスト・スイートを提供し、システムのセキュリティと堅牢性を確保しています。Defensicsは現在、マイクロサービス、モバイル、Web、およびIoTアプリケーションで使用される一般的なgRPCフレームワークをサポートすることによって、トランスポート・プロトコルのテストを拡張しています。gRPCフレームワークでは、トランスポート・プロトコルとしてHTTP/2、そのサービス定義のためにProtobuf(プロトコル・バッファ)を使用します。このフレームワークでは、Go、Java、C++、Pythonなどの多数のプログラミング言語でクライアントとサーバーのバインディングを作成するためのツールが提供されます。このコード・バインディングは、Protobufの定義に基づいて自動的に生成されます。
Protobufは、構造化されたデータをシリアライズするためのオープンソース・メカニズムで、インターフェイス定義言語(IDL)を使って定義されます。Protobuf IDLは、メッセージ構造とシステムのリモート・プロシージャ・コール(RPC)サービスを定義します。Protobufには、Protobufの定義からシリアライズ・コードを生成するプロトコル・コンパイラも含まれています。gRPCフレームワークは、データをネットワーク・ノード間で送信する際にシリアライズとデシリアライズを行います。
Defensicsは、モデルベースのファザーです。基本的なDefensicsテスト・スイートは、プロトコルの仕様に基づいて作成されています。しかし、gRPCの場合は、各システムが独自の定義を持っているため、それが機能しません。私たちは、さまざまなフィールドに使用する基本的なエンコードは知っていますが、効果的なテスト・ケースを作成するには、テスト対象のシステムについて詳しく知る必要があります。
gRPCファジングのもう一つの問題は、私たちが、Protobufの定義からプロトコル・モデルとサービス・エンドポイントを知ることができても、テスト対象のシステムでRPCがどのように使用されているか、メッセージを通じてどのようなデータが送信されるかを知らないということです。各RPCに対して個別にテスト・シーケンスを作成することはできますが、ほとんどシステムには、RPC Bの前にRPC Aを送信する必要があり、サーバーはRPC Bを受信するのに適した状態になるという内部状態があります。
gRPCテスト・スイートでは、gRPCウィザードを使用してProtobufファイルをDefensicsにインポートすることができます。gRPCウィザードは、Protobufの定義を取り込んで解析し、ファイルで定義されている使用可能なリモート・プロシージャ・コールを表示します。その後、RPCを使って、テスト対象のシステムに関連するテスト・シーケンスを作成することができます。関連するテスト・シーケンスの作成に加え、このウィザードでは、関連する有効な値がメッセージ・フィールドに入るように、各送信メッセージを修正することもできます。これは、gRPCテスト・スイートがテスト・ターゲットとの相互運用性を確保するために行います。
次の図は、gRPCウィザードの事例を示しています。インポートされたファイルはexample.protoです。
必要な設定を完了すると、gRPCウィザードはgRPCテスト・スイート用のシーケンス・ファイルを作成します。このシーケンス・ファイルが新しいgRPCテスト・スイートのインスタンスにロードされると、テスト・ケースが自動的に生成され、テスト・ターゲットをファジングできるようになります。
次の図は、example.protoに基づいて生成されたテスト・ケースのリストを示しています。
gRPCテスト・スイートは、Protobuf/gRPCパーサーとアプリケーション・コードの両方をファジングすることができます。ほとんどのユーザーにとって、ファジングで興味深いのは、通信にgRPCを使用するアプリケーション・レベルの実装です。ファジングの速度を向上させるには、テスト・ケースをProtobufフィールドのコンテンツ(アプリケーション・レベルの実装で使用されるデータ)に制限するようにgRPCテスト・スイートを設定します。
Defensicsは、300を超えるその他のプロトコルに加え、ほとんどのスマートホーム向けワイヤレスおよびIoTプロトコルをサポートする、包括的で強力な自動ブラックボックス・ソリューションです。Defensicsは、テスト対象のプロトコルを認識しているジェネレーション(世代)型ファジング・ツール(ファザー)です。Synopsysのすべてのワイヤレス・テストは、デバイスをボックス化して無線で実行できるため、ソースコードへのアクセスが不要です。ファジングテストをCI/CDパイプラインに統合する場合、Defensicsでは、Jenkinsプラグイン、CLI、REST APIを利用したヘッドレス・テストの統合が可能です。3つの統合インターフェイスはすべて、ファジング・ツールの設定、テストの実行と進捗状況の追跡、テスト・レポートのエクスポートの基本的なワークフローを実現します。
詳細について知りたい場合や、お使いのシステム・セキュリティのニーズに適したテスト・スイートをお探しの場合は、DefensicsのWebページをご覧ください。