โ† CI/CD Pipeline Operations

ISMS-P 2.8.1 ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜ High Risk

๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ์ด ์ •์˜๋˜์–ด ์žˆ๋Š”๊ฐ€?

ISMS-P 2.8.1์€ ์ •๋ณด์‹œ์Šคํ…œ ๋„์ž…ยท๊ฐœ๋ฐœยท๋ณ€๊ฒฝ ์‹œ ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •์˜ํ•˜๊ณ  ์ ์šฉํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. DevSecOps ํŒŒ์ดํ”„๋ผ์ธ์— SAST/SCA๋ฅผ ํ†ตํ•ฉํ•˜๊ณ , Policy as Code๋กœ ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ž๋™ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“‹

ISMS-P ์ธ์ฆ ๊ธฐ์ค€

ISMS-P 2.8.1 ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜

2.8.1

๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜

์ธ์ฆ ๊ธฐ์ค€ ์ •์˜

"์ •๋ณด์‹œ์Šคํ…œ์˜ ๋„์ž…ยท๊ฐœ๋ฐœยท๋ณ€๊ฒฝ ์‹œ ์ •๋ณด๋ณดํ˜ธ ๋ฐ ๊ฐœ์ธ์ •๋ณด๋ณดํ˜ธ ๊ด€๋ จ ๋ฒ•์  ์š”๊ตฌ์‚ฌํ•ญ, ์ตœ์‹  ๋ณด์•ˆ์ทจ์•ฝ์ , ์•ˆ์ „ํ•œ ์ฝ”๋”ฉ๋ฐฉ๋ฒ• ๋“ฑ ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •์˜ํ•˜๊ณ  ์ ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค."

๐Ÿ“Œ DevSecOps ๋ณด์•ˆ ๊ฒ€์‚ฌ ๋‹จ๊ณ„

  • SAST: ์ •์  ์ฝ”๋“œ ๋ถ„์„
  • SCA: ์˜์กด์„ฑ ์ทจ์•ฝ์  ๋ถ„์„
  • IaC Scan: ์ธํ”„๋ผ ์ฝ”๋“œ ๊ฒ€์‚ฌ
  • Secret Scan: ์‹œํฌ๋ฆฟ ํƒ์ง€
  • Container Scan: ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๊ฒ€์‚ฌ

โš ๏ธ ๋ฏธ์ค€์ˆ˜ ์‹œ ์‹ฌ์‚ฌ ์˜ํ–ฅ

  • ๊ฒฐํ•จ: ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ ๋ฏธ์ •์˜
  • ๊ฒฐํ•จ: ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์•”ํ˜ธํ™” (MD5, SHA1)
  • ๊ฒฐํ•จ: ๋ฒ•์  ์š”๊ตฌ์‚ฌํ•ญ ๋ฏธ๋ฐ˜์˜
  • ๊ถŒ๊ณ : ์ฝ”๋”ฉ ํ‘œ์ค€ ๋ฏธ์ˆ˜๋ฆฝ, ๊ฒ€ํ†  ์—†์ด ๋ฐฐํฌ
๐Ÿ“„ KISA ISMS-P ์ธ์ฆ๊ธฐ์ค€ ์•ˆ๋‚ด์„œ โ†— ๐Ÿ”’ OWASP Secure Coding Practices โ†—
๐Ÿ“ฐ

์‹ค์ œ ๋ณด์•ˆ ์‚ฌ๊ณ  ์‚ฌ๋ก€

๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ ๋ฏธ์ ์šฉ์œผ๋กœ ๋ฐœ์ƒํ•œ ์‹ค์ œ ์‚ฌ๊ณ 

2021.12

Log4j (Log4Shell) - ์ „ ์„ธ๊ณ„ ์ˆ˜๋ฐฑ๋งŒ ์‹œ์Šคํ…œ ์˜ํ–ฅ

์ž๋ฐ” ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Log4j์˜ ์›๊ฒฉ์ฝ”๋“œ ์‹คํ–‰(RCE) ์ทจ์•ฝ์  ๋ฐœ๊ฒฌ. SCA ๋ฏธ์ ์šฉ์œผ๋กœ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ทจ์•ฝ์  ๋ฏธํƒ์ง€, SBOM ๋ถ€์žฌ๋กœ ์˜ํ–ฅ ๋ฒ”์œ„ ํŒŒ์•… ์ง€์—ฐ.

๐Ÿ’ก ๊ตํ›ˆ: SBOM ๊ด€๋ฆฌ ํ•„์ˆ˜, SCA ๋„๊ตฌ CI/CD ํ†ตํ•ฉ ํ•„์š”

์ถœ์ฒ˜: NVD CVE-2021-44228 โ†—
2024.03

XZ Utils ๋ฐฑ๋„์–ด - ๊ณต๊ธ‰๋ง ๊ณต๊ฒฉ

