Was ist Stack Clash und was kann ich dagegen tun?


27

Ich habe von einer neuen Sicherheitslücke namens Stack Clash gehört, die anscheinend mehrere Unix-ähnliche Systeme betrifft (nicht nur Linux, sondern auch BSDs und Solaris).

  • Was ist es? Wie kam es zu einem Fehler mit mehreren Betriebssystemen?
  • Wie schütze ich meine Systeme?

Antworten:


29

Stack Clash ist ein Exploit, der auf einer ziemlich alten Technik basiert. Der von einem Prozess verwendete Speicher ist in zwei Bereiche unterteilt - den Stapel und den Heap . Man stellt sich im Allgemeinen vor, dass der Stapel nach unten und der Haufen nach oben wächst. Was passiert , wenn die entweder genug wächst , um Zusammenstoß mit dem anderen? Was passiert im Allgemeinen, wenn der Stack so groß wird, dass er in nicht zusammenhängende Speicherbereiche eindringt? Die ursprüngliche Sicherheitsanfälligkeit ist 12 Jahre alt, und die Linux-Kernel-Entwickler haben sie mithilfe einer Schutzseite vorübergehend behoben . Den Forschern von Qualys ist es jedoch gelungen, dies trotz der Schutzseite auszunutzen.

Ars Technica berichtet :

Stack-Clash-Sicherheitslücken sind langsam allgemein bekannt geworden , zuerst 2005 mit den Erkenntnissen des Sicherheitsforschers Gaël Delalleau und fünf Jahre später mit der Veröffentlichung einer Linux-Sicherheitslücke durch den Forscher Rafal Wojtczuk. Linux-Entwickler haben einen Schutz eingeführt , der Stapelkonflikte verhindern soll. Die heutigen Untersuchungen zeigen jedoch, dass es für Angreifer relativ einfach ist, diese Maßnahme zu umgehen.

Der von Qualys entwickelte primäre Proof-of-Concept-Angriff nutzt eine mit CVE-2017-1000364 indizierte Sicherheitsanfälligkeit aus. Die Forscher von Qualys entwickelten auch Angriffe, die Stack Clash verwenden, um verschiedene Sicherheitsanfälligkeiten auszunutzen, darunter CVE-2017-1000365 und CVE-2017-1000367. In Kombination mit CVE-2017-1000367, einem kürzlich von Qualys entdeckten Fehler in Sudo, können lokale Benutzer beispielsweise Sudo ausnutzen, um vollständige Root-Berechtigungen für eine viel größere Bandbreite von Betriebssystemen zu erhalten. Qualys war bisher nicht in der Lage, die Exploits dazu zu bringen, Code aus der Ferne auszuführen. Die einzige Remoteanwendung, die sie untersuchten, war der Exim-Mailserver, der sich zufällig als nicht ausnutzbar herausstellte. Qualys sagte, es könne nicht ausgeschlossen werden, dass solche Remotecodeausführungs-Exploits existieren. Qualys gab bekannt, dass die Proof-of-Concept-Exploits zu einem späteren Zeitpunkt veröffentlicht werden.

[...] Weitere Informationen finden Sie in diesem ausführlichen technischen Ratgeber von Qualys und in dieser technischen Analyse von grsecurity .

Zitiert den LWN-Artikel über das ursprüngliche Update von 2010:

Da Linux Prozess-Stack- und Heap-Seiten nicht trennt, ist es möglich, eine Stack-Seite in eine benachbarte Heap-Seite zu überlagern. Das bedeutet, dass ein ausreichend tiefer Stapel (zum Beispiel von einem rekursiven Aufruf) möglicherweise Speicher im Heap belegt. Ein Programm, das auf diese Heap-Seite schreiben kann (z. B. ein X-Client), könnte dann die Rücksprungadresse eines der Aufrufe manipulieren, um zu einem Ort seiner Wahl zu springen. Dies bedeutet, dass der Client den Server veranlassen kann, Code seiner Wahl auszuführen - beliebige Codeausführung -, die genutzt werden kann, um Root-Berechtigungen zu erlangen.

Die obige Beschreibung gilt für verschiedene Unix-ähnliche Kernel.

