[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