Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/concepts/architecture.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ sequenceDiagram

이미지 안에서의 두 단계:

1. **`build-prep.sh`** (`docker/lib/build-prep.sh`) — cdxgen **직전** 의존성 보강. cdxgen이 자동 해석하지 못하는 생태계(특히 Rust·Go)의 lockfile을 만들어 전이 의존성까지 노출시킵니다. POSIX `sh`, best-effort(스캔을 절대 실패시키지 않음).
1. **`build-prep.sh`** (`docker/lib/build-prep.sh`) — cdxgen **직전** 의존성 보강. cdxgen이 자동 해석하지 못하는 생태계(특히 Rust·Go)의 lockfile을 만들어 전이 의존성까지 노출시킵니다. POSIX `sh`, 실패해도 스캔을 중단시키지 않습니다.

| 생태계 | 동작 | 비고 |
|--------|------|------|
Expand Down Expand Up @@ -363,14 +363,14 @@ CLI 플래그가 어떤 환경변수로 변환되어 어느 단계를 켜는지
- **책임 분리** — 생성(Stage 1)과 후처리(Stage 2)를 분리해 후처리 이미지를 경량화.
- **재현성** — 도구 버전을 `ARG`로 고정, `--byte-stable`로 바이트 동일 출력.
- **표준 준수** — CycloneDX 1.6 스펙 준수.
- **견고성** — 후처리 단계는 best-effort로 전체 스캔을 쉽게 중단시키지 않음.
- **견고성** — 후처리 단계는 실패해도 전체 스캔을 중단시키지 않음.
- **단일 인터페이스** — 모든 언어·모드를 `scan-sbom.sh` 하나로 호출.

---

## 역할 분담 (TRUSCA)

