次の方法で共有


よく寄せられる質問 |紺碧

2022 年 12 月 31 日より、Microsoft セキュリティ コード分析 (MSCA) 拡張機能は廃止されます。 MSCA は、Microsoft Security DevOps Azure DevOps 拡張機能 に置き換えられます。 の構成 の手順に従って、拡張機能をインストールして構成します。

全般的なよくあるご質問

Azure DevOps インスタンスではなく、Azure DevOps Server (旧称 Visual Studio Team Foundation Server) インスタンスに拡張機能をインストールできますか?

いいえ。 この拡張機能は、Azure DevOps Server (旧称 Visual Studio Team Foundation Server) のダウンロードとインストールには使用できません。

ビルドで Microsoft セキュリティ コード分析を実行する必要がありますか?

その可能性はあります。 分析ツールの種類によって異なります。 ソース コードだけが必要な場合もあれば、ビルド出力が必要な場合もあります。

たとえば、Credential Scanner (CredScan) は、コード リポジトリのフォルダー構造内のファイルを分析します。 この分析により、CredScan と Publish Security Analysis Logs ビルド タスクをスタンドアロン ビルドで実行して結果を取得できます。

ビルド後の成果物を分析する BinSkim などの他のツールでは、最初にビルドが必要です。

結果が見つかったときにビルドを中断できますか?

はい。 任意のツールがログ ファイルで問題または問題を報告すると、ビルドの中断を発生させることができます。 分析後のビルド タスクを追加し、ビルドを中断するツールのチェック ボックスをオンにします。

分析後タスクの UI では、ツールがエラーのみを報告するか、エラーと警告の両方を報告したときにビルドを中断するかを選択できます。

Azure DevOps のコマンド ライン引数とスタンドアロン デスクトップ ツールの引数の違い

通常、Azure DevOps のビルド タスクは、セキュリティ ツールのコマンド ライン引数に関する直接ラッパーです。 通常はコマンドライン ツールに渡すあらゆるものを、引数としてビルド タスクに渡すことができます。

顕著な違い:

  • ツールは、エージェント $(Build.SourcesDirectory) のソース フォルダーまたは %BUILD_SOURCESDIRECTORY%から実行されます。 たとえば、C:\agent_work\1\s です。
  • 引数内のパスは、前述のソース ディレクトリのルートを基準にして指定できます。 パスは絶対パスにすることもできます。 絶対パスを取得するには、Azure DevOps ビルド変数を使用するか、ローカル リソースの既知のデプロイ場所を持つオンプレミス エージェントを実行します。
  • ツールは、出力ファイルのパスまたはフォルダーを自動的に提供します。 ビルド タスクの出力場所を指定した場合、その場所は、ビルド エージェント上の既知のログの場所へのパスに置き換えられます。
  • 一部のツールでは、その他のコマンド ライン引数が変更されています。 1 つの例として、GUI が起動されないようにするオプションの追加または削除があります。

Azure DevOps ビルド内の複数のリポジトリで Credential Scanner などのビルド タスクを実行できますか?

いいえ。 1 つのパイプライン内の複数のリポジトリにまたがるセキュリティで保護された開発ツールの実行はサポートされていません。

指定した出力ファイルが作成されていないか、指定した出力ファイルが見つかりません

ビルド タスクは、ユーザー入力をフィルター処理します。 この質問では、生成された出力ファイルの場所をビルド エージェント上の共通の場所に更新します。 この場所の詳細については、次の質問を参照してください。

ツールによって生成された出力ファイルはどこに保存されますか?

ビルド タスクは、ビルド エージェント上のこの既知の場所 ($(Agent.BuildDirectory)_sdt\logs) に出力パスを自動的に追加します。 この場所は標準化されているため、コード分析ログを生成または使用するすべてのチームが出力にアクセスできます。

ホストされているビルド エージェントでこれらのタスクを実行するためにビルドをキューに登録することはできますか?

はい。 拡張機能内のすべてのタスクとツールは、ホストされたビルド エージェントで実行できます。

マルウェア対策スキャナーのビルド タスクには、Windows Defender が有効になっているビルド エージェントが必要です。 ホストされた Visual Studio 2017 以降では、このようなエージェントが提供されます。 ビルド タスクは、Visual Studio 2015 でホストされているエージェントでは実行されません。

これらのエージェントで署名を更新することはできませんが、署名は常に 3 時間未満にする必要があります。

ビルド パイプラインではなく、リリース パイプラインの一部としてこれらのビルド タスクを実行できますか。

ほとんどの場合、はい。

