ClickCease Ein Leitfaden zu Speicherkorruptionsschwachstellen im Linux-Kernel

Inhaltsübersicht

Abonnieren Sie unseren beliebten Newsletter

Schließen Sie sich 4.500+ Linux- und Open-Source-Experten an!

2x im Monat. Kein Spam.

Ein Leitfaden zu Speicherkorruptionsschwachstellen im Linux-Kernel

Rohan Timalsina

22. Mai 2023. TuxCare-Expertenteam

Bei Cyberangriffen geht es in erster Linie um finanziellen Gewinn, was die Angreifer dazu veranlasst, ständig neue Techniken für den Datenzugriff zu entwickeln. Trotz der ständigen Zunahme der Häufigkeit und Komplexität solcher Angriffe sind Schwachstellen im Bereich der Speicherkorruption nach wie vor das Hauptproblem, das sich seit vier Jahrzehnten hält. 

Administratoren können ihr Wissen über Speicherkorruption nutzen, um ihre Infrastruktur aktiv vor Cyber-Angreifern zu schützen. Dieser Leitfaden soll Administratoren das nötige Wissen vermitteln, um Speicherkorruption und ihre Folgen im Falle der Ausnutzung einer Schwachstelle zu verstehen. 

 

Was sind Sicherheitslücken im Linux-Kernel?

Der Linux-Kernel ist anfällig für eine Reihe von Speicherproblemen. Die folgenden speicherbasierten Schwachstellen stehen im Fokus der Angreifer und sind die Grundlage für viele der monatlich veröffentlichten Sicherheits-Patches. Wenn Sie sich jemals gefragt haben, warum eine bestimmte Schwachstelle einen kritischen Patch erfordert, können diese Probleme zu schwerwiegenden Datenverletzungen führen.

 

Pufferüberlauf

Ein Pufferüberlauf tritt auf, wenn Entwickler es versäumen, Variablen zu validieren, bevor sie ihnen Daten zuweisen. Wenn die Daten die definierte Kapazität der Variablen überschreiten, kommt es zu einem "Überlauf", der es einem Angreifer ermöglicht, seinen eigenen Code in den angrenzenden Speicherbereich zu injizieren. Ohne ordnungsgemäße Datenvalidierung kann ein Pufferüberlauf dazu führen, dass ein Angreifer Root-Zugriff erhält oder in der Lage ist, Remote-Code auszuführen.

Da Linux in C geschrieben ist, ist es anfällig für Pufferüberläufe, im Gegensatz zu anderen Programmiersprachen wie Python und Java, die nicht anfällig für Überlaufangriffe sind.

CVE-2023-0179 ist ein Beispiel für eine Pufferüberlaufschwachstelle. Dieses Problem könnte den Verlust von Stack- und Heap-Adressen ermöglichen und möglicherweise eine lokale Privilegieneskalation für den Root-Benutzer über die Ausführung von beliebigem Code erlauben.

 

Integer-Überlauf

Die Entwickler definieren den maximalen Wert, der in einer Integer-Variablen gespeichert werden kann, auf der Grundlage des verwendeten Datentyps. Eine 32-Bit-Ganzzahlvariable ohne Vorzeichen kann zum Beispiel Werte zwischen 0 und 4.294.967.295 speichern, während eine Ganzzahl mit Vorzeichen Werte zwischen -2.147.483.648 und 2.147.483.647 speichern kann. Wenn der Code jedoch einen Wert hinzufügt, der die Höchstgrenze der Variablen überschreitet, kommt es zu einem "Überlauf", der zu unerwarteten Ergebnissen führt. 

Wenn zum Beispiel eine Anweisung versucht, 1 zu einer Variablen zu addieren, die den Wert 2.147.483.647 speichert, wird das Ergebnis ein negativer Wert von -2.147.483.648 sein. Ähnlich verhält es sich, wenn eine negative ganze Zahl überläuft, was zu einer positiven Zahl führt. Das Verhalten bei ganzen Zahlen ohne Vorzeichen hängt von der verwendeten Programmiersprache ab, aber im Fall von C sind die Ergebnisse oft unvorhersehbar.

