2012-03-28 5 views
-2

Pufferüberläufe scheinen eine der größten Ursachen für Sicherheitslücken zu sein. Ich programmiere selten in C/C++ (nur für bestimmte Kursarbeit), so dass ich etwas vermisse, aber ich verstehe nicht, warum Leute weiterhin Datenstrukturen verwenden, die Überläufe erlauben. Warum werfen nicht alle Datenstrukturen eine Ausnahme, wenn sie voll sind? Scheint so, als würde diese einfache Lösung die Sicherheit der Software erheblich verbessern.Warum verwenden Benutzer weiterhin Datenstrukturen, die Überläufe zulassen?

Antwort

1
  • Ignorance

Ein großer Prozentsatz des Programmierers (in meiner vielleicht zu Unrecht negativ versetzten Sicht der Welt) entweder nicht verstehen, Sicherheitsbedenken überhaupt nicht oder nicht verstehen, welche Datenstrukturen, die sie verwenden sind verwundbar. Eine ganze Tonne von Programmierern ging durch die 90er Jahre, wo jeder gets() verwendete und sogar jedes C-Buch da draußen ermutigte es. Jetzt würden Sie verrückt genannt werden, um es zu benutzen. Aber nicht jeder hat das Memo erhalten!

  • Laziness

Unterkategorien umfassen „wird niemand stören meine App angreifen“, „es ist nur ein Prototyp sowieso“, und „es nächste Woche fällig ist, werde ich es beheben später“

  • Schwierigkeit (wahrgenommen oder auf andere Weise)

Es ist eigentlich wirklich schwer tragbar, korrekt und sicher C-Code zu schreiben. Fast jedes nichttriviale Projekt, das nicht mit einem scharfen Auge geschrieben wurde, hat wahrscheinlich Bugs, wenn nicht sogar offensichtliche Schwachstellen. Und in einer nicht verwalteten Sprache wie C können viele Bugs Sicherheitsprobleme verursachen.

Es ist auch schwierig, APIs zu erstellen, die sowohl "benutzbar" als auch "sicher" sind.

Und für das letzte Messer in der Leiche, betreffen alle diese Probleme alle Entwickler im gesamten Projekt. Dazu gehören alle Bibliotheken, die Sie verwenden, alle Bibliotheken sie verwenden, bis hin zu und einschließlich des Betriebssystemkernels, den Sie verwenden. Jeder Programmierer, der auf dem Weg in irgendeine Sicherheitsfalle gerät, kompromittiert das Ganze ziemlich.

Viele dieser Probleme werden mit verwalteten Sprachen besser - zumindest können Sie nicht über willkürlichen Speicher scribbeln, aber es gibt immer noch verschiedene Klassen von Sicherheitsproblemen.

+0

Ignoranz ist # 1. Sicherheit und Best Practices werden weder gelehrt noch hervorgehoben. Und wie bereits bei gets() erwähnt, können sich "Best-Practices" im Laufe der Zeit ändern. – LaJmOn

Verwandte Themen