ํผ๋๋ก ๋์๊ฐ๊ธฐ
Dev.toSecurity
์๋ฌธ ์ฝ๊ธฐ
Go ๊ธฐ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ก ๊ตฌํํ ์ค์๊ฐ Transitive Dependency ๋ถ์ SBOM ์ค์บ๋
How I built an automated SBOM scanner to secure my supply chain ๐ก๏ธ
AI ์์ฝ
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 ์ํฌํ๋ก์ฐ ์ค๊ณ