Ansichten eines Informatikers

Blog wieder online

Hadmut
5.6.2010 9:08

Ursache: Erst Angriff, dann Steckdosenleiste, dann Konfigurationsfehler von mir.

Daß das Blog von gestern abend bis heute morgen offline war, hat nichts mit einem Angriff zu tun, sondern nur mit meiner eigenen Dummheit.

Nachdem das Problem mit der Steckdosenleiste behoben war, wollten wir den Originalwebserver wieder in Betrieb nehmen und dazu – weil ja in der Zwischenzeit Kommentare usw. auf dem Ersatzserver eingelaufen sind, meine beiden Blogs wieder zurückleiern. Dafür und zu Tests hatte ich mein Blog kurz aus der Serverkonfiguration auskommentiert, dazu noch ein paar Tests gemacht und in die Serverkonfiguration wieder einkommentiert. Nur vergessen, die Config wieder zu aktivieren. Das heißt, das das Blog zwar eigentlich schon funktioniert hat, nur der Rewrite-Mechanismus im Apache, der die Seiten-URLs an die Blog-Software weiterleitet nicht. Ich hatte es zwar angetestet, aber dummerweise am Schluß nur die Index-Seite und nicht die Artikel abgerufen. Deshalb hab ich nicht gemerkt, daß die Rewrite-Regeln inaktiv waren.

*Seufz*

Das ist natürlich besonders dann ärgerlich, wenn gerade besonders viele Leute auf einen Blog-Artikel zugreifen wollen. Wenn man andererseits bedenkt, daß diese Webserver für immerhin ca. 30 Leute seit 8 Jahren stabil und praktisch störungsfrei laufen, und immerhin schon eine ganze Reihe von Angriffsversuchen überstanden haben, ist es so schlecht jetzt nicht.

Und zu bedenken ist dabei auch, daß das kein professionell betriebener Server ist, sondern mehr ein Hobby. Das Ding ist von vornherein nicht auf Hochverfügbarkeit ausgelegt, sondern darf per Definition auch mal ne Weile weg sein. Außerdem soll es mit einem Minimum an Wartungsaufwand und Pflege betrieben werden, und für mehrere Leute bereitstehen, was es einfach nicht möglich macht, immer täglich zu patchen und immer die neuesten Security-Features nachzuziehen. Ich persönlich kann nur eine sehr begrenzte Zeit in das Blog und den Webserver stecken, was man zwar hoffentlich nicht so an der inhaltlichen Qualität, aber doch an so manchem Tipp-, Zeichensetzungs- und Satzbaufehler merken kann.

Ich halte es da mit dem Motto: Lieber so als gar nicht oder (wegen erhöhtem zeitlichem Aufwand) auf andere wichtige Sachen zu verzichten. Und wenn dann nach 8 Jahren die Kiste mal in die Knie geht – na, und?

Update zur Störung:

Soweit zu rekonstruieren war, hatte die ursprüngliche Störung wohl etwas mit einem Speicherleck zu tun, was sich in der Kombination mit einer zu wenig zurückhaltenden Apache-Konfiguration als schädlich auswirkte. Da der Apache aber – wie gesagt – schon seit längerer Zeit stabil lief, und auch als identische Kopie des Systems auf einer (virtuellen) Ersatzmaschine klaglos funktioniert hat, und sich für den Tag der Störung in den Serverlogs nachweisen ließ, daß es zu einer von mehreren Rechnern verteilt vorgenommenen Angriffswelle durch eine als aggressiv bekannte Software zum Angreifen von Servern gekommen ist, wurde dabei wohl ein Weg gefunden, das Ding hochzuschaukeln. Denial-of-Service-Angriff.

Auffällig ist natürlich schon, daß das zu einem Zeitpunkt passierte, als gerade ein Artikel besonders stark verlinkt wurde. Viele haben dabei in E-Mails auf den „Fefe-Effekt” getippt, weil der Artikel in Fefes Blog referenziert wurde. Die Hauptlast kam aber – interessanterweise – über andere Referer rein, nämlich über Twitter, Facebook, Foren und eine bestimmte andere Webseite. Und die Hauptlast kam – gefühlt – deutlich vor der Störung rein.

