Sicherheitsprobleme in von einem Huawei-Mitarbeiter vorgeschlagenen Patches zum Schutz des Linux-Kernels

Entwickler des Grsecurity-Projekts zeichnete Aufmerksamkeit auf das Vorhandensein einer trivial ausnutzbaren Sicherheitslücke im Patch-Set HKSP (Huawei Kernel Self Protection), vor ein paar Tagen vorgeschlagen um die Sicherheit des Linux-Kernels zu verbessern. Die Situation erinnert Fall mit Samsung, bei dem ein Versuch, die Systemsicherheit zu verbessern, zur Entstehung einer neuen Schwachstelle führte und die Kompromittierung von Geräten erleichterte.

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 GitHub-Seite HKSP rückwirkend nach Entdeckung auch Schwachstellen wurde hinzugefügt Beachten Sie, dass das Projekt in meiner Freizeit zu Forschungszwecken entwickelt wird.

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 verursacht Greg Kroah-Hartman, der für die Wartung des stabilen Zweigs des Linux-Kernels verantwortlich ist, war von Interesse und bat den Autor, den monolithischen Patch in Teile zu zerlegen, um die Überprüfung und Heraufstufung in den Hauptkernel zu vereinfachen. Kees Cook, Leiter Projekt auf Förderung aktive Schutztechnologie auch im Linux-Kernel positiv reagierte auf die Patches und machte unter anderem auf die Anbindung an die x86-Architektur und den Benachrichtigungscharakter vieler Modi aufmerksam, die nur Informationen über das Problem protokollieren, aber nicht versuchen, es zu blockieren.

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

Kommentar hinzufügen