Slide 1

Slide 1 text

Azure DevOps Online Vol.8 - GitHub Advanced Security for Azure DevOps かめがわ かずし(@kkamegawa) - 2023/8/26

Slide 2

Slide 2 text

Who am I? personal: name: KAMEGAWA Kazushi(Last-First) alias: kkamegawa community: MVP: Microsoft MVP for Developer Technologies(2009-) Users Group: Team Foundation Server Users Group URL: https://dev.azure.com/tfsug/tfsuginfo Blog: URL: https://kkamegawa.hatenablog.jp devblog radio: https://devblog.connpass.com/

Slide 3

Slide 3 text

This contents based on 2023/8/26

Slide 4

Slide 4 text

Azure DevOps GitHub タスク管理 ある(Boards) ある(Project/Issue) CI / CD ある(Pipelines) ある(Actions) Git ある(Repos) ある テスト管理 ある(Test Plans) ない パッケージ管理 ある(Artifacts) ある(Packages) セキュリティ ない→ある(GHAzDo) ある(GHAS) Azure DevOps と GitHub ※ Azure DevOps ServiceとGitHub Enterprise Cloud比較 ※ GitHub Advanced Security for Azure DevOps = GHAzDo (中の人がこの略称使っているので…)

Slide 5

Slide 5 text

GitHub Advanced Security for Azure DevOps(GHAzDo) 2022/11のIgniteでプライベートプレビュー開始 2023/5のBuildでパブリックプレビュー開始 https://aka.ms/advancedsecurity-signup GitHub Advanced Security for Azure DevOps 機能を構成する - Azure Repos | Microsoft Learn ※ Public Preview申し込んでも音沙汰なかったから、お付き合いのある営業の方いたらその方が早いかも… 機能的にはGitHubと同じ CodeQL(Windows Driverの検証でも要求される) Dependency Alert Secret Scanning

Slide 6

Slide 6 text

課金 90日以内にコミットしている人数x$49でAzure Subscriptionに チャージされる レポジトリ数は無関係(重複課金されない) GitHub Advanced Security for Azure DevOps への課金 - Azure Repos | Microsoft Learn 2023/7/1 8/1 9/1 10/1 10人 0人 8人 有効 無効 5人 有効 5人 有効 ⊃ ※5人は8人のrepoに含まれる 8人

Slide 7

Slide 7 text

GHAzDo設定方法 現在レポジトリ単位で設定(めんどくさい) Organization、Project単位の一括設定はない もちろんプレビュー有効にしていないorgでは出てこない

Slide 8

Slide 8 text

Defender for DevOpsってなかった?

Slide 9

Slide 9 text

Defender for DevOps GHAzDo 管理 Azure Azure DevOps できること シークレットキー検査 IaC検査 複数ツールによるコードスキャン シークレットキー検査 CodeQLによるコード検査 依存関係調査 料金 プレビュー中無料 $49/user セキュリティ RBAC Azure DevOps内 セキュリティロール 閲覧 Azureポータル Pipelinesビルド結果 Azure Reposから Defender for DevOps と GHAzDo

Slide 10

Slide 10 text

How to setup Defender for DevOps(Azure) • GitHub/Azure DevOpsでのアラートを管理する機能 • 設定する人にSecurity Adminロールが必要(警告が出る) (Subscription ownerでもダメ) • 現在プレビュー中で無料なので使い倒そう Microsoft Defender for DevOps - 利点と機能 - Microsoft Defender for Cloud | Microsoft Learn

Slide 11

Slide 11 text

Defender for DevOpsでできること Pull requestの注釈 IaC scan(GHAzDoにはない)  Microsoftの提供のルール、カスタムルールが選択可 Secret ScanningはGHAzDoで置き換え予定 GitHubとAzure DevOpsでは若干の機能差あり (OSS脆弱性検査はGitHubのみなど) Microsoft Defender for DevOps - 利点と機能 - Microsoft Defender for Cloud | Microsoft Learn

Slide 12

Slide 12 text

Defender for DevOpsのIaC Scan WebAppsのbicepです。 どこが悪いでしょう? param webAppName string = uniqueString(resourceGroup().id) param sku string = 'F1' param linuxFxVersion string = 'node|14-lts' param location string = resourceGroup().location var appServicePlanName = toLower('AppServicePlan-${webAppName}') var webSiteName = toLower('wapp-${webAppName}') resource appServicePlan 'Microsoft.Web/serverfarms@2022-09-01' = { name: appServicePlanName location: location properties: { reserved: true } sku: { name: sku } kind: 'linux' } resource appService 'Microsoft.Web/sites@2022-09-01' = { name: webSiteName location: location properties: { serverFarmId: appServicePlan.id siteConfig: { linuxFxVersion: linuxFxVersion } httpsOnly: false } }

Slide 13

Slide 13 text

ftpを無効にしていない httpsのみにしていない TLS1.2より古いものが有効 MSIを使いましょう チェックはBranch policy に設定しましょう

Slide 14

Slide 14 text

どうやったら検出される? Pipelineを構成 Defender用タスクを追加 カテゴリーはお好みで 無指定ならすべて break: true重要 指定しないとルール違反検 出しても正常終了になる

Slide 15

Slide 15 text

Defender for DevOpsのSecurity view GitHubもAzure DevOpsも一か所で可能

Slide 16

Slide 16 text

