์ต์คํ๋ก์๊ณผ 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