Start "links von links": Ist sicherer Code immer Qualitätscode?

Veröffentlicht Feb 10, 2021
von Matias Madou, Ph.D.
FALLSTUDIE

Start "links von links": Ist sicherer Code immer Qualitätscode?

Veröffentlicht Feb 10, 2021
von Matias Madou, Ph.D.
Ressource anzeigen
Ressource anzeigen

Eine Version dieses Artikels erschien in Dunkles Lesen. Er wurde aktualisiert und hier syndiziert.

Wenn ich mit Entwicklern über Sicherheit spreche, ist eines meiner Mantras, dass "der einzige Qualitätscode sicherer Code ist". Das ist nach wie vor wahr; wir sind vielleicht einer Katastrophe entgangen, als anfällige Software in den 90er Jahren in freier Wildbahn war, aber heute ist es das Risiko nicht wert. Viele haben im Laufe der Jahre hart daran gearbeitet, Entwicklern ein sicherheitsbewusstes Denken einzuflößen, und haben dabei hoffentlich Sicherheit zum Synonym für Qualität gemacht, wenn es um ein Selbstverständnisassessment ihres Codes geht.

Wenn ich darüber nachdenke (und einige Diskussionen unter meinen Kollegen führe), ist das Konzept jedoch vielleicht zu stark vereinfacht. Es ist durchaus möglich, Code zu erstellen, der zwar sicher ist, aber Anzeichen von unerfahrener Entwicklungstechnik oder andere Problembereiche aufweist, die ihn nicht ideal machen.

In unserer Branche wird viel über den Begriff des "Shifting Left" gesprochen. Meiner Meinung nach geht es darum, links "anzufangen", indem man den Ingenieuren die Möglichkeit gibt, die Verantwortung für die Sicherheit (die ein Aspekt der Qualität ist) mitzutragen, und ihnen die Möglichkeit gibt, gängige Schwachstellen mit ihren (buchstäblichen) Fingerspitzen zu beseitigen. In Anbetracht des aktuellen Rätsels scheint es jedoch, dass der Rahmen noch ein wenig weiter gesteckt werden muss.

Code eines bestimmten Qualitätsniveaus ist per Definition auch sicher, aber aller sicherer Code ist nicht unbedingt von guter Qualität. Ist das Starten "links von links" die Formel, um reine sichere Codierungsstandards zu gewährleisten?

Wie sieht "minderwertiger" sicherer Code aus?

Lassen Sie uns die Lupe über diesen Codeschnipsel halten:

Wenn wir diesen Code aus einer Sicherheitsperspektive analysieren, ist dieses Snippet tatsächlich sicher und kein Einstiegspunkt für einen Angreifer, um eine SQL-Injection-Schwachstelle auszunutzen.  

Ist es ein Beispiel für hochwertigen Code? Nicht wirklich, leider. Eine einfache Änderung des Arguments von einem int(eger) zu einem String-Wert erlaubt eine freie Benutzereingabe, um die Abfrage zu manipulieren, im Gegensatz zu einer Zahl, die das nicht kann. Diese Änderung - oder ein zufälliges Kopieren und Einfügen des Strings sql von irgendwo anders - schafft sofort eine Umgebung, in der SQL-Injection-Schwachstellen möglich sind, mit allen damit verbundenen Risiken:

Die Sicherheitsmaßnahmen hatten hier einen sehr begrenzten Umfang, während ein gründlicherer (oder erfahrener) Entwickler vielleicht einen anderen Ansatz gewählt und die Auswirkungen einer ineffizienten Argumentstruktur berücksichtigt hätte. Code so zu versenden ist nicht nur schlechte Praxis, es setzt ein schlechtes Beispiel für andere in der Entwicklungskohorte.

Die Software-"dreifache Bedrohung": Form, Funktion, festungsartig?

