도구 실행 2026-10-15, 취약점 데이터베이스 스냅샷 2026-10-14(dependency-check 는 2026-06-28 데이터), 도구 10종, 검증 대상 31종, 실행 오류 8건

운영자의 이해관계 운영자는 측정 대상 도구 중 하나인 BomLens(SK텔레콤 공개 프로젝트)의 메인테이너다. 결과가 기울지 않도록 채점 축은 공개 표준에서 고르고, 회차마다 모든 도구의 공개 릴리스를 같은 조건으로 재며, 정답은 도구 출력이 아니라 실제 빌드 결과로 정하고, 점수를 만든 원시 출력을 모두 공개한다.

이번 회차 요약
  • 의존성 컴포넌트는 BomLens 가 8개 생태계 모두에서 1위이거나 공동 1위다. 2위는 생태계마다 다르다: Java 는 cdxgen 0.83, Node.js 는 ORT 0.84, Python 은 cdxgen 과 osv-scanner 0.93. lockfile 없는 PHP 는 BomLens 만, Ruby 는 BomLens 와 ORT 가 찾았다(cdxgen 은 호스트에 composer 와 최신 Ruby 가 없어 해석하지 못했다).
  • 도달성(신설): 호출되지 않는 취약점을 거른 도구는 osv-scanner(소스), BomLens(소스와 바이너리), grype(바이너리 일부)다.
  • AI 모델 파일(신설): pickle 계열 위험 직렬화를 표시한 도구는 BomLens 하나다.
  • 전 도구를 2026-10-15 기준 최신 정식판으로 측정했다(취약점 DB 스냅샷은 2026-10-14). 채점 규칙도 바꿨다: 라이선스는 찾은 컴포넌트만 대조하고, CycloneDX scope: excluded 와 type: file 항목은 컴포넌트로 세지 않는다.
  • 2026-07 대비: cdxgen 의 Python 간접 의존성 해석이 좋아졌다(0.53 → 1.00). 이미지와 Gradle 계열은 채점 규칙이 바뀌어 직접 비교할 수 없다.

카테고리 개요

카드마다 그 카테고리의 대표 지표로 도구를 줄 세웠다. 카드를 누르면 해당 구간으로 간다.

표 읽는 법

색과 기호

0.9 이상, 0.8 이상, 0.6 이상, 0.6 미만
0. 측정 대상인데 찾지 못함. 도구가 다루지 못하는 입력도 0 으로 평균에 넣는다(과대평가 방지)
미지원. 그 검증 대상의 실행 대상이 아니거나 도구가 그 지표를 내지 않음. 평균에서 뺀다
—
측정 대상이 아니거나 대조할 대상이 없음. 평균에서 뺀다
⚠
실행 오류. 점수를 매기지 않고 평균에서 뺀다
입력 미지원 n
도구가 받지 않는 입력이라 0 으로 넣은 검증 대상 수
데이터 날짜
취약점 데이터베이스 스냅샷과 다른 날짜의 데이터로 측정함

숫자 읽기

퍼센트
개요 표는 여러 검증 대상을 합치므로 비율로 적는다
정답 N
그 퍼센트가 걸친 정답 개수. 작을수록 변동이 크다
3/4
검증 대상 표의 맞은 개수/전체 개수
F1
정밀도와 재현율을 합친 값. 도구 비교의 기준

조작

검증 대상 행
누르면 도구별 지표가 펼쳐진다
지표 표의 행
누르면 그 도구의 검출, 미탐, 과탐이 펼쳐진다
열 제목
누르면 그 열 기준으로 정렬한다
도구 이름
저장소나 제품 페이지로 간다. 마우스를 올리면 도구 특성이 보인다

지표 정의와 채점 규칙, 100% 가 아닌 이유는 분석.

의존성

대상
언어별 의존성 선언과 lockfile
변별
lockfile 유무와 생태계별 해석 능력
결과
빌드를 해석하는 도구가 실제 배포 결과에 가깝다. 선언을 모두 담는 도구는 정밀도가 낮다

생태계별

칸은 그 생태계 fixture 의 평균이고, 머리글 아래 숫자는 fixture 수다. 칸을 누르면 그 생태계 구간으로 간다. 취약점은 정답이 있는 fixture 가 적어 아래 전체 지표 표에서 묶어 본다.

