In this article
グレーボックステストの手法を理解する
ソフトウェアをテストすると、悪意のある攻撃者に悪用され、ソフトウェアの侵害につながる可能性のある抜け穴、脆弱性、リスク、脅威を発見できます。さまざまなアプリケーションセキュリティテスト手法がありますが、グレーボックステスト(grey-box testingとも表記)は、半透明テストとも呼ばれ、最も広く使われている手法の一つです。
グレーボックステストとは
グレーボックステストとは?
グレーボックステストは、ホワイトボックステストとブラックボックステストの手法を組み合わせ、ソフトウェア製品やアプリケーションの欠陥やセキュリティ上の脆弱性を検出します。Webアプリケーションの検査に役立ち、統合テスト、ペネトレーションテスト、ドメインテストにも効果的です。グレーボックスのペネトレーションテストでは、テスターがシステムにアクセスできる状態で実施されることが多く、ソフトウェアの抜け穴を見つけるために高度な攻撃を仕掛けることができます。
ホワイトボックステストでは、テスターはソースコードやソフトウェアの内部構造を把握しています。そのため、開発者の視点からアプリケーションをテストし、内部構造やコードを変更して不具合を修正できます。一方、ブラックボックステストでは、ユーザーやツールはアプリケーションの内部構造に関する事前知識を持ちません。このテスト手法では、アプリケーションの外部レイヤー(通常、外部の攻撃者がアクセスできるレイヤー)に着目します。グレーボックステストでは、テスターはテスト対象のアプリケーションについて部分的な知識を持っています。
グレーボックステストは、ブラックボックステストの効率性とホワイトボックステストの深さをバランスよく備えているため、よく選ばれるテスト手法です。
グレーボックステストの例
グレーボックステストを理解するために、投稿一覧を表示するWebアプリケーションを考えてみましょう。ユーザーが投稿をクリックすると、その投稿の詳細情報が記載されたページに移動します。たとえば、投稿詳細ページのURLはwww.example.com/post/title-of-the-post/12345のような形式で、12345はデータベース内の投稿固有のIDを表します。
グレーボックステストでは、次のような手順を実施できます。
投稿をクリックし、実際に新しいページが開くか確認する。
ページURLのIDパラメーターが、データベースから取得した投稿のIDと一致することを確認する。
権限のないユーザーがURLパラメーターを操作して、許可されていない投稿データにアクセスできないことを確認する。
提供されるデータの完全性が損なわれていないことを確認する。
一方、ブラックボックステストだけを行う場合は、次のようになります。
リンクをクリックし、記事の詳細情報が表示される新しいページが開くことを確認する。
ただしこの場合、テスターはアプリケーションの内部にアクセスできないため、ユーザーインターフェースで確認できる範囲を超えて、正しい投稿が表示されたかどうかを判断できません。
ホワイトボックステストとブラックボックステストの主な違いは、テストの深さです。テスターがソースコードにアクセスできるホワイトボックステストでは、より深いレベルで検証できます。実際のアプリケーションコードやデータを確認し、ロジックの正確性やデータの完全性などを検証できます。
グレーボックステストでは、攻撃者の視点とアプリケーションに関する知識を組み合わせて、脆弱性を発見できます。
どのテクノロジーやフレームワークにも、強みと弱みがあります。グレーボックステストでは、こうした知識を活用してアプリケーションのペネトレーションテストを行い、弱点を狙った高度な攻撃を組み立てることができます。たとえば、アプリケーションがJavaで書かれ、Javaのロギングフレームワークを使用しているとわかっていれば、Log4Jの脆弱性をテストできます。
グレーボックス、ホワイトボックス、ブラックボックスのテスト手法を比較
ここからは、ホワイトボックス、ブラックボックス、グレーボックスという3つのテスト手法の主な違いを見ていきましょう。
テストレベル
ホワイトボックステストでは、セキュリティテスターがアプリケーションに関する最大限の知識を持ってテストを行います。これに対し、ブラックボックステストでは情報が与えられず、外部の攻撃者の視点からアプリケーションをテストします。グレーボックステストでは、アプリケーションに関する部分的な知識を持ってテストを行います。
テスターの役割
ホワイトボックステストは通常、コードを記述または理解している開発者やテスターが実施します。ブラックボックステストは、アプリケーションの内部構造やコードを知らないテスターでも実施できます。グレーボックステストは、開発者とセキュリティテスターのどちらも実施できます。
必要なスキル
ブラックボックステストでは、必ずしも使用言語の知識は必要なく、比較的短時間で実施できます。一方、ホワイトボックステストには、使用されているプログラミング言語やテクノロジーに関する深い知識が必要な場合があり、より多くの時間がかかります。グレーボックステストには、使用言語やテクノロジーに関する部分的な知識が必要です。そのため、ホワイトボックステストはグレーボックスやブラックボックスのテスト手法より難易度が高くなります。
コスト
コスト面では、ブラックボックステストが最も安価ですが、通常、発見できる脆弱性は少なめです。ホワイトボックステストは最も高価で、通常はより多くの脆弱性を発見できます。グレーボックステストのコストと発見できる脆弱性の数は、その中間です。
グレーボックステストの種類
次に、グレーボックステストのさまざまな種類を見ていきましょう。
マトリックステスト
マトリックステストを使うと、開発者やテスターはアプリケーションが使用する変数を特定できます。また、冗長な変数や使われていない変数の特定にも役立ちます。
回帰テスト
回帰テストは、製品に変更を加えた後もソフトウェアが想定どおりに動作することを確認するために行うソフトウェア開発テストの一種です。ソフトウェアは定期的にアップグレードされます。回帰テストにより、アップデートや変更がアプリケーションのほかの部分に問題を引き起こしていないことを確認できます。
パターンテスト
このテストでは、以前のソフトウェアバージョンを調べ、欠陥や不具合につながるパターンを特定します。こうした不具合を参考にすることで、新しいバージョンのアプリケーションで同様の問題を特定し、防止できます。
直交配列テスト
この統計的なパフォーマンステスト手法では、複雑なアプリケーションをテストする際、最小限のテストケースで最大限のコードカバレッジを実現できます。
グレーボックステストで検証する項目
グレーボックステストで検証すべき重要な項目は次のとおりです。
内部のセキュリティ上の欠陥: アプリケーション内部のセキュリティホールをテストします。たとえば、従業員やメンバーの権限を持つログインユーザーだけが実行できる、特定の制限付き操作をテストできます。
入力フロー: 特定の入力がアプリケーション内をどのように流れるかをテストし、把握します。
出力の検証: 期待される出力が返されることを確認し、テストします。
コードパス: 破損しているコードパスや、構造が適切でないコードパスをテストします。
条件付きループ: 条件付きループの動作をテストします。
アクセス権の検証: 適切なアクセス権を持つユーザーだけが操作を実行できることを確認します。たとえば、管理者ユーザーのみが在庫から商品を削除できるエンドポイントをテストできます。
グレーボックステストの手法
自動テストツールやプロセスの成熟に伴い、アプリケーションの実行やテストは簡単になっています。SAST、DAST、IASTなどのツールを使えば、ほとんど手間をかけずにコードの品質と完全性を自動的に高めることができます。
適切なツールに加えて、グレーボックステストを実施するには、ソースコードに関する部分的な知識とアクセス権が必要です。アプリケーションのコードにアクセスできなければ、ブラックボックステストしか行えません。
グレーボックステストの手順は次のとおりです。
入力の選定: ホワイトボックスとブラックボックスの両方のテスト手法で使う入力を特定し、選定します。
出力の特定: 選定した入力に対して想定される出力を特定します。
パスの特定: テスト段階で主要なパス、または重要なパスをすべて特定します。パスに含まれる追加の関数(サブ関数)も記録してください。これらは、詳細なテストで主要なテスト関数の一部となります。
サブ関数の入力: 選択したサブ関数の入力を特定します。
サブ関数の出力: 選択したサブ関数に対して期待される出力を特定します。
テストケースの実行: サブ関数のテストケースを実行し、テスト結果の正確性を確認します。
繰り返し: 残りのサブ関数と関数について、手順4から6を繰り返します。
グレーボックステストのメリットとデメリット
グレーボックステストは、ブラックボックステストとホワイトボックステストの強みを生かすため、アプリケーションのペネトレーションテストで重要です。主なメリットとデメリットを以下に紹介します。
メリット:
ホワイトボックステストとブラックボックステスト両方の利点を生かし、アプリケーションの品質を高められる。
テスターに高度なプログラミングスキルは必ずしも必要ありませんが、コードに関する知識は必要です。
テスターと開発者の連携を強化できる。
効果が高く、時間もそれほどかからない。
デメリット:
テスターがコードパス全体にアクセスできない場合がある。
テストケースの設計が難しい場合がある。
テスターが把握できる内部構造は限られるため、完全なホワイトボックステストは実施できない。
開発者に愛され、セキュリティチームから信頼される。
Snykの開発者ファーストのツールは、ガバナンスやコンプライアンスのニーズに応える、統合された自動化セキュリティを提供します。
まとめ
グレーボックステストは、SASTのようなホワイトボックステスト手法と、DASTのようなブラックボックステスト手法を組み合わせたものです。ブラックボックステストでは、外部の攻撃者のようにコードの脆弱性や欠陥を探します。一方、ホワイトボックステストでは、ソースコードをスキャンして、悪用される可能性のある脆弱性を探します。