Ein "Triple Threat" in der Unterhaltungsbranche ist eine Person, die gleichermaßen gut schauspielern, tanzen und singen kann. Sie sind die Menschen, die bei jedem Vorsprechen gefürchtet und beneidet werden, und sie sind die Einhörner in einem bereits umkämpften Bereich. Jede Branche hat ihre eigene Version eines erstklassigen, außergewöhnlichen Beispiels für ihre Produkte und Dienstleistungen, wobei Software keine Ausnahme bildet.

Wenn wir an drei Schlüsselelemente in Anwendungen denken, die schwer mit gleichbleibender (hoher) Qualität auszubalancieren sind, dann sind das vielleicht Funktionalität/Eleganz, plus eiserne Sicherheit, plus Kosteneffizienz unter Berücksichtigung der erforderlichen Liefergeschwindigkeit. Nun, das letzte Attribut ist zweifellos ein bestimmender Faktor dafür, wie gut die anderen beiden Optionen angewandt werden, und es kann ein Katalysator dafür sein, dass die Gesamtqualität mit der Zeit abnimmt.

Aber muss jede Software wie Hugh Jackman auftreten, oder kann man auch mit Nicolas Cage auskommen? Sagen wir es mal so: Wenn man Wolverine in sein Team holen kann, dann gibt man sein Bestes.

Martin Fowler stellte die Frage " Is High Quality Worth The Cost?" in der Softwareentwicklung und kam zu dem Schluss, dass es sich nicht nur "lohnt", sondern im Laufe der Zeit sogar billiger ist. Die meisten Benutzer werden nicht unter die Haube schauen, um zu beurteilen, ob der Code ein Schlamassel ist, oder ob die Sicherheit genauso wichtig gemacht wurde wie alles andere. Diejenigen, die an den Werkzeugen arbeiten, werden jedoch wertvolle Zeit damit verschwenden, schlampigen Code neu zu schreiben, um neuere Funktionen hinzuzufügen, oder wichtige Teile des Projekts zu durchforsten, um zu verstehen, was los ist, oder, im schlimmsten Fall: eine Sicherheitslücke zu beheben, die vom AppSec-Team aufgesprungen ist und die Produktion verzögert. Wenn Sie jetzt Zeit investieren, um den Code sicher und qualitativ hochwertig zu machen, ersparen Sie sich eine Menge zukünftiger Probleme, ganz zu schweigen von den Kosten, die entstehen, wenn Sie eine schlecht ausgeführte Arbeit wieder rückgängig machen müssen.

Erfahrene sicherheitsbewusste Entwickler schreiben Code, der ihre kreative, problemlösende Vision bei der Bereitstellung von Funktionen beibehält, wobei die üblichen Sicherheitsfallen, die Ingenieure in ihrer Phase des Prozesses kontrollieren können, berücksichtigt werden. Sicherer Code ist isoliert nicht sonderlich effektiv, und deshalb wird der Gedanke, "links von links" zu beginnen, dazu beitragen, eine Kultur zu unterstützen, in der Sicherheit für Entwickler zur zweiten Natur wird, eingebaut in ihre Fähigkeit, erstaunliche Funktionen mit reduziertem Risiko zu liefern.

Der Start "links von links" ist entscheidend für eine sichere Benutzererfahrung.

Sicherheit ist schon seit langem ein Thema bei der Nutzung von Software, allerdings mit gemischtem Erfolg. Sicherheitsfehlkonfigurationen waren für 21 % der Cloud-basierten Datenverletzungen im vergangenen Jahr verantwortlich. Laienhafte Fehler wie das Speichern von Passwörtern im Klartext führten bei den betroffenen Unternehmen zu erheblichen Einbußen bei Produktivität, Umsatz und Kundenvertrauen.

Das und die Benutzer selbst können ihr eigener schlimmster Feind sein, wenn es um den Schutz ihrer eigenen Daten geht. Viel zu viele Menschen verwenden immer noch "password" als Passwort oder die gleiche Kombination für mehrere sensible Konten.