ただし、Azure DevOps では、それらのタスクが成果物を発行する場合、リリース パイプライン内でのタスクの実行はサポートされません。 このサポートが不足しているため、リリース パイプラインでセキュリティ分析ログの発行タスクが正常に実行されなくなります。 代わりに、タスクは説明的なエラー メッセージで失敗します。

ビルド タスクはどこからツールをダウンロードしますか?

ビルド タスクは、Azure DevOps Package Management フィードからツールの NuGet パッケージをダウンロードできます。 ビルド タスクでは、ノード パッケージ マネージャーを使用することもできます。ノード パッケージ マネージャーは、ビルド エージェントにプレインストールする必要があります。 このようなインストールの例として、npm install tslint コマンドがあります。

拡張機能をインストールすると、Azure DevOps 組織にどのような影響がありますか?

拡張機能によって提供されるセキュリティ ビルド タスクは、インストール時に組織内のすべてのユーザーが使用できるようになります。 Azure Pipeline を作成または編集すると、これらのタスクはビルド タスク コレクションの一覧から使用できます。 それ以外の場合、Azure DevOps 組織に拡張機能をインストールしても効果はありません。 インストールでは、アカウント設定、プロジェクト設定、またはパイプラインは変更されません。

拡張機能をインストールすると、既存の Azure Pipelines は変更されますか?

いいえ。 拡張機能をインストールすると、セキュリティ ビルド タスクをパイプラインに追加できるようになります。 ツールがビルド プロセスで動作できるように、ビルド定義を追加または更新する必要があります。

タスク固有の FAQ

このセクションでは、ビルド タスクに固有の質問を示します。

資格情報スキャナー

抑制の一般的なシナリオと例は何ですか?

最も一般的な 2 つの抑制シナリオの詳細を次に示します。

指定したパス内の特定のシークレットのすべての出現を抑制するには

次のサンプルに示すように、CredScan 出力ファイルのシークレットのハッシュ キーが必要です。

{
    "tool": "Credential Scanner",
    "suppressions": [
    {
        "hash": "CLgYxl2FcQE8XZgha9/UbKLTkJkUh3Vakkxh2CAdhtY=",
        "_justification": "Secret used by MSDN sample, it is fake."
    }
  ]
}

警告

ハッシュ キーは、一致する値またはファイルコンテンツの一部によって生成されます。 ソース コードのリビジョンでは、ハッシュ キーを変更し、抑制ルールを無効にすることができます。

指定したファイル内のすべてのシークレットを抑制したり、シークレット ファイル自体を抑制したりするには

ファイル式には、ファイル名を指定できます。 また、完全なファイル パスまたはファイル名のベース名部分を指定することもできます。 ワイルドカードはサポートされていません。

次の例は、InputPath>\src\JS\lib\angular.js <ファイルを非表示にする方法を示しています

有効な抑制ルールの例:

  • <InputPath>\src\JS\lib\angular.js - 指定したパス内のファイルを抑制します
  • \src\JS\lib\angular.js
  • \JS\lib\angular.js
  • \lib\angular.js
  • angular.js - 同じ名前のファイルを抑制します
{
    "tool": "Credential Scanner",
    "suppressions": [
    {
        "file": "\\files\\AdditonalSearcher.xml", 
        "_justification": "Additional CredScan searcher specific to my team"
    },
    {
        "file": "\\files\\unittest.pfx", 
        "_justification": "Legitimate UT certificate file with private key"
    }
  ]
}

警告

ファイルに追加されるすべての今後のシークレットも自動的に抑制されます。

シークレットを管理するための推奨ガイドラインは何ですか?

次のリソースは、シークレットを安全に管理し、アプリケーション内から機密情報にアクセスするのに役立ちます。

詳細については、クラウド でシークレットを安全に管理するブログ記事を参照してください。

独自のカスタム検索を作成できますか?

資格情報スキャナーは、buildsearchers.xml ファイルで一般的に定義されている一連のコンテンツ検索ツールに依存します。 このファイルには、ContentSearcher オブジェクトを表す XML シリアル化オブジェクトの配列が含まれています。 プログラムは、十分にテストされた一連の検索者と共に配布されます。 ただし、独自のカスタム検索を実装することもできます。

