Grsecurity рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рд╡рд┐рдХрд╕рдХ
HKSP рдкреЕрдЪреЗрд╕ Huawei рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рдиреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ рд╣реЛрддреЗ, GitHub рдкреНрд░реЛрдлрд╛рдЗрд▓рдордзреНрдпреЗ Huawei рдЪрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рд╛ рдЖрдгрд┐ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдд Huawei рд╢рдмреНрдж рд╡рд╛рдкрд░рд╛ (HKSP - Huawei Kernel Self Protection). рддреНрдпрд╛рдЪ рд╡реЗрд│реА, Huawei рдкреНрд░рддрд┐рдирд┐рдзреАрдВрдиреА HKSP рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рдХрдВрдкрдиреАрд╢реА рдХрдиреЗрдХреНрд╢рди рдирд╛рдХрд╛рд░рд▓реЗ рдЖрдгрд┐ рдирдореВрдж рдХреЗрд▓реЗ рдХреА рд╣рд╛ рдХреЛрдб рдХрд░реНрдордЪрд╛рд░реНтАНрдпрд╛рдВрдЪреНрдпрд╛ рд╡реИрдпрдХреНрддрд┐рдХ рдкреБрдврд╛рдХрд╛рд░рд╛рд╡рд░ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ, рддреЛ рдЕрдзрд┐рдХреГрдд Huawei рдкреНрд░рдХрд▓реНрдк рдирд╛рд╣реА рдЖрдгрд┐ рдХрдВрдкрдиреАрдЪреНрдпрд╛ рдЙрддреНрдкрд╛рджрдирд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдд рдирд╛рд╣реА. рдЪрд╛рд▓реВ
рдПрдЪрдХреЗрдПрд╕рдкреАрдордзреНрдпреЗ рдХреНрд░реЗрдб рд╕реНрдЯреНрд░рдХреНрдЪрд░рдордзреАрд▓ рдСрдлрд╕реЗрдЯрдЪреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХреАрдХрд░рдг, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЕрднрд┐рдЬреНрдЮрд╛рдкрдХ рдиреЗрдорд╕реНрдкреЗрд╕ (рдкреАрдЖрдпрдбреА рдиреЗрдорд╕реНрдкреЗрд╕) рд╡рд░реАрд▓ рд╣рд▓реНрд▓реНрдпрд╛рдВрдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг, рдПрдордПрдордПрдк рдХреНрд╖реЗрддреНрд░рд╛рдкрд╛рд╕реВрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдЯреЕрдХ рд╡реЗрдЧрд│реЗ рдХрд░рдгреЗ, рдХреЗрдлреНрд░реА рдлрдВрдХреНрд╢рдирд▓рд╛ рджреБрд╣реЗрд░реА рдХреЙрд▓ рд╢реЛрдзрдгреЗ, рд╕реНрдпреВрдбреЛрджреНрд╡рд╛рд░реЗ рд▓реАрдХ рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░рдгреЗ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдмрджрд▓рд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ. -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 рд╡рд░ рд╡рд┐рд╢реЗрд╖ рд╕реНрд╡рд░реВрдкрд┐рдд рдУрд│ рд▓рд┐рд╣рд╛рд╡реА рд▓рд╛рдЧрддреЗ.
рд╕реНрдерд┐рд░ рдЖрдХрд╛рд░_рдЯреА ksg_state_write(рд╕рдВрд░рдЪрдирд╛ рдлрд╛рдЗрд▓ *рдлрд╛рдЗрд▓, const char __user *buf,
рд╕рд╛рдЗрдЬ_рдЯреА рд▓реЗрди, рд▓реЙрдл_рдЯреА *рдСрдлрд╕реЗрдЯ)
{
u64 рдореВрд▓реНрдп;
char tmp[32];
рдЖрдХрд╛рд░_рдЯреА n = 0;
рдЬрд░ (copy_from_user(tmp, buf, len))
рдкрд░рддрд╛рд╡рд╛ -1;
рдореВрд▓реНрдп = simple_strtoul(tmp, '\0', 10);
...
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрдЪреЗ рд╢реЛрд╖рдг рдХрд░рд╛:
char buf[4096] = { };
int fd = open(тАЬ/proc/ksguard/stateтАЭ, O_WRONLY);
рдЬрд░ (fd >= 0) {
рд▓рд┐рд╣рд╛(fd, buf, sizeof(buf));
рдмрдВрдж (fd);
}
рд╕реНрддреНрд░реЛрдд: opennet.ru