Slide 1

Slide 1 text

DevSecOps入門: Security Development Lifecycleに よる開発プロセスのセキュリティ強化 2025/01/25 Yurie Mori

Slide 2

Slide 2 text

INTRODUCTION

Slide 3

Slide 3 text

今日話すこと • DevSecOpsで対応すべき脅威と対応策 • セキュリティを開発プロセスに組み込む • セキュリティ戦略の設計 • GitHub Advanced Securityの機能の仕組みの概要 • 考え方とか概要の紹介が中心(デモ見たかった人はすいません)

Slide 4

Slide 4 text

AGENDA • Introduction • DevSecOpsとSDL(Security Development Lifecycle) • SDLのプロセスとセキュリティ対策のプラクティス • GitHub Advanced Securityによるセキュリティ脅威への対応 • まとめ • References

Slide 5

Slide 5 text

YURIE MORI(森 友梨映) • DevOps Engineer(Sr.Consultant)@Avanade • Microsoft MVP for Developer Technologies(DevOps) 2024~ • Zennでの記事執筆(Azure DevOpsを使ったAgile/DevOpsの実践, エンタープライズでGiHub を使うとか) • TFSUGでの登壇 • 書籍執筆(AZ-400の試験対策本) • お仕事 • AgileとDevOpsの実践の支援 • エンタープライズでのDevOpsソリューション( Azure DevOps/GitHub )の導入・構築 • 技術スタック • Azure DevOps, GitHub, Azure, .NET, C# • Please follow me

Slide 6

Slide 6 text

DevSecOpsとSDL (Security Development Lifecycle)

Slide 7

Slide 7 text

WHY DEVSECOPS NOW? DevOps • Dev(開発)とOps(運用)がコラボレーションによる無駄 のない(Lean)ソフトウェア開発 • 継続的に顧客に価値を届けるための人、プロセス、テクノ ロジーの集合 DevSecOps • DevOpsの取り組みにおいてセキュリティをどのように担保 するか • DevOpsの実践はソフトウェア開発、デリバリーを高速 化するがその中でどのようにセキュリティを担保するか が重要になってくる Security/Complianceの担保 +

Slide 8

Slide 8 text

セキュリティのシフトレフト セキュリティ対策を後回しにしてしまうと、リリースの直前にセキュリティの問題が発覚し、修正のために膨大な時 間やコストがかかってしまう

Slide 9

Slide 9 text

継続的なセキュリティ DevOps のスピード感に、自動化プラクティス、運用環境、その他のパイプライン要素にセキュリティを組み込む 画像出典:https://learn.microsoft.com/ja-jp/training/modules/explore-devops-continuous- security-operations/2-explore-continuous-security

Slide 10

Slide 10 text

SDLのプロセスとセキュリティ対策のプ ラクティス

Slide 11

Slide 11 text

Security Development Lifecycle(SDL) MicrosoftのMichael Howard、Steave Lipner によって提唱されたセキュリティをソフトウェア開発の初期段 階からリリース後の運用・保守に至るまでの各段階でセキュリティ対策を実践するためのフレームワーク • セキュリティ要件を明確化 • 開発/運用するソフトウェアが満たす べきコンプライアンスやデータプライバ シー要件、データ保護方針、業界 標準へのセキュリティ規格の参照 • セキュリティに対する脅威、対 応策について学ぶ • 脅威モデリングを活用し、どこにセ キュリティリスクが潜んでいるかを洗 い出し、それに応じたアーキテクチャ 上の対策を検討 Implementation Design Requirement Training Response Release Verification • 定められたセキュリティ要件を満た すように、設計した対策を実装 • 開発環境をセキュリティで保護 • 出荷するコードの検証を行う • 静的コード解析 • シークレットスキャン • 構成の検証 • ペネトレーションテスト • 依存関係の脆弱性スキャン • 一気にリリースしない • 影響度ごとに展開範囲を定義し、影響度 が低い範囲(リング)から徐々に展開を 広げる • リング0: 開発チーム • リング1: 内部ユーザー • リング2: 外部の特定のユーザー • リング3: 全ユーザー • セキュリティインシデントが発生した 場合の対応手順を予め定義してお く • MS Defender for Cloud/for Identityを活用し、不審なアクティビ ティを監視/アラート通知ができるよ うにしておく