CVE-2022-0998 ist eine Integer-Überlauf-Schwachstelle, die im Code des Virtio-Gerätetreibers im Linux-Kernel gefunden wurde. Ein lokaler Benutzer kann diesen Fehler ausnutzen, um das System zum Absturz zu bringen oder möglicherweise seine Privilegien auf dem System zu erweitern.

 

Beschädigung des Speichers

Für Entwickler und Serveradministratoren ist Speicherbeschädigung im Linux-Kernel oft eine Herausforderung. Eine solche Beschädigung kann zu unvorhersehbarem Verhalten führen, und in einigen Fällen werden keine Fehler ausgelöst. Dieses Problem tritt auf, wenn Entwickler unbeabsichtigt Daten im Speicher ändern oder Zeiger modifizieren, die auf bestimmte Speicherplätze verweisen, an denen Daten gespeichert sind. 

CVE-2023-1073 ist ein Beispiel für eine Schwachstelle im Speicher, die im HID-Subsystem (Human Interface Device) des Linux-Kernels entdeckt wurde. Ein lokaler Angreifer kann diesen Fehler ausnutzen, um das System zum Absturz zu bringen oder möglicherweise seine Privilegien zu erweitern.

Denial of Service

Distributed-Denial-of-Service-Angriffe (DDoS) sind weithin bekannt. Dabei nutzen Angreifer mehrere gekaperte Geräte, um ein Ziel mit Datenverkehr zu überschwemmen, was zu Serverabstürzen führt. 

Jeder Angriff, der einen Dienst stört, wird jedoch als Denial-of-Service-Angriff (DoS) bezeichnet. Eine unsachgemäße Speicherverwaltung führt häufig zu speicherbasierten DoS-Angriffen, die auch als Ressourcenerschöpfungsangriffe bezeichnet werden. Diese Schwachstellen können schädlich sein und zu kritischen Dienstabstürzen führen, die Tausende von Benutzern betreffen, wenn sie auf Servern vorhanden sind.

CVE-2023-1390 ist ein Beispiel für eine entfernte Denial-of-Service-Schwachstelle, die im TIPC-Kernelmodul des Linux-Kernels entdeckt wurde. Dieser Fehler ermöglicht es einem entfernten Angreifer, eine Dienstverweigerung zu verursachen.

 

NULL-Zeiger-Dereferenz

In der C-Programmierung ist ein Zeiger eine Variable, die die Speicheradresse eines Wertes und nicht den Wert selbst speichert. Dies ermöglicht es Entwicklern, den an einer bestimmten Speicherstelle gespeicherten Wert zu manipulieren, selbst wenn die mit dieser Stelle verbundene Variable außerhalb des Anwendungsbereichs liegt. 

Eine NULL-Zeiger-Dereferenz liegt vor, wenn eine Anwendung versucht, über einen Zeiger auf einen Speicherplatz zuzugreifen, von dem sie annimmt, dass er gültig ist, der aber tatsächlich NULL ist. Dies kann dazu führen, dass die Anwendung abstürzt oder unerwartet beendet wird.

CVE-2022-47929 ist eine NULL-Zeiger-Dereferenz-Schwachstelle, die in der Implementierung der Netzwerkwarteschlangen-Disziplin des Linux-Kernels gefunden wurde. Diese Schwachstelle ermöglicht es einem lokalen Angreifer, einen Denial-of-Service (Systemabsturz) zu verursachen.

 

Verwendung vor der Initialisierung

Wenn eine Funktion eine Variable zum Ändern oder Erstellen von Daten verwendet, muss die Variable selbst zunächst mit einem Wert initialisiert werden. Wenn der Variablen kein Wert zugewiesen wird, gilt sie als nicht initialisiert und verursacht ein undefiniertes Verhalten, wenn im Programm darauf verwiesen wird.

Undefiniertes Verhalten durch nicht initialisierte Daten ist schwer zu erkennen, da C-Compiler nicht verpflichtet sind, einen Fehler zu diagnostizieren oder zu melden. Die meisten Entwickler arbeiten mit Test- oder Fuzzing-Tools, um nicht initialisierte Daten zu identifizieren, die Probleme mit undefinierten Fehlern verursachen könnten.

