コンテンツにスキップ

アプリケーション セキュリティ理論

用語の説明

ソフトウェア バグ

ソフトウェアでは、バグとはソフトウェアの予期しない動作 (クラッシュなど) の原因になるコードのエラーを意味します。この用語は、実際の虫、蛾が初期のコンピュータをクラッシュさせたことに由来しています。通常、バグはソフトウェア開発者が構築した単体テストまたは QA チームによるモジュール テストで見つかります。

ソフトウェア欠陥

欠陥は、アプリケーションが要求仕様を満たしていない場合に発見されます。欠陥は、クライアントまたはユーザーがテストしているとき、またはエラーがみつかり、修正が開発途中である場合にも見つかることがあります。

ソフトウェア脆弱性

脆弱性は、悪意のある目的に利用される可能性があるソフトウェア バグまたは欠陥です。

既知の脆弱性

既知の脆弱性は、すでにベンダーにレポートされ、場合によっては回避策またはパッチが利用可能なバグを意味します。既知の脆弱性には MITRE によって共通脆弱性タイプ一覧 (CVE) と呼ばれる番号が割り当てられます。CVE には発見された年と続き番号が含まれます (例: CVE 2020-0654)。

未知の脆弱性またはゼロデイ脆弱性

ゼロデイ脆弱性は、まだベンダーにレポートされておらず、したがって回避策またはパッチが利用可能ではないバグまたは欠陥を意味します。未知の脆弱性は、何年にもわたって気づかれることなく利用できる悪意のあるアクターにとっては価値のあるものです。たとえば、悪意のあるアクターに Web サイトから秘密情報を抽出する機会を与えていたハートビート脆弱性は、発見まで 2 年近くの間、野放しになっていました。

ホワイトボックス テスト

ホワイトボックス (既知) テストは、アプリケーションの内部構造の情報を基にしてアプリケーションの機能を検証します。ホワイトボックス テストは、クリア ボックス テスト、オープン ボックス テスト、ガラス ボックス テスト、透明ボックス テスト、コードベース テスト、構造的テストとも呼ばれます。

ブラックボックス テスト

ブラックボックス (未知) テストは、アプリケーションの内部構造やコードの情報を基にせずにアプリケーションの機能を検証します。たとえば、サードパーティ製バイナリなどに適用できます。

グレーボックス テスト

グレーボックス テストは、ホワイトボックス (既知) テストとブラックボックス (未知) テストの混合です。

ポジティブ テストまたは確定的テスト

ポジティブ テストまたは機能テストは、アプリケーションに有効な入力のセットが与えられるテスト プロセスです。ポジティブ テストの目的は、アプリケーションが期待どおり動作していることを確認することです。このタイプのテストは、QA チームによって実施されるのが通常ですが、最近の DevOps 組織では、セキュリティまたは開発チームとの密接な協働で行われる場合があります。

ネガティブ テストまたは非確定的テスト

ネガティブ テストまたは非機能テストは、アプリケーションに無効な入力のセットが与えられるテスト プロセスです。ネガティブ テストの目的は、予期しないユース ケースでもアプリケーションが安定性を保つことを確認することです。このタイプのテストは、セキュリティ チームによって実施されるのが通常ですが、最近の DevOps 組織では、QA または開発チームとの密接な協働で行われる場合があります。

単体テスト

単体テストは、ソフトウェアの個々のユニット/コンポーネントをテストします。ユニットは、ソフトウェアのテスト可能な最小の部分です。ユニットには通常 1 つまたはいくつかの入力があります。ユニットには通常 1 つの出力だけがあります。

プロパティベース テスト

プロパティベース テストでは、テストしたい値ごとに個別のテストを作成するかわりに、単一のテスト内で入力値の範囲をプログラム化し、テストすることができます。

リグレッション テスト

リグレッション テストは、機能テストおよび非機能テストの再実行によって、テストと開発が完了したコードが変更後も変わらず実行されることを確認するテストと定義されます。変更後にコードが適切に動作していない場合、リグレッションであるとみなされます。

テスト カバレッジまたはコード カバレッジ

テスト カバレッジはコード カバレッジとも呼ばれ、テスト スイートによってどの程度プログラムが検証されたかを計測します。Mayhem は、制御フロー グラフのいくつのエッジが実行されたかを計測するエッジ カバレッジ メトリクスを使用します。

SDL と SDLC の違い

SDL は Secure Development Lifecycle を意味します。これは、ソフトウェア サイクル全体にセキュリティ テストを埋め込むプロセスです。SDLC は Software Development Lifecycle を意味します。これは、ソフトウェア製品が最初から最後まで通るさまざまなフェーズを定義します。SDLC の道筋には、トレーニング、要件、設計、実装、検証、リリース、レスポンスがあります。SDL の一部として、検証の下にファズ テストが分類されます。