Linux рдХрд░реНрдирд▓рдЪреЗ рд╕рдВрд░рдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Huawei рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреЕрдЪрдордзреАрд▓ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛

Grsecurity рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рд╡рд┐рдХрд╕рдХ рд╡рд│рд▓реЗ рдкреЕрдЪ рд╕реЗрдЯрдордзреНрдпреЗ рдХреНрд╖реБрд▓реНрд▓рдХ рд╢реЛрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдЕрд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдХрдбреЗ рд▓рдХреНрд╖ рджреНрдпрд╛ рдПрдЪрдХреЗрдПрд╕рдкреА (Huawei Kernel Self Protection), рдХрд╛рд╣реА рджрд┐рд╡рд╕рд╛рдВрдкреВрд░реНрд╡реА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓рдЪреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА. рдкрд░рд┐рд╕реНрдерд┐рддреА рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЗ рд╕реЕрдорд╕рдВрдЧ рд╕рд╣ рдХреЗрд╕, рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕рд┐рд╕реНрдЯрдо рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдзрд╛рд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдпрддреНрдирд╛рдореБрд│реЗ рдирд╡реАрди рднреЗрджреНрдпрддреЗрдЪрд╛ рдЙрджрдп рдЭрд╛рд▓рд╛ рдЖрдгрд┐ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕реЗрд╕рд╢реА рддрдбрдЬреЛрдб рдХрд░рдгреЗ рд╕реЛрдкреЗ рдЭрд╛рд▓реЗ.

HKSP рдкреЕрдЪреЗрд╕ Huawei рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рдиреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ рд╣реЛрддреЗ, GitHub рдкреНрд░реЛрдлрд╛рдЗрд▓рдордзреНрдпреЗ Huawei рдЪрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рд╛ рдЖрдгрд┐ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдд Huawei рд╢рдмреНрдж рд╡рд╛рдкрд░рд╛ (HKSP - Huawei Kernel Self Protection). рддреНрдпрд╛рдЪ рд╡реЗрд│реА, Huawei рдкреНрд░рддрд┐рдирд┐рдзреАрдВрдиреА HKSP рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рдХрдВрдкрдиреАрд╢реА рдХрдиреЗрдХреНрд╢рди рдирд╛рдХрд╛рд░рд▓реЗ рдЖрдгрд┐ рдирдореВрдж рдХреЗрд▓реЗ рдХреА рд╣рд╛ рдХреЛрдб рдХрд░реНрдордЪрд╛рд░реНтАНрдпрд╛рдВрдЪреНрдпрд╛ рд╡реИрдпрдХреНрддрд┐рдХ рдкреБрдврд╛рдХрд╛рд░рд╛рд╡рд░ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ, рддреЛ рдЕрдзрд┐рдХреГрдд Huawei рдкреНрд░рдХрд▓реНрдк рдирд╛рд╣реА рдЖрдгрд┐ рдХрдВрдкрдиреАрдЪреНрдпрд╛ рдЙрддреНрдкрд╛рджрдирд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдд рдирд╛рд╣реА. рдЪрд╛рд▓реВ GitHub рдкреГрд╖реНрда HKSP рдкреВрд░реНрд╡рд▓рдХреНрд╖реАрдкрдгреЗ рд╢реЛрдз рдирдВрддрд░ рдЕрд╕реБрд░рдХреНрд╖рд╛ рджреЗрдЦреАрд▓ рдЬреЛрдбрд▓реЗ рд╣реЛрддреЗ рдорд╛рдЭреНрдпрд╛ рдлрд╛рд╡рд▓реНрдпрд╛ рд╡реЗрд│реЗрдд рд╣рд╛ рдкреНрд░рдХрд▓реНрдк рд╕рдВрд╢реЛрдзрдирд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдд рдЖрд╣реЗ рдпрд╛рдЪреА рдиреЛрдВрдж рдШреНрдпрд╛.