도구Java3Android2Node.js6Python3Go1Rust1PHP1Ruby1생태계 평균같은 비중
bomlens0.900.701.001.001.001.001.001.000.95
ort0.820.250.840.670.801.00⚠ 실행 오류0.860.757개 생태계
cdxgen0.830.250.820.931.001.00000.60
osv-scanner0.53입력 미지원 10입력 미지원 20.74입력 미지원 10.930.800입력 미지원 10입력 미지원 10입력 미지원 10.38
trivy0.6200.780.510.800000.34
osv-scalibr0.3900.680.780.670000.31
syft0.3900.750.440.800000.30
dependency-check0.3200.250.510.440000.19
grype0.3900.250.1800000.10
  • 0.9 이상
  • 0.8 이상
  • 0.6 이상
  • 0.6 미만
  • 0, 찾지 못함
  • 입력 미지원 n: 도구가 받지 않는 입력이라 0 으로 평균에 넣은 검증 대상 수
  • 미지원, 평균에서 뺌
  • — 대조 대상 없음(라이선스는 정답 컴포넌트를 하나도 찾지 못함), 평균에서 뺌
  • ⚠ 이번 실행의 오류, 평균에서 뺌

전체 지표 (생태계 묶음)

도구버전컴포넌트라이선스취약점대응발견 컴포넌트발견 취약점종합평균 시간
bomlens1.13.495%정답 93100%정답 79100%정답 12100%정답 12138직접 34, 간접 10411999%95.6s
cdxgen13.4.070%정답 93100%정답 75미지원미지원295직접 60, 간접 235085%7.1s
ort96.0.074%정답 9192%정답 76미지원미지원303직접 66, 간접 237083%11.3s
osv-scanner2.7.054%정답 93입력 미지원 7미지원71%정답 12입력 미지원 271%정답 12입력 미지원 2717566%5.0s
trivy0.76.049%정답 9340%정답 3271%정답 1271%정답 1241직접 4, 간접 377358%316ms
grype0.120.118%정답 93미지원71%정답 1271%정답 12116754%2.2s
osv-scalibr0.5.346%정답 93미지원미지원미지원56046%31ms
syft1.54.143%정답 9330%정답 32미지원미지원44직접 8, 간접 24037%1.6s
dependency-check13.0.025%정답 93미지원43%정답 12데이터 2026-06-280%정답 12데이터 2026-06-28301123%3.2s

생태계별 검증 대상

lockfile 있음
해석이 정해져 있어 도구가 대체로 수렴하고, 개발 의존성을 빼는지에서 갈린다
lockfile 없음
설치나 빌드를 해석하는 도구만 간접 의존성까지 찾는다
저장소 구조
예제, 테스트 디렉터리와 개발 의존성을 빼는지

행을 누르면 도구별 지표와 검출, 미탐, 과탐 근거가 펼쳐진다.