Slide 12

Slide 12 text

• 出荷されるソースコードは安全か? • 外部のパッケージやライブラリを使用している場合、それは安全か? • コンテナは安全? • いかに即座に脆弱性を検知できるか • 特定された脆弱性はいかに即座に修正できるか(MTTR: Mean Time to Recovery) DevSecOpsにおける検討事項

Slide 13

Slide 13 text

DevSecOpsにおける脅威とセキュリティ対策 攻撃を受けやすいコード シークレットの流出による 不正アクセス 外部パッケージやOSSに含まれる 脆弱性 コンテナイメージに含まれる 脆弱性 ソースコードの静的解析(SAST) シークレット管理、 シークレットスキャン 依存関係の脆弱性スキャン コンテナイメージのスキャン 対策 ソフトウェア開発中に発生しうる脅威 プラクティス 使用できるツール • GitHub Advanced SecurityのCodeQLス キャン • SonarQube/Cloud • MS Defender for DevOps • HashiCorp Vault • Gitleaks • Azure Key Vault • GitHub Advanced Security • OWASP Dependency-Check • MendBolt(旧Whitesource Bolt) • Snyk • GitHub Advanced Security • MS Defender for Containers • Docker Scout • Clair

Slide 14

Slide 14 text

脅威モデリングによるセキュリティ戦略の設計 構築しようとしているシステムに対して予測される攻撃、脅威、リスクを特定し、セキュリティ戦略を検討する Design Break Fix Verify • 構築しようとしているシステムの目 的、実行環境、シナリオなどシステ ムに関する情報をベースにデータフ ローダイアグラムを作成 • データフローダイアグラムをベースに、 STRIDEフレームワーク等を使用してシ ステムに対する潜在的な脅威を特定 • 特定した脅威に対して、対策を検 討 • 考えた対策がセキュリティ要件をク リアしているかを確認 Step1:データフローの可視化 Step2:脅威の特定 Step3:脅威への対策を識別 Step4:対策の有効性の検証 Design

Slide 15

Slide 15 text

STRIDEによる脅威の分解と特定 システムに対する脅威を5つのカテゴリの頭文字を合わせたもの。各カテゴリごとに脅威を分類し、それに対する対 策を考える 脅威の種類 具体例 対策例 Spoofing (なりすまし) 攻撃者が他のユーザーやシステムになりす ます • 多要素認証 • 強力なパスワードポリシー • 証明書の使用 Tampering (改ざん) データが不正に変更される • 通信暗号化 Repudiation (否認) 攻撃者がログの削除や改ざんを行ってユー ザーが行った操作を否認する • ログの監査 Information disclosure (情報漏洩) 個人情報や資格情報などの機密情報が 不正に取得される • データのアクセス制御 • 暗号化による保護 • セキュアな通信プロトコル Denial of service (サービス拒否) サービスに過剰な負荷を与えて利用不可 状態にする • Rate limit • WAF(Web Application Firewall) Elevation of privilege (権限昇格) 攻撃者が不正に強力な権限(管理者権 限など)を取得して操作する • 最小特権の原則 • RBAC Design

Slide 16

Slide 16 text

Microsoft Threat Modeling Toolによる 脅威モデリング データフロー↓ STRIDEベースの脅威の 検出→ https://learn.microsoft.com/ja-jp/azure/security/develop/threat-modeling-tool

Slide 17

Slide 17 text

GitHub Advanced Security によるセキュリティ脅威への対応

Slide 18

Slide 18 text

GitHub Advanced Securityのセキュリティ機能 • コードスキャン • シークレットスキャン • 依存関係の脆弱性スキャン

