Duilgheadasan tèarainteachd ann am pìosan a mhol neach-obrach Huawei gus an kernel Linux a dhìon

Luchd-leasachaidh a’ phròiseict Grsecurity thionndaidh aire gu làthaireachd so-leòntachd a dh’ fhaodar a chleachdadh anns an t-seata paiste HKSP (Fèin-dhìon Huawei Kernel), beagan làithean air ais air a mholadh gus tèarainteachd kernel Linux a leasachadh. Tha an suidheachadh a’ cuimhneachadh cùis le Samsung, anns an do dh’ adhbhraich oidhirp gus tèarainteachd siostam a leasachadh nochdadh so-leòntachd ùr agus ga dhèanamh nas fhasa innealan a chuir an sàs.

Chaidh na pìosan HKSP fhoillseachadh le neach-obrach Huawei, thoir a-steach iomradh air Huawei ann am pròifil GitHub, agus cleachd am facal Huawei ann an ainm a’ phròiseict (HKSP - Huawei Kernel Self Protection). Aig an aon àm, chaidh riochdairean Huawei às àicheadh ​​​​ceangal a 'phròiseict HKSP leis a' chompanaidh agus thuirt iad gun deach an còd a leasachadh air iomairt pearsanta an neach-obrach, nach e pròiseact oifigeil Huawei a th 'ann agus nach eil e air a chleachdadh ann am bathar na companaidh. Air adhart Duilleag GitHub HKSP ath-ghnìomhach às dèidh lorg so-leòntachd cuideachd chaidh a chur ris thoir an aire gu bheil am pròiseact ga leasachadh san ùine shaor agam airson adhbharan rannsachaidh.

Tha HKSP a’ toirt a-steach atharrachaidhean leithid cuairteachadh air thuaiream anns an structar creideas, dìon an aghaidh ionnsaighean air an aithnichear neach-cleachdaidh namespace (pid namespace), sgaradh stac a’ phròiseis bhon raon mmap, lorg fiosan dùbailte chun ghnìomh kfree, a’ cur bacadh air aoidion tron ​​bhrèige. -FS / proc (/ proc/ {modalan, iuchraichean, prìomh luchd-cleachdaidh}, / proc/sys/kernel/* agus / proc/sys/vm/mmap_min_addr, / proc/kallsyms), leasaichte air thuaiream seòladh àite cleachdaiche, Ptrace a bharrachd dìon, dìon leasaichte smap agus smep, an comas casg a chuir air dàta a chuir tro socaidean amh, casg a chuir air seòlaidhean ceàrr ann an socaidean UDP agus sgrùdadh ionracas phròiseasan ruith. Tha e cuideachd a’ toirt a-steach modal kernel Ksguard, a tha ag amas air oidhirpean a lorg gus rootkits àbhaisteach a thoirt a-steach.

badan ghairm Bha ùidh aig Greg Kroah-Hartman, a tha an urra ri cumail suas meur seasmhach an kernel Linux, agus dh’ iarr e air an ùghdar am pìos monolithic a bhriseadh ann am pàirtean gus ath-sgrùdadh agus adhartachadh chun phrìomh kernel a dhèanamh nas sìmplidhe. Kees Cook, ceann dreachd air a ' brosnachadh teicneòlas dìon gnìomhach anns an kernel Linux, cuideachd gu deimhinneach fhreagair e na pìosan agus, am measg nan duilgheadasan, tharraing e aire don cheangal gu ailtireachd x86 agus nàdar fios mòran mhodhan, a bhios a’ logadh a-steach dìreach fiosrachadh mun duilgheadas, ach nach feuch ris a bhacadh.

Nochd sgrùdadh air an raon le luchd-leasachaidh Grsecurity mòran mhearachdan agus laigsean sa chòd, agus sheall e cuideachd nach robh modal bagairt ann a leigeadh leotha breithneachadh iomchaidh a dhèanamh air comasan a’ phròiseict. Gus sealltainn gu soilleir gun deach an còd a sgrìobhadh gun a bhith a’ cleachdadh dhòighean prògramaidh tèarainte, tha eisimpleir air a thoirt seachad de chugallachd beag anns an inneal-làimhseachaidh.
faidhle / proc/ksguard/state, a tha air a chruthachadh le còraichean 0777, a’ ciallachadh gu bheil cothrom sgrìobhaidh aig a h-uile duine. Bidh an gnìomh ksg_state_write, a chleachdar gus òrdughan sgrìobhte gu / proc/ksguard/state a pharsadh, a’ cruthachadh bufair tmp[32] ris a bheil dàta air a sgrìobhadh a rèir meud an operand a chaidh seachad, gun a bhith a’ toirt aire do mheud a’ bhufair targaid agus às aonais a’ sgrùdadh am paramadair le meud an t-sreang. An fheadhainn sin. Gus pàirt den stac kernel ath-sgrìobhadh, feumaidh neach-ionnsaigh dìreach loidhne ann an cruth sònraichte a sgrìobhadh gu / proc/ksguard/state.

static ssize_t ksg_state_write (faidhle structar * faidhle, const char __user * buf,
meud_t len, loff_t * offset)
{
u64 luach;
char tmp[32];
meud_t n = 0;

ma tha (copy_from_user (tmp, buf, len))
tilleadh -1;

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

Cleachd prototype:

char buf[4096] = { };
int fd = fosgailte (“/ proc/ksguard/state”, O_WRONLY);
ma tha (fd >= 0) {
sgrìobh (fd, buf, meud (buf));
dùin (fd);
}

Source: fosgailtenet.ru

Cuir beachd ann