InfoGrab Docs

튜토리얼: SBOM을 사용하여 의존성 스캔 설정

요약

의존성 스캔은 소프트웨어 의존성의 보안 취약점을 기본 브랜치에 커밋되기 전에 자동으로 감지할 수 있습니다. 이 튜토리얼에서는 다음을 수행하는 방법을 보여줍니다: 이 튜토리얼은 감지 시연을 위해 알려진 취약점이 있는 오래된 의존성을 사용합니다.

의존성 스캔은 소프트웨어 의존성의 보안 취약점을 기본 브랜치에 커밋되기 전에 자동으로 감지할 수 있습니다. 애플리케이션을 개발하고 테스트하는 동안 워크플로우 초기에 취약한 의존성을 식별하고 해결할 수 있습니다. 의존성 분석기는 애플리케이션 의존성의 소프트웨어 자재명세서(SBOM)를 생성한 다음 권고 사항과 비교하여 취약점을 식별합니다. 정적 도달 가능성 분석은 애플리케이션이 임포트하는 취약한 의존성을 식별하여 취약점 위험 평가 데이터를 향상시킵니다.

이 튜토리얼에서는 다음을 수행하는 방법을 보여줍니다:

  • 예시 JavaScript 애플리케이션을 만듭니다.
  • 정적 도달 가능성 분석을 포함하여 새 SBOM 분석기를 사용하여 의존성 스캔을 설정합니다.
  • 애플리케이션 의존성의 취약점을 분류합니다.
  • 의존성을 업데이트하여 취약점을 수정합니다.
Note

이 튜토리얼은 감지 시연을 위해 알려진 취약점이 있는 오래된 의존성을 사용합니다.

시작하기 전에#

이 튜토리얼을 시작하기 전에 다음이 있는지 확인하세요:

  • 새 프로젝트를 만들 수 있는 GitLab.com 계정 및 접근 권한
  • Git
  • Node.js (버전 14 이상)

예시 애플리케이션 파일 만들기#

이 튜토리얼의 첫 번째 작업은 예시 취약한 애플리케이션과 CI/CD 구성을 포함하는 예시 프로젝트를 설정하는 것입니다.

  1. GitLab.com에서 기본값을 사용하여 빈 프로젝트를 만듭니다.

  2. 프로젝트를 로컬 머신에 클론합니다:

    git clone https://gitlab.com/<your-username>/<project-name>.git
    cd <project-name>
    
  3. 로컬 머신에서 프로젝트에 다음 파일을 만듭니다:

    • .gitlab-ci.yml
    • package.json
    • app.js

    파일명: .gitlab-ci.yml

    stages:
    
    - 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.js

    const 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();
    
  4. 잠금 파일을 만듭니다.

    npm install
    
  5. 이 파일들을 프로젝트에 커밋하고 푸시합니다:

    git add .gitlab-ci.yml app.js package.json package-lock.json
    git commit -m "Set up files for tutorial"
    git push
    
  6. GitLab.com에서 Build > Pipelines로 이동하여 최신 파이프라인이 성공적으로 완료되었는지 확인합니다.

    파이프라인에서 의존성 스캔이 실행되어 다음을 수행합니다:

    • 의존성에서 SBOM을 생성합니다. SBOM을 다운로드할 수 있습니다.
    • 알려진 취약점 권고 사항과 SBOM에 나열된 의존성을 스캔합니다.
    • 정적 도달 가능성 분석으로 결과를 보강하여 코드에서 임포트하는 의존성을 식별합니다.

취약점 분류 및 분석#

의존성 스캔이 애플리케이션 의존성의 취약점을 감지했어야 합니다. 다음 작업은 이러한 취약점을 분류하고 분석하는 것입니다.

Note

이 튜토리얼을 간소화하기 위해 모든 변경 사항은 main 브랜치에 커밋됩니다. 실제 환경에서는 개발 브랜치에서 의존성 스캔을 실행하여 브랜치가 병합되기 전에 취약점을 감지합니다.

