Beitrag von Prof. Dr. Stefan Brunthaler, Institut für Systemsicherheit Universität der Bundeswehr München
Ein Virus breitet sich aus, aber nicht jeder Mensch erkrankt daran. Wenn Computer-Viren sich ausbreiten, dann ist praktisch jeder Computer in irgendeiner Form davon betroffen. Was kann die Natur, was Software nicht kann? Über die fehlende Diversität heutiger Computersysteme und die Grenzen und Möglichkeiten, mehr Vielfalt in Computersysteme zu bringen.
Nicht alle Menschen werden von einer Grippeepidemie erfasst: Manche werden angesteckt, andere hingegen bleiben gesund. Die Natur hat sich durch den ständigen Prozess der Evolution einen besonders schlauen Mechanismus einfallen lassen, um diese Immunität zu gewährleisten: die sogenannte Biodiversität. Da sich die einzelnen Individuen einer Gruppe in mehrfacher Hinsicht unterscheiden, kann ein einzelnes Virus nicht alle Individuen in gleichem Ausmaß befallen. Dadurch ist unter anderem auch ein Fortbestand der Gruppe auch bei schwerwiegenden Erkrankungen gesichert. Dieser Effekt nutzt nicht nur den Menschen, sondern allen Lebewesen.
In der Computersicherheit konstatieren wir das genaue Gegenteil: Malware breitet sich nicht nur rasend schnell aus, sondern befällt alle verwundbaren Systeme. Würde man einen Biologen um Rat fragen, dann wäre die Ursache schnell identifiziert: Computersysteme – also Hardware und Software – folgen von der Organisationsform her einer Monokultur. Mithin sind wenige Komponenten in praktisch allen Systemen vorhanden, z. B. Betriebssysteme (Windows in Desktop Computern, Android & iOS in mobilen Geräten), Browser (Google Chrome, Mozilla Firefox, Apple Safari), CPUs (Intel x86, ARM Prozessoren), etc. Diese Komponenten sind absolut identisch und bieten daher keine prophylaktische Diversität an.
Ein konkretes Beispiel: Google Chrome hat derzeit einen Marktanteil von über 60 %. Da es mehrere hundert Millionen Desktop PCs gibt, verwenden also fast zwei Drittel davon – im Mittel gesehen – Google Chrome. Findet ein Angreifer eine Schwachstelle in Google Chrome, sind also genau diese zwei Drittel aller Desktop PCs von exakt der gleichen Schwachstelle betroffen und können durch einen gemeinsamen Angriff ausgenutzt werden (Abb. 1). Gleiches gilt für Apple Safari auf iPhones, iPads und Apple Watches.
Warum also folgen Computersysteme einer Monokultur? Dies liegt im Wesentlichen an der Geschichte und den für Computer hilfreichen Vorteilen der Monokultur. Ein solcher Vorteil ist z. B. eine äußerst einfache Verteilung von Software- und Hardware-Komponenten. Software wurde bis vor kurzem auf physikalischen Medien, mithin Disketten oder CDs, ausgeliefert. Diese Medien automatisch mit der exakt gleichen Software zu bespielen oder exakt die gleiche Hardware in großen Mengen herzustellen erlaubt es Herstellern, erhebliche Größeneffekte zu erzielen. Minimale Veränderungen in diesen Herstellungsprozessen wären exorbitant teuer und daher betriebswirtschaftlich nicht zu rechtfertigen.
In der ersten wissenschaftlichen Arbeit zu dem Thema [1] werden diese physikalischen Medien als eines der größten Hindernisse zur praktischen Umsetzung einer Diversifizierung von Software gesehen. Erst seit kurzem erfolgt die Verteilung von Software nicht mehr durch die physikalischen Medien, sondern durch Netzwerke, allen voran das Internet.
Windows holt sich Updates automatisch über das Internet und mobile Endgeräte verwenden durchwegs App Stores der jeweiligen Hersteller. Diese „Digitalisierung“ der Verteilung ermöglicht es uns erstmalig, Software durch den Hersteller oder den App Store Betreiber kosteneffizient zu diversifizieren. Eine Studie aus dem Jahr 2015 hat die Kosten der Diversifizierung des Firefox Web Browsers auf ca. 7 US Cents beziffert [2]. Die damals berechneten Kosten sind heute aufgrund der gestiegenen Effizienz und gleichzeitig gesunkenen Kosten im Cloud Computing und Storage Bereich weiter gesunken.
Ziel der Forschung im Bereich „Software Diversity“ ist es, auch große Software Systeme vollständig automatisch und transparent zu diversifizieren. Diese Charakteristika – automatisch und transparent – gelten dabei in zweifacher Hinsicht.
Zum einen sollen Anwender nicht durch die Diversifikation ihrer Software beeinträchtigt werden. Idealerweise wissen die Anwender gar nicht, dass ihre Software diversifiziert wurde. Zum andern sollen auch Programmierer möglichst nicht durch die Diversifizierung beeinträchtigt werden. Sollten Programme durch den Programmierer manuell verändert werden müssen, entstehen zusätzliche Kosten, welche die wenigsten Hersteller tragen können oder wollen.
Grundsätzlich eignen sich sogenannte sprachbasierte Transformationen, wie sie z. B. im Compilerbau verwendet werden, besonders gut, um Software automatisch und transparent zu diversifizieren. Um beispielsweise das Speicherabbild eines Programms zu diversifizieren, kann ein Compiler während des Übersetzungsvorgangs verschiedene Zufallsexperimente durchführen, um entweder Entscheidungen des Compilers zu randomisieren oder aber auch zufallsgesteuerte, separate und benigne Code Fragmente in ein Programm einzubauen (Abb. 2). Ein derartig diversifiziertes Programm verändert die grundlegenden Annahmen, die ein Aggressor tätigen muss, um einen Angriff erfolgreich durchzuführen.
In unserer heutigen Monokultur kann ein Angreifer mit hoher Wahrscheinlichkeit erraten, welche Software verwendet wird und wie sich deren Speicherabbildungen zur Laufzeit manifestieren. Diversifizierte Software invalidiert derartige Annahmen zum Großteil, was Angreifer in einen Zugzwang bringt. Selbstverständlich bleibt ein gewisses Restrisiko, da die Diversifizierung von Software ipso facto nur probabilistische Sicherheit bieten kann – analog zur Biodiversität in Biologie und Natur: Einzelne Individuen sind betroffen, aber die Gesamtheit bleibt bestehen.
Der Fokus auf Compiler-gestützte Diversifizierungstechniken hat einen anderen wichtigen Vorteil: Größtmögliche Kompatibilität mit existierenden Software-Systemen. Durch die Diversifikation während der Übersetzungszeit können beispielsweise auch komplexe Software-Komponenten diversifiziert werden. So konnten in vorangegangener Forschungsarbeit ganze Betriebssysteme (Linux) und Web Browser (Chrome und Firefox) vollständig kostenneutral durch Software Diversity abgehärtet werden.
Software Diversity kann keine Logikfehler im Programm erkennen und verhindern. Diese Art von Fehler wird also auch in einem diversifizierten Programm angreifbar sein. Die Manifestation des Fehlers kann aber vom Originalprogramm divergieren und somit auch die Angriffsfläche eines Programms verändern und idealerweise auch verkleinern.
Software Diversity eignet sich u. a. besonders gut dazu, die Laufzeit Darstellung eines Programms zufallsgesteuert zu variieren. Als solches eignet sich Software Diversity unter anderem dazu, verschiedene Varianten von mikro-architektonischen Seitenkanälen (z. B. Spectre) signifikant zu erschweren. Dies ist derzeit ein Forschungsgegenstand am Lehrstuhl des Autors, erste positive Resultate wurden bereits erzielt.
Literatur
[1]: F. B. Cohen, Operating System Protection through Program Evolution.
[2]: A. Homescu, T. Jackson, S. Crane, S. Brunthaler, P. Larsen, M. Franz, Large-Scale Automated Software Diversity-Program Evolution Redux, IEEE Transactions on Dependable and Secure Computing.
Erstmals erschienen in: TiB Ausgabe 2019 November/Dezember