종속성 보안 및 소프트웨어 구성 분석
SCA 도구로 타사 라이브러리를 감사하고 종속성 버전 고정을 적용하며 자동화된 취약점 경보를 CI/CD 파이프라인에 통합합니다.
종속성 보안 및 소프트웨어 구성 분석은(는) CoddyKit의 무료 Cloud & IT Cert Prep 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cloud & IT Cert Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
오픈 소스 의존성의 위험
현대 애플리케이션은 대부분 서드 파티 오픈 소스 라이브러리와 프레임워크로 구성됩니다. 일반적인 Node.js 애플리케이션에는 1,000개가 넘는 전이 의존성이 있을 수 있으며, Java 프로젝트는 수백 개의 Maven 아티팩트를 가져올 수 있습니다. 각 의존성은 잠재적인 공격 표면입니다. Log4j 라이브러리의 Log4Shell 취약점(CVE-2021-44228)은 단 하나의 의존성으로 인해 전 세계 수백만 개의 애플리케이션이 공개 며칠 만에 즉시 악용될 수 있음을 보여 주었습니다.
소프트웨어 구성 분석이란 무엇입니까
소프트웨어 구성 분석(SCA) 도구는 애플리케이션의 모든 오픈 소스 구성 요소를 자동으로 목록화합니다. 여기에는 전이 의존성(사용자의 의존성이 다시 의존하는 항목)도 포함됩니다. 또한 알려진 CVE가 있는지 취약점 데이터베이스와 지속적으로 대조합니다. SCA는 모든 구성 요소와 버전을 나열하는 소프트웨어 구성 요소 명세서(SBOM)를 생성하므로, 새로운 취약점이 공개되었을 때 영향을 받는 시스템을 신속하게 식별할 수 있습니다.
# SCA tool usage examples:
# npm audit (Node.js):
# npm audit
# -> Reports vulnerabilities in package.json dependencies
# -> Shows severity, CVE ID, affected package, fix version
# OWASP Dependency-Check (Java/Python/etc.):
# dependency-check --project 'MyApp' --scan ./lib/
# -> Generates HTML/XML report with CVE findings
# Snyk scan:
# snyk test
# -> Reports vulns + 'snyk fix' applies patches automatically전이 의존성: 숨겨진 위험
전이 의존성은 직접 의존성이 다시 의존하는 라이브러리로, 개발자가 명시적으로 선택하지 않은 항목입니다. 예를 들어 Package A에 직접 의존하고, Package A가 Package B(버전 1.2)에 의존하며, Package B가 Package C(버전 3.0, 취약한 버전)에 의존할 수 있습니다. Package C를 인식하지 못하더라도 애플리케이션은 이를 실행합니다. SCA 도구는 전체 의존성 트리를 순회하여 개발자가 직접 확인할 수 없는 숨겨진 취약점을 드러냅니다.
# Dependency tree example:
# Your package.json:
# 'express': '^4.18.0' (direct dependency)
# 'lodash': '^4.17.21' (direct dependency)
# Transitive dependencies (you didn't choose these):
# express -> 'qs' 6.11.0 (URL parsing)
# express -> 'body-parser' 1.20 -> 'qs' 6.11.0
# lodash (self-contained in this case)
# If 'qs' 6.10.x had a prototype pollution CVE,
# you are vulnerable via express even though
# you never directly imported 'qs'.소프트웨어 구성 요소 명세서(SBOM)
소프트웨어 구성 요소 명세서(SBOM)는 소프트웨어 제품의 모든 구성 요소를 기계가 읽을 수 있는 형식으로 정리한 공식 목록으로, 식품의 원재료 목록과 비슷합니다. SBOM 형식으로는 SPDX(Linux Foundation)와 CycloneDX(OWASP)가 있습니다. 미국 행정명령 14028(2021)은 연방 정부에 판매되는 소프트웨어에 SBOM을 요구했습니다. SBOM이 있으면 보안 팀은 '우리 제품 중 Log4j를 포함하는 제품은 무엇인가?'라는 질문을 즉시 조회하여 며칠간 수동으로 검색하지 않고도 몇 분 안에 답을 얻을 수 있습니다.
# Generate SBOM with syft:
# syft packages . -o spdx-json > sbom.spdx.json
# SBOM content example (SPDX JSON):
# {
# 'packages': [
# { 'name': 'express', 'version': '4.18.2', 'license': 'MIT' },
# { 'name': 'lodash', 'version': '4.17.21','license': 'MIT' },
# { 'name': 'log4j-core','version': '2.14.0','license': 'Apache-2.0'}
# ]
# }
# When Log4Shell announced, query SBOM:
# grep -i 'log4j-core' sbom.spdx.json -> FOUND in 3 projects의존성 고정과 잠금 파일
의존성 고정은 유연한 범위(^1.2.3 또는 *)가 아니라 의존성의 정확한 버전을 지정합니다. 잠금 파일(package-lock.json, yarn.lock, Pipfile.lock, Gemfile.lock)은 설치 시점에 확인된 모든 의존성의 정확한 버전을 기록합니다. 모든 팀 구성원과 CI/CD 파이프라인이 동일한 의존성 버전을 사용하도록 이러한 파일을 소스 관리 시스템에 커밋해야 합니다. 이를 통해 설치 사이에 패키지 버전을 오염시키는 공급망 공격을 방지할 수 있습니다.
# Version range vs pinned versions:
# FLEXIBLE (can pull different versions each install):
# 'express': '^4.0.0' -> installs latest 4.x.x
# 'lodash': '*' -> installs any version!
# PINNED (always same version):
# 'express': '4.18.2' -> always exactly 4.18.2
# Lock file (package-lock.json):
# Records EXACT resolved version of every transitive dep.
# Commit this file! It ensures reproducible builds.
# Never .gitignore lock files (security anti-pattern).공급망 공격: 타이포스쿼팅과 의존성 혼동
공급망 공격은 의존성 생태계를 표적으로 삼습니다. 타이포스쿼팅은 인기 패키지와 이름이 비슷한 악성 패키지를 게시하여 개발자가 이름을 잘못 입력하기를 기다리는 방식입니다(예: lodash 대신 lodahs). 의존성 혼동 공격은 패키지 관리자가 레지스트리를 검색하는 순서를 악용합니다. 공격자는 내부 비공개 패키지와 같은 이름을 가진 악성 패키지를 더 높은 버전 번호로 게시하고, 그 결과 패키지 관리자가 악성 공개 버전을 설치하게 만듭니다.
# Dependency Confusion Attack (Alex Birsan 2021):
# Company uses internal package 'company-utils' v1.0.0
# Hosted on: internal.registry.company.com
# Attacker publishes 'company-utils' v9.9.9 to npmjs.com
# (public registry with higher version number)
# npm install resolves: 'find highest version across ALL registries'
# -> Installs v9.9.9 from public npm (attacker's malicious package!)
# -> Instead of v1.0.0 from internal registry
# Defense: use namespace scoping (@company/utils)
# or configure npm to ONLY use internal registry for private packages시중의 SCA 도구
업계에서는 여러 SCA 도구가 널리 사용됩니다. Snyk는 개발자 친화적인 의존성 검사와 자동 수정 PR을 제공합니다. OWASP Dependency-Check는 Java, .NET, Python, Ruby에 사용되는 무료 도구로 널리 채택되어 있습니다. GitHub Dependabot은 GitHub 저장소에서 취약한 의존성을 업데이트하는 풀 요청을 자동으로 생성합니다. JFrog Xray와 Sonatype Nexus IQ는 SCA를 아티팩트 저장소에 통합하여 취약한 빌드가 운영 환경에 도달하기 전에 차단합니다.
CI/CD 파이프라인에 SCA 통합하기
SCA는 CI/CD 파이프라인의 품질 게이트로 통합할 때 가장 효과적입니다. 모든 풀 요청과 빌드에서 파이프라인이 SCA 도구를 실행하고, 의존성에서 심각 또는 높음 등급의 CVE가 발견되면 빌드를 실패시킵니다. 이러한 '왼쪽으로 이동' 접근 방식은 취약한 의존성이 운영 환경에 도달하기 전에 발견합니다. 수개월 후 수동 보안 검토를 진행하거나 침해가 발생한 뒤에 발견하는 것이 아닙니다. 팀은 배포를 차단할 취약점 심각도 기준과 경고만 생성할 기준을 명확히 정의해야 합니다.
# GitHub Actions SCA pipeline step:
# - name: Run Snyk SCA scan
# uses: snyk/actions/node@master
# env:
# SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
# with:
# args: --severity-threshold=high
# --fail-on=upgradable
# # Build fails if any HIGH or CRITICAL vuln found
# # that has an available fix (--fail-on=upgradable)
# # No fix available? Generates warning, doesn't block
# # (acknowledging risk explicitly is better than blocking forever)오픈 소스 패키지 건전성 평가
의존성을 추가하기 전에 여러 신호를 사용하여 보안 상태를 평가하십시오. 유지 관리 활동: 프로젝트가 활발히 유지 관리되고 있습니까? 마지막 커밋과 릴리스는 언제였습니까? 알려진 취약점 이력: CVE가 몇 건 있었으며 얼마나 신속하게 패치되었습니까? 다운로드 수: 널리 사용되는 패키지일수록 더 많은 보안 검토를 받습니다. 의존성 수: 의존성이 적은 패키지는 전이 위험을 줄입니다. OpenSSF Scorecard는 오픈 소스 프로젝트의 보안 관행을 자동으로 평가합니다.
취약점 해결 전략
SCA가 취약한 의존성을 식별하면 몇 가지 해결 전략을 사용할 수 있습니다. 가능한 경우 가장 우선되는 방법은 패치된 버전으로 업그레이드하는 것입니다. 업그레이드를 준비하는 동안 WAF 규칙을 통한 가상 패치로 알려진 악용 경로를 완화할 수 있습니다. 더 이상 필요하지 않다면 의존성을 제거하십시오. 특정 사용 맥락에서 취약점이 악용될 수 없다면(예: 클라이언트 측 라이브러리의 서버 측 취약점) 문서화된 근거와 함께 위험을 수용할 수 있습니다. 문서화된 수용 절차 없이 심각한 취약점을 해결하지 않은 상태로 두지 마십시오.
의존성 라이선스 준수
SCA 도구는 보안 취약점을 식별할 뿐 아니라 오픈 소스 의존성의 라이선스 준수 문제도 함께 표시합니다. 문제가 될 수 있는 일반적인 라이선스로는 GPL v2/v3(카피레프트 — 제품을 배포하는 경우 제품도 오픈 소스로 공개해야 함), AGPL(GPL을 네트워크 서비스까지 확장), SSPL이 있습니다. 상용 라이선스 없이 독점 상용 소프트웨어에 GPL 라이선스 라이브러리를 사용하면 심각한 법적 책임이 발생할 수 있습니다. FOSSA, Black Duck, WhiteSource와 같은 SCA 도구는 취약점 탐지와 함께 라이선스 검사를 자동화하여 오픈 소스 의무를 준수하도록 합니다.
# License compliance risk levels:
# PERMISSIVE (low risk for commercial use):
# MIT, Apache 2.0, BSD 2/3-Clause
# -> Can use in proprietary code, just keep attribution
# WEAK COPYLEFT (medium risk - check usage):
# LGPL -> can link dynamically without open-sourcing your code
# MPL 2.0 -> modifications to MPL files must be open-sourced
# STRONG COPYLEFT (high risk for proprietary products):
# GPL v2, GPL v3 -> if you distribute code using GPL library,
# your entire product must also be GPL
# AGPL -> extends GPL to SaaS/network services
# SCA policy: block AGPL/GPL in commercial product
# -> Review any exception requests manually빠른 확인
이 lesson에서 다룬 CompTIA Security+ (SY0-701) 개념에 대한 이해도를 확인해 보십시오.
lesson 복습
이 lesson에서는 다음을 배웠습니다. SCA 도구는 전이 의존성을 포함한 전체 의존성 트리에서 알려진 CVE를 검사하고, SBOM은 기계가 읽을 수 있는 목록을 제공하여 새로운 취약점이 공개되었을 때 신속하게 대응할 수 있게 하며, SCA를 CI/CD 품질 게이트로 통합하면 취약한 의존성이 운영 환경에 도달하기 전에 발견할 수 있습니다. 다음으로 DevSecOps와 보안 제어를 전체 CI/CD 파이프라인의 앞 단계로 이동하는 방법을 살펴보겠습니다.
자주 묻는 질문
“종속성 보안 및 소프트웨어 구성 분석” 강의는 무료인가요?
네 — “종속성 보안 및 소프트웨어 구성 분석” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cloud & IT Cert Prep 강의 전체를 잠금 해제할 수 있습니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“종속성 보안 및 소프트웨어 구성 분석”에서 뭘 배우나요?
SCA 도구로 타사 라이브러리를 감사하고 종속성 버전 고정을 적용하며 자동화된 취약점 경보를 CI/CD 파이프라인에 통합합니다. 브라우저에서 직접 실행하는 실습 코드로 Cloud & IT Cert Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cloud & IT Cert Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cloud & IT Cert Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“종속성 보안 및 소프트웨어 구성 분석” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cloud & IT Cert Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cloud & IT Cert Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 입력 검증 및 출력 인코딩
- 보안 비밀 관리 및 환경 변수
- 종속성 보안 및 소프트웨어 구성 분석
- DevSecOps: 파이프라인에 보안을 앞단에서 통합하기