ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
How I built an automated SBOM scanner to secure my supply chain ๐Ÿ›ก๏ธ
Dev.toDev.to
Security

Go ๊ธฐ๋ฐ˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋กœ ๊ตฌํ˜„ํ•œ ์‹ค์‹œ๊ฐ„ Transitive Dependency ๋ถ„์„ SBOM ์Šค์บ๋„ˆ

How I built an automated SBOM scanner to secure my supply chain ๐Ÿ›ก๏ธ

BALASANJEEV C2026๋…„ 6์›” 14์ผ2๋ถ„intermediate

Context

๊ณต๊ธ‰๋ง ๋ณด์•ˆ ๊ฐ•ํ™” ๋ฐ ๋ฒ•์  ์ค€์ˆ˜ ์š”๊ตฌ ์ฆ๊ฐ€์— ๋”ฐ๋ฅธ SBOM ๊ด€๋ฆฌ ํ•„์š”์„ฑ ์ฆ๋Œ€. ๊ธฐ์กด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์†”๋ฃจ์…˜์˜ ๊ณผ๋„ํ•œ ๋ณต์žก์„ฑ๊ณผ CLI ๋„๊ตฌ์˜ ๋‚ฎ์€ ์‚ฌ์šฉ์„ฑ์œผ๋กœ ์ธํ•œ Friction ๋ฐœ์ƒ.

Technical Solution

  • Next.js 14 App Router ๋„์ž…์„ ํ†ตํ•œ ๋น ๋ฅธ Frontend ์‘๋‹ต์„ฑ๊ณผ API Route ๊ธฐ๋ฐ˜์˜ ์‹ฌ๋ฆฌ์Šคํ•œ ์—ฐ๊ฒฐ ๊ตฌ์กฐ ์„ค๊ณ„
  • Go ์–ธ์–ด์˜ Concurrency ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ Dependency Tree๋ฅผ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ ํŒŒ์‹ฑํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ์Šค์บ๋‹ ์—”์ง„ ๊ตฌ์ถ•
  • NPM, PyPI, Maven Central ๋“ฑ ์ด๊ธฐ์ข… Registry์— ๋™์‹œ ์ ‘๊ทผํ•˜๋Š” Custom Parser ์„ค๊ณ„๋ฅผ ํ†ตํ•œ Transitive Dependency ์ถ”์ 
  • ์‹ค์‹œ๊ฐ„ CVE ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ต์ฐจ ์ฐธ์กฐ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์—ฌ ์ข…์†์„ฑ ํŠธ๋ฆฌ ๋‚ด ๋ณด์•ˆ ์ทจ์•ฝ์  ์ฆ‰๊ฐ ์‹๋ณ„
  • CycloneDX 1.5 ๋ฐ SPDX 2.3 ํ‘œ์ค€ ๊ทœ๊ฒฉ์˜ JSON ํŒŒ์ผ ์ƒ์„ฑ ๊ธฐ๋Šฅ์„ ํ†ตํ•œ ๊ธ€๋กœ๋ฒŒ ์ปดํ”Œ๋ผ์ด์–ธ์Šค ๋Œ€์‘

1. ๋Œ€๊ทœ๋ชจ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์žฌ๊ท€์  ํƒ์ƒ‰ ์‹œ Go์˜ Goroutine์„ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ฒ€ํ† 

2. ์™ธ๋ถ€ Registry API ํ†ตํ•ฉ ์‹œ ํ‘œ์ค€ ๊ทœ๊ฒฉ(CycloneDX, SPDX)์„ ์ค€์ˆ˜ํ•˜์—ฌ ์ƒํ˜ธ์šด์šฉ์„ฑ ํ™•๋ณด

3. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋‹จ์ˆœ URL ์ž…๋ ฅ๋งŒ์œผ๋กœ ๋ถ„์„์ด ์™„๋ฃŒ๋˜๋Š” Frictionless ์›Œํฌํ”Œ๋กœ์šฐ ์„ค๊ณ„

์›๋ฌธ ์ฝ๊ธฐ