Die Tagesschau und andere Allgemeinnachrichten berichten über eine IT-Sicherheitslücke. Dann ist normalerweise Sommerloch oder es steht wirklich etwas heillos in Flammen. Dieses Mal ist es tatsächlich Letzteres. Die sogenannte Log4J-Sicherheitslücke hat in den vergangenen Tage vermutlich jeden IT-Mitarbeiter auf dem gesamten Globus beschäftigt. Stellt euch einfach einmal vor, die Polizei ruft bei euch an und erklärt, in einem eurer Elektrogeräte ist eine Bombe versteckt. Schaut um euch herum, jedes Gerät mit Stromanschluss oder Akku könnte es sein. Wie viele Geräte sind es? In diesem Raum, im gesamten Haus. Könntet ihr ad hoc eine vollständige Liste erstellen? Tja, und nun sucht mal die Bombe.
In der IT sind „Bomben“ keine Sprengsätze, sondern schädliche Programme, die geheime Daten abgreifen, die Festplatten verschlüsseln oder sonstige ungewünschten Dinge tun. Bei der Log4J-Sicherheitslücke handelt es sich um eine Möglichkeit, wie sich solch ein Schädling in einem Computer einnisten kann. Und weil diese Lücke in einer riesigen Anzahl an Computern existiert, muss nun jeder durchgecheckt werden. Es reicht nicht nur die Lücke zu stopfen, man muss auch schauen, ob die Bombe bereits platziert wurde.
Sicherheitslücken: Welche Tür steht offen?
Doch wie kann man sich eine „Sicherheitslücke“ in Computerprogrammen vorstellen? Im Grunde wie die Türen in einem Haus. Hätte ein Haus keine Tür, wäre man drinnen ziemlich sicher. Man säße in Mitten von steinernen Wänden, die alles Böse draußen halten. Der Nachteil ist offensichtlich: Häuser benötigen Türen, damit man z.B. hin und wieder Verpflegung von außen nach innen holen kann. Natürlich schließt man eine Tür ab. Vergisst man dies jedoch, hat man eine Sicherheitslücke, durch die nicht nur Verpflegung reinkommen kann. Große Computerprogramme sind wie riesige Häuser mit einer großen Anzahl an Türen, mit verwinkelten Fluren und Wänden, die sich wie im verrückten Labyrinth regelmäßig verschieben. Derjenige, der hier alle Türen abschließen soll, hat keinen leichten Job. Schnell ist eine der Türen übersehen.
Log4J: Ein Logbuch für Computerprogramme
Schauen wir mal noch tiefer hinein, worum es sich bei Log4J tatsächlich handelt: Dafür muss man wissen, dass Computerprogramme in aller Regel über alle Ausführungen ein Protokoll schreiben. Auf einem Schiff würde man „Logbuch“ dazu sagen, im Englischen kurz „log“. Hierbei wird festgehalten, welche Aktionen die Anwender durchgeführt haben, ob dabei Fehler aufgetreten sind oder andere Auffälligkeiten. Wenn ein Anwender meldet, dass das Programm nicht richtig funktioniert, dann können die Entwickler aus dem Log Erkenntnisse zur Fehlerursache finden. Log4J ist – weil kostenlos und einfach in der Bedienung – ein weit verbreitetes Programm zum Schreiben von Logs. Das „4J“ bedeutet „für Java“. Java ist eine der meist genutzten Programmiersprachen. Jeder Entwickler eines Java-Programms kann Log4J in sein Programm einbinden. Und somit ergibt eine weit verbreitete Programmiersprache mit einer weit verbreiteten Log-Komponente eben eine hohe Anzahl an Programmen, die für die Sicherheitslücke anfällig sind.
Log4J: Funktioniert wie gewünscht und dennoch falsch
Doch was ist nun genau die „Lücke“? Nehmen wir als Beispiel ein Wetterberichts-Programm, das im Internet erreichbar ist. Jeder kann über das Internet eine Anfrage, z.B. „Wie wird das Wetter morgen?“ dort hin senden. Das Programm nimmt die Anfrage entgegen und beantwortet sie mit der aktuellen Wetterprognose. In das Log schreibt das Wetterprogramm mit Unterstützung des Unterprogramms Log4J für jeden Vorgang einen Eintrag:
Sonntag, 19.12.2021 – 12:30:05 Uhr // Anfrage erhalten: „Wie wird das Wetter morgen?“
Sonntag, 19.12.2021 – 12:30:06 Uhr // Antwort gesendet: „heiter bis wolkig“
Sieht erst einmal harmlos aus. Das Problem ist der Teil, den Log4J eins zu eins aus der Anfrage entnimmt. Ein Angreifer muss seine Anfrage also nur ein wenig ändern. Er sendet einfach „Lade Programm von der Adresse www.fieser-virus.de herunter“. Mit solch einer Anfrage kann das Wetterprogramm nichts anfangen und meldet das zurück. Doch Log4J schreibt folgendes Log:
Sonntag, 19.12.2021 – 12:30:15 Uhr // Anfrage erhalten: „Lade Programm von der Adresse www.fieser-virus.de herunter“
Im Log steht jetzt wortwörtlich ein Befehl, etwas sehr schädliches zu tun (in Wahrheit natürlich in Form einer für Computer verständlichen Programmiersprache). Eigentlich wäre das gar nicht so schlimm. Nur weil ein Befehl niedergeschrieben ist, ist er noch nicht ausgeführt. Ihr könnt ja auch eurer Bank einen Brief schreiben, „Überweist das Geld sämtlicher anderer Kundenkonten auf mein eigenes.“ Das wird die Bank (hoffentlich) eher nicht ausführen.
Nun kommt allerdings bei Log4J ein weiterer kritischer Aspekt ins Spiel. Leider sieht Log4J tatsächlich vor, solche Befehle auszuführen um ad hoc Hilfsprogramme herunterladen. Diese können das Log um Zusatzinformationen anreichern. Log4J kann hierbei nicht unterscheiden, ob es gerade ein nützliches oder schädliches Programm herunterlädt. Es tut einfach das, was man ihm befohlen hat. Genau genommen handelt es sich also nicht einmal um einen Programmfehler. Es wurde einfach von den Entwicklern übersehen, dass man diese Funktion auch missbrauchen kann. Programmierer sagen dazu zynisch „works as designed“ (englisch: funktioniert wie angefordert). Ein medizinisches Pendant wäre „Operation erfolgreich, Patient tot.“
In der Folge lädt sich unser Wetterprogramm einen schädlichen Virus herunter, infiziert sich selbst und danach alle, die vertrauensvoll eine Wetterberichtsanfrage haben. Da Log4J auch in den Computern von Banken, Energieversorgern, Regierungen und allen möglichen „systemrelevanten“ Komponenten unseres täglichen Lebens steckt, ist die Gefahr enorm und jeder ist betroffen.
Wer hat eigentlich noch den Überblick?
Neben der enormen Anstrengungen, die gerade weltweit laufen, um die anfälligen Systeme ausfindig zu machen, die Lücken zu schließen und zu untersuchen, ob sich nicht schon eine „Bombe“ eingenistet hat, ergibt sich für die Software-Branche eine substanzielle Frage: Menschliche Gehirne sind von Natur aus begrenzt in ihren Möglichkeiten zum Erfassung von komplexen Strukturen (das eine mehr, das andere weniger). Um nochmal auf das Haus mit den vielen Türen zurückzukommen: Ab einer bestimmten Anzahl an Türen, verwinkelten Fluren und sich verschiebenden Wänden, muss auch das größte Genie irgendwann klein beigeben und eingestehen, dass es das alles nicht mehr komplett erfassen kann. Irgendwann wird es zu komplex, dann beginnt der Zufall zu regieren und die Ergebnisse werden chaotisch, unvorhersehbar. Die Wahrscheinlichkeit, dass eine Tür beim Abschließen übersehen wird, steigt an.
Und genau das geschieht, wenn das Programm eines Entwicklers auf das Unterprogramm eines anderen Entwicklers zurückgreift, welches wiederum Hilfsprogramme nachladen kann und so weiter. Kurzum: Die Frage lautet, wie begrenzte menschliche Gehirne die praktisch unbegrenzte Komplexität von Computerprogrammen beherrschen sollen. Zumal man heute bereits in einigen Bereichen sogar bewusst „künstlichen Intelligenzen“, also hochkomplexen Computerprogrammen, Aufgaben überlässt, die menschliche Gehirne nicht mehr erledigen können. Sollte man eher kleinere Brötchen backen, Programme selbst entwickeln und selbst verstehen, anstatt ungeprüft von anderen zu übernehmen? Sollten Programme auf ihren tatsächlichen Verwendungszweck reduziert werden, anstatt hochflexible schweizer Taschenmesser als Hilfsmittel einzubauen, bei denen man gar nicht alle Funktionen benötigt? Das würde die Entwicklungsgeschwindigkeit und den allgemeinen Fortschritt in der Informationstechnologie extrem drosseln. Über das richtige Maß wird nun angeregt diskutiert. Auf das Ergebnis kann man gespannt sein.