
vet v1.18.1
์ ์ฑ ์คํ์์ค ํจํค์ง๋ก๋ถํฐ ๋ณดํธ ๐ค
๋น ๋ฅธ ์์ โข ๋ฌธ์ โข ์ปค๋ฎค๋ํฐ
[!NOTE]
vet๋ Agent Skills์ฉ ํน์ ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค. GitHub ์ ์ฅ์์ ํธ์คํ ๋ Agent Skill์ ์ค์บํ๋ ค๋ฉดvet scan --agent-skill <owner/repo>๋ฅผ ์คํํ์ธ์.
์ vet์ธ๊ฐ?
ํ๋ ์ํํธ์จ์ด์ 70-90%๋ ์คํ์์ค ์ฝ๋์ ๋๋ค โ ์์ ํ์ง ์ด๋ป๊ฒ ์ ์ ์์๊น์?
๊ธฐ์กด SCA ๋๊ตฌ๋ CVE ๋ ธ์ด์ฆ์ ์๋๋นํ๊ฒ ๋ง๋ญ๋๋ค. vet๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค:
- ์๋ AI ํ์ง โ ๋ค์ํ ๋๊ตฌ์ ์ค์ ์์ AI ๋๊ตฌ ์ฌ์ฉ ์ ํธ๋ฅผ ๋ฐ๊ฒฌํฉ๋๋ค
- ์ ์ฑ์ฝ๋ ๋ฐฐํฌ ์ ์ฐจ๋จ โ ์ ์ ๋ฐ ๋์ ๋์ ๋ถ์์ ํตํ ์ ๋ก๋ฐ์ด ํ์ง(SafeDep Cloud ์ก์ธ์ค ํ์)
- ์ทจ์ฝ์ ๋ ธ์ด์ฆ ์ ๊ฑฐ โ ์ค์ ์ฝ๋ ์ฌ์ฉ ํํฉ์ ๋ถ์ํ์ฌ ์ค์ํ ์ํ๋ง ํ๋ฉดํํฉ๋๋ค
- ์ฝ๋ํ ์ ์ฑ ์ํ โ ๋ณด์, ๋ผ์ด์ ์ค ๋ฐ ํ์ง ์๊ตฌ์ฌํญ์ CEL ํํ์์ผ๋ก ์ ์ํฉ๋๋ค
- CI/CD ํตํฉ โ CI/CD์์ ์ ๋ก ๊ตฌ์ฑ ๋ณด์ ๊ฐ๋๋ ์ผ ์ ๊ณต
์คํ์์ค์๋ ๋ฌด๋ฃ์ ๋๋ค. ํธ์คํ SaaS๋ SafeDep์์ ์ด์ฉํ ์ ์์ต๋๋ค.
๋น ๋ฅธ ์์
๋ช ์ด ๋ง์ ์ค์น:
# macOS & Linux
brew install safedep/tap/vet
# Using npm
npm install -g @safedep/vet
๋๋ ์ฌ์ ๋น๋๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ค์ด๋ก๋ํ์ธ์.
๋ฐ๋ก ์์ํ๊ธฐ:
# Scan for malware in your dependencies
vet scan -D . --malware-query
# Fail CI on critical vulnerabilities
vet scan -D . --filter 'vulns.critical.exists(p, true)' --filter-fail
์ํคํ ์ฒ
vet๋ ํ์ดํ๋ผ์ธ ์ํคํ
์ฒ๋ฅผ ๋ฐ๋ฆ
๋๋ค: **๋ฆฌ๋(reader)**๊ฐ ๋ค์ํ ์์ค(๋๋ ํฐ๋ฆฌ, ์ ์ฅ์, ์ปจํ
์ด๋ ์ด๋ฏธ์ง, SBOM)์์ ํจํค์ง ๋งค๋ํ์คํธ๋ฅผ ์์งํ๊ณ , **์ธ๋ฆฌ์ฒ(enricher)**๊ฐ SafeDep Cloud์ ์ทจ์ฝ์ ยท์
์ฑ์ฝ๋ยท์ค์ฝ์ด์นด๋ ๋ฐ์ดํฐ๋ก ๊ฐ ํจํค์ง๋ฅผ ๋ณด๊ฐํ๋ฉฐ, CEL ์ ์ฑ
์์ง์ด ๋ณด๊ฐ๋ ๋ฐ์ดํฐ์ ๋ํด ๋ณด์ ์ ์ฑ
์ ํ๊ฐํ๊ณ , **๋ฆฌํฌํฐ(reporter)**๊ฐ SARIF, JSON, Markdown๊ณผ ๊ฐ์ ํ์์ผ๋ก ์คํ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค.
์ํคํ ์ฒ ๋ค์ด์ด๊ทธ๋จ ๋ณด๊ธฐ
graph TB
subgraph "OSS Ecosystem"
R1[npm Registry]
R2[PyPI Registry]
R3[Maven Central]
R4[Other Registries]
end
subgraph "SafeDep Cloud"
M[Continuous Monitoring]
A[Real-time Code Analysis<br/>Malware Detection]
T[Threat Intelligence DB<br/>Vulnerabilities โข Malware โข Scorecard]
end
subgraph "vet CLI"
S[Source Repository<br/>Scanner]
P[CEL Policy Engine]
O[Reports & Actions<br/>SARIF/JSON/CSV]
end
R1 -->|New Packages| M
R2 -->|New Packages| M
R3 -->|New Packages| M
R4 -->|New Packages| M
M -->|Behavioral Analysis| A
A -->|Malware Signals| T
S -->|Query Package Info| T
T -->|Security Intelligence| S
S -->|Analysis Results| P
P -->|Policy Decisions| O
style M fill:#7CB9E8,stroke:#5A8DB8,color:#1a1a1a
style A fill:#E8A87C,stroke:#B88A5A,color:#1a1a1a
style T fill:#7CB9E8,stroke:#5A8DB8,color:#1a1a1a
style S fill:#90C695,stroke:#6B9870,color:#1a1a1a
style P fill:#E8C47C,stroke:#B89B5A,color:#1a1a1a
style O fill:#B8A3D4,stroke:#9478AA,color:#1a1a1a
์ฃผ์ ๊ธฐ๋ฅ
์ ์ฑ ํจํค์ง ํ์ง
SafeDep Cloud ๊ธฐ๋ฐ ์ค์๊ฐ ์ ์ฑ ํจํค์ง ๋ณดํธ. ์คํ์์ค ํ๋ก์ ํธ์๋ ๋ฌด๋ฃ์ ๋๋ค. ๋ฅ๋์ ์ฝ๋ ๋ถ์์ ํตํด ์ ๋ก๋ฐ์ด ์ ์ฑ์ฝ๋๋ฅผ ํ์งํฉ๋๋ค.
์ทจ์ฝ์ ๋ถ์
๋
ธ์ด์ฆ๋ฅผ ์์๋ด๋ ์์กด์ฑ ์ค์บ๋์ ๋ฌ๋ฆฌ, vet๋ ์ค์ ์ฝ๋ ์ฌ์ฉ ํํฉ์ ๋ถ์ํ์ฌ ์ค์ ์ํ์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ์์กด์ฑ ์ฌ์ฉ ์ฆ๊ฑฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฝ๋ํ ์ ์ฑ
CEL ํํ์์ผ๋ก ๋ณด์ ์ ์ฑ ์ ์ ์ํ์ฌ ์ปจํ ์คํธ๋ณ ์๊ตฌ์ฌํญ์ ์ ์ฉํฉ๋๋ค:
# Block packages with critical CVEs
vet scan --filter 'vulns.critical.exists(p, true)' --filter-fail
# Enforce license compliance
vet scan --filter 'licenses.contains_license("GPL-3.0")' --filter-fail
# Require minimum OpenSSF Scorecard scores
vet scan --filter 'scorecard.scores.Maintained < 5' --filter-fail
๋ค์ค ์ํ๊ณ ์ง์
ํจํค์ง ๋งค๋์ : npm, PyPI, Maven, Go, Ruby, Rust, PHP ์ปจํ ์ด๋ ์ด๋ฏธ์ง: Docker, OCI SBOM ํ์: CycloneDX, SPDX ์์ค ์ ์ฅ์: GitHub, GitLab
์ ์ฑ ํจํค์ง ํ์ง
์ ์ ๋ฐ ๋์ ๋์ ๋ถ์์ผ๋ก ์ง์์ ์ผ๋ก ๊ฐฑ์ ๋๋ SafeDep ์ํ ์ธํ ๋ฆฌ์ ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐํํ์ฌ ์ ์ฑ ํจํค์ง์ ๋ํ ์ค์๊ฐ ๋ณดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋น ๋ฅธ ์ค์
# Query known malicious packages (no API key needed)
vet scan -D . --malware-query
[!NOTE]
--malwareํ๋๊ทธ๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค(deprecated). ์ฃผ๋ฌธํ(on-demand) ๋ฅ๋ ์ค์บ์ SafeDep์ ์ํ ์ธํ ๋ฆฌ์ ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ ๋ฐฉ์์ผ๋ก ๋์ฒด๋์์ต๋๋ค.--malware๋ ์ด์ --malware-query์ ๋์ผํ๊ฒ ๋์ํ๋ฉฐ ํ์ ํธํ์ฑ์ ์ํด ์ ์ง๋ฉ๋๋ค.
ํ์ง ์ฌ๋ก:
- MAL-2025-3541: express-cookie-parser
- MAL-2025-4339: eslint-config-airbnb-compat
- MAL-2025-4029: ts-runtime-compat-check
์ฃผ์ ๋ณด์ ๊ธฐ๋ฅ:
- SafeDep์ ์๋ ค์ง ์ ์ฑ ํจํค์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ค์๊ฐ ์กฐํ
- ์ ์ ๋ฐ ๋์ ๋ถ์์ ํ์ฉํ ๋์ ๋ถ์(SafeDep Cloud์์ ์ง์์ ์ผ๋ก ์ํ)
- ์ํฅ๋๊ฐ ๋์ ๊ฒฐ๊ณผ์ ๋ํ ์ธ๊ฐ ๊ฐ์ (Human-in-the-loop) ํธ๋ฆฌ์์ง
- ํฌ๋ช ์ฑ์ ์ํ ๊ณต๊ฐ ๋ถ์ ๋ก๊ทธ
๊ณ ๊ธ ์ฌ์ฉ๋ฒ
# Specialized scans
vet scan --vsx --malware-query # VS Code extensions
vet scan -D .github/workflows --malware-query # GitHub Actions
vet scan --image nats:2.10 --malware-query # Container images
[!NOTE]
vet inspect malware๋ช ๋ น(๋จ์ผ ํจํค์ง์ ๋ํ ์ฃผ๋ฌธํ ๋ถ์)์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ(deprecated) ํฅํ ๋ฆด๋ฆฌ์ค์์ ์ ๊ฑฐ๋ ์์ ์ ๋๋ค. SafeDep์ ์๋ ค์ง ์ ์ฑ ํจํค์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ํจํค์ง๋ฅผ ๊ฒ์ฌํ๋ ค๋ฉดvet scan --malware-query๋ฅผ ์ฌ์ฉํ์ธ์.
ํ๋ก๋์ ์ง์ ํตํฉ
GitHub Actions
CI/CD์์ ์ ๋ก ๊ตฌ์ฑ ๋ณด์ ๊ฐ๋๋ ์ผ:
- uses: safedep/vet-action@v1
with:
policy: ".github/vet/policy.yml"
vet-action ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
GitLab CI
vet CI Component๋ฅผ ์ฌ์ฉํ ์ํฐํ๋ผ์ด์ฆ ์ค์บ๋:
include:
- component: gitlab.com/safedep/ci-components/vet/scan@main
์ปจํ ์ด๋ ํตํฉ
์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋์๋ vet๋ฅผ ์คํํ์ธ์:
docker run --rm -v $(pwd):/app ghcr.io/safedep/vet:latest scan -D /app --malware-query
์ค์น
Homebrew (๊ถ์ฅ)
brew install safedep/tap/vet
npm
npm install @safedep/vet
์ง์ ๋ค์ด๋ก๋
์ฌ์ ๋น๋๋ ๋ฐ์ด๋๋ฆฌ๋ releases์์ ํ์ธํ์ธ์.
Go ์ค์น
go install github.com/safedep/vet@latest
์ปจํ ์ด๋ ์ด๋ฏธ์ง
# Quick test
docker run --rm ghcr.io/safedep/vet:latest version
# Scan local directory
docker run --rm -v $(pwd):/workspace ghcr.io/safedep/vet:latest scan -D /workspace
์ค์น ํ์ธ
vet version
# Should display version and build information
๊ณ ๊ธ ๊ธฐ๋ฅ
ํฌ๊ด์ ์ธ ๋ฌธ์์์ ๋ ์์ธํ ์์๋ณด์ธ์:
- AI ์ฌ์ฉ ํ์ง - ๋ค์ํ ๋๊ตฌ์ ์ค์ ์์ AI ๋๊ตฌ ์ฌ์ฉ ์ ํธ๋ฅผ ๋ฐ๊ฒฌํฉ๋๋ค
- AI ์์ด์ ํธ ๋ชจ๋ - AI ์์ด์ ํธ๋ก vet ์คํ
- MCP ์๋ฒ - AI ์ง์ ์ฝ๋ ๋ถ์์ ์ํด vet๋ฅผ MCP ์๋ฒ๋ก ์คํํฉ๋๋ค
- ๋ฆฌํฌํ - SARIF, JSON, CSV, HTML, Markdown ํ์
- SBOM ์ง์ - CycloneDX, SPDX ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ
- ์ฟผ๋ฆฌ ๋ชจ๋ - ํ ๋ฒ ์ค์บํ๊ณ ์ฌ๋ฌ ๋ฒ ๋ถ์
- GitHub ํตํฉ - ์ ์ฅ์ ๋ฐ ์กฐ์ง ์ค์บ๋
- GitHub Actions ๊ณ ์ - ๊ณต๊ธ๋ง ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด GitHub Actions๋ฅผ ์ปค๋ฐ SHA๋ก ๊ณ ์
๊ฐ์ธ์ ๋ณด ๋ณดํธ
vet๋ ์ ํ ๊ฐ์ ์ ์ํด ์ต๋ช
์ฌ์ฉ ํ
๋ ๋ฉํธ๋ฆฌ๋ฅผ ์์งํฉ๋๋ค. ์ฌ๋ฌ๋ถ์ ์ฝ๋์ ํจํค์ง ์ ๋ณด๋ ์ ๋ ์ ์ก๋์ง ์์ต๋๋ค.
# Disable telemetry (optional)
export VET_DISABLE_TELEMETRY=true
์ปค๋ฎค๋ํฐ ๋ฐ ์ง์
๋์ ๋ฐ๊ธฐ ๋ฐ ์์ด๋์ด ๊ณต์
- ์ธํฐ๋ํฐ๋ธ ํํ ๋ฆฌ์ผ - vet๋ฅผ ์ง์ ์ค์ตํด ๋ณด์ธ์
- ์ ์ฒด ๋ฌธ์ - ์ข ํฉ ๊ฐ์ด๋
- Discord ์ปค๋ฎค๋ํฐ - ์ค์๊ฐ ์ง์
- ์ด์ ํธ๋์ปค - ๋ฒ๊ทธ ์ ๊ณ ๋ฐ ๊ธฐ๋ฅ ์์ฒญ
- ๊ธฐ์ฌ ๊ฐ์ด๋ - ๊ฐ๋ฐ์ ์ฐธ์ฌํ์ธ์
Star ํ์คํ ๋ฆฌ
์คํ์์ค๋ก ๊ตฌ์ถ
vet๋ ๊ฑฐ์ธ์ ์ด๊นจ ์์ ์ ์์ต๋๋ค:
OSV โข OpenSSF Scorecard โข SLSA โข OSV-SCALIBR โข Syft
๊ธฐ์ฌ์
๋ชจ๋ ๊ธฐ์ฌ์๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค โค๏ธ
์ง๊ธ ๋ฐ๋ก ๊ณต๊ธ๋ง์ ๋ณดํธํ์ธ์. ์ ์ฅ์์ Star๋ฅผ ๋๋ฅด๊ณ ์์ํ์ธ์!
SafeDep๊ณผ ์คํ์์ค ์ปค๋ฎค๋ํฐ๊ฐ ์ฌ๋์ ๋ด์ ๋ง๋ค์์ต๋๋ค
