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