Ich kenne keinen Entwickler, der die Faust in die Luft streckt, wenn man ihm sagt, dass er an einem Anmeldebildschirm arbeiten muss, und das ist auch kein Wunder: Es ist ein heikles Gleichgewicht, einen Sicherheitsfluss zu entwerfen, der robust und funktional ist, und den die Benutzer so navigieren können, dass es für sie Sinn macht und sie möglichst wenig stört.

Wenn Sie zu viele komplexe Schritte und Einschränkungen einbauen, schalten die Benutzer möglicherweise ab und kehren nie wieder zurück (eine Katastrophe für eine neue App). Wenn Sie es zu verwirrend machen, kann es sein, dass Sie dem Support-Team eine kollektive Migräne bescheren, weil sie Anfragen von Benutzern bearbeiten, die versuchen, auf ihre Konten zuzugreifen. Machen Sie es zu einfach, und Sie scheitern irgendwie am Sicherheitsaspekt.

Ein erfolgreiches sicheres Benutzererlebnis muss die Sicherheit in einen sinnvollen Ablauf einbinden, der so präsentiert wird, dass er nicht von allem anderen ablenkt, was an der Software überzeugend ist. Sie können sicherlich das Ziel erreichen, eine sichere Anmeldefunktion zu programmieren, indem Sie alle möglichen komplexen Passwortanforderungen, CAPTCHA, Mini-Bosse und vier Wellen von Zombies einbauen, aber wenn es ein totales Durcheinander ist, das auf die Benutzer abstoßend wirkt, verfehlt es das Ziel.

Legen Sie den Grundstein für Software-Exzellenz.

Als Entwickler weiß ich, dass die große Mehrheit von uns stolz auf ihre Arbeit ist und das Richtige tun will. Nervige Kurvenbälle wie Zeitdruck, plötzliche Änderungen des aktuellen Ziels oder dringende Hotfixes können den Fluss stören und zu Fehlern führen, aber die harte Wahrheit ist, dass viele Software-Ingenieure nicht für den Erfolg gerüstet sind.

Der Start "links von links" ist ein Konzept, bei dem der Entwickler im Vordergrund steht, und erfordert, dass Unternehmen sich ernsthaft um die Förderung ihrer Entwickler-Kohorte bemühen. Sicherheitsbewusste Entwickler sind Gold wert, und Unterstützung in Form von Schulungen, Bereitstellung der richtigen Tools und der Möglichkeit, von erfahreneren Entwicklern als Mentor betreut zu werden, fördert eine Umgebung, in der Code mit einer sicherheitsorientierten Denkweise und mit der Präzision und Liebe zum Detail erstellt wird, die erforderlich sind, um Software auf die nächste Stufe zu bringen.

Sind Sie bereit, das Feuer der sicheren Codierung in sich zu entfachen? Stellen Sie sich der Herausforderung.

Ressource anzeigen
Ressource anzeigen

Autor

Matias Madou, Ph.D.

Matias ist ein Forscher und Entwickler mit mehr als 15 Jahren praktischer Erfahrung im Bereich der Softwaresicherheit. Er hat Lösungen für Unternehmen wie Fortify Software und sein eigenes Unternehmen Sensei Security entwickelt. Im Laufe seiner Karriere hat Matias mehrere Forschungsprojekte zur Anwendungssicherheit geleitet, die zu kommerziellen Produkten geführt haben, und kann auf über 10 Patente verweisen. Wenn er nicht am Schreibtisch sitzt, ist Matias als Ausbilder für fortgeschrittene Anwendungssicherheitstrainings courses tätig und hält regelmäßig Vorträge auf globalen Konferenzen wie RSA Conference, Black Hat, DefCon, BSIMM, OWASP AppSec und BruCon.

Matias hat einen Doktortitel in Computertechnik von der Universität Gent, wo er die Sicherheit von Anwendungen durch Programmverschleierung untersuchte, um die innere Funktionsweise einer Anwendung zu verbergen.

