튜토리얼: SBOM을 사용하여 의존성 스캔 설정
Offering: GitLab.com
의존성 스캔은 소프트웨어 의존성의 보안 취약점을 기본 브랜치에 커밋되기 전에 자동으로 감지할 수 있습니다. 이 튜토리얼에서는 다음을 수행하는 방법을 보여줍니다: 이 튜토리얼은 감지 시연을 위해 알려진 취약점이 있는 오래된 의존성을 사용합니다.
의존성 스캔은 소프트웨어 의존성의 보안 취약점을 기본 브랜치에 커밋되기 전에 자동으로 감지할 수 있습니다. 애플리케이션을 개발하고 테스트하는 동안 워크플로우 초기에 취약한 의존성을 식별하고 해결할 수 있습니다. 의존성 분석기는 애플리케이션 의존성의 소프트웨어 자재명세서(SBOM)를 생성한 다음 권고 사항과 비교하여 취약점을 식별합니다. 정적 도달 가능성 분석은 애플리케이션이 임포트하는 취약한 의존성을 식별하여 취약점 위험 평가 데이터를 향상시킵니다.
이 튜토리얼에서는 다음을 수행하는 방법을 보여줍니다:
- 예시 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
파일명:
.gitlab-ci.ymlstages: - build - test include: - template: Jobs/Dependency-Scanning.v2.gitlab-ci.yml inputs: enable_static_reachability: true파일명:
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" } }파일명:
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를 선택합니다.
머지 리퀘스트 파이프라인이 완료된 후 보안 결과 위젯이 나타날 때까지 기다립니다. 보안 보고서를 처리하는 데 보통 1~2분이 걸립니다.
-
보안 결과 위젯에서 Show details([chevron-lg-down])를 선택합니다.
보안 결과 위젯은 머지 리퀘스트의 변경 사항이 분류하고 분석한 취약점을 포함하여 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에 접근합니다.
