26.02.2014 Aufrufe

Linux-Magazin Clean Linux (Vorschau)

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Titelthema<br />

www.linux-magazin.de Kernelupdates 09/2013<br />

44<br />

Abbildung 2: Paradoxes auf einem per Ksplice gepatchten System: Die effektive Kernelversion ist höher als<br />

die des eigentlich installierten Pakets.<br />

messliche treiben und fallen daher ebenfalls<br />

flach. Auf der Habenseite bleibt das<br />

größere Zeitfenster bis zum unausweichlichen<br />

Reboot, während aktuelle Sicherheitslücken<br />

dennoch geschlossen sind.<br />

Beispiel Sicherheitslücke<br />

Die in CVE-2013-2094 [8] dokumentierte<br />

Sicherheitslücke eignet sich hervorragend<br />

zum Durchspielen der verschiedenen Ansätze<br />

beim Kernelupdate. Der Einfachheit<br />

halber beschränken sich die weiteren<br />

Ausführungen auf Red Hat und Suse.<br />

Das genügt für diesen Artikel, heißt aber<br />

nicht, dass die anderen Distributionen<br />

von dem Sicherheitsproblem verschont<br />

geblieben sind.<br />

Ausgangspunkt ist ein Fehler in der Funktion<br />

»perf_swevent_init()«, durch den ein<br />

lokaler Anwender Rootrechte erlangen<br />

kann. Als im Mai 2013 ein passender<br />

Exploit veröffentlicht wurde, waren 3.x-<br />

Kernel betroffen, wenn sie älter als Version<br />

3.8.9 waren. SLES 11 SP1 basierte<br />

auf 2.6.32 und blieb damit außen vor.<br />

RHEL 6, ebenfalls mit einem Kernel auf<br />

2.6.32-Basis ausgestattet, hatte diesen<br />

Bug allerdings rückportiert und stand<br />

Listing 2: Patch für CVE-2013<br />

-2094<br />

01 $ diff ‐Nur linux‐2.6.32‐358.6.1.el6/<br />

linux‐2.6.32‐358.6.2.el6/<br />

02 ‐‐‐ linux‐2.6.32‐358.6.1.el6/kernel/events/core.c<br />

2013‐03‐29 17:57:44.000000000 +0100<br />

03 +++ linux‐2.6.32‐358.6.2.el6/kernel/events/core.c<br />

2013‐05‐14 21:09:32.000000000 +0200<br />

04 @@ ‐5198,7 +5198,7 @@<br />

05 <br />

06 static int perf_swevent_init(struct perf_event<br />

*event)<br />