рдПрдЪрдХреЗрдПрд╕рдкреАрдордзреНрдпреЗ рдХреНрд░реЗрдб рд╕реНрдЯреНрд░рдХреНрдЪрд░рдордзреАрд▓ рдСрдлрд╕реЗрдЯрдЪреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХреАрдХрд░рдг, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЕрднрд┐рдЬреНрдЮрд╛рдкрдХ рдиреЗрдорд╕реНрдкреЗрд╕ (рдкреАрдЖрдпрдбреА рдиреЗрдорд╕реНрдкреЗрд╕) рд╡рд░реАрд▓ рд╣рд▓реНрд▓реНрдпрд╛рдВрдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг, рдПрдордПрдордПрдк рдХреНрд╖реЗрддреНрд░рд╛рдкрд╛рд╕реВрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдЯреЕрдХ рд╡реЗрдЧрд│реЗ рдХрд░рдгреЗ, рдХреЗрдлреНрд░реА рдлрдВрдХреНрд╢рдирд▓рд╛ рджреБрд╣реЗрд░реА рдХреЙрд▓ рд╢реЛрдзрдгреЗ, рд╕реНрдпреВрдбреЛрджреНрд╡рд╛рд░реЗ рд▓реАрдХ рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░рдгреЗ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдмрджрд▓рд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ. -FS /proc (/proc/ {modules, keys, key-users}, /proc/sys/kernel/* рдЖрдгрд┐ /proc/sys/vm/mmap_min_addr, /proc/kallsyms), рд╕реБрдзрд╛рд░рд┐рдд рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЬрд╛рдЧрд╛ рдкрддреНрддрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХреАрдХрд░рдг, рдЕрддрд┐рд░рд┐рдХреНрдд Ptrace рд╕рдВрд░рдХреНрд╖рдг, рд╡рд░реНрдзрд┐рдд smap рдЖрдгрд┐ smep рд╕рдВрд░рдХреНрд╖рдг, рдХрдЪреНрдЪреНрдпрд╛ рд╕реЙрдХреЗрдЯреНрд╕рджреНрд╡рд╛рд░реЗ рдбреЗрдЯрд╛ рдкрд╛рдард╡рд┐рдгреНрдпрд╛рд╕ рдордирд╛рдИ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛, UDP рд╕реЙрдХреЗрдЯреНрд╕рдордзреНрдпреЗ рдЪреБрдХреАрдЪреЗ рдкрддреНрддреЗ рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдЪрд╛рд▓реВ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреА рдЕрдЦрдВрдбрддрд╛ рддрдкрд╛рд╕рдгреЗ. рдпрд╛рдд Ksguard рдХрд░реНрдирд▓ рдореЙрдбреНрдпреВрд▓рдЪрд╛ рджреЗрдЦреАрд▓ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ, рдЬреНрдпрд╛рдЪрд╛ рдЙрджреНрджреЗрд╢ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдЯрдХрд┐рдЯреНрд╕ рд╕рд╛рджрд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдкреНрд░рдпрддреНрди рд╢реЛрдзрдгреЗ рдЖрд╣реЗ.

рдкреЕрдЪреЗрд╕ рдореНрд╣рдгрддрд╛рдд рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓рдЪреА рд╕реНрдерд┐рд░ рд╢рд╛рдЦрд╛ рд░рд╛рдЦрдгреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЕрд╕рд▓реЗрд▓реЗ рдЧреНрд░реЗрдЧ рдХреНрд░реЛрд╣-рд╣рд╛рд░реНрдЯрдорди рдпрд╛рдВрдирд╛ рд╕реНрд╡рд╛рд░рд╕реНрдп рд╣реЛрддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдиреА рдореБрдЦреНрдп рдХрд░реНрдирд▓рдЪреЗ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рдкреНрд░рдореЛрд╢рди рд╕реБрд▓рдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЛрдиреЛрд▓рд┐рдерд┐рдХ рдкреЕрдЪрдЪреЗ рдХрд╛рд╣реА рднрд╛рдЧ рддреЛрдбрдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ. рдХреАрд╕ рдХреБрдХ, рдбреЛрдХреЗ рдкреНрд░рдХрд▓реНрдк рд╡рд░ рдЬрд╛рд╣рд┐рд░рд╛рдд рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓рдордзреНрдпреЗ рд╕рдХреНрд░рд┐рдп рд╕рдВрд░рдХреНрд╖рдг рддрдВрддреНрд░рдЬреНрдЮрд╛рди рджреЗрдЦреАрд▓ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреЕрдЪреЗрд╕рд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рджрд┐рд▓рд╛ рдЖрдгрд┐, рд╕рдорд╕реНрдпрд╛рдВрдкреИрдХреА, x86 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдЪреНрдпрд╛ рдмрдВрдзрдирд╛рдХрдбреЗ рдЖрдгрд┐ рдЕрдиреЗрдХ рдореЛрдбреНрд╕рдЪреНрдпрд╛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕реНрд╡рд░реВрдкрд╛рдХрдбреЗ рд▓рдХреНрд╖ рд╡реЗрдзрд▓реЗ, рдЬреЗ рдХреЗрд╡рд│ рд╕рдорд╕реНрдпреЗрдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рд▓реЙрдЧ рдХрд░рддрд╛рдд, рдкрд░рдВрддреБ рддреНрдпрд╛рд╕ рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдирд╛рд╣реАрдд.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