이 튜토리얼에서는 하나의 취약점만 분류하고 분석합니다. 이 취약점은 도달 가능하고 명확한 수정 경로가 있기 때문에 선택했습니다.

  1. GitLab.com에서 Secure > Vulnerability report로 이동합니다.

    보고서에 나열된 여러 취약점이 표시됩니다. 작성 시점에는 12개의 취약점이 감지되었습니다.

    이 튜토리얼의 목적을 위해 하나의 취약점에만 집중합니다. 실제 환경에서는 모든 사용 가능한 위험 평가 데이터를 분석하고 조직의 위험 관리 프레임워크를 적용합니다.

  2. 검색 필터를 선택하고 드롭다운 목록에서 Reachability를 선택한 다음 Yes를 선택합니다.

    이제 취약점 보고서에 도달 가능한 취약점만 나열됩니다. 심각도별 취약점 수가 새 필터와 일치하도록 업데이트됩니다.

    이 예시에서 package.json에 다음 직접 의존성을 선언했습니다:

    • axios - 버전 0.21.1
    • fastify - 버전 2.14.1

    의존성 스캔은 fastifyaxios, 그리고 그들의 전이적 의존성에서 취약점을 감지했습니다. 그러나 예시 애플리케이션에서는 axios만 임포트되므로 fastify의 취약점에는 도달할 수 없습니다. 도달 가능성 필터를 적용하면 fastify의 취약점이 취약점 보고서에서 제외됩니다.

  3. CVE-2026-25223 - "Fastify's Content-Type header tab character allows body validation bypass"의 설명을 선택합니다.

    1. 이 취약점의 세부 정보를 봅니다.

      취약점은 높은 심각도이며 Reachable 값이 Yes입니다. 즉, 의존성이 애플리케이션에 의해 임포트됩니다. 이로 인해 도달할 수 없는 다른 높은 심각도 취약점보다 더 위험합니다.

    2. Solution 섹션으로 스크롤합니다.

      이 취약점의 해결 방법은 이 의존성의 버전을 업그레이드하는 것입니다.

이 튜토리얼을 간소화하기 위해 명시된 해결 방법을 적용합니다. 실제 환경에서는 이 해결 방법을 적용하기 전에 회사의 취약점 분석 프로세스를 따라 검증합니다.

취약점 수정#

해결 방법이 있으므로 fastify 의존성을 업그레이드합니다.

  1. 로컬 머신에서 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"
       }
    }
    
  2. 잠금 파일을 업데이트합니다.

    npm install
    

    이렇게 하면 package-lock.json 파일이 새 의존성 버전으로 업데이트됩니다.

  3. 새 브랜치를 만들고 이 변경 사항을 커밋합니다:

    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
    
  4. GitLab.com에서 Code > Merge requests로 이동하고 Create merge request를 선택합니다.

  5. New merge request 페이지에서 아래로 스크롤하여 Create merge request를 선택합니다.

    머지 리퀘스트 파이프라인이 완료된 후 보안 결과 위젯이 나타날 때까지 기다립니다. 보안 보고서를 처리하는 데 보통 1~2분이 걸립니다.

  6. 보안 결과 위젯에서 Show details([chevron-lg-down])를 선택합니다.

    보안 결과 위젯은 머지 리퀘스트의 변경 사항이 분류하고 분석한 취약점을 포함하여 7개의 취약점을 수정한다고 명시합니다.

  7. Merge를 선택합니다.

    머지 리퀘스트가 병합될 때까지 기다립니다.

  8. Secure > Vulnerability report로 이동합니다.

    취약점 보고서가 기본적으로 Still detected 상태인 취약점만 나열하기 때문에 CVE-2026-25223은 더 이상 나열되지 않습니다. 취약점 세부 정보를 보려면 상태 필터를 변경할 수 있습니다.

이 튜토리얼에서 다음을 수행하는 방법을 배웠습니다:

  • SBOM 및 정적 도달 가능성 분석으로 의존성 스캔 설정
  • 의존성의 취약점 감지 및 분류
  • 의존성을 업데이트하여 취약점 수정
  • 취약점이 수정되었는지 확인

선택 사항: SBOM 다운로드#

의존성 스캔 분석기가 생성한 SBOM을 다운로드하려면:

  1. Build > Pipelines로 이동합니다.
  2. 가장 최근 파이프라인을 선택합니다.
  3. dependency-scanning 작업을 선택합니다.
  4. Job artifacts 섹션에서 Download를 선택합니다.

작업 아티팩트가 artifacts.zip 파일로 다운로드됩니다. 압축을 풀어 SBOM 파일 gl-sbom-npm-npm.cdx.json에 접근합니다.