07 {<br />

08 ‐ int event_id = event‐>attr.config;<br />

09 + u64 event_id = event‐>attr.config;<br />

10 <br />

11 if (event‐>attr.type != PERF_TYPE_SOFTWARE)<br />

12 return ‐ENOENT;<br />

dadurch unter Zugzwang. Analoges<br />

galt für die RHEL-Klone oder den auf<br />

3.0 beruhenden SLES 11 SP2. Eine recht<br />

vollständige Liste der betroffenen <strong>Linux</strong>e<br />

findet sich unter [8].<br />

Kurz nach Bekanntwerden der Sicherheitslücke<br />

stellten die Distributoren aktualisierte<br />

Pakete bereit, die einen neuen<br />

Betriebssystemkern enthielten ([9],<br />

[10]). Dank Open Source kann der kundige,<br />

aber misstrauische Admin prüfen,<br />

ob der Fehler auch tatsächlich behoben<br />

ist (Listing 2). Im vorliegenden Fall gab<br />

es keinen Grund zur Beanstandung, der<br />

Fix war identisch mit der entsprechenden<br />

Änderung im Vanilla-Kernel.<br />

Damit war der Weg frei zum Offline-<br />

Patchen der Systeme. Was sollten aber<br />

Admins tun, wenn ein Reboot nicht so<br />

schnell möglich war? Die Versorgung der<br />

Ksplice-Benutzer erfolgte zügig [11]. Daneben<br />

gibt es aber Systeme, für die weder<br />

Ksplice noch Reboot in Frage kommen.<br />

Nichtstun ist nur eine Option, wenn die<br />

Sicherheit und Integrität der Systeme<br />

absolut keine Rolle spielt. Selbst eine<br />

Post-mortem-Analyse wäre bei dieser<br />

Lücke nicht trivial, da das Ausnutzen<br />

der betroffenen Kernelfunktion keinen<br />

Eintrag im normalen Systemprotokoll erzeugt.<br />

Selbst für diese Nachforschungen<br />

braucht der Admin daher die Software<br />

Systemtap [12] und muss Vorbereitungen<br />

treffen [13].<br />

Eine genaue Analyse des Problems zeigt,<br />

dass sich das Sicherheitsrisiko auch ohne<br />

Reboot und Ksplice minimieren lässt:<br />

Das Setzen der Sysctl-Variablen »kernel.<br />

perf_event_paranoid« auf den Wert »2«<br />

schließt zwar nicht das Loch an sich,<br />

macht aber den bekannten Exploit wirkungslos<br />

(Abbildung 3). Damit sind die<br />

entsprechenden Server wenigstens vor<br />

Sikript-Kiddies und Attacken von Anfängern<br />

sicher. Ein Reboot ist damit nicht<br />

unmittelbar notwendig – aber nur aufgeschoben:<br />

Im hier dargestellten Beispiel<br />

empfiehlt es sich, die Syscontrol-Änderung<br />

nach Aktivieren eines aktualisierten<br />

Kernels rückgängig zu machen.<br />

Das Ausliefern und Aktivieren neuer<br />

Kernel auf laufenden Systemen ist nur<br />

ein Teil der notwendigen Arbeit. Daneben<br />

gibt es Systeme, die zu einem späteren<br />

Zeitpunkt ein <strong>Linux</strong> bekommen oder<br />

auf anderem Wege im Rechnerverbund<br />

auftauchen. Es steht außer Frage, dass<br />

solche Rechner ebenfalls den als aktuell<br />

eingestuften Betriebssystemkern verwenden<br />

sollten. Voraussetzung dafür ist, Kernelupgrades<br />

in die Installationsprozesse<br />

und ‐routinen zu integrieren.<br />

Im einfachsten Fall genügt eine Patch-<br />

Prozedur als Teil der Postinstallation. In<br />

sicherheitskritischen Umgebungen kann<br />

dies heißen, dass die Ausstattung des Servers<br />

mit <strong>Linux</strong> in einem speziellen und<br />

abgesicherten Netzwerk abläuft und die<br />

Integration in die Produktion erst nach<br />

vollständigem Patchen erfolgt.<br />

Alternativ ist es möglich, ein bereits<br />

angepasstes Image zur Installation zu<br />

verwenden. Je nach Distribution und<br />

Deployment-Methode sind dem aber<br />

Grenzen gesetzt: Die von Suses Autoyast<br />

verwendeten Images beispielsweise sind<br />

per Prüfsumme und Signatur gesichert.<br />

Eine – wenn auch gut gemeinte – Manipulation<br />

ist ohne Herstellersupport nicht<br />

möglich.<br />

C-Library zum Schluss<br />

Vorsichtige Admins dehnen die Kernelupgrade-Problematik<br />

in Richtung C-Bibliothek<br />

aus. Neben dem Betriebssystemkern<br />

ist diese Library eine der tragenden<br />

Säulen eines <strong>Linux</strong>-Systems. Technisch<br />

gesehen zeigt sich die Situation hier aber<br />

entspannter. Ein Austausch ist während<br />

des Betriebs möglich. Sobald sich die Bibliothek<br />

auf dem System befindet, steht<br />

sie neu gestarteten Applikationen zur<br />

Verfügung. Bereits laufende Anwendungen<br />

verwenden allerdings bis zu einem<br />

Neustart den alten Code.<br />

Obwohl diese Inkonsistenz selbst beim<br />

Co-Hosting von komplexen Anwendungen<br />

keine Probleme machen sollte,<br />

bleibt ein mulmiges Gefühl. Kommt<br />

noch »nscd« als Caching-Software zum<br />

Einsatz, ist dessen Neustart beim Glibc-<br />

Update ebenfalls erforderlich. Die Erfahrung<br />

zeigt außerdem, dass Kernelupdates

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!