kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Azure DevOpsのビルド時に各種セキュリティ/credentialスキャンを実施する

GitHubにシークレットキーをプッシュするとすぐにGitHubのBotから「まちがえてpushしてない?」という通知が来るのはよく知られた話です。あと、最近ではセキュリティスキャンもやってくれるようになりましたね。Azure DevOpsにはないのでしょうか?実はエンタープライズ向けには簡単なものですが、用意されています。

secdevtools.azurewebsites.net

対象者

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

docs.microsoft.com

私はちょっと有効化してもらったので、紹介したいと思います。とはいえ、ひとつの拡張機能を除いてほとんどオープンソースで提供されているので、タスクがあらかじめある、という程度のものなのですが。

注意点

いくつかのタスクは Build.StagingFolderに対して実行します。なので、これらのスキャナを実行する前にCopy FolderタスクでStaging Folderへコピーしてからじゃないと空振りします。

私はWindows DefenderとかはBuild.SourceFolderに対してかけるようにしました。

実行結果

f:id:kkamegawa:20200226065751p:plain

実行するとPiplelineのoutput, CSV, HTMLといった形式で出力されます。結果をAzure Artifactsへの発行もできるので、履歴として保持もできます。通常は

f:id:kkamegawa:20200226065855p:plain

Artifactsにはこんな感じで入っています。マルウェア検査とRoslyn Analyzerの結果ですね。

静的コード解析

f:id:kkamegawa:20200226063746p:plain

Roslyn AnalyzerとTSLintが含まれます。前者は.NETのコードの静的解析、後者はTypeScriptのコード解析です。TSLintについてはご存知の方も多いと思います。

- task: RoslynAnalyzers@2
  inputs:
    userProvideBuildInfo: 'auto'

YAMLタスクは簡単ですね。

セキュリティ関係

f:id:kkamegawa:20200226063739p:plain

一番上は別途申請しないと使えないMicrosoft Security Risk Detectionです。マルウェアスキャンではなく、ふるまいを検査するEDR…のようです。

docs.microsoft.com

こちらをご覧ください。

申請すると、アクセスするためのキーとアカウントが発行されますので、それがないと使えません。興味のある人はサインアップページから英語で問い合わせてください。

www.microsoft.com

Post Analysis, Publish~, Reportの3タスクは最後に動かしてください。

スキャナ

f:id:kkamegawa:20200226063743p:plain

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をコマンドで動かしているだけなので、このオプションがそのまま使えます。

docs.microsoft.com

BinSkimはGitHubにソースもありますので、ここからダウンロードして実行してもいいでしょう。

github.com

Credential Scannerはこんな感じです。

- task: CredScan@2
  inputs:
    verboseOutput: true

MSRDに関してはアクティベーションできたらまた別途試してみます。