튜토리얼: SBOM을 사용하여 의존성 스캔 설정

Tier: Ultimate
Offering: GitLab.com
원문 보기
요약

의존성 스캔은 소프트웨어 의존성의 보안 취약점을 기본 브랜치에 커밋되기 전에 자동으로 감지할 수 있습니다. 이 튜토리얼에서는 다음을 수행하는 방법을 보여줍니다: 이 튜토리얼은 감지 시연을 위해 알려진 취약점이 있는 오래된 의존성을 사용합니다.

의존성 스캔은 소프트웨어 의존성의 보안 취약점을 기본 브랜치에 커밋되기 전에 자동으로 감지할 수 있습니다. 애플리케이션을 개발하고 테스트하는 동안 워크플로우 초기에 취약한 의존성을 식별하고 해결할 수 있습니다. 의존성 분석기는 애플리케이션 의존성의 소프트웨어 자재명세서(SBOM)를 생성한 다음 권고 사항과 비교하여 취약점을 식별합니다. 정적 도달 가능성 분석은 애플리케이션이 임포트하는 취약한 의존성을 식별하여 취약점 위험 평가 데이터를 향상시킵니다.

이 튜토리얼에서는 다음을 수행하는 방법을 보여줍니다:

  • 예시 JavaScript 애플리케이션을 만듭니다.
  • 정적 도달 가능성 분석을 포함하여 새 SBOM 분석기를 사용하여 의존성 스캔을 설정합니다.
  • 애플리케이션 의존성의 취약점을 분류합니다.
  • 의존성을 업데이트하여 취약점을 수정합니다.
Note

이 튜토리얼은 감지 시연을 위해 알려진 취약점이 있는 오래된 의존성을 사용합니다.

시작하기 전에#

이 튜토리얼을 시작하기 전에 다음이 있는지 확인하세요:

  • 새 프로젝트를 만들 수 있는 GitLab.com 계정 및 접근 권한
  • Git
  • Node.js (버전 14 이상)

예시 애플리케이션 파일 만들기#

이 튜토리얼의 첫 번째 작업은 예시 취약한 애플리케이션과 CI/CD 구성을 포함하는 예시 프로젝트를 설정하는 것입니다.

  1. GitLab.com에서 기본값을 사용하여 빈 프로젝트를 만듭니다.

  2. 프로젝트를 로컬 머신에 클론합니다:

    git clone https://gitlab.com/<your-username>/<project-name>.git
    cd <project-name>
    
  3. 로컬 머신에서 프로젝트에 다음 파일을 만듭니다:

    • .gitlab-ci.yml
    • package.json
    • app.js

    파일명: .gitlab-ci.yml

    stages:
    
    - 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.js

    const 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();
    
  4. 잠금 파일을 만듭니다.

    npm install
    
  5. 이 파일들을 프로젝트에 커밋하고 푸시합니다:

    git add .gitlab-ci.yml app.js package.json package-lock.json
    git commit -m "Set up files for tutorial"
    git push
    
  6. GitLab.com에서 Build > Pipelines로 이동하여 최신 파이프라인이 성공적으로 완료되었는지 확인합니다.

    파이프라인에서 의존성 스캔이 실행되어 다음을 수행합니다:

    • 의존성에서 SBOM을 생성합니다. SBOM을 다운로드할 수 있습니다.
    • 알려진 취약점 권고 사항과 SBOM에 나열된 의존성을 스캔합니다.
    • 정적 도달 가능성 분석으로 결과를 보강하여 코드에서 임포트하는 의존성을 식별합니다.

취약점 분류 및 분석#

의존성 스캔이 애플리케이션 의존성의 취약점을 감지했어야 합니다. 다음 작업은 이러한 취약점을 분류하고 분석하는 것입니다.

Note

이 튜토리얼을 간소화하기 위해 모든 변경 사항은 main 브랜치에 커밋됩니다. 실제 환경에서는 개발 브랜치에서 의존성 스캔을 실행하여 브랜치가 병합되기 전에 취약점을 감지합니다.

