Fix die Patches updaten

Weshalb aktuelle Software für die IT-Sicherheit so wichtig ist

Datum
14. März 2017
Autor

Für IT-Abteilungen sind sie eine Plage und Quell wiederkehrenden Ungemachs: Softwareaktualisierungen. Die Entwickler bieten sogenannte Patches, Hotfixes oder Security Updates an, um Sicherheitslücken zu schließen. Die Hersteller besonders weit verbreiteter Produkte wie Microsoft, Adobe oder SAP fassen inzwischen ihre Aktualisierungen zusammen und veröffentlichen sie am sogenannten Patchday. So können die Systemverantwortlichen schon im Voraus Zeitfenster für die Aktualisierung einplanen. Microsoft, Adobe und SAP beispielsweise veröffentlichen ihre Flicken immer am zweiten Dienstag des Monats.

Käfer flicken

Lochstreifen mit sichtbaren Patches

Der Begriff Patch stammt aus der Zeit der Lochkarten. Um kleinere Softwarefehler zu korrigieren wurden Löcher zugeklebt (patchen) oder gestanzt. Heute liegt die Schwierigkeit in den unerwarteten Auswirkungen von Patches. Oft sind die Schwachstellen bereits öffentlich bekannt, darum müssen die Aktualisierungen in kürzester Zeit entwickelt und veröffentlicht werden. Die Folge sind Patches, die Schwachstellen nur ungenügend ausmerzen oder neue Fehler auslösen. Um die Aktualisierungen gründlich zu testen oder von Erfahrungen anderer Nutzer zu profitieren, liegt es im Interesse der Systemverantwortlichen, die Patches nicht sofort nach Erscheinen zu installieren.

Patchen ist zeitkritisch

Normale Updates sollen Programmverbesserungen, beispielweise neue Funktionen, enthalten. So lange sie nicht installiert werden, können die Anwender die Software ohne Einschränkungen nutzen, profitieren aber nicht von den neuen Funktionen. Anders Patches, Hotfixes und Security Updates. Sie sollen Sicherheitslücken, die durch Softwarefehler entstehen, schließen. Solange die Patches nicht installiert sind, sind die Systeme angreifbar.

Ausnutzbare Schwachstellen

Schwachstellen, die systematisch ausgenutzt werden können, heißen Exploits. Viele Exploits nutzen den sogenannten Pufferüberlauf, um unerwünschten Programmcode auszuführen, weil Programmcode und Daten im gleichen Speicher liegen.

Ein Beispiel

Eine ausnutzbare Sicherheitslücke kann so entstehen: Ein Programmierer entwickelt eine Routine, um Bilddateien in den Speicher laden zu können. Dafür reserviert sein Programm einen bestimmten Speicherbereich, beispielsweise ein Megabyte groß. Der Programmierer sieht keine Überprüfung der Dateigröße vor. Die Routine wird mit verschiedenen Bilddateien getestet – alle kleiner als ein Megabyte – und funktioniert tadellos. Lädt ein Anwender eine Datei, die größer ist als ein Megabyte, überschreibt der Ablauf Bereiche im Speicher, die über den reservierten Bereich hinausgehen. In diesem Speicher können andere Variablen, Programmcodes oder Verweise auf andere Programmteile liegen. Wenn ein solcher Verweis unabsichtlich überschrieben wird und der Prozessor diesem Verweis folgt, versucht er, Programmcode aus einem Speicherbereich zu lesen, in dem die Daten (beispielsweise ein Textdokument) gespeichert sind. Der Prozessor versteht die Programmanweisungen nicht, das Programm stürzt ab.

Ein Angreifer kann diesen Programmfehler ausnutzen. Er passt das ausgewählte Bild so an, dass der Verweis auf einen Speicherbereich zeigt, in den er vorher seinen Schadcode geladen hat. In unserem Beispiel kann dieselbe vorbereitete Bilddatei mit einer Größe von mehr als einem Megabyte benutzt werden, um den Verweis zu manipulieren und gleichzeitig Schadcode im Speicher abzulegen. Der Prozessor folgt dem manipulierten Verweis und führt – wie vom Angreifer gewünscht – den Schadcode aus.

Unser Beispiel ist stark vereinfacht und Schutzmechanismen wie No Execute sollen schon seit Jahren verhindern, dass gespeicherte Daten als ausführbarer Programmcode intrpretiert werden können. Doch mit einigen Tricks funktionieren Speicherüberläufe heute noch wie beschrieben.

Abhilfen: Typsichere Sprachen …

Einige Programmiersprachen wie C oder C++ prüfen die Einhaltung von Speichergrenzen nicht von sich aus. Das Risiko eines Pufferüberlaufs kann mit Programmiersprachen, die Speicherbereiche überwachen, reduziert werden. Java beispielsweise überwacht den Speicher des ausgeführten Codes. Doch auch hier gibt es Pufferüberläufe durch Fehler in der Java-Umgebung selbst.

… und Secure by Design

Software, die von Anfang an sicher programmiert wird, folgt dem Secure-by-Design-Prinzip. Alle Teile werden so entwickelt, dass ein möglicher Missbrauch erwartet und verhindert wird. Dazu gehört, sämtliche Eingabedaten auf ihre Gültigkeit zu prüfen. Der Ablauf aus unserem Beispiel müsste prüfen, ob die Grafikdatei größer ist als ein Megabyte. Ist sie es, müsste der Ablauf mit einem definierten Fehler abbrechen.

Komplikationen

Die Überwachung der Speicherbereiche durch Programmiersprachen und das Secure-by-Design-Konzept werden seit Jahren genutzt. Weshalb kommen trotzdem immer wieder  gravierende und weitverbreitete Sicherheitslücken vor?

Einige Programmteile und Bibliotheken werden sehr oft verwendet. Die OpenSSL-Bibliothek beispielsweise wird in Webservern, Mobiltelefonen, VoIP-Telefonen und Routern eingesetzt, um HTTPS-Verbindungen zu verschlüsseln. Entsprechend waren diese Geräte auch vom Heartbleed Bug betroffen. Ähnliches gilt für Programmbibliotheken, die von Webseiten verwendet werden. Fehler in der Grafikbibliothek ImageMagick erlaubten die Ausführung fremder Programmcodes auf zahlreichen Webservern.

Die weite Verbreitung von Geräten mit Sicherheitslücken oder mangelhaften Voreinstellungen schafft weitere Angriffsziele. Das Botnetz Mirai bediente sich weniger Gerätetypen, die aber so weit verbreitet sind, dass die Armada an missbrauchen Geräten mächtige und wirkungsvolle DDoS-Attacken durchführen konnte.

Kein Silberstreifen am Horizont

Es gibt gute Gründe, die Software aktuell zu halten. Je länger Sicherheitslücken bekannt sind, um so wahrscheinlich ist es, dass Schwachstellen ausgenutzt werden. Ein ausgereiftes Patch Management hilft, die Angriffsmöglichkeiten zu minimieren.

Wenn betroffene Systeme nicht mehr aktualisiert werden, bleiben kaum noch Optionen. Das System kann aktualisiert oder ersetzt werden. Systeme mit Windows 8 sollten beispielsweise auf Windows 10 aktualisiert werden.

Außerdem kann durch zusätzliche Sicherheitsmaßnahmen das Ausnutzen von Schwachstellen verhindert werden. Viele Internet-of-Things-Geräte könnten beispielsweise durch eine Firewall vom Internet abgeschirmt werden und nur noch über ein Virtual Private Network (VPN) auf das Internet zugreifen.