SCA와 Trivy로 살펴보는 오픈소스 보안 취약점 관리

SCA와 Trivy로 살펴보는 오픈소스 보안 취약점 관리

Feb 9, 2025

김현기

#ETC

들어가며

이번 글에서는 SCA가 무엇인지, 왜 필요한지, 그리고 대표적인 SCA 도구인 Trivy를 활용해 오픈소스 보안을 어떻게 점검할 수 있는지 살펴보겠습니다.

SCA란 무엇인가

SCA(Software Composition Analysis)는 애플리케이션을 분석하여 사용된 오픈소스 소프트웨어를 감지하고 보안 결함이 있는지 또는 라이선스 요구 사항이 있는지 감지하기 위한 정보 기술 및 소프트웨어 엔지니어링 분야의 관행입니다. - 위키피디아

왜 SCA가 필요한가?

그렇다면 왜 SCA가 필요할까요?

Synopsys의 2024 OSSRA 보고서를 기반으로 알아보겠습니다.

1. 오픈소스 사용 증가

현대 소프트웨어 개발에서 오픈소스에 대한 의존도가 급격히 증가하고 있습니다.

  • 분석된 코드베이스의 96%가 오픈소스 포함
  • 전체 코드의 77%가 오픈소스에서 유래
  • 평균적으로 하나의 애플리케이션에 500개 이상의 오픈소스 컴포넌트가 사용

2. 오픈소스의 보안과 라이선스

현대 애플리케이션의 오픈소스 사용 증가로 인해 두 가지 주요 위험이 존재합니다.

보안 위험:

  • 84%의 코드베이스에서 최소 1개 이상의 알려진 취약점 발견
  • 91%의 코드베이스가 2년 이상 업데이트되지 않은 상태
  • 취약점이 발견되어도 즉각적인 대응이 어려움

라이선스 위험:

  • GPL, MIT, Apache 등 다양한 라이선스 존재
  • 라이선스 조건 위반 시 법적 분쟁 가능성
  • 상용 제품에 부적합한 라이선스 사용 위험

이러한 위험들을 효과적으로 관리하기 위해서는 지속적인 모니터링과 업데이트가 필수적이고, SCA가 필요한 이유입니다.

SCA는 어떻게 분석할까?

Trivy는 오픈소스 보안 취약점 스캐너입니다. 프로젝트에서 사용 중인 오픈소스 컴포넌트의 보안 취약점을 분석하고 라이선스를 검사합니다.

Codacy 블로그 에서 설명하는 SCA가 작동하는 방식과 함께 Trivy의 동작 방식을 이해하면 SCA 관리 서비스들이 어떻게 오픈소스의 보안 취약점을 분석하는지 이해하는 데 도움이 됩니다.

Codacy는 SCA 분석에 Trivy를 사용합니다.

Trivy는 OS, 언어별 패키지를 분석하는데 node.js의 package.json, yarn.lock, pnpm-lock.json도 지원하기 때문에 프론트엔드 개발 패키지 보안에도 적용할 수 있습니다.

이렇게 분석된 결과물(SBOM)을 가지고 Trivy가 자체적으로 구성한 보안 DB의 데이터와 비교 후 결과물을 생성합니다.

trivy-db

trivy-db에 쌓이는 취약점 정보는 Github Security Advisory, GoSec, RubySec, Red Hat, Debian 등 여러 출처에서 수집된 CVE 정보입니다. trivy-db를 다운받아 로컬에서 내용을 확인해 볼 수 있습니다.

trivy-db는 boltadb 형태로 별도의 프로그램 설치 후 내용을 조회할 수 있습니다.

trivy-db-1

보안 취약점 분류 체계 이해하기

trivy-db에 쌓이는 정보를 하나 확인해볼까요? npm으로 가시면 여러 데이터가 쌓여있고, 이 중에 @babel/traverse를 하나 살펴보겠습니다.

trivy-db-1

담겨있는 정보중에 Key를 보시면 CVE-2023-45133이라는 정보를 확인하실 수 있습니다.

그 아래 값 중에 VendorIDs라는 키가 보이시나요? 이 값은 GHSA-5rrq-pxf6-6jx5 입니다. 이는 보안 코드 태그이고 여러 종류가 존재합니다.

보안 태그 양식이 각각 다르지만 일반적으로 앞부분에는 해당 보안 식별자를 발급한 기관의 접두사 식별자가 포함됩니다.

간략히 아래 3개만 정리해보겠습니다.

  1. CVE (Common Vulnerabilities and Exposures): 미국의 MITRE Corporation에서 관리함
  • MITRE가 만든 통일된 표준 규약
  • 세부정보는 NVD, Github 등과 관련된 다양한 협업체에서 수집
  • What is a CVE?
  1. GHSA (GitHub Security Advisory): Github에서 관리, Github에서 호스팅되는 오픈소스에 붙는 태그
  2. NSWG: Node.js 보안 커뮤니티

이렇게 각 보안 취약점을 관리하는 태그가 존재하고 이런 데이터가 쌓여있는것이 trivy-db입니다.

dependabot

trivy-db에서 아까 살펴본 오류 코드들은 Github Adivisory에서 수집하므로 dependabot과 동일한 오류를 발견할 수 있습니다. 간략하게 하나만 살펴보겠습니다. merge-deep이라는 라이브러리에서 Prototype pollution in Merge-deep 이라는 dependabot 알림이 왔습니다.

dependabot

trivy-db에도 같은 정보가 있는지 한번 찾아볼까요?

triby-db-3

동일한 CVE, GHSA 아이디가 확인되네요.

그리고 github dependabot 이미지 오른쪽 사이드바에 Weaknesses를 확인해보시면 CWE-1321라는 코드를 확인하실 수 있습니다.

CWE

CWECommon Weakness Enumeration는 소프트웨어 보안 취약점의 목록입니다. MITRE에서 관리하며 소프트웨어와 하드웨어의 보안 취약점에 대한 설명이라고 보시면 됩니다.

예를 들자면, CWE-1321(JavaSCript Prototype Pollution)와 같이 취약점 유형을 정의하고 이 취약점 유형을 가지고 있는 하드웨어, 소프트웨어를 발견하면 절차를 거쳐 CVE-2021-26707이라는 보안 코드를 부여합니다.

마치며

이번 글에서는 SCA(Software Composition Analysis)가 무엇인지, 그리고 trivy-db를 통해 SCA 도구가 어떻게 동작하는지, 또한 보안 태그(CVE, GHSA, CWE 등)에 대해 살펴봤습니다.

프론트엔드 개발자는 주로 npm 패키지들을 사용하기 때문에 Dependabot, Trivy, Snyk 등의 도구를 활용하여 자동으로 보안 취약점을 감지하고, 필요한 경우 패키지를 업데이트하는 것이 중요합니다.

Github에서 버전 관리를 하는 서비스라면 Github의 Dependabot을 활용한 업데이트만으로도 기본적인 SCA 관리가 가능할 것 같습니다.

읽어주셔서 감사합니다!

Grow & Glow © 2026

Banner images by undraw.co