Insofern sehe ich – um nicht den üblichen Wissenschaftsfehler zu begehen – zwar eine Korrelation mit dem Artikel, aber keine unmittelbare Kausalität. Vielleicht hat irgendwem nicht gepasst, was ich schreibe (kommt bei mir häufiger vor, ich halte es aber mit der Devise, daß man eine Kritik, die keinen stört, gleich bleiben lassen kann). Auch möglich könnte sein, daß irgendwer einfach darauf anspringt, was gerade in Twitter & Co häufig zitiert wird. Oder vielleicht wars auch einfach Zufall.

In einigen Wochen wird es noch einmal zu Unterbrechungen kommen, weil ein Umzug des Servers, dann eine grundlegende Änderung in der Serverkonfiguration, und dann irgendwann der Wechsel auf eine andere Blog-Software ansteht. Weil das dann aber alles geplant ist, sollte man davon hoffentlich so gut wie nichts merken.

Nachtrag: Es ist übrigens so, daß organisierte Hacker systematisch Webseiten abscannen und sich Datenbanken aufbauen, welche Server-/Blog-/Foren-/Sonstwas-Software auf welchen Webseiten läuft, um im Falle des Bekanntwerdens eines Exploits sofort und gezielt angreifen zu können. Man kann also, selbst wenn man sich größte Mühe gibt, einen Webserver gar nicht so aktuell halten, daß er jedem Angriff widersteht, solange die Sicherheit vom ständigen Patchen abhängt.

Auch im kommerziellen Sicherheitsumfeld sind Virenscanner & Co., die vor Jahren noch als Allheilmittel hingestellt wurden, inzwischen in ihrer Effektivität rapide abgesunken.

Wir sind mit der Software-Sicherheit an einem Dead-End angekommen. Jahrelang hieß das Paradigma, daß schlechte Programmierer mit schlechten Programmiersprachen und schlechten Laufzeitbibliotheken schlechte Software geschrieben haben, und man halt hin und wieder mal was gepatcht hat. So kommt es, daß wir auch 20 Jahre nach „Microscope and Tweezers” immer noch jede Menge Pufferüberläufe und solche Krankheiten haben.

Pufferüberläufe gehören so zu den dämlichsten Sicherheitslücken, weil man sie mit ordentlichen Sprachen und Laufzeitbibliotheken ohne weiteres und zuverlässig vermeiden könnte. Aber wir haben keine ordentlichen Sprachen. Die meiste Software, die mit Angreifern in Berührung kommt, ist immer noch in C geschrieben, oder anderen sicherheitslächerlichen Sprachen wie PHP.