CVE-2022-29968 ist ein Beispiel für eine "use-before-initialization"-Schwachstelle, die im Linux-Kernel gefunden wurde, wo das io_uring-Subsystem die Initialisierung von kiocb->private nicht vornimmt. Diese Schwachstelle ermöglicht es einem lokalen Angreifer, sensible Informationen (Kernel-Speicher) preiszugeben.

 

Was sind die gefährlichsten Speicherschwachstellen?

Jedes Jahr veröffentlicht MITRE seinen Bericht Top 25 Most Dangerous Software Weaknesses. Beachten Sie, dass dieser Bericht webbasierte Angriffe enthält, aber die drei häufigsten und gefährlichsten Speicherschwachstellen sind:

  • Pufferüberläufe
  • Integer-Überläufe, die zu einem Pufferüberlauf führen
  • Zeiger-Dereferenzierung (fehlende Zeigerprüfung)

Alle drei Schwachstellen können zu schwerwiegenden Datenverstößen führen. Schwachstellen, die den Speicher beschädigen, waren für einige der bisher größten Datenschutzverletzungen verantwortlich. Eine wichtige Erkenntnis aus einem jüngsten Geheimdienstbericht ist, dass etwa 72 % der Angriffe anwendungsspezifische Angriffe und Angriffe auf Webanwendungen sind. Ein Angreifer kann Probleme im Code erkennen und einen Exploit erstellen, um die Sicherheitslücke auszunutzen, da Open-Source-Programme häufig in abhängigem Code enthalten sind oder die Hauptanwendung selbst darstellen.

Die dritte interessante Statistik des Berichts besagt, dass 21 % der Angriffe auf den Technologiesektor abzielen. Sensible Informationen müssen im Technologiesektor gespeichert, vernetzt, geschützt und übertragen werden. Indem sie sich auf diesen Sektor konzentrieren, könnten Angreifer Zugang zur Infrastruktur erhalten, die Daten speichert, und diese diskret missbrauchen, wodurch das Unternehmen möglicherweise monatelang bloßgestellt wird.

 

Wie erkennt man Schwachstellen, die den Speicher beschädigen?

Speicherbeschädigungen sind in der Regel das Ergebnis von Entwicklerfehlern. In Szenarien, in denen mehrere Anwendungen auf einem einzigen Rechner laufen, kann es jedoch schwierig sein, herauszufinden, welche Anwendung die Probleme verursacht. Eine Möglichkeit, Fehler in Linux zu erkennen, besteht darin, die Systemprotokolle zu prüfen, in denen das Betriebssystem alle Probleme erkennt. 

Linux reserviert zum Beispiel die ersten 64 KB des Speichers für das BIOS, und alle Änderungen an diesem Speicherbereich werden vom Betriebssystem überprüft. Wenn Linux Änderungen an diesem reservierten Speicher feststellt, wird eine Warnung protokolliert, damit die Administratoren das Problem beheben können.

Da Linux ein Open-Source-Betriebssystem ist, werden von Forschern viele speicherbasierte Schwachstellen gemeldet. Eine dieser jüngsten Entdeckungen ist die "BleedingTooth"-Schwachstelle, die es Angreifern mit der bd-Adresse eines Zielcomputers ermöglicht, diesen zum Absturz zu bringen, einen Denial-of-Service (DoS) zu verursachen, die Rechte zu erhöhen und möglicherweise Zugriff auf Verschlüsselungsschlüssel zu erlangen.

Sicherheitsforscher setzen verschiedene Werkzeuge und Techniken ein, um Fehler in Software zu finden. Dazu gehören die sorgfältige Überprüfung des Codes und der Einsatz von Scan-Tools wie Fuzzing, um Fehler zu finden, die den Entwicklern gemeldet werden können. Nach der Identifizierung von Schwachstellen patchen die Entwickler den Code, und ein Sicherheitsupdate wird veröffentlicht, um das Problem zu beheben.

 

Wie behebt man eine Speicherbeschädigung?

Glücklicherweise hat Linux mehrere Sicherheitsfunktionen zur Bekämpfung von Speicherbeschädigungen implementiert, darunter Kernel Address Space Layout Randomization, Control Flow Integrity und Kernel Page Table Isolation. Trotz dieser abschwächenden Funktionen sind das Betriebssystem und seine Abhängigkeiten jedoch immer noch anfällig für Angriffe.

