DevSecOps:セキュリティをパイプラインに前倒しする
SAST、DAST、コンテナスキャン、IaCセキュリティチェックをCI/CDパイプラインに組み込み、すべてのコミットでセキュリティゲートを自動的に適用します。
「DevSecOps:セキュリティをパイプラインに前倒しする」はCoddyKit上の無料Security+ Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSecurity+ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Security+ Academyコースには全4レッスンが含まれています。
セキュリティのシフトレフトとは
セキュリティのシフトレフトとは、デプロイ前の最終ゲートでセキュリティテストを行うのではなく、開発者のIDE、コードレビュー、CI/CDパイプラインなど、ソフトウェア開発ライフサイクルのより早い段階にセキュリティ活動を組み込むことです。従来のセキュリティレビューは開発サイクルの終盤に行われていたため、修正に多くの費用と時間がかかりました。本番環境で侵害が発生した後に脆弱性を発見する場合と比べ、開発中に脆弱性を発見すれば、修正コストはおよそ100分の1になります。
DevSecOpsとは
DevSecOpsは、開発、運用、セキュリティの各チームがSDLC全体を通じてセキュリティに共同で責任を持つよう、セキュリティを組み込んでDevOpsモデルを拡張したものです。目標は、セキュリティテストを自動化し、デリバリーを遅延させることなく、あらゆる段階で実行できるようにすることです。セキュリティは一度きりのチェックポイントではなく、パイプラインに継続的に備わる特性になります。成熟したDevSecOpsプログラムでは、開発者は手動レビューの数週間後ではなく、コードを書いてから数秒以内にセキュリティに関するフィードバックを受け取ります。
SAST:静的アプリケーションセキュリティテスト
SAST(Static Application Security Testing)は、アプリケーションを実行せずに、ソースコード、バイトコード、またはバイナリを分析します。SASTツールは、SQLの文字列連結、サニタイズされていない出力、禁止関数の使用、ハードコードされた認証情報、安全でない暗号の使用など、脆弱性を示すパターンをスキャンします。SASTはすべてのコミットでCIパイプライン内で実行され、問題がQAや本番環境に到達する前に検出します。代表的なツールには、Semgrep、SonarQube、Checkmarx、Veracodeがあります。
# Semgrep SAST rule example:
# Detect raw SQL string concatenation (SQL injection risk):
# rules:
# - id: sql-injection-string-concat
# pattern: |
# $QUERY = '...' + $USER_INPUT
# $DB.execute($QUERY)
# message: 'SQL injection risk: use parameterized queries'
# severity: ERROR
# languages: [python]
# Running Semgrep in CI:
# semgrep --config auto --error src/
# -> Fails build if ERROR severity findings foundDAST:動的アプリケーションセキュリティテスト
DAST(Dynamic Application Security Testing)は、悪意のあるペイロードを送信して応答を観察し、実際の攻撃者の挙動をシミュレートすることで、実行中のアプリケーションをテストします。SASTとは異なり、DASTは実行時にのみ現れる脆弱性を検出します。対象には、認証の欠陥、セッション管理の問題、ビジネスロジックのバグ、複雑なデータフローにおけるインジェクションの脆弱性などがあります。代表的なDASTツールには、OWASP ZAP(無料)、Burp Suite Enterprise、Acunetixがあります。DASTはパイプライン内でステージング環境に対して実行します。
# OWASP ZAP automated DAST in CI pipeline:
# docker run -t owasp/zap2docker-stable zap-baseline.py \
# -t https://staging.myapp.com \
# -r zap-report.html \
# -I (do not fail on alerts, report only)
# For blocking builds on high findings:
# zap-full-scan.py -t https://staging.myapp.com \
# -l HIGH (fail if HIGH or CRITICAL alerts found)
# ZAP tests for:
# SQL injection, XSS, CSRF, insecure headers,
# path traversal, broken authentication, open redirectsコンテナイメージスキャン
コンテナイメージは、OSパッケージ、言語ランタイム、アプリケーションの依存関係を含むベースイメージから構築されます。これらはすべて、既知の脆弱性の原因となる可能性があります。コンテナイメージスキャンツールはイメージの各レイヤーを分析し、脆弱なパッケージを特定します。広く利用されているツールには、Trivy(無料で高速)、Grype(Anchore)、Clairがあります。スキャンはイメージのビルドパイプラインの一部として実行され、重大なCVEを含むイメージが本番用レジストリに昇格するのを阻止します。
# Trivy container scan in CI pipeline:
# trivy image --severity HIGH,CRITICAL \
# --exit-code 1 \
# myapp:latest
# Output example:
# library/python:3.9-slim (debian 11.6)
# ===================================
# CVE-2023-1234 CRITICAL openssl 1.1.1n-0+deb11u3 -> 1.1.1t
# CVE-2023-5678 HIGH libssl 1.1.1n -> 1.1.1t
# --exit-code 1 causes pipeline to fail
# on any HIGH or CRITICAL finding -> blocks push to registryInfrastructure as Code(IaC)セキュリティスキャン
IaCセキュリティスキャンは、Terraform、CloudFormation、Kubernetesマニフェスト、Helmチャートが適用される前に、セキュリティの設定ミスを分析します。Checkovやtfsecなどのツールは、サーバー側暗号化が設定されていないS3バケット、すべてのインバウンドトラフィックを許可するセキュリティグループ、ワイルドカード権限を持つIAMロール、rootとして実行されるKubernetesポッドなどの違反をチェックします。IaCスキャンにより、クラウドの設定ミスがいずれの環境にも到達する前に防止できます。
# Checkov IaC scan example:
# checkov -d ./terraform/ --compact
# Findings example:
# FAILED: CKV_AWS_20: S3 Bucket has an ACL defined which allows public access
# File: /terraform/s3.tf, Line: 15
# FAILED: CKV_AWS_57: S3 Bucket has server access logging disabled
# File: /terraform/s3.tf, Line: 15
# FAILED: CKV_AWS_24: Ensure no security groups allow all ingress traffic
# File: /terraform/sg.tf, Line: 8
# Passed checks: 47, Failed: 3, Skipped: 0パイプラインでのシークレットスキャン
シークレットスキャンツールは、誤って含められた認証情報がないか、ソースコードとコミットをチェックします。truffleHog、GitLeaks、detect-secretsなどのツールは、gitの履歴と新しいコミットをスキャンし、APIキー、接続文字列、秘密鍵、JWTトークンに一致するパターンを検出します。pre-commitフックとして使用すると、認証情報を含むコミットを阻止します。CIゲートとして使用すると、プッシュのたびにリポジトリ内のすべてのファイルをスキャンし、シークレットが検出された場合はビルドを失敗させます。
# GitLeaks pre-commit hook configuration:
# .gitleaks.toml:
# [allowlist]
# description = 'Known false positives'
# paths = ['test/fixtures/fake_key.txt']
# Install as pre-commit hook:
# gitleaks protect --staged
# (scans staged files before commit is created)
# In CI pipeline:
# gitleaks detect --source=. --report-format=json \
# --report-path=gitleaks-report.json
# exit code 1 = secrets found -> blocks pipelineSDLCにおける脅威モデリング
脅威モデリングは、コードを書く前にセキュリティ要件と設計上の欠陥を特定するための、体系的なプロセスです。STRIDEモデル(Spoofing、Tampering、Repudiation、Information Disclosure、Denial of Service、Elevation of Privilege)は、システムのデータフロー図に対する脅威をチームが体系的に列挙する際に役立ちます。脅威モデリングのセッションは設計段階で実施し、脅威に優先順位を付けたリストを作成します。このリストをもとにセキュリティ要件を定め、SAST/DASTのルール選定に役立てます。
# STRIDE threat categories applied to a web login API:
# S - Spoofing: Attacker impersonates valid user
# Control: Strong authentication, MFA
# T - Tampering: Attacker modifies login request
# Control: TLS, HMAC, input validation
# R - Repudiation: User denies actions taken
# Control: Audit logging with tamper-evident storage
# I - Info Disclosure: Password exposed in logs
# Control: Never log sensitive fields
# D - Denial of Service: Flood login endpoint
# Control: Rate limiting, CAPTCHA
# E - Elevation of Privilege: Bypass authorization
# Control: Server-side authorization checksセキュリティゲート:ブロッキングとアドバイザリ
DevSecOpsパイプラインでは、セキュリティチェックをブロッキングゲート(ビルドを失敗させ、デプロイを防止する)またはアドバイザリチェック(検出結果を報告し、デプロイを続行する)として実装します。通常、SAST、コンテナスキャン、シークレット検出で見つかった重大度がCriticalまたはHighの問題はブロックします。MediumやLowの問題は、ブロックせずに通知やチケットを作成します。このバランスにより、セキュリティがすべてのデリバリーを停止するのを防ぎながら、本当に危険な状態が自動的に本番環境へ到達することを防止できます。
DevSecOpsにおけるセキュリティメトリクス
DevSecOpsプログラムは、明確なメトリクスを使って測定する必要があります。主なメトリクスには、重大度の高い問題の平均修復時間(MTTR)、脆弱性密度(時間の経過に伴うコード1,000行あたりの検出数)、エスケープ率(本番稼働後に見つかった脆弱性の割合と、本番稼働前に見つかった割合の比較)、パイプラインのセキュリティゲート通過率などがあります。これらのメトリクスの推移を追跡することで、プログラムの有効性を示し、追加のツールやトレーニングへの投資判断に役立てられます。
文化:セキュリティは共同責任
DevSecOpsで最も難しいのは、技術面ではなく文化面です。セキュリティはセキュリティチームだけでなく、すべての開発者の責任になる必要があります。そのためには、開発者向けセキュリティトレーニング(セキュアコーディングの意識向上)、開発チーム内に配置されたセキュリティチャンピオン、脆弱性が本番環境に到達した際の責任追及をしないポストモーテム(処罰ではなくプロセス改善に焦点を当てること)、そして真のセキュリティリスクに対応するために速度とのトレードオフが必要な場合に、それを許容する経営陣のコミットメントが必要です。文化を変えずにテクノロジーだけを導入すると、開発者が無視するようになるスキャンツールが生まれるだけです。
クイックチェック
このレッスンで学んだCompTIA Security+(SY0-701)の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、DevSecOpsがSAST、DAST、シークレットスキャン、コンテナスキャン、IaCスキャンを自動化されたパイプラインゲートとして統合すること、重大度の高い問題をブロックすることで危険な状態が本番環境に到達するのを防げること、そしてセキュリティを開発工程の早い段階に移すことで、デプロイ後ではなく開発中に脆弱性を検出し、修正コストを大幅に削減できることを学びました。次は、施設やデータセンターにおける物理セキュリティ対策について学びます。
よくある質問
「DevSecOps:セキュリティをパイプラインに前倒しする」レッスンは無料ですか?
はい。「DevSecOps:セキュリティをパイプラインに前倒しする」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Security+ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Security+ Academyコースには全4レッスンが含まれています。
「DevSecOps:セキュリティをパイプラインに前倒しする」で何を学びますか?
SAST、DAST、コンテナスキャン、IaCセキュリティチェックをCI/CDパイプラインに組み込み、すべてのコミットでセキュリティゲートを自動的に適用します。 ブラウザで直接実行するハンズオンコードでSecurity+ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Security+ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSecurity+ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「DevSecOps:セキュリティをパイプラインに前倒しする」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSecurity+ Academyレッスンでコードを書いて実行できますか?
はい。すべてのSecurity+ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 入力検証と出力エンコーディング
- 安全なシークレット管理と環境変数
- 依存関係のセキュリティとソフトウェア構成分析
- DevSecOps:セキュリティをパイプラインに前倒しする