XZ 5.6.0/5.6.1 ๋ฒ„์ „์— ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ์•…์„ฑ ๋ฐฑ๋„์–ด ์‚ฝ์ž…. ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค ๋ฏธํก์œผ๋กœ 2๋…„๊ฐ„ ์•…์„ฑ ์ปค๋ฐ‹ ๋ฏธํƒ์ง€.

๐Ÿ’ก ๊ตํ›ˆ: ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ฐ•ํ™” ํ•„์š”

์ถœ์ฒ˜: NVD CVE-2024-3094 โ†—
โšก

ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์˜ ์œ„ํ—˜

๋ณด์•ˆ ๊ฒ€์‚ฌ ์—†๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ์˜ ์œ„ํ—˜

๋ณด์•ˆ ๊ฒ€์‚ฌ ์—†๋Š” ํŒŒ์ดํ”„๋ผ์ธ (์œ„ํ—˜)

# ๋ฌธ์ œ: ๋ณด์•ˆ ๊ฒ€์‚ฌ ์ „๋ฌด
name: Deploy
on: push
jobs:
  deploy:
    steps:
      - uses: actions/checkout@v4
      - run: npm install  # ์ทจ์•ฝํ•œ ์˜์กด์„ฑ!
      - run: npm run build
      - run: aws s3 sync ./dist s3://bucket
      # SAST ์—†์Œ โ†’ ์ฝ”๋“œ ์ทจ์•ฝ์  ๋ฏธํƒ์ง€
      # SCA ์—†์Œ โ†’ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ทจ์•ฝ์  ๋ฏธํƒ์ง€
      # ๋ณด์•ˆ ๊ฒŒ์ดํŠธ ์—†์Œ โ†’ ์ทจ์•ฝ์  ์žˆ์–ด๋„ ๋ฐฐํฌ

๋ณด์•ˆ ๊ฒ€์‚ฌ ๋‹จ๊ณ„ ๋ถ€์žฌ โ†’ ์ทจ์•ฝํ•œ ์ฝ”๋“œ/์˜์กด์„ฑ์ด ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋จ

DevSecOps ํŒŒ์ดํ”„๋ผ์ธ (๊ถŒ์žฅ)

jobs:
  sast:     # SonarQube, Semgrep
  sca:      # Snyk, OWASP Dependency Check
  iac-scan: # Checkov, tfsec
  secrets:  # Gitleaks, TruffleHog
  container:# Trivy (Critical/High ์‹œ ์ฐจ๋‹จ)

  deploy:
    needs: [sast, sca, iac-scan, secrets, container]
    # ๋ชจ๋“  ๋ณด์•ˆ ๊ฒ€์‚ฌ ํ†ต๊ณผ ํ›„์—๋งŒ ๋ฐฐํฌ

๋ณด์•ˆ ๊ฒ€์‚ฌ ๋‹จ๊ณ„ ํ†ตํ•ฉ โ†’ ์ทจ์•ฝ์  ๋ฐœ๊ฒฌ ์‹œ ๋ฐฐํฌ ์ž๋™ ์ฐจ๋‹จ

๐Ÿšจ

ํ•ต์‹ฌ ์š”์•ฝ

SAST + SCA + IaC Scan + Secret Scan + Container Scan์„ ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•˜๊ณ , ๋ชจ๋“  ๊ฒ€์‚ฌ ํ†ต๊ณผ ์‹œ์—๋งŒ ๋ฐฐํฌ๋ฅผ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ISMS-P 2.8.1 ์œ„๋ฐ˜ ์‚ฌํ•ญ

โ—

๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜ ๋ฐ ์ ์šฉ ๋ฏธํก

โ—

์ตœ์‹  ๋ณด์•ˆ์ทจ์•ฝ์  ๊ฒ€ํ†  ์ ˆ์ฐจ ๋ถ€์žฌ

โ—

์•ˆ์ „ํ•œ ์ฝ”๋”ฉ๋ฐฉ๋ฒ• ๊ฒ€์ฆ ๋ฏธ์ ์šฉ

โ—

์ทจ์•ฝํ•œ ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋  ์œ„ํ—˜

๐Ÿ”

์‚ฌ์ „ ํƒ์ง€ ๋ฐฉ์•ˆ

IaC ์ฝ”๋“œ ๋ถ„์„ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ ์ „ ์ ๊ฒ€

CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๋ณด์•ˆ ๊ฒ€์‚ฌ ํƒ์ง€ ๋กœ์ง

