Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azure DevOps Online Vol.8 - GitHub Advanced Security

Azure DevOps Online Vol.8 - GitHub Advanced Security

Azure DevOpsで使用可能になったGitHub Advanced Security for Azure DevOpsの説明資料です。

KAMEGAWA Kazushi

August 26, 2023
Tweet

More Decks by KAMEGAWA Kazushi

Other Decks in Programming

Transcript

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

    View Slide

  2. 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/

    View Slide

  3. This contents based on 2023/8/26

    View Slide

  4. 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
    (中の人がこの略称使っているので…)

    View Slide

  5. 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

    View Slide

  6. 課金
    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人

    View Slide

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

    View Slide

  8. Defender for DevOpsってなかった?

    View Slide

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

    View Slide

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

    View Slide

  11. 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

    View Slide

  12. 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
    }
    }

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. Defender for DevOps
    Preview中使いましょう

    View Slide

  17. Secret Scanning

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  24. CodeQL

    View Slide

  25. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29. Integration DevOps Workflow

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  38. 実性能
    業務レベル規模なら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

    View Slide

  39. Thank you joining !

    View Slide