AngrPT์ ํต์ฌ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
IOCTL RIP๋ฒ์ ์ถ์
IOCTL ์ ์ฝ์กฐ๊ฑด ๋ถ์
์ ์ญ๋ณ์ ์ข ์์ฑ ๋ถ์
๋ง์ ๋๋ผ์ด๋ฒ๊ฐ IoControl์ ์ด์ฉํ์ฌ ์ ์ ์ ์ํธ์์ฉ์ ํ๊ธฐ ๋๋ฌธ์ Windows Driver์ ๋ถ์์ ์์ด์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋๋ผ์ด๋ฒ๊ฐ ํน์ IoControl Code๋ฅผ ํตํด ์ด๋ ํ ๋์์ ํ๋์ง ์๋ณํ๋ ๊ฒ์ ๋๋ค.
IDA Hex Ray๊ฒฐ๊ณผ ์๋์ ๊ฐ์ด switch / case๋ฌธ์ผ๋ก ํํ๋๋ ๊ฒฝ์ฐ๋ ์์์ง๋ง, ๋๋ถ๋ถ์ Driver์ฝ๋๊ฐ ๊ฐ IoControl Code๊ฐ ํน์ ๋ณ์์์ Offset์ ๋นผ์ ๊ณ์ฐ์ด ๋์ด ๋ถ์์ ํฐ ์ด๋ ค์์ด ์์์ต๋๋ค.
๋๋ฌธ์ ์ ํฌ๋ ๊ฐ IoControl Code๋ฅผ ์๋ณํ๊ณ IDA Hex Ray๊ฒฐ๊ณผ์์ IoControl Code๋ณ ๋ฐ์ด๋๋ฆฌ์์Offset์ ์ ์ํ์ฌ ๋ถ์๊ฐ์ ํธ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋๋ผ์ด๋ฒ๊ฐ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง์ํ๊ธฐ ์ํด์๋ ์ ๊ฒ๋ ๋ช ๊ฐ ๋ง๊ฒ๋ ์์ญ๊ฐ์ IoControl Code๋ฅผ ๊ฐ์ง๋๋ค.
ex) ๋ฐฑ์ ๋๋ผ์ด๋ฒ์๊ฒฝ์ฐ 50๊ฐ ์ด์์ IOCTL์ด ์์์.
๊ฐ IoControl Code์๋ ์๋ก ๋ค๋ฅธ ์ ์ฝ ์กฐ๊ฑด์ด ์๊ณ , ๊ฐ ์ ์ฝ์กฐ๊ฑด์ ๋ถ์ํ๋ ๋ฐ์๋ ์๊ฐ์ด ์๋นํ ์์๋ฉ๋๋ค.
๋ง์ ์ ์ฝ์กฐ๊ฑด์ ๋ถ์ํ๋๋ฐ์ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด Symbolic Execution์ ์ด์ฉํ์ฌ ๊ฐ IOCTL๋ณ ์ ์ฝ์กฐ๊ฑด์ ๋ถ์ํ์ต๋๋ค.
๋ถ์๋ ์ ์ฝ์กฐ๊ฑด์ Fuzzing๊ณผ์ ์ค์ ์ ํจํ ์ฝ๋ ๋ถ๋ถ์ ์คํํ์ฌ ๋ ๋์ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ป๊ณ ๋ ๋ง์ Crash๋ฅผ ๋ฐ๊ฒฌํ ํ๋ฅ ์ ๋์ผ ์ ์์ต๋๋ค.
์ ์์ ์ธ ์ ์ฝ์กฐ๊ฑด์ ๊ตฌํ๊ธฐ ์ํ ๊ธฐ์ค์ IRP๊ตฌ์กฐ์ฒด์ IoStatus Code๋ฅผ Symbolic Variable๋ก ๋ง๋ค์ด ์๋ ๊ธฐ์ค์ ๋ฐ๋ผ ํ๋จํ์์ต๋๋ค.
100๊ฐ ์ด์์ ๋๋ผ์ด๋ฒ๋ฅผ ๋ถ์ํ๋ฉด์ IoControl Code๊ฐ์ ์ข ์์ฑ์ผ๋ก ์ธํ ๋ฒ๊ทธ ์ผ์ด์ค๋ ์์์ต๋๋ค.
์ด๋ฌํ ๋ฒ๊ทธ ์ผ์ด์ค๋ค์ ํน์ง์ ๋์ผํ ์ ์ญ๋ณ์ ๊ณต์
๋ผ๋ ํน์ง์ด ์์์ต๋๋ค.
์ ์ญ๋ณ์์ข
์์ฑ์ผ๋ก ์ธํ ๋ฒ๊ทธ ์ผ์ด์ค๋ Fuzzing ๊ณผ์ ์ค์ ์๋ณํ๊ธฐ ์ํด Angr๋ฅผ ์ด์ฉํด ๋์ผํ ์ ์ญ๋ณ์๋ฅผ ๊ณต์
ํ๋ IoControl Code๋ฅผ ๊ทธ๋ฃนํ
ํ์ต๋๋ค.
๊ทธ๋ฃนํ๋
IoControl Code๋ค์ ์ดํ Fuzzing๋จ๊ฒ์์ ์ข
์์ฑ์ ๊ณ ๋ คํ ๋ฒ๊ทธ ์ผ์ด์ค๋ฅผ ์ฐพ๋๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.