๐กangr-PT

๊ฐ์
AngrPT์ ํต์ฌ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
IOCTL RIP๋ฒ์ ์ถ์
IOCTL ์ ์ฝ์กฐ๊ฑด ๋ถ์
์ ์ญ๋ณ์ ์ข ์์ฑ ๋ถ์

IOCTL RIP ์ถ์
Kernel Driver๋ IoControl์ ์ด์ฉํ์ฌ ์ ์ ์ ์ํธ์์ฉ์ ํ๊ธฐ ๋๋ฌธ์ ๋ถ์์ ์์ด์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋๋ผ์ด๋ฒ๊ฐ ํน์ IoControl Code๋ฅผ ํตํด ์ด๋ ํ ๋์์ ํ๋์ง ์๋ณํ๋ ๊ฒ์ ๋๋ค.
Kernel Driver๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง์ํ๊ธฐ ์ํด์ ์ ๊ฒ๋ ๋ช ๊ฐ, ๋ง๊ฒ๋ ์์ญ๊ฐ์ IoControl Code๋ฅผ ๊ฐ์ง๋๋ค.
IDA Hex Ray๊ฒฐ๊ณผ ์๋์ ๊ฐ์ด switch / case๋ฌธ์ผ๋ก ํํ๋๋ ๊ฒฝ์ฐ๋ ์์์ง๋ง,

๋๋ถ๋ถ์ Driver์ฝ๋๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ IoControl Code๊ฐ ํน์ ๋ณ์์์ Offset์ ๋นผ๋์์ผ๋ก ๊ณ์ฐ์ด ๋์ด ๋ถ์์ ํฐ ์ด๋ ค์์ด ์์์ต๋๋ค.

๋๋ฌธ์ ์ ํฌ๋ ๊ฐ IoControl Code๋ฅผ ์๋ณํ๊ณ IDA Hex Ray๊ฒฐ๊ณผ์์ IoControl Code๋ณ ๋ฐ์ด๋๋ฆฌ์์ Offset์ ์ ์ํ์ฌ ๋ถ์๊ฐ์ ํธ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ถ์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ฉ๋๋ค.

IOCTL ์ ์ฝ์กฐ๊ฑด ๋ถ์
๊ฐ IoControl Code์๋ ์๋ก ๋ค๋ฅธ ์ ์ฝ ์กฐ๊ฑด์ด ์๊ณ , ๊ฐ ์ ์ฝ์กฐ๊ฑด์ ๋ถ์ํ๋ ๋ฐ์๋ ์๊ฐ์ด ์๋นํ ์์๋ฉ๋๋ค. ์ด๋ฌํ ์๊ฐ์๋ชจ๋ฅผ ์ค์ด๊ธฐ ์ํด Symbolic Execution์ ์ ์ฉํ์ฌ IRP๊ตฌ์กฐ์ฒด์ IoStatus Code๋ฅผ Symbolic Variable๋ก ๋ง๋ฆ์ผ๋ก์จ ๊ฐ IOCTL์ ์ ์ฝ์กฐ๊ฑด์ ์๋์ผ๋ก ๋ถ์ํ๋๋ก ํ์์ต๋๋ค.
๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ์ฌ Fuzzing ๊ณผ์ ์ค์ ์ ํจํ ์ฝ๋ ๋ถ๋ถ์ ์คํํ๋๋ก ํ์๊ณ , ๋ ๋์ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ป๊ณ , Crash๋ฅผ ๋ฐ๊ฒฌํ ํ๋ฅ ์ ๋์ผ ์ ์์ต๋๋ค.
์ ์ฝ์กฐ๊ฑด์ ๊ตฌํ๊ธฐ ์ํ ๊ธฐ์ค์ ์๋ ๊ธฐ์ค์ ๋ฐ๋ผ ํ๋จํ์์ต๋๋ค.

๋ถ์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ฉ๋๋ค.

์ ์ญ๋ณ์ ์ข
์์ฑ ๋ถ์
์ผ๋ถ Kernel Driver๋ IOCTL ๊ฐ ์ข ์์ฑ์ผ๋ก ์ธํด ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ ์กด์ฌํฉ๋๋ค.
์ด ๋ '์ข ์์ฑ'์ด๋ ์ด์ ์ฝ๋์ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ค์ ์ฝ๋์ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด case C: ์์ ๋ฐ์ํ๋ BUG(); ๊ฐ ํธ๋ฆฌ๊ฑฐ๋๊ธฐ ์ํด์๋ case A:, case B:๊ฐ ์์ฐจ์ ์ผ๋ก ๋จผ์ ํธ๋ฆฌ๊ฑฐ๋์์ด์ผ ํฉ๋๋ค.

Kernel Driver์์์ด๋ฌํ ์ข ์์ฑ์ ๋์ผํ ์ ์ญ๋ณ์๋ฅผ ๊ณต์ ํ๋ค๋ ํน์ง์์ ๋ฐ์ํ์์ต๋๋ค. MS Fuzzer์์๋ Symbolic Execution์ ์ ์ฉํ์ฌ IOCTL์ ๊ทธ๋ฃนํํ์๊ณ , ์ด๋ฅผ ๊ณ ๋ คํ์ฌ Fuzzingํ๋๋ก ์ ์ฉํ์์ต๋๋ค.
๋ถ์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ฉ๋๋ค.

Last updated