Google์ ์ง์์ ์ธ ํตํฉ ์์คํ ์ด ์๋ํ๋ ๋์ ์ ์ฌ์ ์ธ ์ทจ์ฝ์ ์ ์กฐ๊ธฐ์ ๊ฐ์งํ๊ธฐ ์ํด ์ฝ๋ ํผ์ง ํ ์คํธ๋ฅผ ๊ตฌ์ฑํ ์ ์๋ ClusterFuzzLite ํ๋ก์ ํธ๋ฅผ ๋์ ํ์ต๋๋ค. ํ์ฌ ClusterFuzz๋ GitHub Actions, Google Cloud Build ๋ฐ Prow์์ ํ ์์ฒญ์ ํผ์ฆ ํ ์คํธ๋ฅผ ์๋ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ง๋ง ํฅํ ๋ค๋ฅธ CI ์์คํ ์ ๋ํ ์ง์๋ ์์๋ฉ๋๋ค. ์ด ํ๋ก์ ํธ๋ ํด๋ฌ์คํฐ ํผ์ง ํ ์คํธ ์์ ์ ์กฐ์ ํ๊ธฐ ์ํด ์์ฑ๋ ClusterFuzz ํ๋ซํผ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ Apache 2.0 ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
Google์ด 2016๋ ์ OSS-Fuzz ์๋น์ค๋ฅผ ๋์ ํ ํ 500๊ฐ ์ด์์ ์ค์ํ ์คํ ์์ค ํ๋ก์ ํธ๊ฐ ์ง์์ ์ธ ํผ์ง ํ ์คํธ ํ๋ก๊ทธ๋จ์ ์น์ธ๋์์ต๋๋ค. ์ํ๋ ํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก 6500๊ฐ ์ด์์ ํ์ธ๋ ์ทจ์ฝ์ ์ด ์ ๊ฑฐ๋์์ผ๋ฉฐ 21๊ฐ ์ด์์ ์ค๋ฅ๊ฐ ์์ ๋์์ต๋๋ค. ClusterFuzzLite๋ ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒํ ๋จ๊ณ์์ ์กฐ๊ธฐ์ ๋ฌธ์ ๋ฅผ ์๋ณํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ ํผ์ง ํ ์คํธ ๋ฉ์ปค๋์ฆ์ ๊ณ์ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. ClusterFuzzLite๋ ์ด๋ฏธ systemd ๋ฐ ์ปฌ ํ๋ก์ ํธ์ ๋ณ๊ฒฝ ๊ฒํ ํ๋ก์ธ์ค์ ๊ตฌํ๋์ด ์์ผ๋ฉฐ, ์๋ก์ด ์ฝ๋๋ฅผ ํ์ธํ๋ ์ด๊ธฐ ๋จ๊ณ์์ ์ฌ์ฉ๋๋ ์ ์ ๋ถ์๊ธฐ ๋ฐ ๋ฆฐํฐ์์ ๋์น ์ค๋ฅ๋ฅผ ์๋ณํ ์ ์๊ฒ ํ์ต๋๋ค.
ClusterFuzzLite๋ C, C++, Java(๋ฐ ๊ธฐํ JVM ๊ธฐ๋ฐ ์ธ์ด), Go, Python, Rust ๋ฐ Swift์์ ํ๋ก์ ํธ ๊ฒํ ๋ฅผ ์ง์ํฉ๋๋ค. ํผ์ง ํ ์คํธ๋ LibFuzzer ์์ง์ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. AddressSanitizer, MemorySanitizer ๋ฐ UBSan(UndefineBehaviorSanitizer) ๋๊ตฌ๋ฅผ ํธ์ถํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ ๋ฐ ์ด์ ํ์์ ์๋ณํ ์๋ ์์ต๋๋ค.
ClusterFuzzLite์ ์ฃผ์ ๊ธฐ๋ฅ: ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋น ๋ฅด๊ฒ ํ์ธํ์ฌ ์ฝ๋ ์น์ธ ์ ์ ์ค๋ฅ๋ฅผ ์ฐพ์ต๋๋ค. ์ถฉ๋ ์ํฉ์ ๋ํ ๋ณด๊ณ ์ ๋ค์ด๋ก๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ ํ ํ๋ฉดํ๋์ง ์์ ๋ ๊น์ ์ค๋ฅ๋ฅผ ์๋ณํ๊ธฐ ์ํด ๊ณ ๊ธ ํผ์ง ํ ์คํธ๋ก ์ด๋ํ ์ ์๋ ๊ธฐ๋ฅ ํ ์คํธ ์ค ์ฝ๋ ์ ์ฉ ๋ฒ์๋ฅผ ํ๊ฐํ๊ธฐ ์ํ ์ ์ฉ ๋ฒ์ ๋ณด๊ณ ์ ์์ฑ ํ์ํ ๊ธฐ๋ฅ์ ์ ํํ ์ ์๋ ๋ชจ๋์ ์ํคํ ์ฒ์ ๋๋ค.
ํผ์ง ํ
์คํธ์๋ ์ค์ ๋ฐ์ดํฐ์ ๊ฐ๊น์ด ๋ชจ๋ ์ข
๋ฅ์ ์์ ์กฐํฉ์ ์
๋ ฅ ๋ฐ์ดํฐ(์: ์์ ํ๊ทธ ๋งค๊ฐ๋ณ์๊ฐ ์๋ HTML ํ์ด์ง, ๋น์ ์์ ์ธ ์ ๋ชฉ์ด ์๋ ์์นด์ด๋ธ ๋๋ ์ด๋ฏธ์ง ๋ฑ)์ ์คํธ๋ฆผ์ ์์ฑํ๊ณ ๊ธฐ๋ก์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ ๊ธฐ์ตํด ๋ด
์๋ค. ์ฒ๋ฆฌ ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ํ์ค๊ฐ ์ถฉ๋ํ๊ฑฐ๋ ์์ ์๋ต๊ณผ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ ์ด ๋์์ ๋ฒ๊ทธ๋ ์ทจ์ฝ์ ์ ๋ํ๋ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์ถ์ฒ : opennet.ru