콘텐츠로 이동

웹 UI와 데스크톱 앱

CLI 없이 브라우저에서 스캔합니다. UI 서버가 스캐너 이미지에 내장되어 있어 별도 설치가 필요 없습니다.

BomLens 새 스캔 화면

macOS / Linux:

cd ~/sbom-output      # 출력 폴더(아무 곳이나 가능)
/path/to/sbom-tools/scripts/scan-sbom.sh --ui
# → http://localhost:8080 자동 열림

Windows — 더블클릭(명령줄 없이): 압축을 푼 폴더에서 scripts\sbom-ui.bat을 더블클릭하면 잠시 후 브라우저가 http://localhost:8080을 엽니다. Docker만 실행 중이면 되고, sbom-ui.bat은 Rancher Desktop이나 Docker Desktop에서 동작합니다(WSL2에서는 WSL 안에서 scan-sbom.sh --ui를 실행하세요).

실행 위치는 출력 베이스이며, 스캔 대상으로 "현재 폴더"를 고를 때만 그 폴더의 소스를 스캔합니다. GitHub URL, 업로드, Docker 이미지를 쓰면 실행 위치는 무관합니다. 스캔마다 {Project}_{Version}/ 하위 폴더에 저장되며, 기본 베이스와 바꾸는 방법은 산출물 위치를 참고하세요.

셸 구성

인터페이스는 폭 전체를 가로지르는 상단 바, 현재 스캔의 섹션을 담는 좌측 레일, 내용 영역으로 이뤄집니다.

  • 상단 바 — 제품 표시(클릭하면 홈으로), 현재 프로젝트, 재스캔 버튼(설정을 그대로 담고 있는 스캔에서만 나타나며, 같은 대상을 토글을 채운 채 다시 실행합니다), 컴포넌트와 CVE를 아우르는 글로벌 검색, 스캔 관리 메뉴(시계 아이콘을 누르면 지난 스캔 목록과 삭제 버튼, 전체 목록 링크가 열립니다), 새 스캔 버튼, 언어(한국어 / EN)와 라이트·다크 전환.
  • 좌측 레일 — 현재 스캔의 섹션이 인벤토리, 위험·컴플라이언스, AI, 산출물로 묶여 있습니다. 레일은 스캔에 맞춰 바뀝니다. AI 섹션은 AI/ML SBOM에만 나타나고, 각 섹션은 해당 데이터가 있을 때만 보입니다. 화면 폭이 좁으면 아이콘만 남게 접힙니다. 스캔이 열려 있지 않은 홈 화면에는 레일이 없습니다.
  • 내용 영역 — 홈(스캔 관리) 화면, 새 스캔 폼, 진행 화면, 또는 선택한 결과 섹션.

