์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์œ„ํ•ด Linux ์ปค๋„ ์Šคํƒ ์ฃผ์†Œ๋ฅผ ๋ฌด์ž‘์œ„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ํŒจ์น˜

kernel.org์˜ ์ „ ์ตœ๊ณ  ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž์ด์ž Ubuntu ๋ณด์•ˆ ํŒ€์˜ ๋ฆฌ๋”์ด์ž ํ˜„์žฌ Google์—์„œ Android ๋ฐ ChromeOS ๋ณด์•ˆ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋Š” Kees Cook์€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ปค๋„ ์Šคํƒ์˜ ์˜คํ”„์…‹์„ ๋ฌด์ž‘์œ„๋กœ ์ง€์ •ํ•˜๋Š” ํŒจ์น˜ ์„ธํŠธ๋ฅผ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒจ์น˜๋Š” ์Šคํƒ ๋ฐฐ์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ปค๋„ ๋ณด์•ˆ์„ ํ–ฅ์ƒ์‹œ์ผœ ์Šคํƒ์— ๋Œ€ํ•œ ๊ณต๊ฒฉ์„ ํ›จ์”ฌ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ณ  ๋œ ์„ฑ๊ณตํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๊ตฌํ˜„์—์„œ๋Š” ARM64 ๋ฐ x86/x86_64 ํ”„๋กœ์„ธ์„œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํŒจ์น˜์˜ ์›๋ž˜ ์•„์ด๋””์–ด๋Š” PaX RANDKSTACK ํ”„๋กœ์ ํŠธ์— ์†ํ•ฉ๋‹ˆ๋‹ค. 2019๋…„์— Intel์˜ ์—”์ง€๋‹ˆ์–ด์ธ Elena Reshetova๋Š” ๊ธฐ๋ณธ Linux ์ปค๋„์— ํฌํ•จํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์ด ์•„์ด๋””์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์ปค๋„์˜ ๋ฉ”์ธ ๋ฒ„์ „์— ์ ํ•ฉํ•œ ๊ตฌํ˜„์„ ์ œ์‹œํ•œ Kees Cook์ด ์ฃผ๋„๊ถŒ์„ ์žก์•˜์Šต๋‹ˆ๋‹ค. ํŒจ์น˜๋Š” 5.13 ๋ฆด๋ฆฌ์Šค์˜ ์ผ๋ถ€๋กœ ํฌํ•จ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋„ ๋ช…๋ น์ค„ ๋งค๊ฐœ๋ณ€์ˆ˜ โ€œrandomize_kstack_offset=on/offโ€์™€ CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT ์„ค์ •์ด ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“œ ํ™œ์„ฑํ™”์— ๋”ฐ๋ฅธ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์•ฝ 1%์˜ ์„ฑ๋Šฅ ์†์‹ค๋กœ ์ถ”์ •๋ฉ๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ๋ณดํ˜ธ์˜ ํ•ต์‹ฌ์€ ๊ฐ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•ด ์ž„์˜์˜ ์Šคํƒ ์˜คํ”„์…‹์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ฃผ์†Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•œ ํ›„์—๋„ ๋‹ค์Œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์Šคํƒ์˜ ๊ธฐ๋ณธ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์˜ ์Šคํƒ ๋ ˆ์ด์•„์›ƒ์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. PaX RANDKSTACK ๊ตฌํ˜„๊ณผ ๋‹ฌ๋ฆฌ ์ปค๋„์— ํฌํ•จ๋˜๋„๋ก ์ œ์•ˆ๋œ ํŒจ์น˜์—์„œ๋Š” ์ดˆ๊ธฐ ๋‹จ๊ณ„(cpu_current_top_of_stack)๊ฐ€ ์•„๋‹Œ pt_regs ๊ตฌ์กฐ๋ฅผ ์„ค์ •ํ•œ ํ›„์— ๋ฌด์ž‘์œ„ํ™”๊ฐ€ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ptrace ๊ธฐ๋ฐ˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์ž‘์œ„ ์˜คํ”„์…‹์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์žฅ๊ธฐ ์‹คํ–‰ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์ค‘.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€