Sicherheitstechnisch bessere Sprachen wie Java (vermutlich auch C#, das kenne ich aber nicht) haben sich nicht in der Breite durchgesetzt, weil – am Beispiel Java – die Sprache an sich eine Zumutung und miserabel designt war, und weil Unleserlichkeit selbst ein Sicherheitsproblem ist. Eine ordentliche Compiler-Sprache haben wir bis heute nicht.

Und selbst, wenn wir sie hätten – wie lang würde es dauern, alles (einschließlich Linux und Windows) neu zu schreiben? Wer würde das tun? Eben.

Lächerlich erscheint mir dabei das Ansinnen der Universitätswissenschaftler, „beweisbare Sicherheit” erforschen zu wollen, obwohl sie nicht einmal halbwegs präzise angeben (und schon gar nicht beweisen) können, was Sicherheit eigentlich ist. Man müßte erst einmal da anfangen, wo man die Sicherheitslücken kennt, nämlich Pufferüberläufe, Parameterübergabe usw., damit wir an die Implementierungssicherheit kommen. Und erst wenn die erreicht ist, können wir uns Gedanken darüber machen, wie wir die Algorithmen an sich beweisbar machen könnten.

2 Kommentare (RSS-Feed)

Zensurgegner
5.6.2010 10:32
Kommentarlink

Erinnert mich an den alten Spruch “Die Behauptung, eine Software sei fehlerfrei, kann nie bewiesen werden – nur widerlegt”


Hadmut
5.6.2010 10:59
Kommentarlink

In kleinen Übungen kann die Korrektheit meist schon – mehr oder weniger – bewiesen werden.

Den Forschungsinformatikern unterlaufen dabei aber mehrere Denkfehler:

  • Es hat sich in vielen Fällen herausgestellt, daß der Begriff des „Beweisens” bei Forschern ziemlich willkürlich ausgelegt wird. Viele neigen dazu, sich einfach irgendein Kalkül auszudenken und von einem Beweis zu reden, wenn am Ende irgendeine Gleichung stimmt, ohne einen Bezug zur Realität herzustellen. So haben viele behauptet, sie hätten die Sicherheit eines Protokolls mit der BAN-Logik bewiesen, obwohl BAN nichts beweisen, sondern nur finden kann, zweitens nur Fehler und nicht Richtigkeit finden kann, drittens nicht zuverlässig funktioniert und viertens nur auf Authentifikation und sonst nichts anwendbar ist. Schert in der Sicherheitswissenschaft aber keinen, Hauptsache man hat irgendein Paper in dem steht, man könnte irgendwas beweisen.
  • Es hat sich zu oft gezeigt, daß man bei der beweisbaren Korrektheit zu oft schwindelt. Die beweisen nicht die Korrektheit eines Verfahrens, sondern schränken einfach den Blick so sehr ein, bis sie keinen der Fehler mehr sehen können, die das angewandte Verfahren entdecken kann. Und schwups ist die Sicherheit bewiesen. Nach dem Motto: Ich habe nachgewiesen, daß in der Software nur die Fehler nicht mehr sind, die ich nicht schon von vornherein durch „Wissenschaftlichkeit” der Betrachtung entzogen habe. Man schränkt einfach den Blick soweit ein, bis man irgendwas bewiesen hat.
  • Beweisen klappt ganz ordentlich bei Mini-Algorithmen mit exakt und mathematisch beschreibbaren Eigenschaften. Wie Sortieralgorithmen. Versuch aber mal, einen Webserver mit ca. 50 virtuellen Seiten, Blogs usw. abstrakt zu beschreiben. Geht nicht. Viel zu groß, viel zu komplex, viel zu viele unscharf oder gar nicht spezifizierte Randbedingungen. Wie will man aber die Korrektheit beweisen, wenn man nicht einmal das als korrekt angesehene Verhalten darstellen kann?
  • Einen kleinen Algorithmus kann ich für Jahre unverändert in ein Lehrbuch schreiben. Linux, Apache, PHP, WordPress usw. sind aber ständigen Änderungen unterworfen. Man wird nie die Korrektheit nachweisen können, solange der Nachweis länger dauert als die Software unverändert im Einsatz ist.
  • Korrektheit und Sicherheit sind unterschiedliche Dinge. Korrektheit kann man mehr oder weniger beweisen. Sicherheit nicht, jedenfalls nicht auf die gleiche Art.

    Das hängt schon damit zusammen, daß sich ein Korrektheitsbeweis immer nur darauf bezieht, daß Eingaben innerhalb der Spezifikation erfolgen. Was außerhalb der Spec erfolgt, interessiert für die Korrektheit prinzipiell nicht. Für die Sicherheit aber schon, weil der Angreifer ja bewußt außerhalb der Spec arbeiten kann (und das häufig auch tut).

Das ist alles Käse. Der ganze Ansatz, eine komplette und absolute Sicherheit beweisen zu wollen ist Unfug. Schon deshalb, weil es diese Sicherheit nicht gibt, Sicherheit ist keine absolute Eigenschaft, sondern kontextabhängig.

Faktisch beruhen die allermeisten Angriffe heutzutage auf einer Hand voller immer ähnlicher Angriffsschemen bzw. Softwareschwächen. Würde man diesen Firlefanz mit der beweisbaren Sicherheit mal bleiben lassen und sich stattdessen auf diese meistausgenutzten Sicherheitslücken konzentrieren, hätte man viel mehr erreicht.

Es wäre schon mal ein Riesen-Fortschritt, wenn es keine Pufferüberläufe mehr gäbe. Aber selbst wenn wir jetzt eine richtig gute Programmiersprache zur Verfügung hätten, würde es Jahre, eher Jahrzehnte dauern, bis alles umgeschrieben wäre.

Es ist beispielsweise erstaunlich, wieviel Cobol-Software aus der Steinzeit noch in Gebrauch ist, weil sie nicht neu geschrieben werden kann.