InfoGrab DocsInfoGrab Docs

튜토리얼: SBOM을 사용한 종속성 스캔 설정

요약

Tier: 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를 구성하는 것입니다.

  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

    Filename: .gitlab-ci.yml

    stages:
    
    - build
    - test
    
    include:
    - template: Jobs/Dependency-Scanning.v2.gitlab-ci.yml
        inputs:
          enable_static_reachability: true
    

    Filename: 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.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에 나열된 종속성을 알려진 취약점 권고문과 대조하여 스캔합니다.
  • 정적 도달 가능성 분석으로 결과를 보강하여 코드에서 임포트되는 종속성을 식별합니다.

취약점 분류 및 분석#

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

이 튜토리얼을 간소화하기 위해 모든 변경 사항은 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"의 설명을 선택합니다.

    이 취약점의 세부 정보를 확인합니다.

    이 취약점은 심각도가 높으며 Reachable 값이 Yes이므로, 해당 종속성이 애플리케이션에서 임포트됨을 의미합니다. 이로 인해 도달 불가능한 다른 높은 심각도의 취약점보다 위험도가 높습니다.

  4. 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를 선택합니다.

    병합 요청 파이프라인이 완료된 후 Reports 탭에 보안 스캔 보고서가 나타날 때까지 기다립니다. 보안 보고서 처리에는 일반적으로 1~2분이 소요됩니다.

  6. Reports 탭을 선택한 다음, Security scan을 선택합니다.

    보안 스캔 보고서는 병합 요청의 변경 사항이 분류하고 분석한 취약점을 포함하여 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을 사용한 종속성 스캔 설정

GitLab v19.2
원문 보기
요약

Tier: 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를 구성하는 것입니다.

  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

    Filename: .gitlab-ci.yml

    stages:
    
    - build
    - test
    
    include:
    - template: Jobs/Dependency-Scanning.v2.gitlab-ci.yml
        inputs:
          enable_static_reachability: true
    

    Filename: 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.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에 나열된 종속성을 알려진 취약점 권고문과 대조하여 스캔합니다.
  • 정적 도달 가능성 분석으로 결과를 보강하여 코드에서 임포트되는 종속성을 식별합니다.

취약점 분류 및 분석#

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

이 튜토리얼을 간소화하기 위해 모든 변경 사항은 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"의 설명을 선택합니다.

    이 취약점의 세부 정보를 확인합니다.

    이 취약점은 심각도가 높으며 Reachable 값이 Yes이므로, 해당 종속성이 애플리케이션에서 임포트됨을 의미합니다. 이로 인해 도달 불가능한 다른 높은 심각도의 취약점보다 위험도가 높습니다.

  4. 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를 선택합니다.

    병합 요청 파이프라인이 완료된 후 Reports 탭에 보안 스캔 보고서가 나타날 때까지 기다립니다. 보안 보고서 처리에는 일반적으로 1~2분이 소요됩니다.

  6. Reports 탭을 선택한 다음, Security scan을 선택합니다.

    보안 스캔 보고서는 병합 요청의 변경 사항이 분류하고 분석한 취약점을 포함하여 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에 액세스합니다.