튜토리얼: SBOM을 사용한 종속성 스캔 설정
GitLab v19.2Tier: Ultimate Offering: GitLab.com 종속성 스캔은 소프트웨어 종속성의 보안 취약점을 메인 브랜치에 커밋되기 전에 자동으로 탐지할 수 있습니다. 이 튜토리얼에서는 다음을 수행하는 방법을 안내합니다.
Tier: Ultimate Offering: GitLab.com
종속성 스캔은 소프트웨어 종속성의 보안 취약점을 메인 브랜치에 커밋되기 전에 자동으로 탐지할 수 있습니다. 애플리케이션을 개발하고 테스트하는 동안 워크플로 초기 단계에서 취약한 종속성을 식별하고 대응할 수 있습니다. 종속성 분석기는 애플리케이션 종속성의 소프트웨어 자재 명세서(SBOM, Software Bill of Materials)를 생성한 다음, 이를 권고문과 비교하여 취약점을 식별합니다. 정적 도달 가능성 분석(static reachability analysis)은 애플리케이션이 취약한 종속성 중 어떤 것을 임포트하는지 식별하여 취약점 위험 평가 데이터를 강화합니다.
이 튜토리얼에서는 다음을 수행하는 방법을 안내합니다.
- 예제 JavaScript 애플리케이션을 생성합니다.
- 정적 도달 가능성 분석을 포함하여 새로운 SBOM 분석기를 사용해 종속성 스캔을 설정합니다.
- 애플리케이션 종속성의 취약점을 분류합니다.
- 종속성을 업데이트하여 취약점을 해결합니다.
이 튜토리얼에서는 탐지를 시연하기 위해 알려진 취약점이 있는 오래된 종속성을 사용합니다.
시작하기 전에#
이 튜토리얼을 시작하기 전에 다음을 준비했는지 확인하십시오.
- GitLab.com 계정 및 새 프로젝트를 생성할 수 있는 액세스 권한
- Git
- Node.js(버전 14 이상)
예제 애플리케이션 파일 생성#
이 튜토리얼의 첫 번째 작업은 예제 취약 애플리케이션을 포함한 예제 프로젝트를 설정하고 CI/CD를 구성하는 것입니다.
-
GitLab.com에서 기본값을 사용하여 빈 프로젝트를 생성합니다.
-
프로젝트를 로컬 머신에 클론합니다.
git clone https://gitlab.com/<your-username>/<project-name>.git cd <project-name> -
로컬 머신의 프로젝트에서 다음 파일을 생성합니다.
.gitlab-ci.ymlpackage.jsonapp.js
Filename:
.gitlab-ci.ymlstages: - build - test include: - template: Jobs/Dependency-Scanning.v2.gitlab-ci.yml inputs: enable_static_reachability: trueFilename:
package.json{ "name": "tutorial-ds-sbom-scanning-with-sra", "version": "1.0.0", "main": "index.js", "dependencies": { "axios": "0.21.1", "fastify": "2.14.1" } }Filename:
app.jsconst axios = require('axios'); async function runDemo() { console.log("Starting Reachability Demo..."); try { // This specific call creates the reachability link const response = await axios.get('<https://gitlab.com>'); console.log("Request successful, status:", response.status); } catch (err) { console.log("Demo request finished."); } } runDemo(); -
잠금 파일을 생성합니다.
npm install -
이 파일들을 프로젝트에 커밋하고 푸시합니다.
git add .gitlab-ci.yml app.js package.json package-lock.json git commit -m "Set up files for tutorial" git push -
GitLab.com에서 Build > Pipelines로 이동하여 최신 파이프라인이 성공적으로 완료되었는지 확인합니다.
파이프라인에서 종속성 스캔이 실행되며 다음을 수행합니다.
- 종속성으로부터 SBOM을 생성합니다. SBOM을 다운로드할 수 있습니다.
- SBOM에 나열된 종속성을 알려진 취약점 권고문과 대조하여 스캔합니다.
- 정적 도달 가능성 분석으로 결과를 보강하여 코드에서 임포트되는 종속성을 식별합니다.
취약점 분류 및 분석#
종속성 스캔이 애플리케이션 종속성의 취약점을 탐지했을 것입니다. 다음 작업은 이러한 취약점을 분류하고 분석하는 것입니다.
이 튜토리얼을 간소화하기 위해 모든 변경 사항은 main 브랜치에 커밋됩니다. 실제 환경에서는 브랜치가 병합되기 전에 취약점을 탐지하기 위해 개발 브랜치에서 종속성 스캔을 실행합니다.
이 튜토리얼에서는 하나의 취약점만 분류하고 분석합니다. 이 취약점은 도달 가능하고 명확한 해결 경로가 있기 때문에 선택했습니다.
-
GitLab.com에서 Secure > Vulnerability report로 이동합니다.
보고서에 여러 취약점이 나열되어 있을 것입니다. 이 문서를 작성하는 시점에는 12개의 취약점이 탐지되었습니다.
이 튜토리얼의 목적상 하나의 취약점에만 집중합니다. 실제 환경에서는 사용 가능한 모든 위험 평가 데이터를 분석하고 조직의 위험 관리 프레임워크를 적용합니다.
-
검색 필터를 선택하고 드롭다운 목록에서 Reachability를 선택한 다음, Yes를 선택합니다.
이제 취약점 보고서에는 도달 가능한 취약점만 나열됩니다. 심각도별 취약점 개수가 새 필터에 맞게 업데이트됩니다.
이 예제에서는
package.json에 다음과 같은 직접 종속성을 선언했습니다.axios- 버전 0.21.1fastify- 버전 2.14.1
종속성 스캔은
fastify와axios및 이들의 전이 종속성 모두에서 취약점을 탐지했습니다. 그러나 예제 애플리케이션에서는axios만 임포트하므로fastify의 취약점은 도달 불가능합니다. 도달 가능성 필터를 적용하면fastify의 취약점이 취약점 보고서에서 제외됩니다. -
CVE-2026-25223 - "Fastify's Content-Type header tab character allows body validation bypass"의 설명을 선택합니다.
이 취약점의 세부 정보를 확인합니다.
이 취약점은 심각도가 높으며 Reachable 값이 Yes이므로, 해당 종속성이 애플리케이션에서 임포트됨을 의미합니다. 이로 인해 도달 불가능한 다른 높은 심각도의 취약점보다 위험도가 높습니다.
-
Solution 섹션으로 스크롤합니다.
이 취약점의 해결책은 해당 종속성의 버전을 업그레이드하는 것입니다.
이 튜토리얼을 간소화하기 위해 제시된 해결책을 적용합니다. 실제 환경에서는 해결책을 적용하기 전에 회사의 취약점 분석 프로세스를 따라 이를 검증합니다.
취약점 해결#
이제 해결책을 확보했으므로 fastify 종속성을 업그레이드하겠습니다.
-
로컬 머신에서
package.json파일을 취약점 세부 정보 페이지에 나열된fastify버전인 5.7.2로 업데이트합니다.{ "name": "tutorial-ds-sbom-scanning-with-sra", "version": "1.0.0", "main": "index.js", "dependencies": { "axios": "0.21.1", "fastify": "5.7.2" } } -
잠금 파일을 업데이트합니다.
npm install이렇게 하면
package-lock.json파일이 새 종속성 버전으로 업데이트됩니다. -
새 브랜치를 생성하고 이 변경 사항을 커밋합니다.
git checkout -b update-dependencies git add package.json package-lock.json git commit -m "Update version of fastify" git push -u origin update-dependencies -
GitLab.com에서 Code > Merge requests로 이동하여 Create merge request를 선택합니다.
-
New merge request 페이지에서 맨 아래로 스크롤하여 Create merge request를 선택합니다.
병합 요청 파이프라인이 완료된 후 Reports 탭에 보안 스캔 보고서가 나타날 때까지 기다립니다. 보안 보고서 처리에는 일반적으로 1~2분이 소요됩니다.
-
Reports 탭을 선택한 다음, Security scan을 선택합니다.
보안 스캔 보고서는 병합 요청의 변경 사항이 분류하고 분석한 취약점을 포함하여 7개의 취약점을 수정한다고 명시합니다.
-
Merge를 선택합니다.
병합 요청이 병합될 때까지 기다립니다.
-
Secure > Vulnerability report로 이동합니다.
취약점 보고서는 기본적으로 Still detected 상태인 취약점만 나열하므로 CVE-2026-25223 취약점이 더 이상 표시되지 않습니다. 취약점 세부 정보를 보려면 상태 필터를 변경하면 됩니다.
이 튜토리얼에서는 다음을 수행하는 방법을 학습했습니다.
- SBOM과 정적 도달 가능성 분석을 사용하여 종속성 스캔을 설정합니다.
- 종속성의 취약점을 탐지하고 분류합니다.
- 종속성을 업데이트하여 취약점을 해결합니다.
- 취약점이 수정되었는지 확인합니다.
선택 사항: SBOM 다운로드#
종속성 스캔 분석기가 생성한 SBOM을 다운로드하려면 다음을 수행합니다.
- Build > Pipelines로 이동합니다.
- 가장 최근 파이프라인을 선택합니다.
- dependency-scanning 작업을 선택합니다.
- Job artifacts 섹션에서 Download를 선택합니다.
작업의 아티팩트가 artifacts.zip 파일로 다운로드됩니다. 이 파일의 압축을 풀어 SBOM 파일 gl-sbom-npm-npm.cdx.json에 액세스합니다.