SCA: 소프트웨어 구성 분석이란 무엇입니까?
SCA(소프트웨어 구성 분석) 의존성을 분석하는 연습 알려진 취약점, 라이선스 문제 및 위험을 식별하는 프로젝트를 오픈 소스로 제공 소프트웨어 공급망에서. 이상으로 현대 코드의 90% 그 사람이 사용하는 것 오픈 소스 구성 요소에서 종속성 보안은 중요한 측면이 되었습니다.
팀이 작성한 코드를 분석하는 SAST와 달리 SCA는 코드에 중점을 둡니다. 가져오기: npm 라이브러리, pip 패키지, Maven 종속성, Ruby gem 및 기타 구성 요소 제3자의. 인기 있는 라이브러리의 단일 취약점으로 인해 수천 개의 정보가 노출될 수 있습니다. Log4Shell 및 XZ Utils 사건에서 입증된 것처럼 애플리케이션.
이 기사에서는 주요 SCA 도구인 종속성 관리를 살펴보겠습니다. 전이적, 라이센스 추적 및 종속성을 최신 상태로 유지하기 위한 전략.
무엇을 배울 것인가
- SCA 작동 방식 및 전이적 종속성 분석
- Snyk, dependencyabot 및 OWASP 종속성 검사 구성
- 취약점 데이터베이스: NVD, CVE, GitHub 자문
- 오픈소스 라이선스 관리 및 규정 준수
- 업데이트 전략: 자동 패치와 수동 패치
- CI/CD 파이프라인에 SCA 통합
전이적 의존성 문제
일반적인 프로젝트에는 수십 개의 직접적인 종속성이 있지만 각 종속성은 그에 따른 것입니다.
자체(전이적) 종속성. 50개의 직접 종속성이 있는 Node.js 프로젝트는 다음을 수행할 수 있습니다.
가지고 있다 500-1000 전이적 종속성 에서 node_modules.
전이적 종속성의 취약점은 특히 교활합니다. 개발자는 그 존재를 인식하지 못할 수도 있습니다. SCA는 전체를 분석합니다. 전이적 트리를 포함한 종속성 트리를 사용하여 완전한 적용 범위를 보장합니다.
SCA가 중요하기 때문에
사고 Log4Shell (CVE-2021-44228)은 파괴적인 영향을 보여주었습니다. 인기 있는 라이브러리의 취약점: 35,000개 이상의 Java 패키지가 취약했습니다. 많은 조직에서 모든 애플리케이션을 식별하는 데 몇 주가 걸렸습니다. 중독 목록이 없었기 때문에 영향을 받았습니다. SCA는 이 시나리오를 방지합니다. 업데이트된 인벤토리를 유지하고 발견되면 즉시 경고합니다. 새로운 취약점.
Snyk: 개발자를 위한 통합 SCA
스닉 워크플로에 직접 통합되는 최신 SCA 플랫폼 개발자의. 오픈 소스 프로젝트 및 개발자 경험을 위한 무료 계획을 제공합니다. IDE, CLI 및 CI/CD 통합에 탁월합니다.
Snyk CLI: 터미널 분석
# Installare Snyk CLI
npm install -g snyk
# Autenticarsi
snyk auth
# Analizzare le dipendenze del progetto
snyk test
# Analizzare e monitorare (registra nel dashboard)
snyk monitor
# Analizzare un Dockerfile
snyk container test node:18-alpine
# Analizzare codice IaC
snyk iac test terraform/
# Output in formato JSON per automazione
snyk test --json --severity-threshold=high > snyk-results.json
GitHub Actions의 Snyk 통합
# .github/workflows/snyk.yml
name: Snyk Security Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
snyk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
run: npm ci
- name: Snyk Test
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high --fail-on=all
- name: Snyk Monitor
if: github.ref == 'refs/heads/main'
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
command: monitor
의존봇: 자동 GitHub 업데이트
디펜다봇 종속성을 모니터링하는 GitHub의 내장 서비스와 취약한 버전을 업데이트하기 위한 풀 요청을 자동으로 생성합니다. 구성 이는 간단하며 저장소의 YAML 파일을 통해 발생합니다.
# .github/dependabot.yml
version: 2
updates:
# Dipendenze npm
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
timezone: "Europe/Rome"
open-pull-requests-limit: 10
reviewers:
- "security-team"
labels:
- "dependencies"
- "security"
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major"]
groups:
dev-dependencies:
dependency-type: "development"
update-types:
- "minor"
- "patch"
# GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
# Docker
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
OWASP 종속성 검사
OWASP 종속성 검사 식별하는 오픈 소스 SCA 도구 종속성을 프로젝트하고 해당 프로젝트에 알려진 취약점이 있는지 확인합니다. 국가적 취약점 데이터베이스(NVD). Java, .NET, Node.js, Python, Ruby 및 기타 여러 생태계를 지원합니다.
# .github/workflows/dependency-check.yml
name: OWASP Dependency Check
on:
push:
branches: [main]
schedule:
- cron: "0 6 * * 1" # Ogni lunedi alle 6:00
jobs:
dependency-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: OWASP Dependency Check
uses: dependency-check/Dependency-Check_Action@main
with:
project: "my-application"
path: "."
format: "HTML"
args: >
--failOnCVSS 7
--enableRetired
--nvdApiKey ${{ secrets.NVD_API_KEY }}
- name: Upload Report
if: always()
uses: actions/upload-artifact@v4
with:
name: dependency-check-report
path: reports/
취약점 데이터베이스
SCA 도구는 알려진 취약점의 데이터베이스를 사용하여 종속성을 식별합니다. 문제. 주요 데이터베이스는 다음과 같습니다:
주요 취약점 데이터베이스
| 데이터베이스 | 관리자 | 적용 범위 |
|---|---|---|
| NVD (국가 취약점 데이터베이스) | NIST(미국 정부) | 모든 플랫폼, 24~48시간 업데이트 |
| GitHub 자문 데이터베이스 | GitHub | npm, pip, Maven, RubyGems, NuGet, Go |
| OSV (오픈소스 취약점) | 다중 생태계, 개방형 형식 | |
| Snyk 취약점 DB | 스닉 | 수동으로 선별된 고품질 |
오픈소스 라이선스 관리
취약점 외에도 SCA 분석 라이센스 보장하기 위한 종속성 법적 준수. 일부 오픈 소스 라이선스(예: GPL 및 AGPL)에는 요구 사항이 있습니다. 카피레프트는 상용 소프트웨어에 중요한 영향을 미칠 수 있습니다.
- 허용적 (MIT, Apache 2.0, BSD): 무료 사용, 제한 없음
- 약한 카피레프트 (LGPL, MPL): 라이브러리에 대한 수정 사항은 동일한 라이선스에 따라 릴리스되어야 합니다.
- 강력한 카피레프트 (GPL, AGPL): 모든 파생 소프트웨어는 동일한 라이선스에 따라 출시되어야 합니다.
- 독점/비표준: 사례별로 법적 검토가 필요함
권장 라이선스 정책
- 승인됨: MIT, 아파치 2.0, BSD 2/3 조항, ISC
- 검토 필요: LGPL, MPL, CC-BY
- 막힌: GPL, AGPL, SSPL(독점 소프트웨어용)
- 알려지지 않은: 사용 전 법적 검토 필요
종속성 업데이트 전략
종속성을 업데이트하고 지속적인 과제를 유지합니다. 우리가 권장하는 전략은 다음과 같습니다.
1. 심각한 취약점 자동 패치
보안 업데이트에 대한 PR을 자동으로 생성하도록 종속봇 또는 Renovate를 구성합니다. 보안 패치(마이너/패치 버전)는 테스트 시 자동으로 병합될 수 있습니다. 통과하여 노출 시간을 줄입니다.
2. 주간 그룹 업데이트
중요하지 않은 업데이트를 단일 주간 PR로 그룹화하여 소음이 발생하고 검토가 용이해집니다. 의존봇은 기본적으로 그룹을 지원합니다.
3. 일정이 포함된 메이저 버전
주요 버전 업데이트(주요 변경 사항)를 계획하고 테스트해야 합니다. 수동으로. 자동 주요 업데이트를 무시하고 스프린트에서 특정 시간을 할애합니다.
4. 파일 잠금 및 재현성
항상 잠금 파일(package-lock.json, yarn.lock,
Pipfile.lock) 재현 가능한 빌드 및 사용을 보장하기 위해 npm ci
대신에 npm install IC에서.
파이프라인의 SCA: 워크플로 완료
# .github/workflows/sca-complete.yml
name: SCA Complete Workflow
on:
push:
branches: [main]
pull_request:
jobs:
vulnerability-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
run: npm ci
- name: npm audit
run: npm audit --audit-level=high
- name: Snyk vulnerability scan
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
license-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: npm ci
- name: License check
run: npx license-checker --failOn "GPL-2.0;GPL-3.0;AGPL-3.0"
SCA 모범 사례
- 모든 빌드에서 스캔: 모든 파이프라인에는 야간 빌드뿐 아니라 SCA 검사도 포함되어야 합니다.
- 지속적인 모니터링: 새로운 CVE가 발견되면 알림을 받을 수 있도록 Snyk/Dependabot에 프로젝트를 등록하세요.
- 라이선스 정책: 허용 가능한 라이선스 정책 정의 및 자동화
- 최소한의 의존성: 각각의 새로운 중독을 비판적으로 평가합니다. 종속성이 적다는 것은 공격 표면이 적다는 것을 의미합니다.
- 버전 핀: 범위가 아닌 잠금 파일에서 정확한 버전을 사용합니다.
- 정기감사: 종속성을 분기별로 검토하여 사용하지 않는 종속성을 제거합니다.
결론
SCA는 DevSecOps의 기본 기둥이며 특히 소프트웨어 시대에 중요합니다. 오픈 소스. 취약점 검색, 라이센스 준수 및 업데이트의 조합 자동화는 소프트웨어 공급망의 위협으로부터 프로젝트를 보호합니다.
다음 기사에서는 살펴보겠습니다. 컨테이너 보안, 어떻게 분석하는지 Docker 이미지를 보호하고, Trivy 및 Grype를 사용하여 이미지 스캐닝을 구현하고, 구성합니다. 프로덕션 컨테이너에 대한 런타임 보호.







