Session 3
25 MIN
OpenChain KWG 31차 · 2026-09-08

오픈소스
공급망 보안 도구

BomLens · Trusted OSS · TRUSCA

장학성 · SK텔레콤

02
공급망
공급망 이야기부터

납품 조건이 된 SBOM

SK텔레콤은 소프트웨어를 납품하는 모든 파트너사에 SBOM(Software Bill of Materials) 제출을 의무화했습니다.

01
납품
소스코드 · 컨테이너 이미지 · 바이너리 · 펌웨어 · 서버 · 상용 완제품
02
SBOM 동봉
CycloneDX 또는 SPDX. 납품물마다 구성 목록을 함께 냅니다
03
검수
형식과 내용을 함께 봅니다. 기준에 못 미치면 반려됩니다
04
조치
High 이상 취약점을 고쳐야 납품이 끝납니다
출처 sktelecom.github.io/guide/supply-chain/for-suppliers 같은 방향 EU CRA도 SBOM과 취약점 보고를 요구합니다
03
반려
반려 사유

쓸 수 없는 SBOM

제출물의 상당수가 형식은 SBOM인데 취약점 DB와 매핑할 수 없습니다. 반려 사유 목록에서 자주 나오는 세 가지입니다.

반려된 제출물 (CycloneDX 발췌)
"components": [ // purl 필드가 통째로 없다 { "name": "libfoo", "version": "1.2.0" }, // 생태계를 식별하지 못했다 { "purl": "pkg:generic/commons-lang3@3.12.0" } ], // 전이 의존성 기록이 없다 "dependencies": []
PURL 누락

패키지 매니저 정보 없이 설치 디렉터리나 원시 파일만 스캔하면 식별자가 통째로 빠집니다.

전이 의존성 누락

빌드 전 소스만 스캔하고 npm install, mvn package 같은 빌드 단계를 건너뛴 결과입니다.

pkg:generic/ 처리

도구가 생태계를 식별하지 못하면 이렇게 표시되고, 어떤 패키지인지 특정할 수 없습니다.

출처 sktelecom.github.io/guide/supply-chain/for-suppliers/rejection-reasons 공통점 셋 다 쓰던 도구가 그 정보를 만들어 주지 않아서 생깁니다
BomLens

공급사에서 SBOM을 만들 수 있는
오픈소스 도구, BomLens

의무는 있는데, 도구가 없었습니다.

오픈소스 리스크 평가까지 함께 하는 SBOM 생성기입니다. 계정도 업로드도 필요하지 않습니다.

Apache-2.0 · github.com/sktelecom/bomlens

05
BOMLENS
Local-first

하나의 스캐너

소스든 컨테이너든 받은 SBOM이든, 같은 스캐너가 실행되어 같은 결과를 냅니다.

소스 코드컨테이너바이너리 · 펌웨어 받은 SBOMHuggingFace 모델GitHub URL · ZIP
Docker 이미지 하나
CLI · 웹 UI · 데스크톱 앱이
모두 같은 스캐너를 실행합니다
소스는 로컬을 떠나지 않습니다
CycloneDX SBOM
컴포넌트마다 PURL, 전이 의존성 포함
오픈소스 고지문
배포물에 넣을 고지 문서
리스크 리포트
보안 취약점과 라이선스 의무
라이선스 Apache-2.0저장소 github.com/sktelecom/bomlens
06
결과
데모 전에

스캔 결과에서 볼 곳

앞에서 본 반려 사유 세 가지가 결과 화면의 어디에서 해소되는지 미리 정해 두고 데모를 봅니다.

PURL 컬럼

생태계와 이름, 버전이 한 줄에 다 적힙니다.

유입 컬럼

전이로 딸려 온 것까지 행으로 남습니다.

라이선스 컬럼

같은 스캔에서 고지문으로 그대로 이어집니다.

localhost:8080 · Components
컴포넌트PURL라이선스유입
lodash 4.17.21pkg:npm/lodash@4.17.21MIT직접
commons-lang3 3.12.0pkg:maven/org.apache.commons/commons-lang3@3.12.0Apache-2.0직접
requests 2.31.0pkg:pypi/requests@2.31.0Apache-2.0전이
urllib3 2.2.1pkg:pypi/urllib3@2.2.1MIT전이
gin 1.9.1pkg:golang/github.com/gin-gonic/gin@1.9.1MIT전이
대조 3장의 발췌에는 이 두 컬럼이 비어 있었습니다
DEMO · 4분

생성 화면

스캔 실행
공개 데모에서 샘플 프로젝트를 스캔합니다. sktelecom.github.io/bomlens/demo
Components
PURL 컬럼에 생태계와 이름, 버전이 함께 적힙니다
Dependencies · SBOM
전이 의존성을 확인하고 CycloneDX 파일을 내려받습니다

3장에서 본 반려 사유 세 가지가 이 화면에서 하나씩 사라집니다.

DEMO · 1분

같은 도구로, 모델도

모델 열기
같은 로컬 서버의 AI 모델 탭에서 bert-base-uncased 스캔 결과를 엽니다
모델·데이터셋
모델은 Apache-2.0, 데이터셋은 wikipedia(CC-BY-SA-3.0, 조건부)와 bookcorpus(라이선스 unknown, review)로 갈립니다
적합성
G7 최소 요소 30/41 충족

오전 그룹 토의 주제 A의 첫 질문, 개방형 모델의 라이선스를 실제로 어떻게 검토하느냐에 대한 답입니다.

08
AI 코딩
AI 코딩 문제

AI 코딩이 바꾼 조건 셋

공급망 이야기는 여기까지입니다. 다음은 우리 개발 조직 안에서 벌어지는 문제입니다.

01
에이전트가 알아서 설치합니다. 의존성 추가를 사람이 매번 승인하지 않습니다.
02
검토는 늘 뒤늦습니다. 코드에 이미 들어간 라이브러리를 나중에야 봅니다.
03
MCP 도구는 저장소 밖에 있습니다. 모델이 실제로 무엇을 부르는지 설명만으로는 알 수 없습니다.
차이 앞의 문제는 받은 제출물의 품질, 이 문제는 우리 저장소에 들어오는 코드의 경로입니다 다음 사람이 승인하던 자리를 무엇으로 대신할지
Trusted OSS

AI 코딩 거버넌스

정책은 있는데, 강제할 방법이 없었습니다.

ISO/IEC 5230·18974 자가인증 킷입니다. 핵심은 AI 코딩 현장에 맞춘 5단계 성숙도 모델입니다.

trustedoss.github.io

10
5 LEVELS
AI 코딩 성숙도 모델

다섯 단계

L1·L2는 사람이 지키는 규칙이고, L3부터는 도구가 대신 막습니다.

L1
개인 메모리 정책
한 사람의 머릿속 규칙
L2
CLAUDE.md
AGENTS.md
에이전트가 읽는 규칙 파일
L3
CI/CD 게이트
gitleaks · semgrep · grype
L4
AI 방어층
검토 · 퍼징 · MCP 도구 감시
L5
배포 후 모니터링
Dependabot · DAST
경계 L1·L2는 문서와 정책, L3부터는 도구가 강제합니다 다음 L3 이상을 실제로 집행하는 도구, SCA
11
SCA
L3 이상을 집행하는 도구

SCA란

L3 이상은 사람이 매번 확인할 수 없어, 대신할 도구가 필요합니다.

SCA(Software Composition Analysis). 오픈소스 컴포넌트를 자동으로 찾아 취약점과 라이선스 의무를 확인하는 도구 카테고리입니다.


SCA가 보는 것
  • 가져다 쓴 컴포넌트의 목록과 버전
  • 그 버전에 붙은 알려진 취약점
  • 라이선스와 그에 따르는 고지 의무

SCA가 못 보는 것
  • 직접 작성한 코드의 로직 결함
  • 실행 중에만 드러나는 설정 오류
  • 선언 없이 붙여 넣은 코드 조각
12
TRUSCA
Trusted SCA

TRUSCA, 오픈소스 SCA

문서는 실행되지 않습니다. 도구가 대신 집행합니다.

CVE 추적, 라이선스 컴플라이언스, SBOM 관리를 한 화면에서 다룹니다. 사내 네트워크 안에서 작동하기 때문에 코드도 SBOM도 밖으로 나가지 않습니다.

Apache-2.0 셀프호스팅 Docker Compose · Helm

cdxgen이 30개 이상의 언어 생태계를 다룹니다. 사내 저장소에 섞여 있는 언어를 한 번에 훑습니다.

github.com/trustedoss/trusca

CVE 소스 Trivy 통합 DB · NVD · OSV · GHSA · EPSS · KEV이름 Trusted SCA의 줄임말
13
파이프라인
동작

Detect에서 Enforce까지

단계하는 일무엇으로
Detect탐지저장소에 들어간 컴포넌트를 찾습니다cdxgen, 30개 이상 언어 생태계
Match매칭컴포넌트와 버전에 걸린 CVE를 붙입니다Trivy 통합 DB · NVD · OSV · GHSA · EPSS · KEV
Triage판단영향 여부를 판정하고 근거를 남깁니다VEX 7단계 상태 관리
Enforce집행치명적 취약점이나 금지 라이선스가 나오면 빌드를 막습니다CI 게이트, NOTICE 자동 생성
구분 앞의 두 단계는 찾는 일, 뒤의 두 단계는 판단하고 막는 일입니다
DEMO · 4분

취약점을 다루는 화면

01
프로젝트 목록
저장소마다 취약점 건수와 최고 심각도가 한 줄로 접혀 있습니다
리스크 롤업
02
취약점 리스트
어떤 것부터 손댈지 정하는 컬럼을 함께 봅니다
VEX 7단계 · EPSS · KEV
03
SBOM 탭
집행에 쓴 목록을 그대로 제출 형식으로 뽑습니다
CycloneDX · SPDX
앞 장 표의 Match와 Triage, Enforce를 화면에서 그대로 따라갑니다

trusca-demo.duckdns.org · dev@demo.trustedoss.dev · 읽기 전용

15
설치
terminal
# github.com/trustedoss/trusca git clone https://github.com/trustedoss/trusca.git cd trusca && cp .env.example .env docker-compose -f docker-compose.dev.yml up # 30초 뒤 postgres, redis, backend, celery-worker, frontend # http://localhost:5173
직접 설치해 보기

설치 세 줄

평가용으로 설치하는 데 걸리는 시간은 30초입니다. 사내 도입 판단을 위해 먼저 실행해 보기에 충분합니다.

프로덕션은 Docker Compose와 Helm 차트를 지원합니다.

먼저 둘러보려면 설치 없이 trusca-demo.duckdns.org에서 같은 화면을 볼 수 있습니다
16
정리
역할 분담

BomLens와 TRUSCA

따로 쓰는 세 도구가 아니라, 공급망 한 줄기 위에서 각자 다른 자리를 맡습니다.

공급업체 · BomLens
로컬에서 스캔하고 SBOM과 고지문을 만듭니다
CycloneDX SBOM 제출
TRUSCA
오픈소스 SCA 도구로 CVE를 탐지하고 라이선스를 집행합니다
기반
Trusted OSS
ISO/IEC 5230과 18974 자가인증 킷, 그리고 AI 코딩 5단계 성숙도 모델. 두 도구가 무엇을 근거로 무엇까지 막을지를 이 틀이 정합니다

오늘 본 세 도구는 각각 반려되는 SBOM, 지켜지지 않는 정책, 집행되지 않는 게이트에 대응합니다.

가져갈 것 만드는 쪽과 받는 쪽에 각각 도구가 있어야 SBOM 제출이 서류 작업으로 끝나지 않습니다
17
다음
다음 순서

10월 15일, 심화 세션

오늘은 왜 필요한지까지 다뤘습니다. 직접 설치하고 스캔을 실행하는 과정은 10월 15일 Tooling & Legal Subgroup 미팅에서 다룹니다.

2026-09-08
오늘 · KWG 31차 Session 3
도구 소개와 데모 참관
2026-10-15 (목) 14:00
Tooling & Legal Subgroup 30차
오픈소스 관리 도구 심화
직접 설치해 본인 저장소를 스캔하는 실습은 10월 15일부터
대상 BomLens와 TRUSCA 두 도구공지 korea-sg-tooling-legal 메일링리스트