フィルターを使用したトリアージ

AppScan® Source for Analysis は、すべての潜在的なセキュリティーの脆弱性について報告するため、中規模から大規模のコード・ベースに適用した場合、膨大な量の検出結果を生成する可能性があります。スキャンを実行したときに、重要でない項目が検出結果のリストに含まれることもあります。「検出結果」ビューから特定の検出結果を削除するために、事前定義フィルターを選択するか、独自のフィルター を作成することができます。フィルターは、ビューから削除する検出結果を決定する基準を指定します。

フィルターの概要

フィルターを使用すると、フィルター・ルールで決定された基準を満たす項目が削除されるか、それらの項目に制限されるため、トリアージやレポート作成中にスキャン結果を管理しやすくなります。フィルターは、ワークフローを辿る上でも、セキュリティー・アナリストが検出結果のサブセットで最も重大な領域に注目する上でも役立ちます。例えば、コードの検査中に、アナリストは重大度の低い検出結果が表示されないようにするためのフィルターを作成できます。あるいは、アナリストがシステム・ライブラリーの includeファイル内の脆弱性の除外を優先する場合も考えられます。フィルターを使用すると、該当する項目をビューから排除できます。また、個別のファイルや前に調査されたファイルを除外することもできます。

フィルターは、スキャン前またはスキャン後に適用できます。

  • スキャン前にフィルターを適用するには、プロジェクト・プロパティーまたはアプリケーション・プロパティーでグローバル・フィルターを設定します。あるいは、フィルターが含まれるスキャン構成を使用してスキャンを行うこともできます。スキャン前にフィルターを適用すると、フィルタリング対象でない検出結果を表示することも、再スキャンせずにフィルターを削除することもできません。
  • 各種のビュー (特に、「フィルター・エディター」ビュー) を使用して、スキャン後にフィルターを適用できます。これらのビューを使用してフィルタリングすると、スキャン結果にはフィルタリングされたすべての項目が残りますが、「フィルタリングされた検出結果を表示 (Show Filtered Findings)」(「フィルタリングされた検出結果を表示 (Show Filtered Findings)」アイコン) トグルが選択されていなければ、フィルタリングされた項目は「検出結果」ビューに表示されません。

AppScan ソース には、スキャン結果をフィルタリングするために選択できる事前定義フィルターがいくつか含まれています。

フィルターがあると、そのフィルターが除外 となるようにプロパティーを設定することができます。除外はスキャンに影響し、フィルターに一致するすべての検出結果を排除したり、あるいはフィルターに一致しないすべての検出結果を排除したりします。

フィルター・ルール

各フィルターは、制限 (包含) する検出結果を定義するルール、または検出結果表から削除 (除外) する検出結果を定義するルールからなります (トレース・ルールの場合、トレース・プロパティーに基づいて制限と削除の両方を行うことができます)。

  • 「制限 (Restrict to)」ルール (包含ルール) は、指定された基準を満たさない検出結果を除外し、検出結果表に表示される結果から、それらの検出結果を削除します。
  • 「削除」ルール (除外ルール) は、基準を満たす検出結果をスキャン結果から削除します。削除ルールは、指定された条件を満たす検出結果を除外し、表示される結果からそれらの検出結果を削除します。

