OpenBSD์˜ W^X ๋ณด์•ˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐ•ํ™”ํ•  ๊ณ„ํš

ํ…Œ์˜ค ๋ฐ ๋ผํŠธ ๊ณต์œ  ๋œ W^X(Write XOR Execute) ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐ•ํ™”ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ํ•ต์‹ฌ์€ ์“ฐ๊ธฐ์™€ ์‹คํ–‰์„ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€์— ๋™์‹œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์“ฐ๊ธฐ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ํ›„์—๋งŒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ์‹คํ–‰์ด ๋น„ํ™œ์„ฑํ™”๋œ ํ›„์—๋งŒ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€์— ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. W^X ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ํฌํ•จํ•œ ์ผ๋ฐ˜์ ์ธ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋ฉฐ OpenBSD์—์„œ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ.

W^X ์ž‘์—… ์‹œ์ž‘๋ถ€ํ„ฐ JIT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ƒ๋‹นํžˆ ๋งŽ์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธธ์ด ๋ฉ€๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. JIT ๊ตฌํ˜„์€ ์„ธ ๊ฐ€์ง€ ๋ฒ”์ฃผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • W ์ƒํƒœ์™€ X ์ƒํƒœ ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ์ „ํ™˜, ์‹œ์Šคํ…œ ํ˜ธ์ถœ์˜ "๋น„์šฉ" ์ˆ˜์šฉ ์— ํ”„๋กœํ…ํŠธ.
  • ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ W ๋ฐ X ๋งคํ•‘ ์Œ ์‚ฌ์ด์— ๋ณ„์นญ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ๊ฐ€์žฅ "๋”๋Ÿฌ์šด" ์˜ต์…˜์—๋Š” ๊ธฐ๋ก๊ณผ ์‹คํ–‰์„ ๋™์‹œ์— ํ—ˆ์šฉํ•˜๋Š” W|X ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์„ธ ๋ฒˆ์งธ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ํ›จ์”ฌ ์ ๊ณ  ์ฒซ ๋ฒˆ์งธ์™€ ๋‘ ๋ฒˆ์งธ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ W|X JIT(์ฃผ๋กœ Chromium ๋ฐ Iridum)๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— "wxallowed" ํŒŒ์ผ ์‹œ์Šคํ…œ ๋งˆ์šดํŠธ ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์—๋Š” "wxneeded" ํ‘œ์‹œ๊ฐ€ ํ‘œ์‹œ๋˜์–ด ์žˆ์œผ๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€๋กœ ๋ณดํ˜ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ์•ฝ ะธ ๋ฐํžˆ๋‹ค ์‚ฌ์šฉ๋˜๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋ชฉ๋ก๊ณผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋ฅผ ๊ฐ๊ฐ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ทจ์•ฝ์  ์•…์šฉ์„ ๋”์šฑ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. MAP_STACK, ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€์—์„œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€์— ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ณต๊ฒฉ์ž๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ด์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ JIT ๊ตฌํ˜„์—์„œ ํ•„์š”ํ•œ ๊ฐ€์ ฏ์„ ์ฐพ์œผ๋ ค๊ณ  ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์Šคํ…์„ ํƒ์ง€ํ•˜๋Š” ๋” ์–ด๋ ค์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ˆ˜๋กœ ์—ฐ๊ฒฐ๋œ libc.

Chrome/Iridium ํ”„๋กœ์„ธ์Šค๋Š” ์ด๋ฏธ ์„œ์•ฝ ๋ฐ ๊ณต๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์šฐ ์•ˆ์ •์ ์œผ๋กœ ๋ณดํ˜ธ๋˜์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด write(2) ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜๋ฉด ๊ณต๊ฒฉ์ž์—๊ฒŒ ์ถ”๊ฐ€ ์–ด๋ ค์›€์„ ์•ผ๊ธฐํ•˜๋ฏ€๋กœ ๋ถ„๋ช…ํžˆ ๋ช‡ ๊ฐ€์ง€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ JIT ๊ตฌํ˜„์ด W|X ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ธฐ๋ณธ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์–ด๋ ค์›€์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ABI๊ฐ€ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ๋ณ€๊ฒฝ๋์ง€๋งŒ ์•„์ง๊นŒ์ง€ ์•„๋ฌด๋„ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•œ ์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž„ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ด๋ฏธ OpenBSD-Current ๋ธŒ๋žœ์น˜์˜ ์ •๊ธฐ ์Šค๋ƒ…์ƒท์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ด€์‹ฌ ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ํ…Œ์ŠคํŠธ์— ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

Chrome/Iridium์˜ ๋ชจ๋“œ ๋“ฑ์žฅ์— ๋Œ€ํ•œ ๊ด€๋ จ ๋‰ด์Šค๋Š” Theo์˜ ๋ณ„๋„ ๋…ผํ‰์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. JIT๋ฆฌ์Šค. ๊ทธ์˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ์ด๋Š” ์ผ๋ถ€ ์‚ฌ์šฉ ๋ชจ๋ธ์—์„œ๋Š” ํ—ˆ์šฉ๋˜์ง€๋งŒ ์•„๋งˆ๋„ ๋ชจ๋“  ๋ชจ๋ธ์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด ๋ชจ๋“œ๋Š” ๋ถ„๋ช…ํžˆ ํ”„๋กœ์„ธ์„œ์˜ ๋กœ๋“œ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ Chrome์€ /usr/local์— ๋Œ€ํ•ด "wxallowed"๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ ์ž‘๋™ํ•˜์ง€๋งŒ ์ผ๋ถ€ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ghostery). ์–ด๋–ค ์‹์œผ๋กœ๋“  Theo๋Š” ๊ฐ€๊นŒ์šด ๋ฏธ๋ž˜์— JITless ๋ชจ๋“œ์˜ ๋ณธ๊ฒฉ์ ์ธ ์ž‘์—…์ด ์™„์ „ํ•œ ์ž‘๋™ ์ƒํƒœ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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