Javafixture 3
gradle-locklockfile 있음컴포넌트 최고0.865개 도구범위 0–0.86도구 9
입력 원본 보기 ↗
입력
Java Gradle 프로젝트. gradle.lockfile 로 간접 의존성까지 버전 고정
변별
고정된 의존성을 정확히 읽는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens3/43/386%1/11/11/1오픈소스59.3s
▸cdxgen3/43/386%1/1——오픈소스15.2s
▸ort3/43/386%1/1——오픈소스9.8s
▸osv-scanner3/43/386%—1/11/1오픈소스444ms
▸trivy3/43/386%0/11/11/1오픈소스4.0s
▸grype2/22/380%—1/11/1오픈소스2.1s
▸osv-scalibr3/53/375%———오픈소스34ms
▸syft3/53/375%0/1——오픈소스1.1s
▸dependency-check—0/30%—0/10/1오픈소스2.9s
gradle-nolocklockfile 없음컴포넌트 최고0.86bomlens, cdxgen, ort범위 0–0.86도구 9
입력 원본 보기 ↗
입력
Java Gradle 프로젝트. 버전을 고정한 lockfile 없음
변별
빌드를 해석해 간접 의존성까지 찾는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens3/43/386%1/11/11/1오픈소스49.9s
▸cdxgen3/43/386%1/1——오픈소스5.3s
▸ort3/43/386%1/1——오픈소스8.4s
▸osv-scanner 입력 미지원—0/30%—0/10/1오픈소스—
▸dependency-check—0/30%—0/10/1오픈소스3.0s
▸grype—0/30%—0/10/1오픈소스2.0s
▸osv-scalibr0/10/30%———오픈소스25ms
▸syft0/10/30%———오픈소스919ms
▸trivy—0/30%—0/10/1오픈소스72ms
java-mavenlockfile 없음컴포넌트 최고1.00bomlens, trivy범위 0.38–1.00도구 9
입력 원본 보기 ↗
입력
Java Maven 프로젝트
정답
배포물에 들어가는 compile, runtime 범위
변별
pom.xml 을 Maven 으로 해석하고 test, provided 범위를 걸러내는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens13/1313/13100%13/131/11/1오픈소스42.0s
▸trivy13/1313/13100%13/131/11/1오픈소스100ms
▸dependency-check12/1212/1396%—1/10/1오픈소스3.6s
▸cdxgen13/2113/1377%13/13——오픈소스7.7s
▸ort13/2213/1374%13/13——오픈소스16.3s
▸osv-scanner13/2213/1374%—1/11/1오픈소스7.4s
▸osv-scalibr4/64/1342%———오픈소스38ms
▸syft4/64/1342%0/4정답 13——오픈소스987ms
▸grype3/33/1338%—1/11/1오픈소스1.9s
Androidfixture 2
android-applockfile 없음컴포넌트 최고0.79bomlens범위 0–0.79도구 9
입력 원본 보기 ↗
입력
Android 앱 소스. Android Gradle Plugin 빌드, lockfile 없음
정답
R8 축소를 켠 release APK 의 실제 구성
변별
빌드에 들어가지 않는 의존성을 걸러내는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens31/4831/3179%31/31——오픈소스499.5s
▸cdxgen31/12231/3141%31/31——오픈소스10.1s
▸ort31/12331/3140%31/31——오픈소스14.5s
▸osv-scanner 입력 미지원—0/310%———오픈소스—
▸dependency-check—0/310%———오픈소스2.9s
▸grype—0/310%———오픈소스2.0s
▸osv-scalibr0/10/310%———오픈소스24ms
▸syft0/10/310%———오픈소스1.3s
▸trivy—0/310%———오픈소스72ms
android-flavorlockfile 없음컴포넌트 최고0.61bomlens범위 0–0.61도구 9
입력 원본 보기 ↗
입력
Android 앱 소스. 한 코드에서 무료판(free)과 유료판(paid)을 만드는 Gradle product flavor
정답
배포본별 의존성
변별
유료판 전용 라이브러리를 무료판에 섞지 않는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens4/94/462%4/4——오픈소스416.2s
▸cdxgen4/844/49%4/4——오픈소스9.2s
▸ort4/854/49%4/4——오픈소스15.2s
▸osv-scanner 입력 미지원—0/40%———오픈소스—
▸dependency-check—0/40%———오픈소스3.3s
▸grype—0/40%———오픈소스2.2s
▸osv-scalibr0/10/40%———오픈소스33ms
▸syft0/10/40%———오픈소스1.1s
▸trivy—0/40%———오픈소스78ms
Node.jsfixture 6
bun-locklockfile 있음컴포넌트 최고1.00bomlens, syft, trivy범위 0–1.00도구 9
입력 원본 보기 ↗
입력
Bun 의 텍스트 lockfile(bun.lock)
정답
debug, ms. 개발 의존성 is-number 제외
변별
새 lockfile 형식을 읽는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens2/22/2100%2/2——오픈소스45.9s
▸syft2/22/2100%0/2——오픈소스996ms
▸trivy2/22/2100%0/2——오픈소스114ms
▸cdxgen2/32/280%2/2——오픈소스1.8s
▸ort2/32/280%2/2——오픈소스6.3s
▸osv-scalibr2/32/280%———오픈소스25ms
▸osv-scanner2/32/280%———오픈소스6.5s
▸dependency-check—0/20%———오픈소스2.8s
▸grype—0/20%———오픈소스1.9s
node-locklockfile 있음컴포넌트 최고1.006개 도구범위 0.50–1.00도구 9
입력 원본 보기 ↗
입력
Node.js(npm) 프로젝트. package-lock.json 에 버전까지 고정
변별
고정된 의존성을 정확히 읽는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens3/33/3100%3/31/11/1오픈소스41.8s
▸cdxgen3/33/3100%3/3——오픈소스2.2s
▸ort3/33/3100%3/3——오픈소스7.9s
▸osv-scanner3/33/3100%—1/11/1오픈소스6.4s
▸syft3/33/3100%3/3——오픈소스1.1s
▸trivy3/33/3100%3/31/11/1오픈소스88ms
▸osv-scalibr3/43/386%———오픈소스25ms
▸dependency-check1/11/350%—1/10/1오픈소스3.3s
▸grype1/11/350%—1/11/1오픈소스1.6s
npm-vuln-pinnedlockfile 있음컴포넌트 최고1.009개 도구도구 9
입력 원본 보기 ↗
입력
Node.js(npm) 프로젝트. 취약한 버전의 lodash 를 고정
변별
취약점을 찾고 고칠 버전을 제시하는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens1/11/1100%1/16/66/6오픈소스35.7s
▸cdxgen1/11/1100%1/1——오픈소스1.6s
▸dependency-check1/11/1100%—6/60/6오픈소스2.9s
▸grype1/11/1100%—6/66/6오픈소스2.4s
▸ort1/11/1100%1/1——오픈소스11.1s
▸osv-scalibr1/11/1100%———오픈소스25ms
▸osv-scanner1/11/1100%—6/66/6오픈소스7.0s
▸syft1/11/1100%0/1——오픈소스1.1s
▸trivy1/11/1100%0/16/66/6오픈소스72ms
pnpm-workspacelockfile 있음컴포넌트 최고1.00bomlens, trivy범위 0–1.00도구 9
입력 원본 보기 ↗
입력
pnpm 워크스페이스(pnpm-lock.yaml v9). 패키지 둘이 서로 참조
정답
debug, ms, kind-of. 루트 개발 의존성과 워크스페이스 패키지 자신은 제외
변별
워크스페이스 전체를 읽는지, 개발 의존성을 빼는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens3/33/3100%3/3——오픈소스37.0s
▸trivy3/33/3100%0/3——오픈소스75ms
▸cdxgen3/43/386%3/3——오픈소스1.4s
▸osv-scalibr3/43/386%———오픈소스24ms
▸osv-scanner3/43/386%———오픈소스6.9s
▸syft3/43/386%0/3——오픈소스994ms
▸ort3/63/367%3/3——오픈소스10.1s
▸dependency-check—0/30%———오픈소스5.2s
▸grype—0/30%———오픈소스2.2s
npm-nolocklockfile 없음컴포넌트 최고1.00bomlens, ort범위 0–1.00도구 9
입력 원본 보기 ↗
입력
Node.js(npm) 프로젝트. package.json 만 있고 lockfile 없음
변별
설치를 해석해 간접 의존성까지 찾는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens3/33/3100%3/31/11/1오픈소스38.1s
▸ort3/33/3100%3/3——오픈소스7.0s
▸cdxgen3/63/367%3/3——오픈소스2.2s
▸osv-scanner 입력 미지원—0/30%—0/10/1오픈소스—
▸dependency-check—0/30%—0/10/1오픈소스2.8s
▸grype—0/30%—0/10/1오픈소스2.2s
▸osv-scalibr0/10/30%———오픈소스20ms
▸syft—0/30%———오픈소스971ms
▸trivy—0/30%—0/10/1오픈소스64ms
npm-nonshipped저장소 구조컴포넌트 최고1.00bomlens범위 0–1.00도구 9
입력 원본 보기 ↗
입력
npm 프로젝트. 루트 lockfile 에 운영 의존성 debug 와 개발 의존성 is-number. examples/, test/ 아래에 각자 lockfile 을 가진 하위 패키지
정답
배포물에 들어가는 debug, ms 만
변별
예제와 테스트 매니페스트, 개발 의존성을 빼는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens2/22/2100%2/2——오픈소스36.2s
▸osv-scanner2/32/280%———오픈소스6.0s
▸syft2/42/267%2/2——오픈소스845ms
▸trivy2/42/267%2/2——오픈소스78ms
▸cdxgen2/52/257%2/2——오픈소스1.5s
▸ort2/52/257%2/2——오픈소스11.9s
▸osv-scalibr2/52/257%———오픈소스30ms
▸dependency-check—0/20%———오픈소스3.2s
▸grype—0/20%———오픈소스1.7s
Pythonfixture 3
uv-locklockfile 있음컴포넌트 최고1.00bomlens, trivy범위 0–1.00도구 9
입력 원본 보기 ↗
입력
uv 프로젝트(pyproject.toml, uv.lock)
정답
python-dateutil, six. dev 의존성 그룹의 iniconfig 제외
변별
uv lockfile 을 읽는지, 의존성 그룹을 구분하는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens2/22/2100%1/1——오픈소스33.1s
▸trivy2/22/2100%0/1——오픈소스78ms
▸cdxgen2/32/280%1/1——오픈소스23.3s
▸osv-scalibr2/32/280%———오픈소스75ms
▸osv-scanner2/32/280%———오픈소스1.5s
▸syft2/32/280%0/1——오픈소스1.2s
▸dependency-check—0/20%———오픈소스3.4s
▸grype—0/20%———오픈소스2.6s
▸ort—0/20%———오픈소스5.9s
py-pinnedlockfile 없음컴포넌트 최고1.004개 도구범위 0.53–1.00도구 9
입력 원본 보기 ↗
입력
Python 프로젝트. requirements.txt 에 직접 의존성 4개만 버전 고정, 간접 7개는 고정하지 않음
정답
pip 해석 기준 11개. 직접은 버전까지, 간접은 이름으로 매칭한다
변별
직접 선언만 읽는 도구와 간접 의존성까지 해석하는 도구를 가른다
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens11/1111/11100%4/41/11/1오픈소스39.4s
▸cdxgen11/1111/11100%4/4——오픈소스16.3s
▸ort11/1111/11100%4/4——오픈소스11.6s
▸osv-scanner11/1111/11100%—1/11/1오픈소스5.5s
▸dependency-check4/44/1153%—0/10/1오픈소스2.9s
▸grype4/44/1153%—1/11/1오픈소스2.5s
▸osv-scalibr4/44/1153%———오픈소스22ms
▸syft4/44/1153%0/4——오픈소스1.1s
▸trivy4/44/1153%0/41/11/1오픈소스79ms
py-rangelockfile 없음컴포넌트 최고1.006개 도구범위 0–1.00도구 9
입력 원본 보기 ↗
입력
Python 프로젝트. requirements.txt 에 버전 범위(>=)로 선언
변별
범위에서 실제 설치 버전을 정하는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens—4/4—4/4——오픈소스41.7s
▸cdxgen—4/4—4/4——오픈소스11.9s
▸dependency-check—4/4————오픈소스2.8s
▸ort—4/4—3/4——오픈소스9.2s
▸osv-scalibr—4/4————오픈소스23ms
▸osv-scanner—4/4————오픈소스4.6s
▸grype—0/4————오픈소스1.9s
▸syft—0/4————오픈소스1.0s
▸trivy—0/4————오픈소스70ms
Gofixture 1
go-modlockfile 있음컴포넌트 최고1.00bomlens, cdxgen범위 0–1.00도구 9
입력 원본 보기 ↗
입력
Go 프로젝트. go.mod 와 go.sum 에 버전까지 고정
정답
빌드 타깃 linux/amd64 에 실제 링크되는 것
변별
선언 전체를 내는지, 실제 링크만 내는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens2/22/2100%2/2——오픈소스64.7s
▸cdxgen2/22/2100%2/2——오픈소스5.5s
▸ort2/32/280%0/2——오픈소스23.2s
▸osv-scanner2/32/280%———오픈소스2.8s
▸syft2/32/280%2/2——오픈소스11.3s
▸trivy2/32/280%2/2——오픈소스348ms
▸osv-scalibr2/42/267%———오픈소스27ms
▸dependency-check2/72/244%———오픈소스2.9s
▸grype—0/20%———오픈소스2.8s
Rustfixture 1
rust-cargolockfile 없음컴포넌트 최고1.00bomlens, cdxgen, ort범위 0–1.00도구 9
입력 원본 보기 ↗
입력
Rust 프로젝트. Cargo.toml 에 의존성 선언, 버전을 고정한 Cargo.lock 없음(라이브러리에서 흔한 방식)
정답
crate 이름으로 매칭. Cargo.toml 의 semver 범위라 실제 버전은 드리프트한다
변별
Cargo.lock 이 없어도 crate 를 잡는지. syft 는 검출 0
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens—1/1————오픈소스62.4s
▸cdxgen—1/1————오픈소스4.1s
▸ort—1/1————오픈소스8.4s
▸osv-scanner 입력 미지원—0/1————오픈소스—
▸dependency-check—0/1————오픈소스3.2s
▸grype—0/1————오픈소스2.6s
▸osv-scalibr—0/1————오픈소스25ms
▸syft—0/1————오픈소스1.0s
▸trivy—0/1————오픈소스76ms
PHPfixture 1
php-nolocklockfile 없음컴포넌트 최고1.00bomlens범위 0–1.00도구 8
입력 원본 보기 ↗
입력
composer.json 만 있는 PHP 프로젝트
정답
monolog/monolog 3.5.0, psr/log 3.0.2. require-dev 제외
변별
lockfile 없이 Composer 의존성을 해석하는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens2/22/2100%2/2——오픈소스143.5s
▸osv-scanner 입력 미지원—0/20%———오픈소스—
▸cdxgen—0/20%———오픈소스1.4s
▸dependency-check—0/20%———오픈소스2.9s
▸grype—0/20%———오픈소스2.2s
▸osv-scalibr—0/20%———오픈소스53ms
▸syft—0/20%———오픈소스1.2s
▸trivy—0/20%———오픈소스79ms
ort⚠ 실행 오류로 점수 미산정 — 이번 실행의 실패이지 도구 능력의 판정이 아니다
Rubyfixture 1
ruby-nolocklockfile 없음컴포넌트 최고1.00bomlens범위 0–1.00도구 9
입력 원본 보기 ↗
입력
Gemfile 만 있는 Ruby 프로젝트
정답
rack, mustermann, ruby2_keywords. development, test 그룹 제외
변별
lockfile 없이 Bundler 의존성을 해석하는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens3/33/3100%2/2——오픈소스33.6s
▸ort3/43/386%2/2——오픈소스15.7s
▸osv-scanner 입력 미지원—0/30%———오픈소스—
▸cdxgen—0/30%———오픈소스7.3s
▸dependency-check—0/30%———오픈소스3.0s
▸grype—0/30%———오픈소스2.7s
▸osv-scalibr—0/30%———오픈소스26ms
▸syft—0/30%———오픈소스1.1s
▸trivy—0/30%———오픈소스153ms

