Syft

    Syft는 Anchore가 개발한 오픈소스 SBOM 생성 CLI 도구입니다. 컨테이너 이미지, 파일시스템, 아카이브를 스캔하여 포함된 패키지를 식별하고 SPDX 또는 CycloneDX 형식의 SBOM을 생성합니다.

    주요 특징

    • 다양한 스캔 대상: 컨테이너 이미지(Docker, OCI), 로컬 파일시스템, tar 아카이브
    • 폭넓은 생태계 지원: Alpine(apk), Debian/Ubuntu(dpkg), RPM, Python, Java, Go, Node.js, Ruby, Rust 등
    • 표준 출력 형식: SPDX 2.2/2.3 (JSON·tag-value), CycloneDX 1.4/1.5 (JSON·XML), Syft JSON
    • Grype 연동: Anchore의 취약점 스캐너 Grype와 자연스럽게 연동하여 SBOM 기반 취약점 분석 가능
    • 빠른 설치: 단일 바이너리 배포, 별도 런타임 불필요

    설치 방법

    스크립트 설치 (Linux/macOS)

    curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
    

    Homebrew (macOS)

    brew install syft
    

    Docker

    docker pull anchore/syft
    

    기본 사용법

    (1) 컨테이너 이미지 스캔

    # Docker 이미지 스캔 (SPDX JSON 출력)
    syft ubuntu:22.04 -o spdx-json=sbom.spdx.json
    
    # CycloneDX JSON 출력
    syft ubuntu:22.04 -o cyclonedx-json=sbom.cdx.json
    

    (2) 로컬 디렉토리 스캔

    syft dir:/path/to/project -o spdx-json=sbom.spdx.json
    

    (3) 표준 출력으로 결과 확인

    # 터미널에서 패키지 목록 확인
    syft ubuntu:22.04
    
    # JSON 형식으로 표준 출력
    syft ubuntu:22.04 -o json
    

    (4) Grype와 연동하여 취약점 스캔

    # Syft로 SBOM 생성 후 Grype로 취약점 분석
    syft ubuntu:22.04 -o json | grype
    

    CI/CD 연동 예시

    # GitHub Actions 예시
    - name: Generate SBOM with Syft
      uses: anchore/sbom-action@v0
      with:
        image: myapp:latest
        format: spdx-json
        output-file: sbom.spdx.json
    - name: Upload SBOM
      uses: actions/upload-artifact@v4
      with:
        name: sbom
        path: sbom.spdx.json
    

    참고 자료