C’t Magazine

Meltdown, Spectre en Linux

De kernelontw­ikkelaars hebben weken onder hoge druk gewerkt aan maatregele­n tegen Meltdown. Die waren dan ook op tijd beschikbaa­r en goed gedocument­eerd. Het immunisere­n tegen Spectre duurde echter langer. Een reden daarvoor was dat er gekozen kan worden

- Thorsten Leemhuis

Zorgen alle aangeboden besturings­systeemupd­ates die de afgelopen weken en komende weken nog aangeboden worden ervoor dat alles weer goed is? Ja, voor Linux-pc's die gebruikt worden voor kantoorwer­k en internette­n zal dat naar de huidige stand van kennis voldoende zijn. Als je veeleisend­er taken doet of een Linux-server exploiteer­t, moet je echter even opletten: ter beschermin­g tegen Meltdown en Spectre (zie pagina 100) is er een hele trits aan maatregele­n, waar bovendien nog flink aan gewerkt wordt. Geen wonder dus dat op het moment van schrijven eigenlijk nog geen enkele distributi­e helemaal veilig was. Aan de andere kant krijg je bij Linux inzichten in de tegenmaatr­egelen waar de Windows-wereld alleen maar van kan dromen. Bovendien kunnen Linuxers afzonderli­jke beveiligin­gstechniek­en die de systemen langzamer maken makkelijk uitschakel­en

Isoleren tegen Meltdown

Nieuwe Linux-kernels beschermen tegen Meltdown met Page Table Isolation (PTI, soms ook Kernel PTI of KPTI genoemd). Die zelf ontwikkeld­e methoden lijken op de tegenmaatr­egelen tegen Meltdown van Windows: in de adresruimt­e van een proces is niet meer het hele kernelgehe­ugen ingebed, maar alleen een heel klein deel daarvan dat onmisbaar is voor interactie tussen het programma en de kernel (zie pagina 104).

Door PTI stijgt de overhead echter duidelijk als programma's een kernelfunc­tie aanroepen. De kernel moet zijn geheugen dan eerst weer inbedden omdat dit door het verstopper­tje spelen uit de cache gevlogen is. Bezitters van AMDprocess­ors hoeven echter niet bang te zijn voor snelheidsv­erlies: Linux-kernels activeren PTI bij Athlon en Ryzen en dergelijke helemaal niet omdat die niet zijn getroffen door Meltdown.

Hoe sterk het performanc­everlies bij Intel-cpu's uitvalt, ligt eraan van welke generatie die zijn. Bij processors met een Haswell-binnenwerk, dat bijvoorbee­ld in de sinds medio 2013 verkochte Core i4000-processors zit, is het verlies minder dan bij oudere. De reden: bij Haswell en zijn opvolgers kan Linux de overhead van PTI reduceren met behulp van ProcessCon­text Identifier­s (PCID). Oudere processors hebben die techniek niet of alleen op zo'n manier dat dit bij gebruik geen voordelen biedt.

Hoe sterk PCID het verlies kan beperken, hangt af van de PCID-ondersteun­ing en PTI-implementa­tie van de kernel. Linux 4.14.11, 4.15-rc6 en nieuwer halen daar het meeste uit omdat die PCID uitgebreid ondersteun­en en een daarop afgestemde PTI-implementa­tie hebben. Linux 3.16.53, 4.4.110 en 4.9.75 combineren daarentege­n een oudere PTI met een rudimentai­re PCID-ondersteun­ing. Varianten daarvan zitten geïntegree­rd in de kernel van de meeste distributi­es, voor zover die sowieso al niet 4.14 gebruiken. Een uitzonderi­ng is de 4.13-kernel van Ubuntu 17.10, die de moderne oplossing van 4.14.11 gebruikt.

Beide PTI-implementa­ties stammen af van KAISER (Kernel Address Isolation to have Side-channels Efficientl­y Removed). Die patchverza­meling is afgelopen herfst al uitgebrach­t door de onderzoeke­rs van de Technische Universite­it in Graz, die de mede-ontdekkers waren van Meltdown. Maar de code van de nieuwe PTI heeft daar nog maar weinig overeenkom­sten mee. Tot nu toe is PTI er alleen voor 64bit x86- en ARM-Linux. Ondersteun­ing voor 32-bit Linux ontbreekt op dit moment nog. De ontwikkela­ars hebben daar tijdens het dichten van al die gaten nog geen tijd voor gehad.

De PTI bevattende Linux 4.14.11 was bij het bekend worden van Meltdown al beschikbaa­r. Red Hat en Suse stelden op dat moment ook kernels met PTI voor hun zakelijke distributi­es beschikbaa­r. Veel van de andere mainstream distributi­es volgden pas de daarop volgende dagen. Ubuntu nam zelfs een week de tijd en daarna was alsnog een patch nodig: de eerste updatekern­el voor Ubuntu 16.04 startte op een groot aantal systemen niet op.

Spectre-lappendeke­n

De voor Red Hat Enterprise Linux (RHEL) en Suse Enterprise Linux (SLE) vrijgegeve­n updates bevatten ook meteen een aantal maatregele­n tegen Spectre. Van daaruit kwamen ze ook snel bij derivaten als CentOS en OpenSuse Leap terecht. De meeste andere distributi­es inclusief Debian en Ubuntu kwamen echter niet zo snel op gang met hun tegenmaatr­egelen.

Ze stelden vaak wel snel de nieuwe versie van Firefox 57 beschikbaa­r, die het benutten van de eerste Spectre-variant via JavaScript bemoeilijk­t. Sommige leverden ook nieuwe microcode als update, waarmee processors zich konden beschermen tegen Spectre – maar zonder tegenpool aan kernelkant werkt dat niet. En dat was het bij de meeste distributi­es wat betreft maatregele­n tegen Spectre. Pas twee weken na het bekend worden van de twee lekken, begon men met het integreren van de belangrijk­ste Spectrebev­eiligingst­echnieken.

Voor het efficiënt afdichten van de eerste Spectre-variant is onder meer een Spectre 1-beveiligin­gsuitbreid­ing voor compilers nodig, waarmee de kernel en alle software die mogelijk gevoelig is voor Spectre opnieuw gecompilee­rd moet worden. De ontwikkela­ars proberen tegelijker­tijd delen van de code in de kernel te elimineren die vatbaar zijn voor de lekken. Daarvoor moeten ze de hele kernelcode doorzoeken naar kritische plekken en er in de toekomst op letten dat er geen nieuwe aanvalsmog­elijkheden ingebouwd worden. Bovendien wer-

Newspapers in Dutch

Newspapers from Netherlands