フィルター・ルールには、以下の特徴を含めることができます。

  • 重大度: 個々の検出結果の潜在的な影響またはリスクを識別します。重大度ルールは、制限のみのルールです。
    • : データの機密性、保全性、または可用性、および処理リソースの保全性または可用性 (あるいはそのいずれか) にリスクをもたらします。重大度の高い状態は、即時修復に優先順位付けする必要があります。
    • : データ・セキュリティーおよびリソース保全性にリスクをもたらしますが、攻撃の影響を受ける可能性は低い状態です。重大度が中の状態は、可能な場合、確認して修復する必要があります。
    • : データ・セキュリティーまたはリソース保全性にリスクはほとんどありません。
    • 情報: 検出結果自体には、セキュリティー侵害の可能性はありません。これは、コードで使用されているテクノロジー、アーキテクチャー特性、またはセキュリティー・メカニズムについて説明するものです。
  • 分類: このトピックで説明している分類に基づいて、検出結果をフィルターに掛けます。分類ルールは、制限のみのルールです。
  • 脆弱性タイプ: 特定の脆弱性カテゴリー (BufferOverflow など) を基準にフィルタリングします。脆弱性タイプを追加する場合、可能性のあるすべての脆弱性タイプから選択できます。または、現在の評価で検出された脆弱性タイプのみから選択することもできます。現在の評価で検出された脆弱性タイプから選択する場合は、「値の選択」ダイアログ・ボックスで「開かれている評価の値のみを表示」を選択します。

    以降のスキャンに適用するフィルターを作成する場合は、可能性のあるすべての脆弱性タイプから選択すると役立ちます。すべての脆弱性タイプを表示するには、「開かれている評価の値のみを表示」を選択解除します (開かれている評価がない場合は、デフォルトですべての脆弱性タイプが表示され、「開かれている評価の値のみを表示」チェック・ボックスは使用できません)。

  • API: 特定の API のすべての脆弱性をフィルタリングします。
  • ファイル: 特定のファイルからすべての脆弱性をフィルタリングします。
  • ディレクトリー: 特定のディレクトリーからすべての脆弱性をフィルタリングします。
  • プロジェクト: 特定のプロジェクトからすべての脆弱性をフィルタリングします。
  • トレース: トレース・プロパティーに基づいて検出結果をフィルタリングできます (トレース・プロパティーについて詳しくは、ソースとシンク を参照してください)。フィルターには、トレース・プロパティーに基づいて制限と削除の両方を行うトレース・ルールを含めることができます。どちらかのセクション (制限または削除) で「追加」をクリックすると、「トレース・ルール入力」ダイアログ・ボックスが開きます。指定できる項目は以下のとおりです。
    • ソース: 「ソース」セクションの「API 正規表現」フィールドに、トレース・ソースを指定するか、複数のソースに対応する正規表現を指定します (デフォルト・エントリーは.*です。これは、すべてを返す正規表現、つまりワイルドカードです)。正規表現を使用する場合は、「正規表現タイプ」フィールド・メニューでタイプを選択します (デフォルトの正規表現タイプは「PERL」です)。正規表現を使用しない場合は、「正規表現タイプ」フィールド・メニューで「完全一致」を選択します。

      「API 正規表現」の入力が有効な表現である場合は、フィールドの横に緑のチェック・マークのアイコンが表示されます。入力が有効な表現ではない場合は、フィールドの横に赤い「X」アイコンが表示され、ダイアログ・ボックスの「OK」ボタンは無効になります。いずれかのアイコンにカーソルを合わせると、検証結果の詳細が表示されます。有効ではない表現を入力したが、それを引き続き使用したい場合は、ダイアログ・ボックスの下部にある「上記の検証エラーを無視」チェック・ボックスを選択します。これにより、表現が空でなければ、ダイアログ・ボックスの「OK」ボタンが有効になり、無効な表現の横のアイコンは、緑のチェック・マークに変わり、「検証は無効です」という吹き出しテキストが表示されます。

      「ソース・プロパティー」セクションの「VMAT プロパティーを追加」ボタンを使用して、メカニズムまたはテクノロジーによりフィルターを詳細化することもできます (VMAT プロパティーについて詳しくは以下を参照)。ただし、脆弱性ごとに制限するためにこの機能を使用すると、脆弱性タイプはソースではなくシンクにより判別されるため、期待通りの効果は得られません。

    • シンク: 「シンク」セクションでは、ソースを指定する場合と同じ方法で、シンクをフィルターとして追加できます。

      フィルターを詳細化するには、特定の脆弱性タイプにフィルターを制限します (これにより、トレース・ルール・エントリーの影響を、特定のタイプの脆弱性、メカニズム、またはテクノロジーに制限します)。これを行うには、「シンク・プロパティー」セクションで「VMAT プロパティーを追加」 ボタンをクリックし、「プロパティーの選択」ダイアログ・ボックスでプロパティーを選択します。プロパティーのリストは、「フィルター」フィールドを使用してフィルタリングすることができます。

      VMAT は、AppScan ソース がアプリケーション・プログラミング・インターフェース (API) に適用するプロパティーを 4 つの主なタイプにカテゴリー化したものです。VMAT プロパティー・カテゴリーには以下があります。

      • 脆弱性: セキュリティー違反につながる悪用または攻撃ベクトルのタイプ
      • メカニズム: 脆弱性を避けるために使用されるセキュリティー管理
      • 属性: これらのプロパティーは、現在「プロパティーの選択」ダイアログ・ボックスでは使用できません。
      • テクノロジー: API が提供する機能のタイプの全般的な説明

      フィルター例: HTTP からの SQL 注入および XSS (最も危険度の高いソース) のすべてをフィルターに掛けるには、「ソース・プロパティー」セクションに Technology.Communications.HTTP フィルターを含み、「シンク・プロパティー」セクションに Vulnerability.Injection.SQL ルールと Vulnerability.CrossSiteScripting ルールを含む「制限」トレース・ルールを作成してください。

    • 必須の呼び出し (Required Calls): 「必須の呼び出し (Required Calls)」セクションで、ソースからシンクへのパス上にあるべき特定の API 呼び出しを追加します。必須の呼び出しは、検出結果を、その特定の必須の呼び出しを通過するトレースが含まれる検出結果だけに制限します。「中間呼び出しの追加」をクリックすると、「API の構成」ダイアログ・ボックスが開きます。このダイアログ・ボックスで、ソースとシンクを指定する場合と同じ方法で呼び出しを指定します。
    • 禁止された呼び出し (Prohibited Calls): 「禁止された呼び出し (Prohibited Calls)」セクションで、ソースからシンクへのパス上にあってはならない特定の API 呼び出しを追加します。禁止された呼び出しは、検出結果を、その呼び出しを通過しないトレースが含まれる検出結果に制限します。禁止された呼び出しを、必須の呼び出しを追加する場合と同じ方法で追加します。
    ヒント:
    • 「脆弱性タイプ」「API」「ファイル」「ディレクトリー」、または「プロジェクト」によってフィルタリングする場合は、「値の選択」ダイアログ・ボックスの上部にあるフィルター・フィールドにパターンを入力して、ダイアログ・ボックスに表示されるリストをフィルタリングできます。
    • 任意の検出結果表で、「ソース」列と「シンク」列を調べて、フィルタリングによって除外したいソースおよびシンクを把握します。
    • フィルタリングしたいソース、シンク、および呼び出しのプロパティーを把握するには、任意の検出結果表の「脆弱性タイプ」列を調べます。
    • フィルタリングしたい可能性のある呼び出しを確認するには、任意の検出結果表の「API」列の項目を調べてください。