컨테이너 이미지

대상
이미지에 설치된 OS 패키지와 그 취약점
변별
배포판 보안 데이터베이스로 백포트를 반영하는지
결과
상위 버전 범위로만 대조하는 도구는 이미 고쳐진 취약점까지 보고

개요

도구버전컴포넌트발견 컴포넌트발견 취약점종합평균 시간
bomlens1.13.4100%정답 2222직접 0, 간접 2172100%23.0s
osv-scalibr0.5.3100%정답 22220100%6.3s
syft1.54.1100%정답 2222직접 0, 간접 210100%7.5s
trivy0.76.0100%정답 2222직접 1, 간접 2173100%120ms
cdxgen13.4.091%정답 2228직접 27, 간접 1091%4.7s
osv-scanner2.7.072%정답 22177272%2.9s
grype0.120.169%정답 2298669%8.6s
dependency-check13.0.00%정답 22입력 미지원 3000%—
ort96.0.00%정답 22입력 미지원 3000%—

검증 대상별 지표와 근거

행을 누르면 도구별 지표와 검출, 미탐, 과탐 근거가 펼쳐진다.

container-image컴포넌트 최고1.004개 도구범위 0.48–1.00도구 7
입력 원본 보기 ↗
입력
Alpine 컨테이너 이미지
변별
이미지에 설치된 OS 패키지를 찾는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens15/1515/15100%———오픈소스24.4s
▸osv-scalibr15/1515/15100%———오픈소스2.3s
▸syft15/1515/15100%———오픈소스3.0s
▸trivy15/1515/15100%———오픈소스115ms
▸cdxgen15/1915/1588%———오픈소스4.7s
▸grype6/66/1557%———오픈소스4.0s
▸osv-scanner6/106/1548%———오픈소스2.6s
image-debian-backport컴포넌트 최고1.004개 도구범위 0.50–1.00도구 7
입력 원본 보기 ↗
입력
컨테이너 이미지. Debian 이 상위 버전의 보안 패치를 현재 버전에 적용한(백포트) 패키지 포함
변별
백포트 버전을 식별해 이미 고쳐진 취약점을 걸러내는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens6/66/6100%—65/6534/34오픈소스24.7s
▸osv-scalibr6/66/6100%———오픈소스15.8s
▸syft6/66/6100%———오픈소스15.9s
▸trivy6/66/6100%—65/6534/34오픈소스138ms
▸cdxgen6/86/686%———오픈소스3.9s
▸osv-scanner4/64/667%—65/6534/34오픈소스3.9s
▸grype2/22/650%—65/6534/34오픈소스19.5s
image-log4shell컴포넌트 최고1.007개 도구도구 7
입력 원본 보기 ↗
입력
컨테이너 이미지. 앱 라이브러리 계층에 취약한 log4j-core 2.14.1(Log4Shell)
변별
이미지 안 앱 라이브러리의 취약점을 찾는지, 다른 아티팩트의 취약점을 섞지 않는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens1/11/1100%—7/77/7오픈소스19.8s
▸cdxgen1/11/1100%———오픈소스5.7s
▸grype1/11/1100%—7/77/7오픈소스2.4s
▸osv-scalibr1/11/1100%———오픈소스957ms
▸osv-scanner1/11/1100%—7/77/7오픈소스2.2s
▸syft1/11/1100%———오픈소스3.6s
▸trivy1/11/1100%—7/77/7오픈소스107ms

