Google์€ ClusterFuzzLite ํผ์ง• ํ…Œ์ŠคํŠธ ์‹œ์Šคํ…œ์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€