Ontwikkelaars van die Grsecurity-projek
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
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
'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