フィルターの例

表 1. フィルターの例
検出結果表でのフィルターの動作 「フィルター・エディター」ビューでのフィルター設定
検出結果表には、高重大度であることが疑われるセキュリティー検出結果のみが表示されます。
  • 「重大度」セクションで、「高」チェック・ボックスを選択し、他のすべてのチェック・ボックスの選択を解除します。
  • 「分類」セクションで、「要注意 (Suspect)」チェック・ボックスを選択し、他のすべてのチェック・ボックスの選択を解除します。
検出結果表に、ProjectA という名前のプロジェクト内のすべての検出結果が含まれます。ただし「情報」脆弱性タイプは除きます。
  • 「脆弱性タイプ」セクションで、「削除」ラジオ・ボタンを選択し、「追加」をクリックします。「値の選択」ダイアログ・ボックスで、「Vulnerability.Info」を選択します。
  • 「プロジェクト」セクションで、「制限 (Restrict to)」ラジオ・ボタンを選択し、「追加」をクリックします。「値の選択」ダイアログ・ボックスで、ProjectAを選択します。
トレースが含まれる検出結果のみが表示されます。 「トレース」セクションで、「制限 (Restrict to)」セクションの「追加」をクリックします。「トレース・ルール入力」ダイアログ・ボックスでデフォルトの入力を受け入れ、「OK」をクリックします。このダイアログ・ボックスのデフォルト値は以下のとおりです。
  • 「ソース」の「API 正規表現」フィールドは .* で、正規表現タイプは「PERL」です。これにより、フィルタリングで、Perl 正規表現構文を使用するソースを含むすべての検出結果を見つけるように AppScan ソース に指示します。
  • 「シンク」の「API 正規表現」フィールドは .* で、正規表現タイプは「PERL」です。これにより、フィルタリングで、Perl 正規表現構文を使用するシンクを含むすべての検出結果を見つけるように AppScan ソース に指示します。
検出結果表に、java.lang.Integer.parseInt を通過しない、HTTP 関連のソースから SQL 注入関連のシンクまでが表示される。 「トレース」セクションで、「制限 (Restrict to)」セクションの「追加」をクリックします。「トレース・ルール・エントリー (Trace Rule Entry)」ダイアログ・ボックスで、以下の手順を行います。
  • 「ソース」セクションで、「VMAT プロパティーを追加」をクリックします。「プロパティーの選択」ダイアログ・ボックスで、 Technology.Communications.HTTP を選択します。「OK」をクリックして VMAT プロパティーを追加し、「トレース・ルール入力」ダイアログ・ボックスに戻ります。
  • 「シンク」セクションで、「VMAT プロパティーを追加」をクリックします。「プロパティーの選択」ダイアログ・ボックスで、 Vulnerability.Injection.SQL を選択します。「OK」をクリックして VMAT プロパティーを追加し、「トレース・ルール入力」ダイアログ・ボックスに戻ります。
  • 「禁止呼び出し」セクションで、「中間呼び出しの追加」をクリックします。「API の構成」ダイアログ・ボックスで、「API 正規表現」フィールドに java.lang.Integer.parseInt.* と入力します。「OK」をクリックして中間呼び出しを追加し、「トレース・ルール入力」ダイアログ・ボックスに戻り、次に「OK」をクリックしてトレース・ルール入力を追加します。