바이너리와 펌웨어

대상
소스 없는 바이너리와 펌웨어
변별
파일 식별, Go 빌드 정보 읽기, 펌웨어 풀기
결과
세 능력의 보유 여부로 갈린다

개요

도구버전컴포넌트발견 컴포넌트발견 취약점종합평균 시간
bomlens1.13.4100%정답 46직접 0, 간접 456100%32.8s
syft1.54.167%정답 45직접 0, 간접 4067%1.0s

검증 대상별 지표와 근거

행을 누르면 도구별 지표와 검출, 미탐, 과탐 근거가 펼쳐진다.

binary-busybox컴포넌트 최고1.00bomlens, syft도구 2
입력 원본 보기 ↗
입력
정적 링크된 ELF 실행 파일(busybox)
변별
소스 없이 실행 파일 안의 오픈소스를 식별하는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens1/11/1100%———오픈소스31.6s
▸syft1/11/1100%———오픈소스1.1s
binary-go컴포넌트 최고1.00bomlens, syft도구 2
입력 원본 보기 ↗
입력
정적 링크된 Go 실행 파일(CGO_ENABLED=0)
정답
빌드에 실제 포함된 cobra 와 pflag. mousetrap 은 windows 전용이라 제외
변별
바이너리에 새겨진 빌드 정보에서 모듈과 버전을 읽는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens—2/2————오픈소스28.1s
▸syft—2/2————오픈소스989ms
firmware-busybox컴포넌트 최고1.00bomlens범위 0–1.00도구 2
입력 원본 보기 ↗
입력
펌웨어 이미지. busybox 가 든 squashfs 파일시스템
변별
펌웨어를 풀어 안의 오픈소스를 찾는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens1/11/1100%———오픈소스38.7s
▸syft—0/10%———오픈소스998ms

