GitHubにシークレットキーをプッシュするとすぐにGitHubのBotから「まちがえてpushしてない?」という通知が来るのはよく知られた話です。あと、最近ではセキュリティスキャンもやってくれるようになりましたね。Azure DevOpsにはないのでしょうか?実はエンタープライズ向けには簡単なものですが、用意されています。
対象者
Microsoft Security Code Analysis Extensionという拡張機能なのですが、これ実は一般のMarketplaceには出てきません。以下のサポート契約を持っているorganizationで申請すれば出てきます。お近くのTAM(テクニカルアカウントマネージャー)に相談してみてください。
- Unified Support Advanced tier
- Unified Support Performance tier
- Premier Support for Developers
- Premier Support for Partners
- Premier Support for Enterprise
私はちょっと有効化してもらったので、紹介したいと思います。とはいえ、ひとつの拡張機能を除いてほとんどオープンソースで提供されているので、タスクがあらかじめある、という程度のものなのですが。
注意点
いくつかのタスクは Build.StagingFolderに対して実行します。なので、これらのスキャナを実行する前にCopy FolderタスクでStaging Folderへコピーしてからじゃないと空振りします。
私はWindows DefenderとかはBuild.SourceFolderに対してかけるようにしました。
実行結果
実行するとPiplelineのoutput, CSV, HTMLといった形式で出力されます。結果をAzure Artifactsへの発行もできるので、履歴として保持もできます。通常は
Artifactsにはこんな感じで入っています。マルウェア検査とRoslyn Analyzerの結果ですね。
静的コード解析
Roslyn AnalyzerとTSLintが含まれます。前者は.NETのコードの静的解析、後者はTypeScriptのコード解析です。TSLintについてはご存知の方も多いと思います。
- task: RoslynAnalyzers@2 inputs: userProvideBuildInfo: 'auto'
YAMLタスクは簡単ですね。
セキュリティ関係
一番上は別途申請しないと使えないMicrosoft Security Risk Detection
です。マルウェアスキャンではなく、ふるまいを検査するEDR…のようです。
こちらをご覧ください。
申請すると、アクセスするためのキーとアカウントが発行されますので、それがないと使えません。興味のある人はサインアップページから英語で問い合わせてください。
Post Analysis, Publish~, Reportの3タスクは最後に動かしてください。
スキャナ
AntiMalware ScannerはWindows Defenderを動かしてバイナリスキャンをします。注意点として、hosted agentではユーザー制御による更新が禁止されているので、定義ファイルの更新はできないので、無効化します。
- task: AntiMalware@3 inputs: InputType: 'Custom' Arguments: '-Scan -ScanType 2 -DisableRemediation -path $(Build.SourceDirectory)\bin' EnableServices: true SupportLogOnError: false TreatSignatureUpdateFailureAs: 'Warning' SignatureFreshness: 'UpToDate' TreatStaleSignatureAs: 'Error'
YAMLだとこんな感じ。実はこれ、Windows Defenderをコマンドで動かしているだけなので、このオプションがそのまま使えます。
BinSkimはGitHubにソースもありますので、ここからダウンロードして実行してもいいでしょう。
Credential Scannerはこんな感じです。
- task: CredScan@2 inputs: verboseOutput: true
MSRDに関してはアクティベーションできたらまた別途試してみます。