전역 작업(새 스캔, 스캔 관리)은 상단 바에 있어 레일은 현재 스캔의 섹션만 담습니다. 로고, 새 스캔, 레일 섹션, 점프 카드, 지난 스캔 링크 같은 모든 내비게이션 요소는 URL 해시(#/scan/<id>/<section>)를 가진 실제 링크라, Cmd/Ctrl 클릭이나 가운데 클릭으로 새 탭에서 열 수 있습니다.

새 스캔

새 스캔 화면은 두 칸으로 나뉩니다. 왼쪽에서 소스를 고릅니다. 코드(현재 폴더, 디렉터리 경로, GitHub URL, ZIP 업로드), 아티팩트(Docker 이미지, 펌웨어 이미지), SBOM(기존 SBOM 분석), AI 모델(HuggingFace 모델로 ML-BOM 생성)로 묶여 있고, 타일 아래에 소스별 입력란이 나타납니다. 오른쪽에서 프로젝트 이름과 버전을 입력하고 생성할 산출물을 고른 뒤 스캔을 시작합니다.

스캔 대상 입력 방식 백엔드 모드
현재 폴더 UI 실행 폴더의 소스를 스캔 SOURCE
디렉터리 경로 실행 폴더 하위 폴더(예: OS rootfs) ROOTFS
GitHub URL 저장소 URL 입력 SOURCE (clone)
ZIP 업로드 .zip/tar 파일 업로드 SOURCE (extract)
SBOM 업로드 기존 SBOM(JSON) 업로드 ANALYZE
펌웨어 업로드 .bin 등 업로드 FIRMWARE
Docker 이미지 이미지 이름 입력 IMAGE
AI 모델 HuggingFace 모델 id(org/model) 입력 AIBOM

생성 옵션은 오픈소스 고지문과 보안(취약점) 보고서입니다. 이와 별도로 고급 스캔 옵션 섹션은 어떤 파일을 만들지가 아니라 소스를 어떻게 분석할지를 바꾸는 토글을 모읍니다. 프로젝트 자체 소스 파일을 훑어 파일 단위 라이선스 텍스트(1st-party)를 찾는 라이선스 스캔 (ScanCode)(선언된 의존성을 내려받지는 않습니다)과 소스 트리에 복사된 제3자 오픈소스(주로 C/C++)를 찾는 파일 단위 식별 (SCANOSS)이 소스 코드 스캔(현재 폴더, GitHub URL, ZIP 업로드)에 해당하고, 펌웨어에는 OSV 권고가 들어갑니다. SCANOSS는 무료 OSSKB 서비스를 쓰는데 호출 한도가 있어 자주 실행하면 결과가 비어 올 수 있으니, 정기적으로 쓴다면 scanoss.com에서 토큰을 발급해 넣으세요. Docker 이미지·SBOM 업로드·AI 모델에는 고급 옵션이 없습니다. SBOM 업로드(ANALYZE)를 고르면 위험분석을 위해 고지문과 보안 보고서가 강제로 켜지고, AI 모델 스캔은 고지문만 생성합니다(패키지 CVE가 없어 보안 보고서는 건너뜁니다).

진행 화면

스캔 중에는 파이프라인 단계(생성, 정규화, 고지문, 보안, 보고서)가 실시간 로그와 함께 진행됩니다. 스캔이 어디까지 왔는지 보이고, 오류(클론 실패, Docker 소켓 없음, 지원하지 않는 파일)도 그때그때 로그로 확인할 수 있습니다.

결과 섹션

스캔이 끝나면 좌측 레일이 그 스캔의 섹션으로 채워집니다.

개요는 한눈에 보는 수치를 각 상세 섹션으로 이동하는 카드로 먼저 보여주고, 이어서 주의가 필요한 항목(형식 적합성 실패(공급사 SBOM 분석 시), 심각·높음 취약점, 라이선스 검토가 필요한 컴포넌트)을 둡니다. 스캔이 상위 지원 종료(EOL) 컴포넌트를 표시하면 "지원 종료" 개수 타일이 카드에 더해지고, 그중 취약점도 있는 컴포넌트는 위험색으로 강조됩니다(컴포넌트 지원 종료 참고). 최신 버전보다 뒤처진 컴포넌트 수를 세는 타일도 별도로 붙습니다(버전 최신성 참고). 그 아래에는 두 위험 축, 곧 보안 심각도 분포와 라이선스 분류를 좌우로 나란히 배치합니다. 둘 중 한 막대 영역을 클릭하면 해당 섹션(취약점 또는 라이선스)으로 필터가 걸린 채 이동합니다. 스캔이 분석을 줄여서 끝났을 때(예를 들어 cdxgen이 Docker 디스크 공간 부족으로 돌지 못해 SBOM이 직접 의존성만으로 대체된 경우) 사유와 조치를 알려주는 배너가 여기에 나타납니다. 스캔이 아직 진행 중이면 실시간 로그가 다른 섹션이 아니라 이 개요에 표시됩니다.

개요 — 주의 필요, 수치, 심각도, 점프 카드

컴포넌트는 검출된 모든 항목을 나열합니다. 검색과 필터(취약점 있음, 직접 의존만, 검토 필요, 지원 종료, 최신 아님)가 있고, 범위(직접·이행)와 위험(최고 취약점 심각도와 개수) 컬럼을 둡니다. 상위 지원이 종료된 컴포넌트에는 "지원 종료" 뱃지가 붙고, 아는 경우 종료 날짜도 함께 표시합니다. 최신 버전이 아닌 컴포넌트는 최신 아님으로 표시하며, deps.dev 보강을 켜면(STALENESS_ENRICH=true) 상세에 몇 릴리스 뒤인지와 마지막 릴리스 날짜가 나옵니다(버전 최신성 참고). 대용량 SBOM은 나눠서 렌더합니다. 행을 클릭하면 그 자리에서 상세가 펼쳐집니다. PURL, 소스·다운로드 위치, 저작권, 라이선스, 취약점을 보여줍니다.

컴포넌트 — 범위·위험 컬럼과 필터

취약점은 심각도에 이어 CVSS로 정렬하며, CVSS 컬럼과 수정 버전을 보여주고, 각 행을 펼치면 CVSS 벡터·설명·참조가 그 자리에서 나옵니다. 심각도 막대에서 한 구간을 클릭하면 그 심각도로 필터링되고, CVE나 패키지로 검색할 수 있습니다.

취약점 — CVSS 컬럼과 펼침 행

의존성은 SBOM에 기록된 관계를 그래프나 트리로 보여줍니다. 직접 의존성을 강조하고, 알려진 취약점이 있는 패키지는 심각도로 표시합니다. 트리로 전환하면 직접·이행 의존성을 계층으로 펼칠 수 있습니다.

의존성 — 직접·취약 패키지 표시

라이선스는 컴포넌트를 카피레프트 강도로 묶는 라이선스 분류 축을 먼저 보여줍니다. 네트워크 카피레프트(AGPL), 강한 카피레프트(GPL), 약한 카피레프트(LGPL, MPL, EPL 등), 허용적, 검토 필요, 미분류로 나뉩니다. 인식하지 못한 라이선스는 허용적으로 추정하지 않고, 사람이 확인하도록 미분류로 둡니다. 분류를 클릭하면 그 등급으로 섹션 나머지가 필터링됩니다. 분류 아래에는 사람이 검토해야 하는 컴포넌트(AI 행위 기반 제한(RAIL/Llama/Gemma)과 비상업 라이선스)를 두고, 이어서 전체 라이선스 분포를 둡니다. 라이선스를 클릭하면 그 라이선스를 쓰는 컴포넌트 목록이 나옵니다.

라이선스 — 검토 우선, 이어 전체 분포

적합성은 기존 SBOM을 분석할 때(SBOM 업로드 / ANALYZE 모드) Risk & compliance 그룹에 나타납니다. 형식 판정(통과 또는 실패)과 기본 CycloneDX 검사(타임스탬프, 도구, 최상위 컴포넌트, 이름·버전 커버리지, PURL 커버리지, 이행 의존성)를 보여주고, 실패한 검사마다 누락 항목을 나열합니다. 분석한 SBOM에 머신러닝 모델 컴포넌트가 있으면 AI G7 최소 요소 검사(모두 권고)가 이 안에 하위 블록으로 나타납니다. G7 7개 클러스터별로 묶이고, 각 항목에는 데이터 출처 배지(자동 확인, 신호 추정, 선언 필요, 검토 필요)가 표시됩니다. 머리 수치와 배지가 뜻하는 바는 AI 모델 SBOM 가이드에서 설명합니다.

적합성 — 형식 판정과 G7 권고 하위 블록

산출물은 생성된 파일(SBOM, 고지문, 위험분석 보고서, 보안 보고서, 적합성)을 종류별로 묶어 나열하고, 포맷별로 또는 ZIP 하나로 내려받습니다. 소스 트리 섹션은 ScanCode 결과가 있을 때, 즉 라이선스 스캔 (ScanCode)을 켜고 소스를 스캔한 산출물이 있을 때 나타나며, 소스 파일을 파일별 탐지 라이선스와 함께 보여줍니다.

AI 표면

AI/ML SBOM(머신러닝 모델 컴포넌트가 있는 CycloneDX SBOM)에서는 레일에 다음이 추가됩니다.

모델·데이터셋 — 각 모델 카드의 식별자, 아키텍처, 태스크, 라이선스, 공급자, 무결성과, 공개 4축 패널(가중치 / 아키텍처 / 학습 데이터 / 학습 과정 — 모델 카드에 문서화된 범위), 그리고 모델이 참조하는 데이터셋.

모델·데이터셋 — 모델 카드와 공개 4축

AI G7 최소 요소 검사는 위의 적합성 섹션 안에 나타납니다. SBOM에 모델 컴포넌트가 있을 때만 추가됩니다.

스캔 관리

홈 화면은 로고나 상단 바의 스캔 관리(시계) 메뉴로 열리며, 이 머신에 저장된 모든 지난 스캔을 나열합니다. 출력 베이스 아래 각 스캔의 {Project}_{Version}/ 하위 폴더가 하나의 항목입니다. 검색창과 스캔 유형 필터 칩(존재하는 유형만, 곧 소스, 컨테이너, RootFS, 펌웨어, AI 모델, SBOM)으로 목록을 좁히고, 요약 카드 세 개가 전체 스캔 수, 위험 주의 건수(그 카드를 누르면 위험 항목만 필터됨), 프로젝트 수를 보여줍니다. 표는 스캔, 생성 시각, 컴포넌트, 최고 심각도로 정렬됩니다. 행을 클릭하면 결과를 다시 열고, 삭제하면 그 하위 폴더가 제거됩니다. 계정이나 데이터베이스 없이 로컬 파일만 사용합니다.

참고

펌웨어 업로드 타일은 펌웨어 도구가 포함된 이미지에서 UI를 실행할 때만 활성화됩니다. SBOM_SCANNER_IMAGE=ghcr.io/sktelecom/bomlens-firmware:latest ./scripts/scan-sbom.sh --ui

참고: UI의 소스 스캔(현재 폴더 / ZIP / GitHub)은 컨테이너 안에서 syft로 디렉터리를 분석합니다. 락 파일(package-lock.json, go.sum 등)이나 설치된 의존성이 있어야 구성요소가 잡힙니다. 매니페스트만 있고 더 깊은 해석이 필요하면 CLI 소스 모드(cdxgen)를 사용하세요.

포트 변경 / 충돌 시: 기본 포트(8080)를 다른 서비스가 쓰고 있으면 다른 포트를 지정합니다.

UI_PORT=9090 ./scripts/scan-sbom.sh --ui      # http://localhost:9090

참고: UI가 쉬워도 Docker 엔진이 설치·실행되어 있어야 합니다(무료: WSL2 + docker-ce, 또는 Rancher Desktop). 런처가 Docker 미설치·중지를 감지해 설치 링크를 보여줍니다.