파일 라이선스 (소스코드)

대상
패키지 목록 파일이 없는 순수 소스
변별
파일 안에 적힌 라이선스를 읽는 능력
결과
scancode, bomlens 만 검출. 패키지를 읽는 도구는 0

개요

도구버전라이선스종합평균 시간
bomlens1.13.4100%정답 2100%381.1s
scancode32.5.0100%정답 2100%9.0s

검증 대상별 지표와 근거

행을 누르면 도구별 지표와 검출, 미탐, 과탐 근거가 펼쳐진다.

license-mix라이선스 최고1.00bomlens, scancode도구 2
입력 원본 보기 ↗
입력
파일마다 다른 라이선스(MIT, Apache-2.0, GPL-3.0-only, BSD-3-Clause, ISC)와 복합 표현(MIT OR Apache-2.0)
변별
파일 헤더의 라이선스를 식별하고 표준 이름(SPDX)으로 통일하는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens———1/1——오픈소스394.5s
▸scancode———1/1——오픈소스9.6s
src-licenses라이선스 최고1.00bomlens, scancode도구 2
입력 원본 보기 ↗
입력
소스 파일만 있는 프로젝트. 패키지 목록 파일 없음
변별
파일 안에 적힌 라이선스를 읽는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens———1/1——오픈소스367.8s
▸scancode———1/1——오픈소스8.4s