Sie wollen mehr?

Tauchen Sie ein in unsere neuesten Erkenntnisse über sichere Kodierung im Blog.

Unsere umfangreiche Ressourcenbibliothek zielt darauf ab, die menschliche Herangehensweise an eine sichere Weiterbildung im Bereich der Programmierung zu stärken.

Blog ansehen
Sie wollen mehr?

Holen Sie sich die neuesten Forschungsergebnisse zur entwicklergesteuerten Sicherheit

Unsere umfangreiche Ressourcenbibliothek ist voll von hilfreichen Ressourcen, von Whitepapers bis hin zu Webinaren, die Ihnen den Einstieg in die entwicklungsorientierte sichere Programmierung erleichtern. Erforschen Sie sie jetzt.

Ressourcendrehscheibe

Start "links von links": Ist sicherer Code immer Qualitätscode?

Veröffentlicht Feb 10, 2021
Von Matias Madou, Ph.D.

Eine Version dieses Artikels erschien in Dunkles Lesen. Er wurde aktualisiert und hier syndiziert.

Wenn ich mit Entwicklern über Sicherheit spreche, ist eines meiner Mantras, dass "der einzige Qualitätscode sicherer Code ist". Das ist nach wie vor wahr; wir sind vielleicht einer Katastrophe entgangen, als anfällige Software in den 90er Jahren in freier Wildbahn war, aber heute ist es das Risiko nicht wert. Viele haben im Laufe der Jahre hart daran gearbeitet, Entwicklern ein sicherheitsbewusstes Denken einzuflößen, und haben dabei hoffentlich Sicherheit zum Synonym für Qualität gemacht, wenn es um ein Selbstverständnisassessment ihres Codes geht.

Wenn ich darüber nachdenke (und einige Diskussionen unter meinen Kollegen führe), ist das Konzept jedoch vielleicht zu stark vereinfacht. Es ist durchaus möglich, Code zu erstellen, der zwar sicher ist, aber Anzeichen von unerfahrener Entwicklungstechnik oder andere Problembereiche aufweist, die ihn nicht ideal machen.

In unserer Branche wird viel über den Begriff des "Shifting Left" gesprochen. Meiner Meinung nach geht es darum, links "anzufangen", indem man den Ingenieuren die Möglichkeit gibt, die Verantwortung für die Sicherheit (die ein Aspekt der Qualität ist) mitzutragen, und ihnen die Möglichkeit gibt, gängige Schwachstellen mit ihren (buchstäblichen) Fingerspitzen zu beseitigen. In Anbetracht des aktuellen Rätsels scheint es jedoch, dass der Rahmen noch ein wenig weiter gesteckt werden muss.

Code eines bestimmten Qualitätsniveaus ist per Definition auch sicher, aber aller sicherer Code ist nicht unbedingt von guter Qualität. Ist das Starten "links von links" die Formel, um reine sichere Codierungsstandards zu gewährleisten?

Wie sieht "minderwertiger" sicherer Code aus?

Lassen Sie uns die Lupe über diesen Codeschnipsel halten:

Wenn wir diesen Code aus einer Sicherheitsperspektive analysieren, ist dieses Snippet tatsächlich sicher und kein Einstiegspunkt für einen Angreifer, um eine SQL-Injection-Schwachstelle auszunutzen.  

Ist es ein Beispiel für hochwertigen Code? Nicht wirklich, leider. Eine einfache Änderung des Arguments von einem int(eger) zu einem String-Wert erlaubt eine freie Benutzereingabe, um die Abfrage zu manipulieren, im Gegensatz zu einer Zahl, die das nicht kann. Diese Änderung - oder ein zufälliges Kopieren und Einfügen des Strings sql von irgendwo anders - schafft sofort eine Umgebung, in der SQL-Injection-Schwachstellen möglich sind, mit allen damit verbundenen Risiken:

