CrowdStrike wird zu Recht gefragt: do you are have stupid?
CrowdStrike wird zu Recht gefragt: do you are have stupid?
Bildquelle: lLeftBrain

CrowdStrike: Postmortem offenbart Schauriges

Nach nur 19 Tagen hat CrowdStrike es geschafft und einen technischen Bericht zum kürzlichen Totalversagen veröffentlicht.

Nur knapp 19 Tage nachdem CrowdStrike knapp 9 Millionen Geräte lahmgelegt hat, hat der Anbieter jetzt seine Ursachenforschung abgeschlossen und bietet mit seinem Maßnahmenkatalog mehr Stoff für seine Kritiker.

CrowdStrike nutzt Regex-basierte Erkennung

Zeit für ein kleines Quiz für Entwickler: Wann nutzt man reguläre Ausdrücke in Performance-kritischen Anwendungen? Sollte die Antwort irgendetwas Anderes als „gar nicht“ gewesen sein, bitte noch mal zurück in die Junior-Entwickler-Position. Nicht nur sind reguläre Ausdrücke über die Maßen langsam, sondern bieten auch noch ein gigantisches Potenzial für Fehler, die schnell zu DoS führen können. Ein Unternehmen, das dies schon herausfinden durfte, war zum Beispiel Cloudflare, welches sich damit in der Vergangenheit selbst ge-DOSt hat.

CrowdStrike bringt reguläre Ausdrücke auf eine ganz neue Ebene: die Kernel-Ebene. Da sind Probleme wortwörtlich vorprogrammiert. Überraschenderweise waren diese beim Ausfall nicht ursächlich. Die Channel-Datei, die den Absturz verursachte, enthält lediglich eine Liste regulärer Ausdrücke. Es ist dennoch interessant zu erwähnen, dass CrowdStrike es offenbar für eine gute Idee hält, diese im Kernel auszuführen.

Halt… Arrays in C++ brauchen Boundchecks?

Welches Problem haben Programmiersprachen, wenn Speicherzugriffe nicht abgesichert werden? Richtig, Null-Pointer-Dereference, Segmentation Faults, Crashs. Was Rust und Zig gut gelöst haben, haben C und C++ aus architektonischen Gründen nicht. Entsprechend muss man zum Beispiel bei Zugriffen auf ein Array prüfen, dass das Array überhaupt so viele Elemente hat. Wenn eine Channel-Datei jetzt aber 20 reguläre Ausdrücke definiert und auf den 21. zugegriffen wird, was passiert dann? Richtig: Puff. Im Kernel ist das extra-schlecht, denn dann stürzt das System ab.

CrowdStrike nutzte kein Staged-Rollout

Bisher war es nur eine Vermutung, aber jetzt gibt es Gewissheit: CrowdStrike hat kein Staged-Rollout. Was heißt das? Ganz einfach: Update da? Dann Update raus. Klingt nicht nur nach einer schlechten Idee, ist es auch. Wie macht man das? Ganz einfach: Update an 10 Kunden ausliefern und schauen, wie viele Crashes/False-Positives/etc. es gibt, dann an 100 Kunden, dann an 1 % und dann nach oben durcharbeiten.

CrowdStrike braucht das natürlich nicht, denn:

Die Tests waren grün

Während es im Bericht nicht explizit bezeichnet wird, wird es stark impliziert, dass eine der Todsünden des Test-Driven-Developments begangen wurde: Die Tests wurden beim Fehlschlagen angepasst und nicht der produzierte Code.

Revolutionäre Idee: Kunden entscheiden lassen

Eine der von CrowdStrike erarbeiteten Ideen ist es, die Kunden entscheiden zu lassen, ob sie ungetesteten Code auf ihren Systemen ausführen wollen. Ob es etwas kosten wird und wie hoch die extra Kosten für dieses Feature sein sollen, ist unklar. Zumindest betroffene Kunden bekommen das hoffentlich kostenlos.

Microsoft ist schuld an CrowdStrike-Desaster

Im Endeffekt kann CrowdStrike aber auch gar nichts dafür, in ihrem Bericht nennen sie explizit die schlechten Optionen für Sicherheitsanbieter außerhalb des Kernelspace zu arbeiten, als Ursache und schmeißen damit ihren Partner vor den Wagen. Zweifelsohne wird sich der Konzern darüber freuen.

Plot-Twist: Die EU ist schuld?

In unserem Forum gab es indes eine Interessante und sehr lesenswerte Debatte zur Schuldfrage und auch kuriose Bedingungen aus den AGB von CrowdStrike.

Tarnkappe.info

Über

Moritz ist von ganzem Herzen Open-Source Programmierer. Neben regelmäßigen Commits für diverse Open-Source-Projekte verfasst er gelegentlich auch Texte für die Tarnkappe. Er findet es echt seltsam über sich in der dritten Person zu schreiben und merkt an, dass seine DMs für alles außer Marketing-Nachrichten offen stehen. Erreichbar ist er auf Matrix (@moritz:poldrack.dev), IRC (mpldr auf libera.chat) und Email (~mpldr/public-inbox@lists.sr.ht).