Slide 19

Slide 19 text

GitHub Advanced SecurityのCodeQLによるコードの静的解析 Repository 分析対象のソースコード my-custom-suite.qls より高度な解析を行う場合、カスタ ムのクエリスイートファイルを作成して 解析に使用 GitHub Actions github/codeql-action/init@v2 CodeQL データベースを作成 リレーショナル データと ソース参照を生成 データベースに対してCodeQL クエリを実行(脆弱性の特定) 分析結果の出力 クエリ実行結果の解釈 SARIFファイル エクストラクタ CodeQLによるソーススキャンはGitHub Actionsによって実行される クエリの参照 参照 出力 SQL/path injection, XSSなど一般的なセキュリティ脆弱性を検知する。 分析対象のソースコードを言語ごとにDB化(codeql dbの作成)して、クエリを実行することによって ソースの解析を行う。 高度な分析をしたい場合は自分でカスタムクエリを書くことも可 Verification バリアント分析: 既知のセキュリティ脆弱性をシードとして、 類似の脆弱性を検出する Response

Slide 20

Slide 20 text

CodeQLによる分析を外部から使いたい CodeQL CLIを使うことによってCodeQLの機能を使用できる

Slide 21

Slide 21 text

CodeQLの様々なユースケース • ケース1: • ソースコードはGitHubにある。 • リポジトリはPublic • →CodeQL CLIは使わなくていい。リポジトリのcode securityから有効化できる • →GitHubのパブリックリポジトリではCodeQLが無料で使用できる • ケース2: • ソースコードはGitHub外(Azure DevOpsとか) • コードスキャンでCodeQL使いたい • GitHubのリポジトリは持っていない • →CodeQL CLIを使用することでローカルでCodeQLによる分析を実行できる。 • →ただ、分析結果をAzure DevOps上でレンダリングするとかは無理なので、分析結果の SARIFファイルのviewerが必要 • →Azure DevOpsでCodeQLが使いたいなら、いっそのことGitHub Advanced Security for Azure DevOpsを使ったがいいかも(別途課金が必要)

Slide 22

Slide 22 text

GitHub Advisory Database CVE*1に基づいて脆弱性を一意に識別 CWE *2に基づいて脆弱性を分類 CVCC *3に基づいて 脆弱性をスコアリング Repository 分析対象のソースコード Package.jsonなど依存関係を定義し たマニフェストファイル Dependency Graph ①リポジトリの依存関係の定義ファイル、 GitHub Advisoryに更新が入ると 依存関係グラフが更新される Dependabotアラート Dependabot セキュリティアップデート Dependabot バージョンアップデート セキュリティ的な脆弱性 バージョン乖離による脆弱性 自動アップデート Pull Request アラート生成 ③検知された脆弱性の種類により、自 動アップデートのPRが自動で作成される Dependabotによる 自動アップデートのPR作成 Dependency Review ②依存関係由来の脆弱性が検知さ れるとDependabotアラートが生成 ↑PRの変更適用による 依存関係変更の表示 GitHub Advanced Securityによる依存関係の 脆弱性の検知と対応 Verification • CVE(Common Vulnerability and Exposures)*1: • ソフトウェアの脆弱性やセキュリティリスクを一意に管 理する識別子 • CWE (Common Weakness Enumeration)*2: • ソフトウェアにおける脆弱性を分類・整理した体系 • CVCC (Common Vulnerability Scoring System)*3: • 脆弱性の深刻度を評価するためのスコアリングシステム Response

Slide 23

Slide 23 text

GitHub Advanced SecurityをAzure DevOpsで使う • GitHub Advanced SecurityがAzure DevOpsでも使えるGitHub Advanced Security for Azure DevOps(GHAzDO)という機能がある • GitHubアカウントは不要 • 以下の条件をクリアすることで有効にできる • 導入する人がProject Collection Administratorsの権限を持っている • 導入対象のReposのソース管理方式がGitであること • Azure DevOpsの使用料とは別でお値段が掛かるのでご注意($49/月 ※1ア クティブコミッター) • Organization/Project/Reposのレベルで有効化が可能