Die Sicherheitsmaßnahmen hatten hier einen sehr begrenzten Umfang, während ein gründlicherer (oder erfahrener) Entwickler vielleicht einen anderen Ansatz gewählt und die Auswirkungen einer ineffizienten Argumentstruktur berücksichtigt hätte. Code so zu versenden ist nicht nur schlechte Praxis, es setzt ein schlechtes Beispiel für andere in der Entwicklungskohorte.

Die Software-"dreifache Bedrohung": Form, Funktion, festungsartig?

Ein "Triple Threat" in der Unterhaltungsbranche ist eine Person, die gleichermaßen gut schauspielern, tanzen und singen kann. Sie sind die Menschen, die bei jedem Vorsprechen gefürchtet und beneidet werden, und sie sind die Einhörner in einem bereits umkämpften Bereich. Jede Branche hat ihre eigene Version eines erstklassigen, außergewöhnlichen Beispiels für ihre Produkte und Dienstleistungen, wobei Software keine Ausnahme bildet.

Wenn wir an drei Schlüsselelemente in Anwendungen denken, die schwer mit gleichbleibender (hoher) Qualität auszubalancieren sind, dann sind das vielleicht Funktionalität/Eleganz, plus eiserne Sicherheit, plus Kosteneffizienz unter Berücksichtigung der erforderlichen Liefergeschwindigkeit. Nun, das letzte Attribut ist zweifellos ein bestimmender Faktor dafür, wie gut die anderen beiden Optionen angewandt werden, und es kann ein Katalysator dafür sein, dass die Gesamtqualität mit der Zeit abnimmt.

Aber muss jede Software wie Hugh Jackman auftreten, oder kann man auch mit Nicolas Cage auskommen? Sagen wir es mal so: Wenn man Wolverine in sein Team holen kann, dann gibt man sein Bestes.

Martin Fowler stellte die Frage " Is High Quality Worth The Cost?" in der Softwareentwicklung und kam zu dem Schluss, dass es sich nicht nur "lohnt", sondern im Laufe der Zeit sogar billiger ist. Die meisten Benutzer werden nicht unter die Haube schauen, um zu beurteilen, ob der Code ein Schlamassel ist, oder ob die Sicherheit genauso wichtig gemacht wurde wie alles andere. Diejenigen, die an den Werkzeugen arbeiten, werden jedoch wertvolle Zeit damit verschwenden, schlampigen Code neu zu schreiben, um neuere Funktionen hinzuzufügen, oder wichtige Teile des Projekts zu durchforsten, um zu verstehen, was los ist, oder, im schlimmsten Fall: eine Sicherheitslücke zu beheben, die vom AppSec-Team aufgesprungen ist und die Produktion verzögert. Wenn Sie jetzt Zeit investieren, um den Code sicher und qualitativ hochwertig zu machen, ersparen Sie sich eine Menge zukünftiger Probleme, ganz zu schweigen von den Kosten, die entstehen, wenn Sie eine schlecht ausgeführte Arbeit wieder rückgängig machen müssen.

Erfahrene sicherheitsbewusste Entwickler schreiben Code, der ihre kreative, problemlösende Vision bei der Bereitstellung von Funktionen beibehält, wobei die üblichen Sicherheitsfallen, die Ingenieure in ihrer Phase des Prozesses kontrollieren können, berücksichtigt werden. Sicherer Code ist isoliert nicht sonderlich effektiv, und deshalb wird der Gedanke, "links von links" zu beginnen, dazu beitragen, eine Kultur zu unterstützen, in der Sicherheit für Entwickler zur zweiten Natur wird, eingebaut in ihre Fähigkeit, erstaunliche Funktionen mit reduziertem Risiko zu liefern.

Der Start "links von links" ist entscheidend für eine sichere Benutzererfahrung.