Die Abhilfemaßnahmen variieren je nach gefundener Schwachstelle, aber vorübergehende Lösungen beinhalten oft die Deaktivierung einer kritischen Komponente. Während des Heartbleed-Vorfalls konnten Administratoren zum Beispiel den Heartbeat deaktivieren, der in OpenSSL für die Kommunikation zwischen Client und Server verwendet wird. Dadurch wurde das Problem zwar vorübergehend gelöst, aber jede Anwendung, die ein Heartbeat-Signal vom Server benötigt, hätte unerwartete Ergebnisse wie Abstürze oder Denial-of-Service erlebt.

Vorübergehende Abhilfemaßnahmen sind jedoch nicht dauerhaft, und es müssen Patches angewendet werden, um die Ausnutzung der Schwachstelle dauerhaft zu verhindern. Sicherheits-Patches aktualisieren den Code, erfordern aber einen Neustart des Systems, was zu Ausfallzeiten führt. Infolgedessen verzögern Systemadministratoren das Einspielen von Patches für Sicherheitslücken häufig, bis ein Wartungsfenster zur Verfügung steht, was zu einigen der bisher schwerwiegendsten Datenschutzverletzungen geführt hat.

 

Wie können Sie Ihre Infrastruktur vor Schwachstellen im Speicher schützen?

Da Administratoren der Gnade der Entwickler ausgeliefert sind, müssen sie unbedingt die richtigen Schritte unternehmen, um Angreifer zu stoppen. Sie haben zwar keine Kontrolle über den Code, aber Administratoren können die richtigen Schritte unternehmen, um die Angriffsfläche des Netzwerks zu minimieren und zu verhindern, dass sie das nächste Ziel sind. Im Folgenden finden Sie einige Möglichkeiten, wie Administratoren speicherbasierte Angriffe abwehren können:

  • Führen Sie regelmäßig Schwachstellen-Scans durch. Schwachstellen-Scans finden Probleme, auch solche, die bereits öffentlich gemeldet wurden. Wenn eine Sicherheitslücke gefunden wird, kann ein Patch installiert werden.
  • Führen Sie gründliche Tests aller Anwendungen von Drittanbietern durch, bevor Sie sie auf einem Produktionsserver einsetzen.
  • Verwenden Sie Live-Patching von KernelCare können Sie schnell die neuesten Sicherheits-Patches anwenden, ohne dass ein Neustart erforderlich ist.

 

Schlussfolgerung

Die Erkennung von speicherbasierten Schwachstellen ist eine Herausforderung, und ein sofortiges Patching ist entscheidend, um einen optimalen Schutz vor Fehlern zu gewährleisten. KernelCare Enterprise bietet einen Live-Patching-Service, mit dem Administratoren das Patchen nicht mehr aufschieben müssen. Er patcht automatisch verschiedene Linux-Versionen ohne Ausfallzeiten oder Unterbrechungen und stellt so sicher, dass kritische Infrastrukturen nicht für Schwachstellen anfällig sind, während sie auf ein Wartungsfenster warten.

Zusammenfassung
Ein Leitfaden zu Speicherkorruptionsschwachstellen im Linux-Kernel
Artikel Name
Ein Leitfaden zu Speicherkorruptionsschwachstellen im Linux-Kernel
Beschreibung
Lesen Sie diesen Blog-Beitrag und erfahren Sie mehr über die Bedrohung durch Schwachstellen in der Speicherverwaltung, deren Ursachen und wie Sie Ihr System schützen können.
Autor
Name des Herausgebers
TuxCare
Logo des Herausgebers

Möchten Sie das Patchen von Sicherheitslücken ohne Kernel-Neustart, Systemausfallzeiten oder geplante Wartungsfenster automatisieren?

Erfahren Sie mehr über Live-Patching mit TuxCare

Werden Sie ein TuxCare-Gastautor

Los geht's

E-Mail

Beitreten

4,500

Linux & Open Source
Fachleute!

Abonnieren Sie
unseren Newsletter