Grsecurity ํ๋ก์ ํธ์ ๊ฐ๋ฐ์
HKSP ํจ์น๋ Huawei ์ง์์ด ๊ฒ์ํ์ผ๋ฉฐ GitHub ํ๋กํ์ Huawei์ ๋ํ ์ธ๊ธ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ํ๋ก์ ํธ ์ด๋ฆ(HKSP - Huawei Kernel Self Protection)์ Huawei๋ผ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋์์ ํ์จ์ด ๋๋ณ์ธ์ HKSP ํ๋ก์ ํธ์ ํ์ฌ์ ์ฐ๊ด์ฑ์ ๋ถ์ธํ๊ณ ํด๋น ์ฝ๋๋ ์ง์์ ๊ฐ์ธ ์ฃผ๋๋ก ๊ฐ๋ฐ๋์์ผ๋ฉฐ ๊ณต์ ํ์จ์ด ํ๋ก์ ํธ๊ฐ ์๋๋ฉฐ ํ์ฌ ์ ํ์ ์ฌ์ฉ๋์ง ์๋๋ค๊ณ ๋ฐํ์ต๋๋ค. ~์
HKSP์๋ cred ๊ตฌ์กฐ์ ์คํ์ ๋ฌด์์ํ, ์ฌ์ฉ์ ์๋ณ์ ๋ค์์คํ์ด์ค(pid ๋ค์์คํ์ด์ค)์ ๋ํ ๊ณต๊ฒฉ ๋ฐฉ์ง, mmap ์์ญ์์ ํ๋ก์ธ์ค ์คํ ๋ถ๋ฆฌ, kfree ํจ์์ ๋ํ ์ด์ค ํธ์ถ ๊ฐ์ง, ์์ฌ๋ฅผ ํตํ ๋์ถ ์ฐจ๋จ๊ณผ ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์ด ์์ต๋๋ค. -FS /proc(/proc/{๋ชจ๋, ํค, ํค-์ฌ์ฉ์}, /proc/sys/kernel/* ๋ฐ /proc/sys/vm/mmap_min_addr, /proc/kallsyms), ํฅ์๋ ์ฌ์ฉ์ ๊ณต๊ฐ ์ฃผ์ ๋ฌด์์ํ, ์ถ๊ฐ Ptrace ๋ณดํธ, ํฅ์๋ smap ๋ฐ smep ๋ณดํธ, ์์ ์์ผ์ ํตํ ๋ฐ์ดํฐ ์ ์ก ๊ธ์ง, UDP ์์ผ์ ์๋ชป๋ ์ฃผ์ ์ฐจ๋จ ๋ฐ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ๋ฌด๊ฒฐ์ฑ ํ์ธ ๊ธฐ๋ฅ. ๋ํ ์ผ๋ฐ์ ์ธ ๋ฃจํธํท์ ๋์ ํ๋ ค๋ ์๋๋ฅผ ํ์งํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ Ksguard ์ปค๋ ๋ชจ๋๋ ํฌํจ๋์ด ์์ต๋๋ค.
ํจ์น
Grsecurity ๊ฐ๋ฐ์๊ฐ ํจ์น๋ฅผ ์ฐ๊ตฌํ ๊ฒฐ๊ณผ ์ฝ๋์ ๋ง์ ์ค๋ฅ์ ์ฝ์ ์ด ์์์ผ๋ฉฐ ํ๋ก์ ํธ์ ๊ธฐ๋ฅ์ ์ ์ ํ๊ฒ ํ๋จํ ์ ์๋ ์ํ ๋ชจ๋ธ์ด ์๋ค๋ ์ฌ์ค๋ ๋ํ๋ฌ์ต๋๋ค. ๋ณด์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ์๊ณ ์ฝ๋๊ฐ ์์ฑ๋์์์ ๋ช
ํํ๊ฒ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ํธ๋ค๋ฌ์ ์ฌ์ํ ์ทจ์ฝ์ ์ ์๊ฐ ์ ๊ณต๋ฉ๋๋ค.
0777 ๊ถํ์ผ๋ก ์์ฑ๋ /proc/ksguard/state ํ์ผ์ ๋ชจ๋ ์ฌ๋์ด ์ฐ๊ธฐ ์ก์ธ์ค ๊ถํ์ ๊ฐ๊ณ ์์์ ์๋ฏธํฉ๋๋ค. /proc/ksguard/state์ ๊ธฐ๋ก๋ ๋ช
๋ น์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ksg_state_write ํจ์๋ ๋์ ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ์ง ์๊ณ ์ ๋ฌ๋ ํผ์ฐ์ฐ์์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ก๋๋ tmp[32] ๋ฒํผ๋ฅผ ์์ฑํฉ๋๋ค. ๋ฌธ์์ด ํฌ๊ธฐ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ํ์ธํฉ๋๋ค. ์ ๊ฒ๋ค. ์ปค๋ ์คํ์ ์ผ๋ถ๋ฅผ ๋ฎ์ด์ฐ๋ ค๋ฉด ๊ณต๊ฒฉ์๊ฐ /proc/ksguard/state์ ํน๋ณํ ํ์ํ๋ ์ค์ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
static ssize_t ksg_state_write(struct file *file, const char __user *buf,
size_t len, loff_t *์คํ์
)
{
u64 ๊ฐ;
char tmp[32];
size_t n = 0;
if (copy_from_user(tmp, buf, len))
๋ฐํ -1;
value = simple_strtoul(tmp, '\0', 10);
...
ํ๋กํ ํ์ ํ์ฉ:
char buf[4096] = { };
int fd = open("/proc/ksguard/state", O_WRONLY);
if (fd >= 0) {
write(fd, buf, sizeof(buf));
๋ซ๊ธฐ(fd);
}
์ถ์ฒ : opennet.ru