Sicherheit ist schon seit langem ein Thema bei der Nutzung von Software, allerdings mit gemischtem Erfolg. Sicherheitsfehlkonfigurationen waren für 21 % der Cloud-basierten Datenverletzungen im vergangenen Jahr verantwortlich. Laienhafte Fehler wie das Speichern von Passwörtern im Klartext führten bei den betroffenen Unternehmen zu erheblichen Einbußen bei Produktivität, Umsatz und Kundenvertrauen.

Das und die Benutzer selbst können ihr eigener schlimmster Feind sein, wenn es um den Schutz ihrer eigenen Daten geht. Viel zu viele Menschen verwenden immer noch "password" als Passwort oder die gleiche Kombination für mehrere sensible Konten.

Ich kenne keinen Entwickler, der die Faust in die Luft streckt, wenn man ihm sagt, dass er an einem Anmeldebildschirm arbeiten muss, und das ist auch kein Wunder: Es ist ein heikles Gleichgewicht, einen Sicherheitsfluss zu entwerfen, der robust und funktional ist, und den die Benutzer so navigieren können, dass es für sie Sinn macht und sie möglichst wenig stört.

Wenn Sie zu viele komplexe Schritte und Einschränkungen einbauen, schalten die Benutzer möglicherweise ab und kehren nie wieder zurück (eine Katastrophe für eine neue App). Wenn Sie es zu verwirrend machen, kann es sein, dass Sie dem Support-Team eine kollektive Migräne bescheren, weil sie Anfragen von Benutzern bearbeiten, die versuchen, auf ihre Konten zuzugreifen. Machen Sie es zu einfach, und Sie scheitern irgendwie am Sicherheitsaspekt.

Ein erfolgreiches sicheres Benutzererlebnis muss die Sicherheit in einen sinnvollen Ablauf einbinden, der so präsentiert wird, dass er nicht von allem anderen ablenkt, was an der Software überzeugend ist. Sie können sicherlich das Ziel erreichen, eine sichere Anmeldefunktion zu programmieren, indem Sie alle möglichen komplexen Passwortanforderungen, CAPTCHA, Mini-Bosse und vier Wellen von Zombies einbauen, aber wenn es ein totales Durcheinander ist, das auf die Benutzer abstoßend wirkt, verfehlt es das Ziel.

Legen Sie den Grundstein für Software-Exzellenz.

Als Entwickler weiß ich, dass die große Mehrheit von uns stolz auf ihre Arbeit ist und das Richtige tun will. Nervige Kurvenbälle wie Zeitdruck, plötzliche Änderungen des aktuellen Ziels oder dringende Hotfixes können den Fluss stören und zu Fehlern führen, aber die harte Wahrheit ist, dass viele Software-Ingenieure nicht für den Erfolg gerüstet sind.

Der Start "links von links" ist ein Konzept, bei dem der Entwickler im Vordergrund steht, und erfordert, dass Unternehmen sich ernsthaft um die Förderung ihrer Entwickler-Kohorte bemühen. Sicherheitsbewusste Entwickler sind Gold wert, und Unterstützung in Form von Schulungen, Bereitstellung der richtigen Tools und der Möglichkeit, von erfahreneren Entwicklern als Mentor betreut zu werden, fördert eine Umgebung, in der Code mit einer sicherheitsorientierten Denkweise und mit der Präzision und Liebe zum Detail erstellt wird, die erforderlich sind, um Software auf die nächste Stufe zu bringen.

Sind Sie bereit, das Feuer der sicheren Codierung in sich zu entfachen? Stellen Sie sich der Herausforderung.

Wir bitten Sie um Ihre Erlaubnis, Ihnen Informationen über unsere Produkte und/oder verwandte Themen der sicheren Codierung zuzusenden. Wir werden Ihre persönlichen Daten immer mit äußerster Sorgfalt behandeln und sie niemals zu Marketingzwecken an andere Unternehmen verkaufen.

Um das Formular abzuschicken, aktivieren Sie bitte "Analytics"-Cookies. Sie können die Cookies wieder deaktivieren, sobald Sie fertig sind.