Translated message

A translation of this page exists in English.

Kernel Local Privilege Escalation "Dirty COW" - CVE-2016-5195

Public Date: October 19, 2016, 12:00 am
Updated -
Resolved Status
Important Impact

Die Red Hat Product Security wurde auf eine Sicherheitslücke im Linux-Kernel hingewiesen, der CVE-2016-5195. zugewiesen wurde. Dieses Problem wurde öffentlich bekannt gemacht am 19. Oktober 2016 und wurde als wichtig klassifiziert. In den Medien wird das Problem auch „Dirty COW“ genannt.

Hintergrundinformationen

Eine Race Condition wurde entdeckt in der Art und Weise, wie das Speicheruntersystem des Linux-Kernels Fehler beim "Copy-On-Write" (COW) von privaten, schreibgeschützten Speicher-Mappings handhabte. Ein nicht privilegierter lokaler Benutzer kann diese Schwachstelle ausnutzen, um Schreibzugriff auf eigentlich schreibgeschützte Speicher-Mappings zu erhalten und somit seine Rechte auf dem System auszuweiten.

Dies kann von einem Angreifer dazu missbraucht werden, um Anweisungen zur Rechteausweitung in vorhandene setuid-Dateien einzufügen. Ein Exploit, das diese Technik verwendet, wurde bereits entdeckt. Diese Schwachstelle betrifft die meisten modernen Linux-Distributionen.

Red Hat Product Security hat die Sicherheitsauswirkungen dieses Updates als wichtig eingestuft.

Betroffene Produkte

Folgende Red Hat Produktversionen sind betroffen:

  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 7
  • Red Hat Enterprise MRG 2
  • Red Hat Openshift Online v2
  • Red Hat Virtualization (RHEV-H/RHV-H)

Beschreibung und Auswirkung des Angriffs

Dieser Fehler ermöglicht es einem Angreifer mit einem lokalen Systemaccount, Binärdateien auf der Festplatte zu verändern und dabei die üblichen Berechtigungsmechanismen zu umgehen, die normalerweise eine Änderung ohne die entsprechenden Rechte verhindern würden. Dazu wird der madvise(MADV_DONTNEED) Systemaufruf ausgeführt, während die Seite der ausführbaren Datei im Speicher gemappt ist.

Diagnostizieren Ihrer Anfälligkeit

Untersuchen Sie, ob Ihr System anfällig ist

Maßnahmen

Allen Red Hat Kunden, die betroffene Versionen des Kernels nutzen, wird dringend empfohlen, ihren Kernel zu aktualisieren, sobald Patches verfügbar sind. Einzelheiten über betroffene Pakete sowie empfohlene Vorbeugungsmaßnahmen finden Sie unten. Ein Systemneustart ist erforderlich, um das Kernel-Update anzuwenden.

Updates für betroffene Produkte

Ein Kpatch wird für Kunden von Red Hat Enterprise Linux 7.2 oder höher zur Verfügung gestellt. Bitte öffnen Sie ein Support-Ticket, um Zugriff auf das Kpatch zu erhalten.

Weitere Informationen über Kpatches siehe: Wird Kernel-Patching in laufenden Betrieb (kpatch) in RHEL 7 unterstützt? (auf Englisch)


Produkt Paket Advisory/Update
Red Hat Enterprise Linux 7 kernel RHSA-2016:2098
Red Hat Enterprise Linux 7 kernel-rt RHSA-2016:2110
Red Hat Enterprise Linux 7.1 Erweiterter Update-Support* kernel RHSA-2016:2118
Red Hat Enterprise Linux 6 kernel RHSA-2016:2105
Red Hat Enterprise Linux 6.7 Erweiterter Update-Support* kernel RHSA-2016:2106
Red Hat Enterprise Linux 6.6 Erweiterter Update-Support* kernel RHSA-2016:2128
Red Hat Enterprise Linux 6.5 Fortgeschrittener Update-Support** kernel RHSA-2016:2120
Red Hat Enterprise Linux 6.4 Fortgeschrittener Update-Support** kernel RHSA-2016:2133
Red Hat Enterprise Linux 6.2 Fortgeschrittener Update-Support** kernel RHSA-2016:2132
Red Hat Enterprise Linux 5 kernel RHSA-2016:2124
Red Hat Enterprise Linux 5.9 Long Life kernel RHSA-2016:2126
Red Hat Enterprise Linux 5.6 Long Life kernel RHSA-2016:2127
RHEL Atomic Host kernel ausstehend
Red Hat Enterprise MRG 2 kernel-rt RHSA-2016:2107
Red Hat Virtualization (RHEV-H/RHV-H) kernel ausstehend