Defender for DevOps Preview中使いましょう

Slide 17

Slide 17 text

Secret Scanning

Slide 18

Slide 18 text

なんであのときコミットしたんだろう

Slide 19

Slide 19 text

クラウドの情報漏洩主な原因 ユーザーアカウント&パスワード漏洩(MFAなし) 不適切なままの設定 デフォルトが変更されて気づいてない例も 既知/未知の脆弱性を突かれた シークレットキーが公開状態だった

Slide 20

Slide 20 text

シークレットを誤ってコミットした話 結構ある(年に数回は報道される) 余談だけどOpenAIやBing Chatでニュースまとめてって言ったコンテン ツモデレーション機能によりだめって言われた… 単なる文字数字の羅列で気づかれにくい? 「あとから直すからとりあえず」ではじめてしまう?

Slide 21

Slide 21 text

Secret Scanning アップロードされたコードからアクセスキーの検出 Gitコミット時もチェック AWS S3, Azure Blob, OpenAI API Key等対象 値をちょっと変えても検出される サポートされているシークレット値 サンプルや誤検出である場合、コミットメッセージに skip-secret-scanning:trueを追加

Slide 22

Slide 22 text

GitHub Advanced Security for Azure DevOps ソースコード中の不用意なシークレットキー コミットをブロック ※…はずだが、最近ブロックされて いないので、聞いてみる予定(Webもだめ)

Slide 23

Slide 23 text

あとからGHAzDoを有効化したレポジトリ 明示的にタスクを実行してチェック

Slide 24

Slide 24 text

CodeQL

Slide 25

Slide 25 text

CodeQL パッケージ依存関係スキャン NuGet, npm 等 静的コード解析 結構いいスペック必要(hosted Agentではつらいかも) ※100KL以上で16GB RAM/4 or 8 core推奨 ローカルで動かすCLI版もある ※でもGitHub相手に動かすほうが多分楽 VS Codeの拡張機能もあります(割と重くなる…)。 GitHub Advanced Security for Azure DevOps のコード スキャン アラート - Azure Repos | Microsoft Learn CodeQL によるコード スキャンについて - GitHub Docs CodeQL を実行するための推奨ハードウェア リソース - GitHub Docs GitHub CodeQL を使用したコード スキャン - Training | Microsoft Learn

Slide 26

Slide 26 text

CodeQLでの脆弱性検査 CodeQL によるコード スキャンについて - GitHub Docs

Slide 27

Slide 27 text

YAML Pipeline ビルドができるプロジェクトで なくてはならない コンパイル必要な言語では、 autobuildタスクを使う カスタムビルドして解析対象のみ languagesに解析対象言語を 指定(, で区切る)。現在11言語 結果はrepos内に表示

Slide 28

Slide 28 text

VS CodeとCodeQL 拡張機能をインストール(ライセンスを読んでね) データベース作成 複数言語プロジェクトは--db-clusterオプション 作成にだいぶ時間かかる… CodeQL for Visual Studio Code — CodeQL (github.com)

Slide 29

Slide 29 text

Integration DevOps Workflow

Slide 30

Slide 30 text

GHAzDoいつつかう? master(main)マージ時? Branch Policy 定期的なビルド? 深夜など

Slide 31

Slide 31 text

毎回同じパイプライン書くの面倒だよね テンプレートにしましょう

Slide 32

Slide 32 text

特定のリリースには必ず実行させたい Releaseブランチを作ってBranch Policy Environmentsのテンプレートに含ませる ちょっと注意点がある Azure Pipelineでデプロイ時にチェックを必須化させる - kkamegawa's weblog (hatenablog.jp)

Slide 33

Slide 33 text

指摘事項何やればいいの…

Slide 34

Slide 34 text

どのリスクまで許容する? すべての脆弱性クリアしないとリリースしない Middle / Lowは内容によってパントする 別の緩和手段を使うので、Criticalが残っていて も見なかったことにリリースを優先する

Slide 35

Slide 35 text

検出されたリスク対処 一つずつやらない/誤判定を決定 今のところwork item連携はない(これは GitHubも同じ)

Slide 36

Slide 36 text

こんなことやりたい PRマージで脆弱性解消されているかチェック まだREST API非公開(PATはある) セキュリティ問題がクローズされるまでの期間計測 組織内でのセキュリティ発生調査

Slide 37

Slide 37 text

FAQ GitHubのレポジトリのスキャンできない?  できません。Azure Reposのみ  GitHubにあるAdvanced Security使ってください(課金は別) 結果が見えないんだけど?  共同作成者以上の権限を設定してください  ちなみにGitHubでもRepo Adminという強い権限が必要です Dependabotないの?  今のどころありません 機能差はないの?  ほぼないですが、CodeQL CLIは今含まれていないそうです(フィードバック済み)  VS Code拡張機能はGitHub前提

Slide 38

Slide 38 text

実性能 業務レベル規模ならself-hosted agent必須かも 例)Orchard.Coreではcodeqlのautobuildだけで41分  通常ビルドなら3分(Ubuntu), 7分(Windows)程度(C# 170KL, JavaScript 240KL)  Hostedでは1hでタイムオーバー  D4ad_v5(4core/16GB)のselfhostで実行したCPU/Memory OrchardCMS/OrchardCore - GitHub

Slide 39

Slide 39 text

Thank you joining !