© S&SMedia/Bianca Röder, © DRogatnev/Shutterstock.com
Security in der Softwareentwicklung

Then and now


Softwareentwicklung heute – schnelle und gute Ergebnisse werden erwartet und der Trend der Programmiersprachen geht in Richtung mehr Abstraktion, doch dabei sollte die Sicherheit der Software nicht im Hintergrund stehen. Welche Fehler führen zu Sicherheitslücken und wie war es früher? Ein Überblick.

Die Programmiersprachen und verwendeten Technologien sind immer im Wandel. Wo früher noch vieles selbst und möglichst hardwarenah geschrieben wurde, um die beste Performance herauszuholen, stehen heute die Entwicklungszeit und damit auch die Entwicklungskosten stärker im Vordergrund. Time to Market, also die Dauer von der Entwicklung bis zum Einsatz der Software, ist ein wichtiger Begriff für Auftraggeber und sollte natürlich so gering wie möglich gehalten werden. Um diesem Ziel gerecht zu werden, wird oft darauf verzichtet, Softwareprojekte von Grund auf neu zu gestalten, stattdessen kommen vorhandene Frameworks und Bibliotheken zum Einsatz. Mögliche Fehlerquellen liegen dann seltener im eigenen Projekt – doch sollten wir den anderen Entwicklern blind vertrauen?

Drittanbietercode

In der Vergangenheit gab es schon oft Probleme bei bekannten Paketmanagern wie npm, der Bibliotheken für Node.js bereitstellt. Mit unerlaubtem Zugriff auf Entwickleraccounts konnten Angreifer unbemerkt Schadcode in oft genutzte Bibliotheken einschleusen und so Zugangsdaten stehlen [1]. In seinem Blog [2] beschreibt David Gilbertson, wie er Benutzernamen, Passwörter, Session-Cookies und Kreditkartendaten mit Hilfe von verstecktem Code, der in einer Bibliothek nachgeladen wird, sammelt. Diese Bibliothek wird monatlich ca. 120 000 Mal heruntergeladen. Um nicht entdeckt zu werden, werde der Code nur einmalig und nur zu bestimmten Uhrzeiten heruntergeladen und sei zudem auch noch verschleiert und komprimiert. Zum Schluss schreibt er, diese Bibliothek sei nur fiktiv, doch ganz so abwegig ist so etwas nicht. Auf externe Abhängigkeiten können wir leider aus Zeit- und Kostengründen selten verzichten, und man muss ja bekanntlich nicht immer das Rad neu erfinden. Allerdings sollte man fremdem Code immer noch mit Vorsicht begegnen. Um die Sicherheit zu stärken, gibt es viele Konzepte, die sich in der Vergangenheit oft bewiesen haben. Dazu gehören beispielsweise „Layered Security“ und „Defense in Depth“. Beides beschreibt ein ähnliches Prinzip: das Absichern von Systemen auf mehreren Ebenen, da es immer vorkommen kann, dass eine Komponente fehlerhaft sein könnte und man somit nicht auf eine einzige Sicherung vertrauen sollte. Im Dezember 2019 gab es in OpenBSD-Distributionen eine gravierende Sicherheitslücke, womit man die Authentifizierung bei mehreren Diensten umgehen konnte, darunter SMTP und LDAP. SSH blieb von der Schwachstelle verschont, da dort „Defense in Depth“-Mechanismen zum Einsatz kamen [3].

Common Vulnerabilities and Exposures

Neben höherer Codeabstraktion durch den Einsatz von Frameworks und externen Libraries geht der Trend heutzutage auch stark in Richtung Cloud-Computing und Containerisierung. Das bietet in Sachen Sicherheit einen großen Vorteil: Sollte eine Software kompromittiert werden, ist nur der entsprechende Container kompromittiert, da dieser vom Hauptsystem abgekapselt ist. Voraussetzung dafür ist natürlich, dass man seine Containersoftware auf dem neusten Stand hält, da ein Angreifer sonst „ausbrechen“ kann. Das Updaten von verwendeter Software, darunter Frameworks und Bibliotheken sowie Systemsoftware, ist essenziell. Das zeigen Statis...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang