SK텔레콤 제공 도구

SK텔레콤 표준 스크립트를 활용하여 복잡한 설정 없이 SBOM을 생성하는 방법입니다.

도구 개요

SKT SBOM Scanner는 공급사가 별도의 도구 학습이나 환경 설정 없이도 즉시 표준 준수 SBOM을 생성할 수 있도록 제공되는 도구입니다.

주요 장점

  • 환경 독립성: Docker 컨테이너 기반으로 동작하여 로컬에 Java, Python 등을 설치할 필요가 없습니다.
  • 다중 언어 지원: 프로젝트 내의 여러 언어(Java, JS, Python 등)를 한 번에 분석합니다.
  • 자동 표준 준수: SK텔레콤 정책에 맞는 CycloneDX JSON 파일을 자동으로 생성합니다.

지원 언어 상세

언어패키지 매니저필수 파일비고
JavaMaven, Gradlepom.xml, build.gradleJava 7-17 지원 (JDK 17)
Pythonpip, Poetryrequirements.txt, pyproject.tomlPython 3.6+ 지원
Node.jsnpm, Yarn, pnpmpackage.json, package-lock.json-
RubyBundlerGemfile, Gemfile.lock-
PHPComposercomposer.json, composer.lock-
RustCargoCargo.toml, Cargo.lock-
GoGo modulesgo.mod, go.sum-
.NETNuGet*.csproj, packages.config-
C/C++Conan, vcpkgconanfile.txt, vcpkg.json제한적 지원
  • Java 21: 대부분 JDK 17에서 분석 가능하나, Java 21 전용 기능 사용 시 제한이 있을 수 있습니다.
  • Python 2: 2020년 공식 지원 종료로 더 이상 지원하지 않습니다. Python 3로 마이그레이션을 권장합니다.

참고사항:

  • C/C++ 프로젝트: 패키지 매니저(Conan, vcpkg) 사용 시에만 의존성 분석 가능. 헤더 파일 직접 관리 방식은 분석 제한적.
  • 바이너리/펌웨어 파일: 기본 메타데이터만 추출 가능. 컴파일된 바이너리의 내부 의존성 분석에는 한계가 있음.
  • RootFS 분석: 파일 시스템 구조 분석은 가능하나, 정적 링크된 라이브러리는 감지 불가능.

자세한 언어별 가이드는 언어별 세부 사용 가이드를 참조하세요.

사전 준비사항

  • 운영체제:
    • Linux (권장)
    • macOS
    • Windows 10/11 (scan-sbom.bat 사용)
  • Docker: v20.10 이상 설치 및 실행 중일 것
  • 디스크 공간: 약 4-5 GB (Docker 이미지)

첫 실행 시 주의: Docker 이미지 다운로드로 5-10분 소요될 수 있습니다. 이후 실행부터는 캐시된 이미지를 사용하여 빠르게 실행됩니다.

도구 설치

Linux / macOS

# 스크립트 다운로드
curl -O https://raw.githubusercontent.com/sktelecom/sbom-tools/main/scripts/scan-sbom.sh
chmod +x scan-sbom.sh

# 설치 확인
./scan-sbom.sh --help

Windows

# 스크립트 다운로드
curl -O https://raw.githubusercontent.com/sktelecom/sbom-tools/main/scripts/scan-sbom.bat

# 설치 확인
scan-sbom.bat --help

사용 방법

1. 스크립트 실행

다운받은 scan-sbom.sh 파일을 프로젝트 루트 디렉토리에 위치시키고 실행합니다.

./scan-sbom.sh --project "프로젝트명" --version "버전" --generate-only

2. 주요 옵션 설명

  • --project: (필수) 납품하는 프로젝트(애플리케이션)의 이름
  • --version: (필수) 납품하는 프로젝트의 버전
  • --target: (선택) 분석 대상 경로 또는 Docker 이미지명. (기본값: 현재 디렉토리 ./)
  • --generate-only: (필수) 포털 자동 업로드 없이 로컬에 파일만 생성

사용 예시

1. 소스코드 분석 (Java/Python/Node.js 등)

소스코드가 있는 디렉토리에서 실행하면 pom.xml, package.json, requirements.txt 등을 자동 감지합니다.

cd /path/to/my-project
/path/to/scan-sbom.sh --project "MyWebApp" --version "1.0.0" --generate-only
  • 결과: MySpringApp_1.0.0_bom.json 생성

2. Docker 이미지 분석

# 로컬 또는 레지스트리의 Docker 이미지 분석
./scan-sbom.sh --target "myapp:v1.0" --project "MyApp" --version "1.0" --generate-only

3. 바이너리 파일 분석 (펌웨어 등)

# 펌웨어 또는 실행 파일 분석
./scan-sbom.sh --target firmware.bin --project "RouterOS" --version "2.0" --generate-only

지원 파일 형식:

  • ELF 바이너리
  • 펌웨어 이미지

분석 한계:

  • 컴파일된 바이너리는 기본 메타데이터만 추출 가능
  • 내부 라이브러리나 의존성은 정적 링크 시 감지 불가능
  • 정확한 SBOM 생성을 위해서는 소스 코드 레벨 분석을 권장
  • 바이너리 분석 결과는 참고용으로만 활용

4. RootFS 디렉토리 분석

# 파일 시스템 전체 분석
./scan-sbom.sh --target ./rootfs/ --project "DeviceOS" --version "1.0" --generate-only

사용 사례:

  • 임베디드 시스템 파일 시스템
  • 언팩한 펌웨어 디렉토리
  • 컨테이너 파일 시스템

SKT SBOM 관리 포털 업로드 (향후 지원 예정)

자동 업로드 (권장)

--generate-only 옵션을 제거하면 SBOM이 자동으로 SBOM 관리 포털 업로드에 업로드됩니다.

./scan-sbom.sh --project "MyApp" --version "1.0.0"

업로드 설정

스크립트 내부의 다음 변수를 수정하세요:

SERVER_URL="http://your-sbom-server:8081"
DEFAULT_API_KEY="YOUR_API_KEY_HERE"

또는 환경변수로 설정:

export API_KEY="YOUR_API_KEY_HERE"
./scan-sbom.sh --project "MyApp" --version "1.0.0"

다음 단계

SBOM 파일 생성 완료 후:

  1. 검증 체크리스트로 파일 확인
  2. 제출 절차에 따라 SK텔레콤에 제출
  3. 문제 발생 시 담당자에게 문의

관련 문서

1 - 언어별 세부 사용 가이드

SKT SBOM Scanner는 다양한 프로그래밍 언어와 빌드 시스템을 지원합니다.

지원 언어 및 도구

  • Java: Maven, Gradle (Java 7, 8, 11, 17, 21)
  • Python: pip, Poetry (Python 2.7, 3.x)
  • Node.js: npm, Yarn, pnpm
  • Ruby: Bundler, Gemfile
  • PHP: Composer
  • Rust: Cargo
  • C/C++: Conan, vcpkg (제한적)
  • Go: go.mod
  • .NET: NuGet, project files

언어별 사용 가이드

1. Java (Maven)

필수 파일

  • pom.xml

예시

cd /path/to/maven-project
./scan-sbom.sh --project "MyJavaApp" --version "1.0.0" --generate-only

레거시 Java 7 프로젝트

<!-- pom.xml에서 Java 버전 명시 -->
<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>

스캔 시 Docker 컨테이너 내부에서 적절한 JDK를 자동 선택합니다.

2. Java (Gradle)

필수 파일

  • build.gradle 또는 build.gradle.kts

예시

cd /path/to/gradle-project
./scan-sbom.sh --project "MyGradleApp" --version "1.0.0" --generate-only

Gradle Wrapper 사용

# gradlew가 있으면 자동으로 사용됨
./gradlew dependencies # 로컬에서 미리 확인 (선택)
./scan-sbom.sh --project "MyApp" --version "1.0.0" --generate-only

3. Python 3.x

필수 파일

  • requirements.txt (권장)
  • pyproject.toml (Poetry)
  • Pipfile (Pipenv)

예시

cd /path/to/python-project
./scan-sbom.sh --project "MyPythonApp" --version "1.0.0" --generate-only

requirements.txt 생성

pip freeze > requirements.txt
./scan-sbom.sh --project "MyApp" --version "1.0.0" --generate-only

Poetry 프로젝트

# pyproject.toml이 있으면 자동 감지
./scan-sbom.sh --project "MyPoetryApp" --version "1.0.0" --generate-only

4. Python 2.x (레거시)

필수 파일

  • requirements.txt

주의사항

Python 2.x는 2020년 지원 종료되었으므로, 가능한 Python 3.x로 마이그레이션을 권장합니다.

예시

# requirements.txt 생성 (Python 2 환경)
python2 -m pip freeze > requirements.txt

# SBOM 생성
./scan-sbom.sh --project "LegacyPython2App" --version "1.0.0" --generate-only

Python 2 명시

# requirements.txt 상단에 추가
# python_version < "3"
Django==1.11.29
requests==2.27.1

5. Node.js

필수 파일

  • package.json
  • package-lock.json (npm) 또는 yarn.lock (Yarn)

예시

cd /path/to/nodejs-project

# package-lock.json 생성 (없는 경우)
npm install

# SBOM 생성
./scan-sbom.sh --project "MyNodeApp" --version "1.0.0" --generate-only

Yarn 프로젝트

# yarn.lock이 있으면 자동 감지
./scan-sbom.sh --project "MyYarnApp" --version "1.0.0" --generate-only

pnpm 프로젝트

# pnpm-lock.yaml이 있으면 자동 감지
./scan-sbom.sh --project "MyPnpmApp" --version "1.0.0" --generate-only

6. Ruby

필수 파일

  • Gemfile
  • Gemfile.lock (권장)

예시

cd /path/to/ruby-project

# Gemfile.lock 생성 (없는 경우)
bundle install

# SBOM 생성
./scan-sbom.sh --project "MyRailsApp" --version "1.0.0" --generate-only

Rails 프로젝트

cd /path/to/rails-app
bundle install
./scan-sbom.sh --project "MyRailsAPI" --version "1.0.0" --generate-only

7. PHP

필수 파일

  • composer.json
  • composer.lock (권장)

예시

cd /path/to/php-project

# composer.lock 생성 (없는 경우)
composer install

# SBOM 생성
./scan-sbom.sh --project "MyLaravelApp" --version "1.0.0" --generate-only

Laravel 프로젝트

cd /path/to/laravel-app
composer install --no-dev # 프로덕션 의존성만
./scan-sbom.sh --project "MyLaravelAPI" --version "1.0.0" --generate-only

8. Rust

필수 파일

  • Cargo.toml
  • Cargo.lock (권장)

예시

cd /path/to/rust-project

# Cargo.lock 생성 (없는 경우)
cargo generate-lockfile

# SBOM 생성
./scan-sbom.sh --project "MyRustApp" --version "1.0.0" --generate-only

Workspace 프로젝트

# 루트 디렉토리에서 실행
cd /path/to/rust-workspace
./scan-sbom.sh --project "MyRustWorkspace" --version "1.0.0" --generate-only

9. Go

필수 파일

  • go.mod
  • go.sum (권장)

예시

cd /path/to/go-project

# go.sum 생성 (없는 경우)
go mod download

# SBOM 생성
./scan-sbom.sh --project "MyGoApp" --version "1.0.0" --generate-only

10. .NET (C#)

필수 파일

  • *.csproj 또는 *.sln
  • packages.config (레거시) 또는 PackageReference

예시

cd /path/to/dotnet-project

# 의존성 복원 (선택)
dotnet restore

# SBOM 생성
./scan-sbom.sh --project "MyDotNetApp" --version "1.0.0" --generate-only

11. C/C++ (제한적 지원)

지원 패키지 매니저

  • Conan (conanfile.txt, conanfile.py)
  • vcpkg (제한적)

예시 (Conan)

cd /path/to/cpp-project

# conanfile.txt 예시
cat > conanfile.txt <<EOF
[requires]
boost/1.80.0
openssl/3.0.0

[generators]
cmake
EOF

# SBOM 생성
./scan-sbom.sh --project "MyCppApp" --version "1.0.0" --generate-only

주의: C/C++ 프로젝트는 패키지 매니저 없이 직접 의존성을 관리하는 경우가 많아, SBOM 생성이 제한적일 수 있습니다.

멀티 언어 프로젝트

모노레포 (Monorepo)

여러 언어가 혼합된 프로젝트의 경우:

# 루트 디렉토리에서 실행하면 모든 언어 자동 감지
cd /path/to/monorepo
./scan-sbom.sh --project "MyMonorepo" --version "1.0.0" --generate-only

마이크로서비스

각 서비스별로 개별 실행:

# 서비스 1 (Node.js)
cd services/api
../../scan-sbom.sh --project "MyAPI" --version "1.0.0" --generate-only

# 서비스 2 (Python)
cd ../worker
../../scan-sbom.sh --project "MyWorker" --version "1.0.0" --generate-only

참고