Sekuriteitsprobleme in pleisters wat deur 'n Huawei-werknemer voorgestel is om die Linux-kern te beskerm

Ontwikkelaars van die Grsecurity-projek gedraai aandag aan die teenwoordigheid van 'n onbenullige uitbuitbare kwesbaarheid in die pleisterstel HKSP (Huawei Kernel Self Protection), 'n paar dae gelede voorgestelde om die sekuriteit van die Linux-kern te verbeter. Die situasie herinner geval met Samsung, waarin 'n poging om stelselsekuriteit te verbeter gelei het tot die ontstaan ​​van 'n nuwe kwesbaarheid en dit makliker gemaak het om toestelle te kompromitteer.

Die HKSP-kolle is deur 'n Huawei-werknemer gepubliseer, sluit 'n vermelding van Huawei in die GitHub-profiel in, en gebruik die woord Huawei in die projeknaam (HKSP - Huawei Kernel Self Protection). Terselfdertyd het Huawei-verteenwoordigers die verbintenis van die HKSP-projek met die maatskappy ontken en gesê dat die kode op die werknemer se persoonlike inisiatief ontwikkel is, nie 'n amptelike Huawei-projek is nie en nie in die maatskappy se produkte gebruik word nie. Aan GitHub-bladsy HKSP terugwerkend na ontdekking kwesbaarhede ook is bygevoeg daarop dat die projek in my vrye tyd vir navorsingsdoeleindes ontwikkel word.

HKSP sluit veranderinge in soos ewekansige afwykings in die geloofstruktuur, beskerming teen aanvalle op die gebruiker identifiseerder naamruimte (pid naamruimte), skeiding van die proses stapel van die mmap area, opsporing van dubbele oproepe na die kfree funksie, blokkering van lekkasies deur die pseudo -FS /proc (/proc/ {modules, sleutels, sleutelgebruikers}, /proc/sys/kernel/* en /proc/sys/vm/mmap_min_addr, /proc/kallsyms), verbeterde gebruikerspasieadres-randomisering, addisionele Ptrace beskerming, verbeterde smap- en smep-beskerming, die vermoë om die stuur van data via rou voetstukke te verbied, verkeerde adresse in UDP-sockets te blokkeer en die integriteit van lopende prosesse na te gaan. Dit sluit ook die Ksguard-kernmodule in, wat daarop gemik is om pogings op te spoor om tipiese rootkits in te voer.

Pleisters geroep Greg Kroah-Hartman, wat verantwoordelik is vir die instandhouding van die stabiele tak van die Linux-kern, was van belang, en het die skrywer gevra om die monolitiese pleister in dele op te breek om hersiening en bevordering na die hoofkern te vereenvoudig. Kees Cook, hoof projek op bevordering aktiewe beskermingstegnologie in die Linux-kern ook positief het op die pleisters gereageer en, onder die probleme, die aandag gevestig op die binding aan die x86-argitektuur en die kennisgewing-aard van baie modusse, wat slegs inligting oor die probleem aanteken, maar nie probeer om dit te blokkeer nie.

'n Studie van die pleister deur Grsecurity-ontwikkelaars het baie foute en swakhede in die kode aan die lig gebring, en het ook die afwesigheid van 'n bedreigingsmodel getoon wat hulle in staat sal stel om die vermoëns van die projek voldoende te beoordeel. Om duidelik te demonstreer dat die kode geskryf is sonder om veilige programmeringsmetodes te gebruik, word 'n voorbeeld van 'n onbenullige kwesbaarheid in die hanteerder gegee.
lêer /proc/ksguard/state, wat geskep is met regte 0777, wat impliseer dat almal skryftoegang het. Die ksg_state_write-funksie, wat gebruik word om opdragte wat na /proc/ksguard/state geskryf is te ontleed, skep 'n tmp[32]-buffer waarna data geskryf word gebaseer op die grootte van die operand wat deurgegee is, sonder om die grootte van die teikenbuffer in ag te neem en sonder kontroleer die parameter met die stringgrootte. Dié. Om 'n deel van die kernstapel te oorskryf, hoef 'n aanvaller net 'n spesiaal geformateerde reël na /proc/ksguard/state te skryf.

statiese ssize_t ksg_state_write(struct lêer *lêer, const char __user *buf,
size_t len, loff_t *offset)
{
u64 waarde;
char tmp[32];
grootte_t n = 0;

if (copy_from_user(tmp, buf, len))
terugkeer -1;

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

Ontgin prototipe:

char buf[4096] = { };
int fd = oop(“/proc/ksguard/state”, O_WRONLY);
if (fd >= 0) {
skryf(fd, buf, sizeof(buf));
naby (fd);
}

Bron: opennet.ru

Voeg 'n opmerking