out-of-tree v1.0.0 - ์ต์Šคํ”Œ๋กœ์ž‡ ๋ฐ Linux ์ปค๋„ ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ


out-of-tree v1.0.0 - ์ต์Šคํ”Œ๋กœ์ž‡ ๋ฐ Linux ์ปค๋„ ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ

์ต์Šคํ”Œ๋กœ์ž‡๊ณผ Linux ์ปค๋„ ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ํˆดํ‚ท์ธ out-of-tree์˜ ์ฒซ ๋ฒˆ์งธ(v1.0.0) ๋ฒ„์ „์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

out-of-tree๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ์ผ์ƒ์ ์ธ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜์—ฌ ์ปค๋„ ๋ชจ๋“ˆ ๋ฐ ์ต์Šคํ”Œ๋กœ์ž‡ ๋””๋ฒ„๊น…์„ ์œ„ํ•œ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ์ต์Šคํ”Œ๋กœ์ž‡ ์•ˆ์ •์„ฑ ํ†ต๊ณ„๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ CI(์ง€์†์  ํ†ตํ•ฉ)์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์ปค๋„ ๋ชจ๋“ˆ ๋˜๋Š” ์ต์Šคํ”Œ๋กœ์ž‡์€ .out-of-tree.toml ํŒŒ์ผ๋กœ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ํ•„์š”ํ•œ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ •๋ณด์™€ ํŠน์ • ๋ณด์•ˆ ์™„ํ™”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ž‘๋™์— ๋Œ€ํ•œ ์ œํ•œ(์ต์Šคํ”Œ๋กœ์ž‡์ธ ๊ฒฝ์šฐ)์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ํˆดํ‚ท์„ ์‚ฌ์šฉํ•˜๋ฉด ์ทจ์•ฝ์ ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํŠน์ • ์ปค๋„ ๋ฒ„์ „์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ(-guess ๋ช…๋ น ์‚ฌ์šฉ) ํŠน์ • ์ปค๋ฐ‹์— ๋Œ€ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฒ€์ƒ‰์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ v0.2 ๋ฒ„์ „ ์ดํ›„์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

