ืืคืชืื ืคืจืืืงื Grsecurity
ืชืืงืื ื ื-HKSP ืคืืจืกืื ืขื ืืื ืขืืื Huawei, ืืืืืื ืืืืืจ ืฉื Huawei ืืคืจืืคืื GitHub, ืืืฉืชืืฉืื ืืืืื Huawei ืืฉื ืืคืจืืืงื (HKSP - Huawei Kernel Self Protection). ืืื ืขื ืืืช, ื ืฆืืื Huawei ืืืืืฉื ืืช ืืงืฉืจ ืฉื ืคืจืืืงื HKSP ืขื ืืืืจื ืืืฆืืืจื ืื ืืงืื ืคืืชื ืืืืืื ืืืฉืืช ืฉื ืืขืืื, ืืื ื ืคืจืืืงื Huawei ืจืฉืื ืืืื ื ืืฉืืฉ ืืืืฆืจื ืืืืจื. ืขึทื
HKSP ืืืื ืฉืื ืืืื ืืื ืืงืจืื ืฉื ืงืืืื ืืืื ื ื-cred, ืืื ื ืืคื ื ืืชืงืคืืช ืขื ืืจืื ืืฉืืืช ืฉื ืืืื ืืืฉืชืืฉ (pid namespace), ืืคืจืืช ืืืกื ืืช ืืชืืืื ืืืืืจ mmap, ืืืืื ืฉื ืงืจืืืืช ืืคืืืืช ืืคืื ืงืฆืืืช kfree, ืืกืืืช ืืืืคืืช ืืจื ืืคืกืืืื. -FS /proc (/proc/ {modules, keys, key-users}, /proc/sys/kernel/* ื-/proc/sys/vm/mmap_min_addr, /proc/kallsyms), ืฉืืคืืจ ืืืงืจืื ืฉื ืืชืืืช ืืจืื ืืฉืชืืฉ, Ptrace ื ืืกืฃ ืืื ื, ืืื ืช smap ื-smep ืืฉืืคืจืช, ืืืืืืช ืืืกืืจ ืฉืืืืช ื ืชืื ืื ืืจื ืฉืงืขืื ืืืืืืื, ืืกืืืช ืืชืืืืช ืฉืืืืืช ืืฉืงืขื UDP ืืืืืงืช ืชืงืื ืืช ืืชืืืืืื ืืจืฆืื. ืืื ืืืื ืื ืืช ืืืืื ืืืืช Ksguard, ืฉืืืจืชื ืืืืืช ื ืืกืืื ืืช ืืืื ืืก ืขืจืืืช ืฉืืจืฉ ืืืคืืกืืืช.
ืืืืื
ืืืงืจ ืฉื ืืชืืงืื ืขื ืืื ืืคืชืื Grsecurity ืืฉืฃ ืฉืืืืืช ืืืืืฉืืช ืจืืืช ืืงืื, ืืื ืืจืื ืืช ืืืขืืจ ืืืื ืืืืืื ืฉืืืคืฉืจ ืืื ืืฉืคืื ืืจืืื ืืช ืืืืืืช ืืคืจืืืงื. ืืื ืืืืืื ืืืืจืืจ ืฉืืงืื ื ืืชื ืืื ืฉืืืืฉ ืืฉืืืืช ืชืื ืืช ืืืืืืืืช, ื ืืชื ืช ืืืืื ืืคืืืขืืช ืืจืืืืืืืืช ืืืืคื.
ืงืืืฅ /proc/ksguard/state, ืฉื ืืฆืจ ืขื ืืืืืืช 0777, ืื ืฉืืจืื ืฉืืืืื ืืฉ ืืืฉืช ืืชืืื. ืืคืื ืงืฆืื ksg_state_write, ืืืฉืืฉืช ืื ืืชืื ืคืงืืืืช ืฉื ืืชืื ื-/proc/ksguard/state, ืืืฆืจืช ืืืืจ tmp[32] ืฉืืืื ื ืืชืืื ื ืชืื ืื ืขื ืกืื ืืืื ืืืืคืจื ื ืืืืขืืจ, ืืืื ืืงืืช ืืืฉืืื ืืช ืืืื ืืืืจ ืืืืจื ืืืื ืืืืงืช ืืคืจืืืจ ืขื ืืืื ืืืืจืืืช. ืึธืึตื. ืืื ืืืืืืฃ ืืืง ืืืกื ืืช ืืืืื, ืชืืงืฃ ืจืง ืฆืจืื ืืืชืื ืฉืืจื ืืคืืจืื ืืืืื ื-/proc/ksguard/state.
static ssize_t ksg_state_write(ืงืืืฅ struct *ืงืืืฅ, const char __user *buf,
size_t len, loff_t *offset)
{
ืขืจื u64;
char tmp[32];
size_t n = 0;
if (copy_from_user(tmp, buf, len))
return -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));
close(fd);
}
ืืงืืจ: OpenNet.ru