ํƒ์ง€ ๋Œ€์ƒ ํŒ๋‹จ ์กฐ๊ฑด ๊ฒฐ๊ณผ
๐Ÿ” CI/CD Pipeline
SAST ๋‹จ๊ณ„ ๋ฏธํฌํ•จ High - ์ฝ”๋“œ ์ทจ์•ฝ์  ๋ฏธํƒ์ง€
๐Ÿ“ฆ CI/CD Pipeline
SCA ๋‹จ๊ณ„ ๋ฏธํฌํ•จ High - ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ทจ์•ฝ์  ๋ฏธํƒ์ง€
๐Ÿ—๏ธ Terraform
Sentinel ์ •์ฑ… ๋ฏธ์ ์šฉ High - ์ธํ”„๋ผ ๋ณด์•ˆ ๋ฏธ๊ฒ€์ฆ
๐Ÿ“š Dependencies
์ทจ์•ฝ ๋ฒ„์ „ ์˜์กด์„ฑ High - ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ ํ•„์š”
๐Ÿ””

์‚ฌํ›„ ๋Œ€์‘ ๋ฐฉ์•ˆ

๋Ÿฐํƒ€์ž„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ž๋™ ๋Œ€์‘

Runtime ๋ณด์•ˆ ์ด๋ฒคํŠธ ๋Œ€์‘ ๋กœ์ง

ํƒ์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค ๋Œ€์‘ ๋ฐฉ์•ˆ ๊ฒฐ๊ณผ
๐Ÿณ ECR Scan Critical ์ทจ์•ฝ์ 
๋ฐฐํฌ ์ฐจ๋‹จ, ์ฆ‰์‹œ ํŒจ์น˜ ํ•„์š” Critical - ๋ฐฐํฌ ์ž๋™ ์ฐจ๋‹จ
๐Ÿค– Dependabot ์ทจ์•ฝ์  ์•Œ๋ฆผ
PR ์ž๋™ ์ƒ์„ฑ, ํŒจ์น˜ ๊ฒ€ํ†  ํ•„์š” High - ์ž๋™ PR ์ƒ์„ฑ
๐Ÿ›ก๏ธ Security Hub ๋ฏธ์ค€์ˆ˜
๊ทœ์ • ์œ„๋ฐ˜, ์กฐ์น˜ ํ•„์š” High - Slack ์ฆ‰์‹œ ์•Œ๋ฆผ

์ž๋™ ๋Œ€์‘ ์ฒด๊ณ„

Security Gate: Critical/High ์‹œ ๋ฐฐํฌ ์ฐจ๋‹จ Dependabot PR: ์ž๋™ ์—…๋ฐ์ดํŠธ Slack Notification: ์ฆ‰์‹œ ์•Œ๋ฆผ
โœ“

์กฐ์น˜ ๊ฐ€์ด๋“œ

GitHub Actions DevSecOps ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ

DevSecOps ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ (๋ณต์‚ฌํ•˜์—ฌ ์ ์šฉ)
.github/workflows/devsecops.yml
# .github/workflows/devsecops.yml
name: DevSecOps Pipeline
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  # 1. SAST - ์ •์  ๋ถ„์„
  sast:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: SonarQube Scan
        uses: sonarsource/sonarqube-scan-action@master
      - name: Semgrep SAST
        uses: returntocorp/semgrep-action@v1
        with:
          config: p/security-audit

  # 2. SCA - ์˜์กด์„ฑ ๋ถ„์„
  sca:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Snyk Security Scan
        uses: snyk/actions/node@master
        with:
          args: --severity-threshold=high
      - name: Generate SBOM
        uses: anchore/sbom-action@v0

  # 3. IaC ๋ณด์•ˆ ๊ฒ€์‚ฌ
  iac-security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Checkov IaC Scan
        uses: bridgecrewio/checkov-action@master
        with:
          soft_fail: false  # ์‹คํŒจ ์‹œ ํŒŒ์ดํ”„๋ผ์ธ ์ค‘๋‹จ

  # 4. ์‹œํฌ๋ฆฟ ํƒ์ง€
  secrets-scan:
    runs-on: ubuntu-latest
    steps:
      - name: Gitleaks Scan
        uses: gitleaks/gitleaks-action@v2

  # 5. ์ปจํ…Œ์ด๋„ˆ ์Šค์บ”
  container-scan:
    needs: [sast, sca, iac-security, secrets-scan]
    runs-on: ubuntu-latest
    steps:
      - name: Trivy Container Scan
        uses: aquasecurity/trivy-action@master
        with:
          severity: 'CRITICAL,HIGH'
          exit-code: '1'  # Critical/High ์‹œ ์‹คํŒจ

  # 6. ๋ฐฐํฌ (๋ชจ๋“  ๊ฒ€์‚ฌ ํ†ต๊ณผ ํ›„)
  deploy:
    needs: [container-scan]  # ๋ณด์•ˆ ๊ฒ€์‚ฌ ํ†ต๊ณผ ํ•„์ˆ˜
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to Production
        run: echo "Deploying..."