*Eine aktive EUS-Subskription ist erforderlich, um auf dieses Patch zuzugreifen.

Bitte kontaktieren Sie den Red Hat Sales oder Ihren jeweiligen Sales-Ansprechpartner, um zu erfahren, ob Ihr Account eine aktive EUS-Subskription hat.

Was ist die Red Hat Enterprise Linux Erweiterter Update-Support Subskription? (auf Englisch)

**Eine aktive AUS-Subskription ist erforderlich, um auf dieses Patch in RHEL 6.X AUS zuzugreifen.

Vorbeugung

EINRICHTEN UND VERWENDEN DES SYSTEMTAP-WORKAROUNDS

Bei dem systemtap-Workaround wird ein Kernel-Modul erstellt (wie ein Treiber), das ein systemtap-Skript einsetzt, um den gefährdeten Systemaufruf abzufangen. Dies stellt lediglich eine Übergangslösung dar, bis ein aktualisierter Kernel in den betroffenen Rechner gebootet wird. Diese Übergangslösung erfordert keinen Neustart und kann für RHEL 5, 6 und 7 verwendet werden.

Es ist nicht möglich, ein Modul zu erstellen, das für alle Kernels verwendet werden kann, nicht einmal für eine Kernel-Familie (z.B. alle RHEL 5, 6 oder 7 Kernels). Jede einzelne Kernel-Version erfordert eine separate .ko für den jeweiligen Kernel (uname -r).

ANFORDERUNGEN

Die folgenden Pakete sind erforderlich, um das systemtap-Modul zu erstellen:

  • systemtap-client
  • systemtap-devel
  • gcc (sowie Abhängigkeiten)
  • kernel-devel-`uname -r`
  • kernel-debuginfo-`uname -r`
  • kernel-debuginfo-common-`uname -r`

WARNUNG: Das „kernel“ Paket muss von derselben Version sein wie der laufende Kernel. Wenn Sie die neueste Version herunterladen, kann systemtap nicht funktionieren. Bitte laden Sie die exakte Version des laufenden Kernels herunter.

WO BEKOMME ICH DIE DEBUGINFOS

Siehe Knowledgebase https://access.redhat.com/solutions/9907

WIE ERSTELLE ICH DAS MODUL

1. Nachdem Sie die Pakete installiert haben, erstellen Sie eine Datei namens dirtycow.stp mit dem folgenden Inhalt:

probe kernel.function("mem_write").call ? {
        $count = 0
}

probe syscall.ptrace {  // includes compat ptrace as well
        $request = 0xfff
}

probe begin {
        printk(0, "CVE-2016-5195 mitigation loaded")
}


probe end {
        printk(0, "CVE-2016-5195 mitigation unloaded")
}
										

2. Speichern Sie die Datei. Kompilieren Sie sie mit dem folgenden Befehl:

# stap -g -p 4 -m dirtycow_`uname -r|tr -cd [:digit:]` dirtycow.stp
dirtycow_26183985.ko
											

In dem obigen Beispiel trägt die .ko Datei eine Nummer, die ihre Kernel-Version identifiziert – in diesem Fall 2.6.18-398.el5. Dieses Modul kann auch in anderen Systemen mit dieser exakten Kernel-Version verwendet werden, ohne dazu debugs/debuginfos/systemtap installieren zu müssen. Kopieren Sie einfach die Datei auf den Server mit derselben Kernel-Version und fahren Sie mit dem nächsten Schritt fort.

3. Um das Modul zu laden, führen Sie den Befehl insmod <.ko-Datei> aus. Zum Beispiel:

# insmod dirtycow_26183985.ko
												

4. Vergewissern Sie sich, dass das Modul geladen ist:

# lsmod| grep dirty
dirtycow_26183985   101688  0
													

5. Um das Module zu entladen, verwenden Sie den rmmod-Befehl oder starten Sie das System neu.

Wichtig

  • Das Modul bleibt nicht über einen Neustart hinweg bestehen, denn nach einem Systemneustart wird es nicht wieder geladen.
  • Nach einem Neustart muss das Modul daher erneut geladen werden.
  • Falls der Kernel aktualisiert oder geändert wird, dann wird dieses Modul nicht in den neuen Kernel geladen.
  • Falls Sie in einen anderen Kernel booten, in dem diese Sicherheitslücke noch nicht behoben ist, sollten Sie ein neues, kompatibles Modul laden.
  • Ein Kernel, in dem diese Sicherheitslücke behoben wurde, benötigt dieses Modul nicht.

Siehe Fehlerbericht 1384344 für detaillierte Schritte zur Vorbeugung.

Comments