Während Ars Technica eine vorübergehende Lösung im Qualys Bericht erwähnt nicht beachten ( „die eingestellte  Fest rlimit Stach und RLIMIT_AS  von  lokalen Benutzern  und  Remote - Services  auf einen niedrigen Wert“), sei darauf hingewiesen, dass diese Sicherung nicht unbedingt gegen diese auszunutzen . Der einzig sichere Ausweg ist derzeit ein Upgrade. Laut der Sicherheitsanalyse:

Es sollte klar sein, dass Kernel-Versuche, dieses Problem zu lösen, notwendigerweise immer unvollständig sind, da das eigentliche Problem in dem Fehlen einer Stapelprüfung liegt. Da die echte Alternativlösung von der Wiederherstellung des gesamten Benutzerlandes abhängt, ist dies auf absehbare Zeit wahrscheinlich die einzig mögliche Lösung.

Das Beste, was wir jetzt tun können, ist, den Kernel auf eine gepatchte Version zu aktualisieren.

Der 2010-Exploit verwendete den X-Server, dieser verwendete sudo, der nächste könnte eines von vielen Userland-Programmen sein, die irgendwann mit erhöhten Rechten ausgeführt werden.

Qualys hat noch keinen Proof-of-Concept-Code für Exploits veröffentlicht (dies ist zu einem späteren Zeitpunkt geplant).


Mit CVE-2017-1000364 sind mehrere Ubuntu-Sicherheitshinweise verknüpft:

Beachten Sie auch, dass der CVE-Tracker mehrere Release / Kernel-Kombinationen als ausstehende Fixes auflistet .

Im Allgemeinen besteht die einfachste Lösung darin, Ihre Systeme so schnell wie möglich auf das neueste Kernelpaket zu aktualisieren.