コンテンツ検索ツールは次のように定義されます。

  • : 資格情報スキャナーの出力ファイルで使用されるわかりやすい検索者の名前。 検索者名にはキャメルケースの名前付け規則を使用することをお勧めします。

  • RuleId: 検索者の安定した不透明な ID:

    • 資格情報スキャナーの既定の検索ツールには、CSCAN0010、CSCAN0020、CSCAN0030などの RuleId 値が割り当てられます。 最後の桁は、正規表現 (正規表現) を使用して検索者グループをマージまたは分割する可能性がある場合に予約されています。
    • カスタマイズされた検索者の RuleId 値には、独自の名前空間が必要です。 たとえば、CSCAN-<名前空間>0010、CSCAN-<名前空間>0020、CSCAN-<名前空間>0030 などがあります。
    • 完全修飾検索名は、RuleId 値と検索者名の組み合わせです。 例としては、CSCAN0010があります。KeyStoreFiles と CSCAN0020。Base64EncodedCertificate。
  • ResourceMatchPattern: 検索者に対して確認するファイル拡張子の正規表現。

  • ContentSearchPatterns: 照合する正規表現ステートメントを含む文字列の配列。 検索パターンが定義されていない場合は、ResourceMatchPattern 値に一致するすべてのファイルが返されます。

  • ContentSearchFilters: 検索者固有の誤検知をフィルター処理する正規表現ステートメントを含む文字列の配列。

  • MatchDetails: 検索者の一致ごとに追加される説明メッセージ、軽減命令、またはその両方。

  • 推奨事項の: PREfast レポート形式を使用した一致の提案フィールドのコンテンツ。

  • 重大度: 問題の重大度レベルを反映する整数。 最も高い重大度レベルの値は 1 です。

    資格情報スキャナーのセットアップ

Roslyn アナライザー

Roslyn Analyzers タスクを使用する場合の一般的なエラーは何ですか?

間違った Microsoft.NETCore.App バージョンを使用してプロジェクトが復元されました

完全なエラー メッセージ:

"エラー: プロジェクトは x.x.x バージョン Microsoft.NETCore.App 使用して復元されましたが、現在の設定では、代わりにバージョン y.y.y が使用されます。 この問題を解決するには、復元と、ビルドや発行などの後続の操作に同じ設定が使用されていることを確認します。 通常、この問題は、RuntimeIdentifier プロパティがビルド中または発行中に設定されているが、復元時には設定されていない場合に発生する可能性があります。"

Roslyn Analyzers タスクはコンパイルの一環として実行されるため、ビルド マシン上のソース ツリーはビルド可能な状態である必要があります。

メイン ビルドと Roslyn Analyzers のステップの間のステップによって、ソース ツリーがビルドを妨げる状態になる可能性があります。 この追加の手順は、を発行dotnet.exe 可能性があります。 Roslyn Analyzers ステップの直前に NuGet の復元を行う手順を複製してみてください。 この重複した手順により、ソース ツリーがビルド可能な状態に戻る可能性があります。

アナライザー インスタンスを作成できない csc.exe

完全なエラー メッセージ:

"'csc.exe' exited with error code 1 -- アナライザー AAAA のインスタンスを C:\BBBB.dll から作成できません: ファイルまたはアセンブリ 'Microsoft.CodeAnalysis, Version=X.X.X.X、Culture=neutral、PublicKeyToken=31bf3856ad364e35' またはその依存関係のいずれか。 指定されたファイルが見つかりません。

コンパイラが Roslyn Analyzer をサポートしていることを確認します。 /version csc.exe コマンドを実行すると、バージョン値が 2.6 以降と報告されます。

.csproj ファイルで、Microsoft.Net.Compilers からパッケージを参照することで、ビルド マシンの Visual Studio のインストールをオーバーライドできる場合があります。 特定のバージョンのコンパイラを使用しない場合は、Microsoft.Net.Compilers への参照を削除します。 それ以外の場合は、参照されるパッケージのバージョンも 2.6 以降であることを確認します。

csc.exe /errorlog オプションで指定されているエラー ログ パスを取得してみてください。 Roslyn Analyzers ビルド タスクのログにオプションとパスが表示されます。 たとえば、/errorlog:F:\ts-services-123_work\456\s\Some\Project\Code\Code.csproj.sarif

C# コンパイラのバージョンが十分に新しくない

最新バージョンの C# コンパイラを取得するには、Microsoft.Net.Compilers に移動します。 インストールされているバージョンを取得するには、コマンド プロンプト csc.exe /version を実行します。 バージョン 2.6 以降の Microsoft.Net.Compilers NuGet パッケージを参照していることを確認します。

MSBuild ログと VSBuild ログが見つかりません

Roslyn Analyzers ビルド タスクでは、MSBuild ビルド タスクの MSBuild ログについて Azure DevOps に対してクエリを実行する必要があります。 MSBuild タスクの直後にアナライザー タスクが実行された場合、ログはまだ使用できません。 MSBuild タスクと Roslyn Analyzers タスクの間に他のタスクを配置します。 その他のタスクの例としては、BinSkim やマルウェア対策スキャナーなどがあります。

次のステップ

追加のサポートが必要な場合は、月曜日から金曜日の午前 9 時から午後 5 時まで、Microsoft セキュリティ コード分析サポートを利用できます。