๐Ÿ’ก ํ•ต์‹ฌ: ๋ชจ๋“  ๋ณด์•ˆ ๊ฒ€์‚ฌ Job์ด needs๋กœ ์—ฐ๊ฒฐ๋˜์–ด ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ๋ฐฐํฌ๊ฐ€ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค. Critical/High ์ทจ์•ฝ์  ๋ฐœ๊ฒฌ ์‹œ ์ž๋™์œผ๋กœ ํŒŒ์ดํ”„๋ผ์ธ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

SAST (SonarQube) SCA (Snyk) IaC (Checkov) Secrets (Gitleaks) Container (Trivy)

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

๐Ÿ“˜ GitHub Actions Security Hardening โ†— ๐Ÿ”’ OWASP DevSecOps Guideline โ†—
๐Ÿ“Š

๋ฆฌํฌํŠธ ๋ฐฉ์•ˆ

ISMS-P ์‹ฌ์‚ฌ ์ฆ์  ๋ฐ ์ •๊ธฐ ๋ณด๊ณ 

๐Ÿ“‹ ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ ๋ฌธ์„œ

  • Policy as Code ์ •์ฑ… ๋ชฉ๋ก
  • Sentinel/OPA ์ •์ฑ… ์ฝ”๋“œ
  • ๋ณด์•ˆ ๊ฒ€์‚ฌ ๊ธฐ์ค€ ์ •์˜์„œ
  • ์˜ˆ์™ธ ์Šน์ธ ์ด๋ ฅ

โš™๏ธ ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ • ์ฆ์ 

  • GitHub Actions/CodePipeline ์„ค์ •
  • SAST/SCA/IaC Scan ๋‹จ๊ณ„ ์Šคํฌ๋ฆฐ์ƒท
  • Security Gate ์„ค์ • ํ™”๋ฉด
  • ๋ฐฐํฌ ์ฐจ๋‹จ ๋กœ๊ทธ

๐Ÿ“ˆ ๋ณด์•ˆ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ ์ฆ์ 

  • SonarQube/Snyk ๋Œ€์‹œ๋ณด๋“œ
  • ์ทจ์•ฝ์  ํƒ์ง€ ๋ฐ ์กฐ์น˜ ์ด๋ ฅ
  • SBOM ์ƒ์„ฑ ๊ธฐ๋ก
  • ์›”๊ฐ„ ๋ณด์•ˆ ๊ฒ€์‚ฌ ๋ฆฌํฌํŠธ
โšก

BSG ์ฐจ๋ณ„์ 

๊ธฐ์กด ๋„๊ตฌ๊ฐ€ ๋†“์น˜๋Š” ์ ๊ฒ€ ์˜์—ญ

๊ธฐ์กด ๋„๊ตฌ ๋ฐฉ์‹

๊ฐœ๋ณ„ ๋„๊ตฌ ๋‹จ๋… ์‹คํ–‰

  • ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ ๊ฒ€ํ† 
  • ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ ๊ฒ€์ฆ ๋ถˆ๊ฐ€
  • ๋ณด์•ˆ ๊ฒŒ์ดํŠธ ์ž๋™ํ™” ๋ถˆ๊ฐ€
  • ISMS-P ๋งคํ•‘ ๋ถˆ๊ฐ€

ํ•œ๊ณ„: ๋ณด์•ˆ ๊ฒ€์‚ฌ ๋„๊ตฌ๋ณ„๋กœ ๊ฐœ๋ณ„ ์‹คํ–‰ํ•˜์—ฌ ํ†ตํ•ฉ ๋ณด์•ˆ ์ˆ˜์ค€ ํ‰๊ฐ€ ๋ถˆ๊ฐ€

BSG ์ ‘๊ทผ ๋ฐฉ์‹

ISMS-P ๊ด€์  ํ†ตํ•ฉ ์ ๊ฒ€

  • SAST + SCA + IaC + Container Scan ํ†ตํ•ฉ ๊ฒ€์ฆ
  • ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ • ๋ถ„์„, ๋ณด์•ˆ ๋„๊ตฌ ์ ์šฉ ์—ฌ๋ถ€ ๊ฒ€์ฆ
  • ์ทจ์•ฝ์  ํƒ์ง€, ๋ฐฐํฌ ์ฐจ๋‹จ, ์•Œ๋ฆผ ์ž๋™ํ™”
  • DevSecOps ํŒŒ์ดํ”„๋ผ์ธ ์ „์ฒด ๋ณด์•ˆ ์ˆ˜์ค€ ํ‰๊ฐ€

์ฐจ๋ณ„์ : Policy as Code + ์ž๋™ํ™” ๊ฒŒ์ดํŠธ + ์‹ฌ์‚ฌ ์ฆ์  ์ž๋™ํ™”

โ† CI/CD Operations๋กœ ๋Œ์•„๊ฐ€๊ธฐ