์ถ”๊ฐ€

  • โ€”max=๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ(ํŠธ๋ฆฌ ์™ธ๋ถ€ ์ปค๋„ ์ž๋™ ์ƒ์„ฑ) ์ปค๋„(.out-of-tree.toml์˜ ์„ค๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ) ์ˆ˜๋ฅผ ์ œํ•œํ•˜๊ณ  ์‹คํ–‰(ํŠธ๋ฆฌ ์™ธ๋ถ€ ํ“จ)์„ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. X ๋งค๊ฐœ๋ณ€์ˆ˜.

  • ํŠน์ • ๋ฐฐํฌํŒ ๋ฐ ๋ฒ„์ „์— ๋Œ€ํ•œ ๋ชจ๋“  ์ปค๋„์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด genall ๋ช…๋ น.

  • ์ด์ œ ๋ชจ๋“  ๋กœ๊ทธ๋Š” sqlite3 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ž์ฃผ ํ•„์š”ํ•œ ๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ์™€ json ๋ฐ markdown์œผ๋กœ ๋ฐ์ดํ„ฐ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์œ„ํ•œ ๋ช…๋ น์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์„ฑ๊ณต์ ์ธ ์ž‘๋™ ํ™•๋ฅ  ๊ณ„์‚ฐ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค(์ด์ „ ์ถœ์‹œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ).

  • ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ(out-of-tree pew ๋ช…๋ น์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด --dist ๋งค๊ฐœ๋ณ€์ˆ˜)

  • ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์— ์„ค์น˜๋œ ์ปค๋„์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ƒ์„ฑ๊ณผ ํ˜ธ์ŠคํŠธ์—์„œ ์ง์ ‘ ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ํƒ€์‚ฌ ์ปค๋„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด์ œ ํŠธ๋ฆฌ ์™ธ๋ถ€ ๋””๋ฒ„๊ทธ ํ™˜๊ฒฝ์€ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ ๋””๋ฒ„๊น… ๊ธฐํ˜ธ๋ฅผ ์ž๋™์œผ๋กœ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

  • ๋””๋ฒ„๊น… ์ค‘์— KASLR, SMEP, SMAP ๋ฐ KPTI ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ๋ณด์•ˆ ์™„ํ™”๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • --threads=N ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ out-of-tree pew ํ…Œ์ŠคํŠธ ๋ช…๋ น์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ต์Šคํ”Œ๋กœ์ž‡๊ณผ ์ปค๋„ ๋ชจ๋“ˆ์„ ๋นŒ๋“œ/์‹คํ–‰ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋กœ๊ทธ์— ๊ธฐ๋ก๋œ ํ›„ ํ†ต๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํƒœ๊ทธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

  • ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ปค๋„ ๋ฒ„์ „์„ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ์ต์Šคํ”Œ๋กœ์ž‡ ๋ฐ ์ปค๋„ ๋ชจ๋“ˆ์˜ ๋Œ€๋Ÿ‰ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ์ƒˆ๋กœ์šด pack ๋ช…๋ น์ž…๋‹ˆ๋‹ค.

  • ์ต์Šคํ”Œ๋กœ์ž‡ ๋ฐ ์ปค๋„ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ(.out-of-tree.toml)์— KASLR, SMEP, SMAP ๋ฐ KPTI๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ํ•„์š”ํ•œ ์ฝ”์–ด ์ˆ˜์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ด์ œ ์ปค๋„ ์ž๋™ ์ƒ์„ฑ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์ด๋ฏธ์ง€(rootfs)๊ฐ€ ์ž๋™์œผ๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • CentOS ์ปค๋„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ

  • ์ด์ œ ํ•„์š”ํ•œ ๋ฐฐํฌํŒ ๋ฒ„์ „์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€(rootfs)๊ฐ€ ์—†์œผ๋ฉด out-of-tree๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฒ„์ „์˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Ubuntu 18.04์˜ ๊ฒฝ์šฐ Ubuntu 18.10 ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค.

  • ์ด์ œ ์ปค๋„ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด๋„ ์‹คํŒจ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(ํ…Œ์ŠคํŠธ ์—†์Œ - ์˜ค๋ฅ˜ ์—†์Œ!).

  • ์ด์ œ ์ฝ”์–ด ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์—์„œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹จ๊ณ„(๋นŒ๋“œ, ์‹คํ–‰ ๋˜๋Š” ํ…Œ์ŠคํŠธ)๊ฐ€ ์‹คํŒจํ•˜๋ฉด out-of-tree๊ฐ€ ์Œ์ˆ˜ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ์ ํŠธ๊ฐ€ Go ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์œผ๋ฉฐ ์ด์ œ GO111MODULE=on์œผ๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ด์ œ ${TARGET}_test์˜ ์–ด์…ˆ๋ธ”๋ฆฌ๊ฐ€ Makefile์—์„œ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ Test.sh๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ปค๋„ ๋ชจ๋“ˆ์ด๋‚˜ ์ต์Šคํ”Œ๋กœ์ž‡์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋” ์ด์ƒ ์ปค๋„ ๋กœ๊ทธ๊ฐ€ ์ง€์›Œ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ต์Šคํ”Œ๋กœ์ž‡์€ dmesg์˜ ์ปค๋„ ๊ธฐ๋ฐ˜ ๋ˆ„์ถœ์„ ์‚ฌ์šฉํ•˜์—ฌ KASLR์„ ์šฐํšŒํ•˜๋ฏ€๋กœ ์ •๋ฆฌ๋กœ ์ธํ•ด ์ต์Šคํ”Œ๋กœ์ž‡์˜ ๊ตฌํ˜„ ๋…ผ๋ฆฌ๊ฐ€ ์†์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • qemu/kvm์€ ์ด์ œ ํ˜ธ์ŠคํŠธ ํ”„๋กœ์„ธ์„œ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‚ญ์ œ

  • ์ปค๋„ ํŒฉํ† ๋ฆฌ ์ ์ง„์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋Š” Dockerfile์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ปค๋„ ์ƒ์„ฑ ๊ตฌํ˜„์œผ๋กœ ์ธํ•ด ์™„์ „ํžˆ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์€ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ๊ฑฐ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๊ณ ์ •

  • macOS์—์„œ๋Š” GNU coreutils๋ฅผ ๋” ์ด์ƒ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

  • ์ผ๋ถ€ ์‹œ์Šคํ…œ์˜ docker ๋‚ด๋ถ€ ๋งˆ์šดํŠธ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ž„์‹œ ํŒŒ์ผ์ด ~/.out-of-tree/tmp/๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : linux.org.ru

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