이 튜토리얼에서는 하나의 취약점만 분류하고 분석합니다. 이 취약점은 도달 가능하고 명확한 수정 경로가 있기 때문에 선택했습니다.

  1. GitLab.com에서 Secure > Vulnerability report로 이동합니다.

    보고서에 나열된 여러 취약점이 표시됩니다. 작성 시점에는 12개의 취약점이 감지되었습니다.

    이 튜토리얼의 목적을 위해 하나의 취약점에만 집중합니다. 실제 환경에서는 모든 사용 가능한 위험 평가 데이터를 분석하고 조직의 위험 관리 프레임워크를 적용합니다.

  2. 검색 필터를 선택하고 드롭다운 목록에서 Reachability를 선택한 다음 Yes를 선택합니다.

    이제 취약점 보고서에 도달 가능한 취약점만 나열됩니다. 심각도별 취약점 수가 새 필터와 일치하도록 업데이트됩니다.

    이 예시에서 package.json에 다음 직접 의존성을 선언했습니다:

    • axios - 버전 0.21.1
    • fastify - 버전 2.14.1

    의존성 스캔은 fastifyaxios, 그리고 그들의 전이적 의존성에서 취약점을 감지했습니다. 그러나 예시 애플리케이션에서는 axios만 임포트되므로 fastify의 취약점에는 도달할 수 없습니다. 도달 가능성 필터를 적용하면 fastify의 취약점이 취약점 보고서에서 제외됩니다.

  3. CVE-2026-25223 - "Fastify's Content-Type header tab character allows body validation bypass"의 설명을 선택합니다.

    1. 이 취약점의 세부 정보를 봅니다.

      취약점은 높은 심각도이며 Reachable 값이 Yes입니다. 즉, 의존성이 애플리케이션에 의해 임포트됩니다. 이로 인해 도달할 수 없는 다른 높은 심각도 취약점보다 더 위험합니다.

    2. Solution 섹션으로 스크롤합니다.

      이 취약점의 해결 방법은 이 의존성의 버전을 업그레이드하는 것입니다.

이 튜토리얼을 간소화하기 위해 명시된 해결 방법을 적용합니다. 실제 환경에서는 이 해결 방법을 적용하기 전에 회사의 취약점 분석 프로세스를 따라 검증합니다.

취약점 수정#

해결 방법이 있으므로 fastify 의존성을 업그레이드합니다.

  1. 로컬 머신에서 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"
       }
    }
    
  2. 잠금 파일을 업데이트합니다.

    npm install
    

    이렇게 하면 package-lock.json 파일이 새 의존성 버전으로 업데이트됩니다.

  3. 새 브랜치를 만들고 이 변경 사항을 커밋합니다:

    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
    
  4. GitLab.com에서 Code > Merge requests로 이동하고 Create merge request를 선택합니다.

  5. New merge request 페이지에서 아래로 스크롤하여 Create merge request를 선택합니다.

    머지 리퀘스트 파이프라인이 완료된 후 보안 결과 위젯이 나타날 때까지 기다립니다. 보안 보고서를 처리하는 데 보통 1~2분이 걸립니다.

  6. 보안 결과 위젯에서 Show details([chevron-lg-down])를 선택합니다.

    보안 결과 위젯은 머지 리퀘스트의 변경 사항이 분류하고 분석한 취약점을 포함하여 7개의 취약점을 수정한다고 명시합니다.

  7. Merge를 선택합니다.

    머지 리퀘스트가 병합될 때까지 기다립니다.

  8. Secure > Vulnerability report로 이동합니다.

    취약점 보고서가 기본적으로 Still detected 상태인 취약점만 나열하기 때문에 CVE-2026-25223은 더 이상 나열되지 않습니다. 취약점 세부 정보를 보려면 상태 필터를 변경할 수 있습니다.

이 튜토리얼에서 다음을 수행하는 방법을 배웠습니다:

  • SBOM 및 정적 도달 가능성 분석으로 의존성 스캔 설정
  • 의존성의 취약점 감지 및 분류
  • 의존성을 업데이트하여 취약점 수정
  • 취약점이 수정되었는지 확인

선택 사항: SBOM 다운로드#

의존성 스캔 분석기가 생성한 SBOM을 다운로드하려면:

  1. Build > Pipelines로 이동합니다.
  2. 가장 최근 파이프라인을 선택합니다.
  3. dependency-scanning 작업을 선택합니다.
  4. Job artifacts 섹션에서 Download를 선택합니다.

작업 아티팩트가 artifacts.zip 파일로 다운로드됩니다. 압축을 풀어 SBOM 파일 gl-sbom-npm-npm.cdx.json에 접근합니다.