도달성 (VEX 판정)

대상
취약한 버전의 Go 모듈을 쓰되, 취약한 함수를 호출하는 프로그램과 호출하지 않는 프로그램. 소스와 빌드한 바이너리 두 형태
변별
실제로 호출되는 취약점은 남기고, 호출되지 않거나 링크되지 않은 취약점은 거르는지(VEX 의 not_affected 판정)
읽는 법
호출 취약점 유지가 100% 미만이면 실제 위험을 숨긴 것이라 노이즈 감소보다 먼저 본다. 판정 기능이 없는 도구는 유지 100%, 거름 0% 로 나온다

개요

도구버전호출 취약점 유지미호출 취약점 거름종합평균 시간
osv-scanner2.7.0100%정답 1100%정답 5100%3.1s
bomlens1.13.4100%정답 2100%정답 10100%83.1s
grype0.120.1100%정답 250%정답 1075%2.4s
trivy0.76.050%정답 20%정답 1025%140ms

검증 대상별 지표와 근거

행을 누르면 도구별 지표와 검출, 미탐, 과탐 근거가 펼쳐진다.

go-reach-called-bin도달성 최고1.00bomlens, grype범위 0–1.00도구 3
입력 원본 보기 ↗
입력
go-reach-called 를 linux/amd64 로 빌드한 바이너리
변별
바이너리의 심볼과 링크된 패키지로 판정하는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens——————오픈소스38.4s
▸grype——————오픈소스2.1s
▸trivy——————오픈소스70ms
go-reach-called도달성 최고1.00bomlens, osv-scanner범위 0–1.00도구 4
입력 원본 보기 ↗
입력
Go 소스. golang.org/x/text v0.3.7 의 영향 함수(ParseAcceptLanguage)를 호출
정답
CVE-2022-32149 는 affected. 빌드에 들어가지 않는 패키지의 두 CVE 는 not_affected
변별
호출되는 취약점은 남기고 링크되지 않는 패키지의 취약점은 거르는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens——————오픈소스150.6s
▸grype——————오픈소스3.3s
▸osv-scanner——————오픈소스4.8s
▸trivy——————오픈소스92ms
go-reach-uncalled-bin도달성 최고1.00bomlens, grype범위 0–1.00도구 3
입력 원본 보기 ↗
입력
go-reach-uncalled 를 linux/amd64 로 빌드한 바이너리. 영향 함수가 심볼 표에 없다
변별
바이너리의 심볼과 링크된 패키지로 판정하는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens——————오픈소스33.5s
▸grype——————오픈소스1.7s
▸trivy——————오픈소스66ms
go-reach-uncalled도달성 최고1.00bomlens, osv-scanner범위 0–1.00도구 4
입력 원본 보기 ↗
입력
Go 소스. 같은 모듈을 쓰되 영향 함수는 호출하지 않음
정답
세 CVE 모두 not_affected
변별
모듈 버전만 보고 보고하는지, 호출 여부까지 보는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens——————오픈소스110.1s
▸grype——————오픈소스2.4s
▸osv-scanner——————오픈소스1.4s
▸trivy——————오픈소스330ms