Slide 24

Slide 24 text

GHAS/GHAzDOとMS Defender for Cloudの統合(1/3) GitHub Advanced Security(GHAS)またはGitHub Advanced Security for Azure DevOpsとMS Defender for Cloudを 統合することによって、コードベース/DevOps Platformのセキュリティ状況とデプロイ先のセキュリティ状況を監視することができる。 DevOps Platformだけでなくクラウド環境も含めた包括的なDevSecOpsの実現が可能 Response

Slide 25

Slide 25 text

GHAS/GHAzDOとMS Defender for Cloudの統合(2/3) Response

Slide 26

Slide 26 text

GHAS/GHAzDOとMS Defender for Cloudの統合(3/3) DevOps上のセキュリティ的な脆弱性がいくつあるか、コードスキャンによって何件の脆弱性が確認されたかなど、 DevOpsプラットフォーム上(GitHub、Azure DevOpsなど)で確認されたセキュリティの状態を確認するこ とができる Response

Slide 27

Slide 27 text

Universe2024で発表されたアップデート: Found Means FIX( 見つけたら即修正) Copilot Autofix for CodeQL Code scanning alertがGA Security Campaign • CodeQLで検出された脆弱性をCopilotが自動で修正してくれる • 全パブリックリポジトリで無料で利用可能 • 一度に最大数千件のセキュリティアラートをトリアージして、タイプ、重大度、 リポジトリ、チームごとにフィルタリング→Copilot Autofix による修正提案 • セキュリティ負債の一括返済

Slide 28

Slide 28 text

まとめ

Slide 29

Slide 29 text

• ソフトウェア開発の早期段階でセキュリティ対策を実施することでセキュリティ負債の増大、リリース前 の手戻り発生、インシデント発生などの悲しい事故を回避 • SDLなどの方法論の整備・発展とGitHub Advanced Securityなどのツールによって以前より比 較的容易にセキュリティを開発プロセスに組み込みやすくなっている(一生懸命YAMLを書かなくて も最低限のチェックができる。。。) • ので、積極的にDevSecOpsを実践していきましょうね٩(`・ω・´)و まとめ

Slide 30

Slide 30 text

• DevSecOps • https://learn.microsoft.com/ja-jp/devops/operate/security-in-devops • 継続的セキュリティ • https://learn.microsoft.com/ja-jp/training/modules/explore-devops-continuous-security-operations/2-explore-continuous- security • SDL(Security Development Lifecycle) • https://learn.microsoft.com/ja-jp/compliance/assurance/assurance-microsoft-security-development-lifecycle • 脅威モデリング • https://learn.microsoft.com/ja-jp/training/modules/tm-introduction-to-threat-modeling/1b-threat-modeling-phases?ns-enrollment- type=learningpath&ns-enrollment-id=learn.security.tm-threat-modeling-fundamentals • https://learn.microsoft.com/ja-jp/azure/well-architected/security/threat-model • Microsoft Threat Modeling Tool • https://learn.microsoft.com/ja-jp/azure/security/develop/threat-modeling-tool-getting-started#analyzing-threats • GitHub Advanced SecurityのCodeQL/依存関係管理(以下blogに出典まとまってます) • https://zenn.dev/yuriemori/articles/45fee4f19a9184 • GHAS/GHAzDOとMS Defender for Cloudの統合(以下blogに出典まとまってます) • https://zenn.dev/yuriemori/articles/0d7ef5b16c9655 • https://zenn.dev/yuriemori/articles/0d7ef5b16c9655 • Found Means FIX • https://github.blog/news-insights/product-news/universe-2024-previews-releases/ References

Slide 31

Slide 31 text

THANK YOU ☺ Yurie Mori X: @1115_lilium