BomLens는 **생성(generation)** 전문 도구입니다. 전사(全社) 프로젝트 관리·취약점 triage·라이선스 정책 게이트 같은 **거버넌스**는 자매 프로젝트 [TRUSCA](https://github.com/trustedoss/trusca)(구 TrustedOSS Portal)에 위임합니다. 두 도구 모두 cdxgen/Trivy를 공유하므로 산출물(CycloneDX)이 그대로 호환됩니다.
BomLens는 **생성(generation)** 전문 도구입니다. 전사(全社) 프로젝트 관리, 취약점 분류, 라이선스 정책 게이트 같은 **거버넌스**는 자매 프로젝트 [TRUSCA](https://github.com/trustedoss/trusca)(구 TrustedOSS Portal)에 위임합니다. 두 도구 모두 cdxgen/Trivy를 공유하므로 산출물(CycloneDX)이 그대로 호환됩니다.

```mermaid
flowchart TB
Expand Down
2 changes: 1 addition & 1 deletion docs/concepts/local-first.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ BomLens는 폐쇄망과 오프라인 환경에서 동작합니다. 외부 조회

## 생성은 BomLens, 거버넌스는 TRUSCA

BomLens는 생성에 집중합니다. 전사 프로젝트 관리, 취약점 triage, 라이선스 정책 게이트 같은 거버넌스는 자매 프로젝트 TRUSCA(구 TrustedOSS Portal, <https://github.com/trustedoss/trusca>)에 위임합니다. 두 도구는 CycloneDX 산출물을 그대로 주고받습니다.
BomLens는 생성에 집중합니다. 전사 프로젝트 관리, 취약점 분류, 라이선스 정책 게이트 같은 거버넌스는 자매 프로젝트 TRUSCA(구 TrustedOSS Portal, <https://github.com/trustedoss/trusca>)에 위임합니다. 두 도구는 CycloneDX 산출물을 그대로 주고받습니다.

## 관련 문서

Expand Down
4 changes: 2 additions & 2 deletions docs/concepts/pipeline-by-input.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ flowchart TD

## 펌웨어

네트워크 장비 펌웨어 이미지(`.bin`, `.img.gz`, squashfs 등)이며, opt-in `bomlens-firmware` 이미지가 담당합니다. 펌웨어는 운영체제와 라이브러리 수십 개를 한 파일에 밀봉하므로, 먼저 압축을 풀고 두 가지로 구성요소를 식별합니다. 패키지 매니저 메타데이터는 syft로, strip된 정적 바이너리는 [cve-bin-tool](https://github.com/intel/cve-bin-tool)로 식별하며 cve-bin-tool은 CVE도 함께 매칭합니다. 두 결과를 병합한 뒤, 잘 알려진 OSS(busybox, dropbear, dnsmasq 등)에 대해 CPE/SPDX를 채우는 보강 단계를 거쳐 Trivy와 고지문이 이를 쓸 수 있게 합니다.
네트워크 장비 펌웨어 이미지(`.bin`, `.img.gz`, squashfs 등)이며, opt-in `bomlens-firmware` 이미지가 담당합니다. 펌웨어는 운영체제와 라이브러리 수십 개를 한 파일에 밀봉하므로, 먼저 압축을 풀고 두 가지로 구성요소를 식별합니다. 패키지 매니저 메타데이터는 syft로, strip된 정적 바이너리는 [cve-bin-tool](https://github.com/intel/cve-bin-tool)로 식별하며 cve-bin-tool은 CVE도 함께 매칭합니다. 두 결과를 병합한 뒤, 잘 알려진 OSS(busybox, dropbear, dnsmasq 등)CPE/SPDX를 채우는 보강 단계를 거치고, 그 결과를 Trivy와 고지문 생성이 이어받아 활용합니다.

언팩은 먼저 성공한 도구를 쓰는 순서로 시도합니다. [unblob](https://github.com/onekey-sec/unblob)(기본), [BANG](https://github.com/armijnhemel/binaryanalysis-ng), 표준 squashfs용 `unsquashfs`, 그다음 `binwalk`입니다.

Expand Down Expand Up @@ -114,7 +114,7 @@ flowchart TD

## 공통 후처리

어떤 입력이든 SBOM은 같은 순서의 단계를 거칩니다. 정규화는 이후 모든 단계의 입력을 안정시키므로 가장 먼저 돌고, 서명은 최종 SBOM을 대상으로 해야 하므로 마지막에 돕니다. 점선 단계는 선택이거나 입력별입니다. 각 단계는 best-effort라, 실패하면 전체 스캔을 중단하지 않고 경고와 함께 건너뜁니다(서명과 업로드는 예외).
어떤 입력이든 SBOM은 같은 순서의 단계를 거칩니다. 정규화는 이후 모든 단계의 입력을 안정시키므로 가장 먼저 돌고, 서명은 최종 SBOM을 대상으로 해야 하므로 마지막에 돕니다. 점선 단계는 선택이거나 입력별입니다. 각 단계는 실패하더라도 전체 스캔을 중단하지 않고 경고와 함께 건너뜁니다(서명과 업로드는 예외).

```mermaid
flowchart TD
Expand Down
4 changes: 2 additions & 2 deletions docs/concepts/reports-explained.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ BomLens는 각 컴포넌트의 릴리스 주기가 상위(upstream) 지원 종

- 날짜는 스캐너 이미지에 번들한 endoflife.date 스냅샷에서 가져옵니다. 그래서 이 점검은 네트워크 호출 없이 오프라인으로 동작하며 폐쇄망에서도 쓸 수 있습니다. 출처와 스냅샷 날짜는 표시된 각 컴포넌트에 기록됩니다(`bomlens:eol:source`).
- 커버리지는 endoflife.date를 따릅니다. endoflife.date는 런타임, 주요 프레임워크, 운영체제, 데이터베이스를 다룹니다(spring-boot, express, django, nodejs, python, php, nginx, openssl, ubuntu, debian 등). 규모가 작은 라이브러리 다수는 대상이 아니며, 매핑이 없는 컴포넌트는 추측하지 않고 미표기(unknown)로 둡니다.
- 웹 UI에서는 개요(Overview)에 "지원 종료" 개수 타일이 나오고, 그중 취약점도 있는 컴포넌트는 위험색으로 강조됩니다. 지원 종료 컴포넌트는 자신의 CVE에 대한 상위 패치가 없으므로 실제로 대응해야 할 대상입니다. 컴포넌트 표에는 "지원 종료" 뱃지(가능하면 종료 날짜 포함)와 "지원 종료" 필터가 더해집니다.
- 웹 UI에서는 개요(Overview)에 "지원 종료" 개수 타일이 나오고, 그중 취약점도 있는 컴포넌트는 위험색으로 강조됩니다. 지원 종료 컴포넌트는 자신의 CVE에 대한 상위 패치가 없으므로 실제로 대응해야 할 대상입니다. 컴포넌트 표에는 "지원 종료" 배지(가능하면 종료 날짜 포함)와 "지원 종료" 필터가 더해집니다.
- 오프라인이라 지연이 없어 기본으로 켜져 있습니다. 끄려면 `ENRICH_EOL=false`로 설정합니다. AI/ML 모델 스캔은 런타임이나 프레임워크 컴포넌트가 없어 이 단계를 건너뜁니다.

## 버전 최신성
Expand All @@ -58,7 +58,7 @@ BomLens는 각 컴포넌트의 릴리스 주기가 상위(upstream) 지원 종
crit=$(jq '[.Results[]?.Vulnerabilities[]? | select(.Severity=="CRITICAL")] | length' *_security.json)
[ "$crit" -gt 0 ] && { echo "Critical 취약점 ${crit}건"; exit 1; }
```
- 오탐(실제 영향 없음) 판단, 예외 승인, 이력 관리 같은 triage는 BomLens의 범위를 넘습니다. 취약점 관리 시스템(Dependency-Track, TRUSCA 등)에 SBOM을 업로드해 처리하세요.
- 오탐(실제 영향 없음) 판단, 예외 승인, 이력 관리 같은 취약점 분류 업무는 BomLens의 범위를 넘습니다. 취약점 관리 시스템(Dependency-Track, TRUSCA 등)에 SBOM을 업로드해 처리하세요.

## 오픈소스위험분석보고서

Expand Down
2 changes: 1 addition & 1 deletion docs/concepts/what-is-sbom.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: SBOM(Software Bill of Materials)이 무엇인지, 오픈소스 고

# SBOM이란

SBOM(Software Bill of Materials)은 소프트웨어 안에 든 구성요소의 목록입니다. 함께 배포되는 모든 오픈소스 라이브러리와 패키지를 이름, 버전, 라이선스와 함께 정리한 것입니다. 포장 식품의 성분표가 제품을 뜯지 않고도 안에 뭐가 들었는지 알려주듯, SBOM은 소프트웨어에 대해 같은 역할을 합니다.
SBOM(Software Bill of Materials)은 소프트웨어 안에 든 구성요소의 목록입니다. 함께 배포되는 모든 오픈소스 라이브러리와 패키지를 이름, 버전, 라이선스와 함께 정리한 것입니다. 포장 식품의 성분표가 제품을 뜯지 않고도 안에 뭐가 들었는지 알려주듯, SBOM이 소프트웨어에서 같은 역할을 합니다.

오늘날 소프트웨어 대부분은 오픈소스를 조립해 만들어집니다. 보통의 웹 애플리케이션이 직접 선언하는 패키지는 수십 개지만, 그것들이 다시 수백 개를 끌어옵니다. 이 목록을 사람이 외울 수는 없으므로 도구가 프로젝트에서 생성합니다. BomLens가 하는 일이 그것입니다.

Expand Down
4 changes: 2 additions & 2 deletions docs/contribute/package-managers.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ newlang) echo "ghcr.io/cyclonedx/cdxgen-debian-newlang:$CDXGEN_TAG" ;;

### 2. 의존성 보강이 필요하면 build-prep.sh 수정

cdxgen이 잠금 파일 없이 전이 의존성을 해석하지 못하는 생태계라면, cdxgen 실행 직전에 잠금 파일을 만들어 주는 `docker/lib/build-prep.sh`에 보강 로직을 추가합니다. Rust(`cargo generate-lockfile`)와 Go(`go mod download`)가 선례입니다. 보강은 best-effort로 작성해 스캔을 실패시키지 않아야 합니다.
cdxgen이 잠금 파일 없이 전이 의존성을 해석하지 못하는 생태계라면, cdxgen 실행 직전에 잠금 파일을 만들어 주는 `docker/lib/build-prep.sh`에 보강 로직을 추가합니다. Rust(`cargo generate-lockfile`)와 Go(`go mod download`)가 선례입니다. 보강은 실패하더라도 스캔을 중단시키지 않도록 작성해야 합니다.

### 3. 예제 프로젝트 추가

`examples/` 디렉토리에 예제 프로젝트를 추가합니다.
`examples/` 디렉터리에 예제 프로젝트를 추가합니다.

```
examples/kotlin/
Expand Down
2 changes: 1 addition & 1 deletion docs/contribute/testing.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ DEBUG_MODE=true ./tests/cases/test-nodejs.sh
### 테스트 실패 시 대응 절차

1. `DEBUG_MODE=true` 로 재실행하여 상세 로그를 확인합니다.
2. 실패한 언어의 예제 디렉토리에서 `scan-sbom.sh`를 직접 실행합니다.
2. 실패한 언어의 예제 디렉터리에서 `scan-sbom.sh`를 직접 실행합니다.
3. Docker 이미지를 최신 버전으로 업데이트합니다: `docker pull ghcr.io/sktelecom/bomlens:latest`
4. 해결되지 않으면 [GitHub Issues](https://github.com/sktelecom/bomlens/issues)에 환경 정보와 로그를 첨부해 리포트해 주세요.

Expand Down
8 changes: 4 additions & 4 deletions docs/guides/ai-model.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ AI 모델의 "구성요소 명세"는 모델 카드입니다. 식별자, 아키

"G7 Software Bill of Materials for AI — Minimum Elements"는 2026년 5월 G7 차원에서 발행된 지침으로, 독일 BSI와 이탈리아 ACN이 주도했습니다. AI 모델의 SBOM이 갖춰야 할 최소 요소 50개를 7개 클러스터로 정의합니다. 누가 만든 모델인지, 무엇인지, 어떤 데이터로 학습했는지, 어떻게 보호되는지, 성능은 어떤지를 다룹니다. 법적 구속력이 있는 규정이 아니라 권고입니다.

그래도 규제와 무관하지 않습니다. EU 인공지능법(AI Act)의 고위험·투명성 의무가 2026년 8월 2일부터 적용되고, Annex IV가 요구하는 기술 문서는 G7 클러스터와 상당 부분 겹칩니다. BomLens가 어느 쪽의 준수를 보증하는 것은 아닙니다. 적합성 리포트가 주는 것은 가시성입니다. 모델 문서가 이미 다루는 요소와 사람이 채워야 할 요소를 항목별로 보여주므로, 준수 판정이 아니라 준비를 돕는 구체적인 방법이 됩니다.
그래도 규제와 무관하지 않습니다. EU 인공지능법(AI Act)의 고위험·투명성 의무가 2026년 8월 2일부터 적용되고, Annex IV가 요구하는 기술 문서는 G7 클러스터와 상당 부분 겹칩니다. BomLens가 어느 쪽의 준수를 보증하는 것은 아닙니다. 적합성 보고서가 주는 것은 가시성입니다. 모델 문서가 이미 다루는 요소와 사람이 채워야 할 요소를 항목별로 보여주므로, 준수 판정이 아니라 준비를 돕는 구체적인 방법이 됩니다.

BomLens는 50개 요소를 51개 검사로 보여줍니다. 모델 개방성(가중치, 아키텍처, 학습 데이터, 학습 과정의 공개 여부)은 G7 원문에서 Model license 요소의 한 측면이지만, 따로 볼 가치가 있어 별도 행으로 노출합니다.

Expand All @@ -34,7 +34,7 @@ BomLens는 50개 요소를 51개 검사로 보여줍니다. 모델 개방성(가

## 규제 크로스워크

적합성 리포트는 규제와 대응되는 G7 요소마다 그 요소가 어느 문서화 의무와 닿는지를 연결해 줍니다. 검토자가 던지는 질문에 답하기 위한 것입니다. 어떤 요소가 비어 있을 때, 그 공백이 어느 규제 요구와 관련되는가? 현재 두 가지 규제를 매핑합니다.
적합성 보고서는 규제와 대응되는 G7 요소마다 그 요소가 어느 문서화 의무와 닿는지를 연결해 줍니다. 검토자가 던지는 질문에 답하기 위한 것입니다. 어떤 요소가 비어 있을 때, 그 공백이 어느 규제 요구와 관련되는가? 현재 두 가지 규제를 매핑합니다.

- EU 인공지능법(AI Act) — Annex IV 기술문서 항목(Regulation (EU) 2024/1689, Article 11(1)).
- AI 기본법(한국) — 투명성(제31조), 안전성과 위험관리(제32조), 고영향 인공지능(제33·34조), 영향평가(제35조) 조항. 이 법은 기본법 성격이라 매핑이 EU 쪽보다 성깁니다.
Expand Down Expand Up @@ -95,7 +95,7 @@ SBOM_SCANNER_IMAGE=ghcr.io/sktelecom/bomlens-aibom:latest ./scripts/scan-sbom.sh

같은 데이터는 산출물에도 있습니다. ML-BOM(`_bom.json`, CycloneDX 1.7)과 적합성 보고서(`_conformance.*`)입니다.

## 적합성 리포트 읽는 법
## 적합성 보고서 읽는 법

G7 블록의 머리에는 "N / 38 충족" 같은 수치가 옵니다. 분모는 자동 출처가 있는 검사만 셉니다. 51개 중 38개이므로, 이 숫자는 도구가 스스로 확인할 수 있었던 범위를 말합니다. 사람 검토 전용 13개는 그 옆에 "검토 필요" 건수로 따로 표시되고, 자동 검사 중 채워지지 않은 것은 권고 건수로 잡힙니다.

Expand All @@ -113,7 +113,7 @@ G7 블록의 머리에는 "N / 38 충족" 같은 수치가 옵니다. 분모는
## 한계

- 결과는 HuggingFace 모델 카드만큼만 충실합니다. 카드가 빈약하면 ML-BOM도 빈약하고, G7 검사도 카드에 문서화된 범위를 반영할 뿐 모델 자체를 감사하지는 않습니다. 리포트 생성은 도구의 몫이고, 해석과 검토 전용 13개 요소를 채우는 일은 사람의 몫입니다.
- 적합성 리포트는 EU 인공지능법을 비롯한 어떤 규제의 준수도 인증하지 않습니다. 문서화 공백을 드러내 사람이 메울 수 있게 할 뿐입니다.
- 적합성 보고서는 EU 인공지능법을 비롯한 어떤 규제의 준수도 인증하지 않습니다. 문서화 공백을 드러내 사람이 메울 수 있게 할 뿐입니다.
- 메타데이터를 네트워크로 가져오므로, 비공개·게이트 모델은 접근 권한(환경의 HuggingFace 토큰)이 필요하며 오프라인 사용은 지원하지 않습니다.
- 모델 id는 `org/model` 형식이어야 합니다. 컬렉션 이름이나 전체 URL은 해석되지 않습니다.

Expand Down
2 changes: 1 addition & 1 deletion docs/guides/firmware.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ OSV(Open Source Vulnerabilities) 권고는 재배포 이미지에 share-alike
- 오픈소스 도구 스택의 검출률은 약 60~85%이며, 펌웨어 종류와 strip 정도, 언팩 성공 여부에 크게 좌우됩니다.
- 함수 수준 바이너리 핑거프린팅이 없어서, 상용 도구와 달리 strip되거나 인라인된 컴포넌트, 버전 문자열이 제거된 바이너리는 놓칩니다.
- 정적 링크 라이브러리와 벤더가 변형한 squashfs, 암호화·서명된 펌웨어, 사명을 바꾼 라이브러리는 검출하지 못하거나 부정확합니다.
- 결과 SBOM은 best-effort 추정이므로, 법적 라이선스 컴플라이언스의 단일 근거로 사용하지 마세요.
- 결과 SBOM은 완전하지 않은 근사 추정이므로, 법적 라이선스 컴플라이언스의 단일 근거로 사용하지 마세요.

---

Expand Down
Loading
Loading