AI 모델 파일 (AIBOM)

대상
형식이 다른 AI 모델 파일 6종(GGUF, safetensors, ONNX, pickle, PyTorch). 그중 둘은 로드할 때 코드가 실행되는 위험 직렬화
변별
모델을 구성요소로 찾는지, 형식을 맞히는지, 위험 직렬화를 일반 pickle 과 구분해 표시하는지
근거
G7 AI SBOM 최소 요소의 모델 클러스터(이름, 형식)와 보안 속성 클러스터

개요

도구버전모델 검출형식 식별위험 직렬화 탐지종합평균 시간
bomlens1.13.4100%정답 6100%정답 6100%정답 2100%25.8s
cdxgen13.4.050%정답 650%정답 60%정답 233%1.1s

검증 대상별 지표와 근거

행을 누르면 도구별 지표와 검출, 미탐, 과탐 근거가 펼쳐진다.

aibom-model-files모델 검출 최고1.00bomlens범위 0.50–1.00도구 2
입력 원본 보기 ↗
입력
AI 모델 파일 6종: GGUF, safetensors, ONNX, pickle 2개, PyTorch(zip 안 pickle)
정답
pickle 하나와 PyTorch 파일은 로드할 때 builtins.eval 을 호출하는 위험 직렬화. 다른 pickle 은 전역 참조가 없어 안전
변별
모델을 찾고 형식을 맞히는지, 위험 직렬화를 일반 pickle 과 구분하는지
도구컴포넌트 정밀재현F1라이선스취약점대응구분시간
▸bomlens——————오픈소스25.8s
▸cdxgen——————오픈소스1.1s

SBOM 품질 (CISA 2026 최소 요소 충족률)

정확도와 별개로, 도구가 낸 CycloneDX 가 CISA 2026 최소 요소의 데이터 필드를 얼마나 채우는지 본다. 검증 대상별 원시 출력의 평균이고, 구성요소가 없는 출력은 뺀다. 채웠는지만 보고 값의 정확도는 보지 않는다. 항목 정의는 분석.

도구cdxgenbomlensortsyfttrivyosv-scalibr
종합84%78%70%62%62%44%
대상 수202917181518
메타 항목cdxgenbomlensortsyfttrivyosv-scalibr
작성자100%0%0%0%0%0%
서명0%0%0%0%0%0%
형식100%100%100%100%100%100%
생성 맥락100%100%0%0%0%0%
시각100%100%100%100%100%100%
도구100%100%100%100%100%100%
도구 버전100%100%100%100%100%0%
SBOM 버전100%97%100%100%100%0%
구성요소 항목cdxgenbomlensortsyfttrivyosv-scalibr
생산자9%26%0%0%12%0%
해시76%60%70%0%13%0%
식별자99%100%100%100%76%100%
식별자 문법99%100%100%100%76%100%
라이선스84%89%71%46%41%0%
이름100%100%100%100%100%100%
버전93%98%96%100%72%100%
의존 관계89%87%76%51%100%0%

실행 오류

  • android-app / osv-scanner: No package sources found, --help for usage information.
  • android-flavor / osv-scanner: No package sources found, --help for usage information.
  • gradle-nolock / osv-scanner: No package sources found, --help for usage information.
  • npm-nolock / osv-scanner: No package sources found, --help for usage information.
  • php-nolock / osv-scanner: No package sources found, --help for usage information.
  • php-nolock / ort: at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1078) ... 28 more
  • ruby-nolock / osv-scanner: No package sources found, --help for usage information.
  • rust-cargo / osv-scanner: No package sources found, --help for usage information.