[Rust] cargo-fuzz: Fuzzing Test

์ด์ „ ํฌ์ŠคํŠธ
https://blog.naver.com/sssang97/221718437043
fuzzing ํ…Œ์ŠคํŠธ๋Š” ๋ฌด์ž‘์œ„์˜ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

cargo-fuzz๋Š” libFuzzer์™€ llvm ์ˆ˜์ค€ ์ง€์›์„ ์‚ฌ์šฉํ•ด์„œ fuzzing ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ, ํ˜„์žฌ Windows์—์„œ๋Š” ์ง€์›๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋ฆฌ๋ˆ…์Šค์™€ MacOS์—์„œ ์ง€์›๋œ๋‹ค.




์‚ฌ์ „ ์กฐ๊ฑด

๋ฆฌ๋ˆ…์Šค๋‚˜ MacOS์—ฌ์•ผ๋งŒ ํ•œ๋‹ค. Windows๋Š” WSL๋ฅผ ์จ๋„ ์•ˆ๋œ๋‹ค.

nightly ๋ฒ„์ „์ด ํ•„์š”ํ•˜๋‹ค.

rustup default nightly

๊ทธ๋ฆฌ๊ณ  C++11์„ ์ง€์›ํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋„ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
๋ณดํ†ต์€ g++์ด ๋˜๊ฒ ๋‹ค.

sudo apt-get install g++

๊ทธ๋ฆฌ๊ณ  cli ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

cargo install cargo-fuzz

์ด๋ ‡๊ฒŒ ์‹คํ–‰์ด ๋˜๋ฉด ์ž˜ ๊น”๋ฆฐ ๊ฒƒ์ด๋‹ค.




fuzz ์„ค์ •

์šฐ์„  cargo fuzz init์œผ๋กœ fuzz ๊ตฌ์„ฑ์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

๊ทธ๋Ÿผ list๋กœ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„ ๊ตฌ์„ฑ์ด ํ•˜๋‚˜ ์ƒ๊ฒผ์„ ๊ฒƒ์ด๊ณ 

์‹ค์ œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—๋„ ์ƒ๊ฒจ๋‚ฌ์„ ๊ฒƒ์ด๋‹ค.

์ด์ œ ์ €๊ธฐ์—๋‹ค๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ๋„์šฐ๋ฉด ๋œ๋‹ค.
๋‹จ์œ„ํ…Œ์ŠคํŠธ ์งœ๋“ฏ์ด ์‹คํŒจํ•˜๋ฉด panic์„ ๋‚ ๋ฆฌ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ ์‹คํ–‰์€ ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. run ๋ช…๋ น์œผ๋กœ fuzz ๊ตฌ์„ฑ์„ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๊ณ„์†ํ•ด์„œ ๋ฌด์ž‘์œ„ ๊ฐ’์„ ์‘ค์…”๋„ฃ์–ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฐ˜๋ณตํ•  ๊ฒƒ์ธ๋ฐ, ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋‹ˆ ํ…Œ์ŠคํŠธ๋Š” ๋‹ค ํ†ต๊ณผ๋  ๊ฒƒ์ด๋‹ค.

์ด์ œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ๋ฒˆ ์ž‘์„ฑํ•ด๋ณด์ž.
์ž˜๋ชป๋œ ๋กœ์ง์„ ๊ฐ€์ง„ add ํ•จ์ˆ˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ €๊ฑธ ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ fuzz์— ์ ํ•ฉํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ ์šฉํ•ด๋ดค๋‹ค. ๊ตํ™˜๋ฒ•์น™์ด ์ž˜ ์ ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ € fuzz_target์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” ํƒ€์ž…์„ ์ ๋‹นํžˆ ์•„๋ฌด๊ฑฐ๋‚˜ ๋„ฃ์–ด๋„ ๊ทธ ํƒ€์ž…์— ๋งž๋Š” ๋ฌด์ž‘์œ„ ๊ฐ’์„ ์•Œ์•„์„œ ๋„ฃ์–ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ํ•ด๋ณด๋ฉด

๋‹น์—ฐํžˆ ์‹คํŒจํ•  ๊ฒƒ์ด๋‹ค.
์–ด๋–ค ์ž…๋ ฅ๊ฐ’์—์„œ ์‹คํŒจํ–ˆ๋Š”์ง€๋„ ์•Œ๋ ค์ค€๋‹ค.

๋‹ค์‹œ ์ˆ˜์ •ํ•ด์„œ ํ•ด๋ณด๊ฒ ๋‹ค.
์ด์ œ๋Š” ๋ ๊นŒ?

์•ˆ๋œ๋‹ค.
์ € 2๊ฐœ์˜ ์ž…๋ ฅ๊ฐ’์„ ๋”ํ•ด๋ณด๋ฉด, ์˜ค๋ฒ„ํ”Œ๋กœ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ •๋ง ์•ˆ์ „ํ•˜๊ฒŒ add๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ์—ฌ์•ผ ํ•  ๊ฒƒ์ด๋‹ค. checked_add๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜..

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ํŒจ๋‹‰ ์—†์ด ํ†ต๊ณผ๋  ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ๋А๋‚Œ์œผ๋กœ ์“ฐ๋ฉด ๋œ๋‹ค.



์ฐธ์กฐ
https://rust-fuzz.github.io/book/cargo-fuzz/setup.html