Udviklere af Grsecurity-projektet
HKSP-patchene blev udgivet af en Huawei-medarbejder, inkluderer en omtale af Huawei i GitHub-profilen og bruger ordet Huawei i projektnavnet (HKSP - Huawei Kernel Self Protection). Samtidig benægtede Huawei-repræsentanter forbindelsen mellem HKSP-projektet og virksomheden og udtalte, at koden blev udviklet på medarbejderens personlige initiativ, ikke er et officielt Huawei-projekt og ikke bruges i virksomhedens produkter. På
HKSP inkluderer ændringer såsom randomisering af forskydninger i cred-strukturen, beskyttelse mod angreb på brugeridentifikationens navneområde (pid-navneområde), adskillelse af processtakken fra mmap-området, detektering af dobbeltkald til kfree-funktionen, blokering af læk gennem pseudo -FS /proc (/proc/ {modules, keys, key-users}, /proc/sys/kernel/* og /proc/sys/vm/mmap_min_addr, /proc/kallsyms), forbedret brugerpladsadresserandomisering, yderligere Ptrace beskyttelse, forbedret smap- og smep-beskyttelse, muligheden for at forbyde afsendelse af data via rå-sockets, blokering af forkerte adresser i UDP-sockets og kontrol af integriteten af kørende processer. Det inkluderer også Ksguard-kernemodulet, som har til formål at opdage forsøg på at introducere typiske rootkits.
Patches
En undersøgelse af patchen udført af Grsecurity-udviklere afslørede mange fejl og svagheder i koden og viste også fraværet af en trusselsmodel, der ville give dem mulighed for tilstrækkeligt at bedømme projektets muligheder. For tydeligt at demonstrere, at koden er skrevet uden brug af sikre programmeringsmetoder, gives et eksempel på en triviel sårbarhed i behandleren.
fil /proc/ksguard/state, som er oprettet med rettighederne 0777, hvilket betyder, at alle har skriveadgang. Funktionen ksg_state_write, der bruges til at parse kommandoer skrevet til /proc/ksguard/state, opretter en tmp[32]-buffer, hvortil data skrives baseret på størrelsen af den operand, der sendes, uden at tage højde for størrelsen af målbufferen og uden kontrollere parameteren med strengstørrelsen. De der. For at overskrive en del af kernestakken skal en angriber blot skrive en specielt formateret 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 værdi;
char tmp[32];
størrelse_t n = 0;
if (copy_from_user(tmp, buf, len))
retur -1;
værdi = simple_strtoul(tmp, '\0', 10);
...
Udnyt prototype:
char buf[4096] = { };
int fd = open(“/proc/ksguard/state”, O_WRONLY);
if (fd >= 0) {
skriv(fd, buf, sizeof(buf));
lukke(fd);
}
Kilde: opennet.ru