Die relevanten Kernelversionen aus den USNs (gekeult mit for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'):

Ubuntu 17.04:
linux-image-4.10.0-24-lowlatency 4.10.0-24.28
linux-image-generic-lpae 4.10.0.24.26
Linux-Image-Generic 4.10.0.24.26
linux-image-4.10.0-24-generic-lpae 4.10.0-24.28
linux-image-4.10.0-24-generic 4.10.0-24.28
linux-image-lowlatency 4.10.0.24.26
Ubuntu 17.04:
linux-image-4.10.0-1008-raspi2 4.10.0-1008.11
linux-image-raspi2 4.10.0.1008.10
Ubuntu 16.10:
Linux-Image-PowerPC-Smp 4.8.0.56.69
Linux-Image-PowerPC-E500MC 4.8.0.56.69
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61
Linux-Image-4.8.0-56-PowerPC-E500MC 4.8.0-56.61
linux-image-4.8.0-56-lowlatency 4.8.0-56.61
Linux-Image-Generic 4.8.0.56.69
linux-image-4.8.0-56-generic 4.8.0-56.61
linux-image-powerpc64-emb 4.8.0.56.69
Linux-Image-Virtual 4.8.0.56.69
Linux-Image-PowerPC64-SMP 4.8.0.56.69
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61
Linux-Image-Generic-Lpae 4.8.0.56.69
linux-image-lowlatency 4.8.0.56.69
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61
Ubuntu 16.10:
linux-image-4.8.0-1040-raspi2 4.8.0-1040.44
linux-image-raspi2 4.8.0.1040.44
Ubuntu 16.04 LTS:
linux-image-powerpc64-smp-lts-utopic 4.4.0.81.87
linux-image-generic-lts-wily 4.4.0.81.87
linux-image-generic-lts-utopic 4.4.0.81.87
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104
linux-image-powerpc64-emb-lts-vivid 4.4.0.81.87
Linux-Image-PowerPC-E500MC 4.4.0.81.87
linux-image-generic-lpae-lts-xenial 4.4.0.81.87
linux-image-generic-lpae-lts-utopic 4.4.0.81.87
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104
linux-image-powerpc-e500mc-lts-wily 4.4.0.81.87
Linux-Image-4.4.0-81-PowerPC-E500MC 4.4.0-81.104
Linux-Image-Generika-lpae-lts-wily 4.4.0.81.87
linux-image-virtual-lts-vivid 4.4.0.81.87
linux-image-virtual-lts-utopic 4.4.0.81.87
linux-image-virtual 4.4.0.81.87
linux-image-powerpc64-emb-lts-wily 4.4.0.81.87
linux-image-lowlatency-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-vivid 4.4.0.81.87
linux-image-powerpc64-emb 4.4.0.81.87
linux-image-powerpc-smp-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-generic 4.4.0-81.104
linux-image-powerpc64-smp-lts-vivid 4.4.0.81.87
linux-image-lowlatency-lts-wily 4.4.0.81.87
linux-image-4.4.0-81-lowlatency 4.4.0-81.104
Linux-Image-Generic 4.4.0.81.87
linux-image-lowlatency-lts-xenial 4.4.0.81.87
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.87
linux-image-powerpc64-emb-lts-utopic 4.4.0.81.87
linux-image-generic-lts-xenial 4.4.0.81.87
linux-image-generic-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-utopic 4.4.0.81.87
Linux-Image-PowerPC-SMP 4.4.0.81.87
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104
Linux-Image-Generika-lpae-lts-vivid 4.4.0.81.87
linux-image-generic-lpae 4.4.0.81.87
linux-image-powerpc64-smp-lts-wily 4.4.0.81.87
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.87
linux-image-powerpc-smp-lts-wily 4.4.0.81.87
Linux-Image-Virtual-Lts-wily 4.4.0.81.87
Linux-Image-PowerPC64-SMP 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104
linux-image-powerpc-smp-lts-utopic 4.4.0.81.87
linux-image-powerpc-smp-lts-vivid 4.4.0.81.87
linux-image-lowlatency 4.4.0.81.87
linux-image-virtual-lts-xenial 4.4.0.81.87
linux-image-lowlatency-lts-utopic 4.4.0.81.87
Ubuntu 16.04 LTS:
linux-image-4.4.0-1016-gke 4.4.0-1016.16
Ubuntu 16.04 LTS:
linux-image- snapdragon 4.4.0.1061.54
linux-image-4.4.0-1061- snapdragon 4.4.0-1061.66
Ubuntu 16.04 LTS:
linux-image-4.4.0-1020-aws 4.4.0-1020.29
Ubuntu 16.04 LTS:
linux-image-raspi2 4.4.0.1059.60
linux-image-4.4.0-1059-raspi2 4.4.0-1059.67
Ubuntu 16.04 LTS:
Linux-Image-4.8.0-56-PowerPC-SMP 4.8.0-56.61 ~ 16.04.1
Linux-Image-4.8.0-56-PowerPC-E500MC 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-lowlatency 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-generic 4.8.0-56.61 ~ 16.04.1
linux-image-generic-hwe-16.04 4.8.0.56.27
linux-image-lowlatency-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61 ~ 16.04.1
linux-image-virtual-hwe-16.04 4.8.0.56.27
linux-image-generic-lpae-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61 ~ 16.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-smp-lts-xenial 4.4.0.81.66
linux-image-lowlatency-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104 ~ 14.04.1
Linux-Image-4.4.0-81-PowerPC-E500MC 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-lowlatency 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lpae-lts-xenial 4.4.0.81.66
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-generic 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lts-xenial 4.4.0.81.66
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.66
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.66
linux-image-virtual-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104 ~ 14.04.1
Ubuntu 14.04 LTS:
Linux-Image-PowerPC-E500MC 3.13.0.121.131
linux-image-lowlatency-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-emb 3.13.0-121.170
linux-image-generic-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc-smp 3.13.0-121.170
Linux-Image-3.13.0-121-PowerPC-E500MC 3.13.0-121.170
Linux-Image-3.13.0-121-PowerPC-E500 3.13.0-121.170
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170
Linux-Image-Generic-LTS-Quantal 3.13.0.121.131
linux-image-virtual 3.13.0.121.131
Linux-Image-PowerPC-E500 3.13.0.121.131
Linux-Image-Generic-LTS- Trusty 3.13.0.121.131
linux-image-3.13.0-121-generic 3.13.0-121.170
Linux-Image-Omap 3.13.0.121.131
linux-image-powerpc64-emb 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-smp 3.13.0-121.170
Linux-Image-Generic 3.13.0.121.131
Linux-Image-Highbank 3.13.0.121.131
linux-image-generic-lts- saucy 3.13.0.121.131
Linux-Image-PowerPC-SMP 3.13.0.121.131
linux-image-3.13.0-121-lowlatency 3.13.0-121.170
Linux-Image-Generic-Lpae-Lts-Saucy 3.13.0.121.131
linux-image-generic-lts-raring 3.13.0.121.131
Linux-Image-PowerPC64-SMP 3.13.0.121.131
linux-image-generic-lpae-lts- trusty 3.13.0.121.131
linux-image-generic-lpae 3.13.0.121.131
linux-image-lowlatency 3.13.0.121.131
Ubuntu 12.04 ESM:
Linux-Image-PowerPC-SMP 3.2.0.128.142
linux-image-3.2.0-128-virtual 3.2.0-128.173
linux-image-3.2.0-128-generic-pae 3.2.0-128.173
Linux-Image-Generic 3.2.0.128.142
linux-image-generic-pae 3.2.0.128.142
Linux-Image-Highbank 3.2.0.128.142
Linux-Image-3.2.0-128-Highbank 3.2.0-128.173
Linux-Image-3.2.0-128-PowerPC-SMP 3.2.0-128.173
linux-image-virtual 3.2.0.128.142
Linux-Image-PowerPC64-SMP 3.2.0.128.142
linux-image-3.2.0-128-omap 3.2.0-128.173
Linux-Image-3.2.0-128-PowerPC64-SMP 3.2.0-128.173
Linux-Image-Omap 3.2.0.128.142
linux-image-3.2.0-128-generic 3.2.0-128.173
Ubuntu 12.04 LTS:
linux-image-3.13.0-121-generic 3.13.0-121.170 ~ exact1
linux-image-generic-lpae-lts- trusty 3.13.0.121.112
Linux-Image-Generic-LTS- Trusty 3.13.0.121.112
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170 ~ exact1

Sudo

Der oben genannte Sudo-Fehler ist in USN-3304-1 vom 30. Mai 2017 enthalten:

Ubuntu 17.04:
sudo-ldap 1.8.19p1-1ubuntu1.1
sudo 1.8.19p1-1ubuntu1.1
Ubuntu 16.10:
sudo-ldap 1.8.16-0ubuntu3.2
sudo 1.8.16-0ubuntu3.2
Ubuntu 16.04 LTS:
sudo-ldap 1.8.16-0ubuntu1.4
sudo 1.8.16-0ubuntu1.4
Ubuntu 14.04 LTS:
sudo-ldap 1.8.9p5-1ubuntu1.4
sudo 1.8.9p5-1ubuntu1.4

Zusammenfassend sollte es also schon in den meisten Ubuntu-Versionen behoben sein, die noch unterstützt werden. Muss man nur updaten?
CJCombrink

@TheBadger nein, wie vom CVE-Tracker angegeben, werden einige Kombinationen immer noch als noch nicht freigegeben aufgeführt. Ich nehme an, dass weitere USNs veröffentlicht werden, sobald Korrekturen veröffentlicht werden.
muru

4
Aber ja, ein Update sollte ausreichen, eine zusätzliche Konfiguration ist nicht erforderlich.
muru

Wie kann ich überprüfen, ob dies Auswirkungen hat?
Daisy

1
@immibis laut folgendem Artikel sind es, aber die vorhandene Implementierung funktioniert nicht richtig: Erklärung des Stackguard-Fehlers durch Qualys Research Labs
Igor B

1

Wie kam es zu einem Fehler mit mehreren Betriebssystemen?

Um diesen Teil Ihrer Frage speziell zu beantworten:

Dieses Problem tritt aufgrund der Verwendung eines gemeinsam genutzten Adressraums für Heap (der nach oben wächst) und Stack (der nach unten wächst) auf.

Dieses Design ist auf vielen Systemen üblich, weshalb viele Systeme für dieselbe Schwachstellenklasse anfällig sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.