Ang mga problema sa seguridad sa mga patch nga gisugyot sa usa ka empleyado sa Huawei aron mapanalipdan ang Linux kernel

Mga developer sa proyekto sa Grsecurity milingi pagtagad sa presensya sa usa ka gamay nga mapahimuslanon nga kahuyangan sa patch set Ang HKSP (Huawei Kernel Self Protection), pipila ka adlaw ang milabay gisugyot aron mapauswag ang seguridad sa Linux kernel. Ang kahimtang nagpahinumdom kaso sa Samsung, diin ang usa ka pagsulay sa pagpauswag sa seguridad sa sistema misangpot sa pagtumaw sa usa ka bag-ong kahuyang ug nagpasayon ​​sa pagkompromiso sa mga himan.

Ang mga patch sa HKSP gipatik sa usa ka empleyado sa Huawei, naglakip sa paghisgot sa Huawei sa profile sa GitHub, ug gigamit ang pulong nga Huawei sa ngalan sa proyekto (HKSP - Huawei Kernel Self Protection). Sa samang higayon, gipanghimakak sa mga representante sa Huawei ang koneksyon sa proyekto sa HKSP sa kompanya ug gipahayag nga ang code naugmad sa personal nga inisyatiba sa empleyado, dili opisyal nga proyekto sa Huawei ug wala gigamit sa mga produkto sa kompanya. Sa GitHub nga panid HKSP retroaktibo human sa pagkadiskobre mga kahuyangan usab gidugang timan-i nga ang proyekto gipalambo sa akong libre nga oras alang sa mga katuyoan sa panukiduki.

Ang HKSP naglakip sa mga pagbag-o sama sa randomization sa mga offset sa cred structure, proteksyon batok sa mga pag-atake sa user identifier namespace (pid namespace), pagbulag sa proseso stack gikan sa mmap area, detection sa doble nga tawag sa kfree function, pagbabag sa mga leaks pinaagi sa pseudo -FS /proc (/ proc/ {modules, keys, key-users}, /proc/sys/kernel/* ug /proc/sys/vm/mmap_min_addr, /proc/kallsyms), gipaayo nga user space address randomization, dugang Ptrace proteksyon, gipalambo nga smap ug smep nga proteksyon , ang abilidad sa pagdili sa pagpadala sa datos pinaagi sa hilaw nga mga socket, pag-ali sa dili husto nga mga adres sa UDP sockets ug pagsusi sa integridad sa mga proseso nga nagdagan. Naglakip usab kini sa Ksguard kernel module, nga gitumong sa pag-ila sa mga pagsulay sa pagpaila sa kasagaran nga mga rootkit.

Paghunahuna gitawag Si Greg Kroah-Hartman, kinsa maoy responsable sa pagmentinar sa lig-on nga sanga sa Linux kernel, interesado, ug mihangyo sa tagsulat nga bungkagon ang monolithic patch ngadto sa mga bahin aron mapasayon ​​ang pagrepaso ug promosyon sa main kernel. Kees Cook, ulo ang proyekto sa promosyon aktibo nga teknolohiya sa pagpanalipod sa Linux kernel, usab sa positibo mitubag sa mga patch ug, taliwala sa mga problema, nagpunting sa pagtagad sa pagbugkos sa x86 nga arkitektura ug ang kinaiya sa pagpahibalo sa daghang mga mode, nga nag-log lamang sa impormasyon mahitungod sa problema, apan ayaw pagsulay nga babagan kini.

Ang usa ka pagtuon sa patch sa mga developer sa Grsecurity nagpadayag sa daghang mga kasaypanan ug mga kahuyang sa code, ug nagpakita usab sa pagkawala sa usa ka modelo sa hulga nga magtugot kanila sa igo nga paghukom sa mga kapabilidad sa proyekto. Aron sa tin-aw nga pagpakita nga ang code gisulat nga wala gigamit ang luwas nga mga pamaagi sa pagprograma, usa ka pananglitan sa usa ka gamay nga kahuyang sa tigdumala gihatag.
file /proc/ksguard/state, nga gimugna uban ang mga katungod 0777, nga nagpasabot nga ang tanan adunay access sa pagsulat. Ang ksg_state_write function, nga gigamit sa pag-parse sa mga sugo nga gisulat sa /proc/ksguard/state, nagmugna og tmp[32] buffer diin ang datos gisulat base sa gidak-on sa operand nga gipasa, nga walay pagtagad sa gidak-on sa target buffer ug walay pagsusi sa parameter sa gidak-on sa string. Mga. Aron ma-overwrite ang bahin sa kernel stack, ang tig-atake kinahanglan lang nga magsulat ug espesyal nga pormat nga linya sa /proc/ksguard/state.

static ssize_t ksg_state_write(struct file *file, const char __user *buf,
size_t len, loff_t *offset)
{
u64 nga bili;
char tmp[32];
gidak-on_t n = 0;

kung (copy_from_user(tmp, buf, len))
pagbalik -1;

bili = simple_strtoul(tmp, '\0', 10);
...

Pahimusli ang prototype:

char buf[4096] = {};
int fd = open(“/proc/ksguard/state”, O_WRONLY);
kon (fd >= 0) {
write(fd, buf, sizeof(buf));
duol(fd);
}

Source: opennet.ru

Idugang sa usa ka comment