๐Ÿ˜ก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