Eine Version dieses Artikels erschien in Dunkle Lektüre . Es wurde hier aktualisiert und syndiziert.
Wenn ich mit Entwicklern über Sicherheit spreche, lautet eines meiner Mantras, dass „der einzige Qualitätscode der sichere Code ist“. Das ist immer noch wahr; wir sind vielleicht einer Katastrophe entkommen, als anfällige Software in den 90er Jahren in der Wildnis herumlief, aber heute ist es das Risiko nicht wert. Viele haben im Laufe der Jahre hart daran gearbeitet, Entwicklern eine sicherheitsbewusste Denkweise zu vermitteln, und auf diese Weise hoffentlich Sicherheit zum Synonym für Qualität gemacht, wenn es um die Selbsteinschätzung ihres Codes geht.
Nach reiflicher Überlegung (und einigen Diskussionen unter meinen Kollegen) wird das Konzept jedoch möglicherweise zu stark vereinfacht. Es ist durchaus möglich, Code zu erstellen, der in der Tat sicher ist, aber Anzeichen einer neuen Entwicklungstechnik oder andere Problembereiche aufweist, die ihn nicht ideal machen.
Unsere Branche spricht ausführlich über den Begriff „Linksverschiebung“. Meiner Meinung nach geht es vor allem darum, links zu beginnen, indem die Ingenieurskohorten in die Lage versetzt werden, die Verantwortung für Sicherheit gemeinsam zu übernehmen (was ein Aspekt der Qualität ist), und ihnen die Möglichkeit zu geben, häufig auftretende Sicherheitslücken mit ihren (wörtlichen) Fingerspitzen zu beseitigen. Angesichts dieses aktuellen Rätsels scheint es jedoch, dass die Grenzen noch ein wenig weiter verschoben werden müssen.
Code mit einem bestimmten Qualitätsniveau ist per Definition auch sicher, aber jeder sichere Code ist nicht unbedingt von guter Qualität. Ist das Starten von „links von links“ die Formel, um reine sichere Codierungsstandards zu gewährleisten?
Wie sieht ein Sicherheitscode von „schlechter Qualität“ aus? Lassen Sie uns die Lupe über diesen Codeausschnitt legen:
Wenn wir diesen Code aus Sicherheitsgründen analysieren, ist dieses Snippet in der Tat sicher und kein Einstiegspunkt für einen Angreifer, um eine SQL Injection-Schwachstelle auszunutzen.
Ist es ein Beispiel für hochwertigen Code? Leider nicht wirklich. Eine einfache Änderung des Arguments von einem Minze (Heger) zu einem Schnur Wert ermöglicht eine freie Benutzereingabe, um die Abfrage zu manipulieren, im Gegensatz zu einer Zahl, die dies nicht kann. Diese Änderung — oder ein zufälliges Kopieren und Einfügen der Zeichenfolge sql von einer anderen Stelle — schafft sofort eine Umgebung, in der SQL-Injection-Schwachstellen mit allen damit verbundenen Risiken möglich sind:
Die Sicherheitsmaßnahmen hatten hier einen sehr begrenzten Anwendungsbereich, wohingegen ein gründlicherer (oder erfahrener) Entwickler möglicherweise einen anderen Ansatz gewählt und die Auswirkungen einer ineffizienten Argumentationsstruktur berücksichtigt hat. Ein solcher Code ist nicht nur eine schlechte Praxis, er ist auch ein schlechtes Beispiel für andere in der Entwicklungskohorte.
Die Software „Triple Threat“: Form, Funktion, festungsartig? Eine „dreifache Bedrohung“ in der Unterhaltungsindustrie ist eine Person, die mit ebenso hohem Können schauspielern, tanzen und singen kann. Sie sind die Menschen, die bei jedem Vorsingen gefürchtet und beneidet werden, und sie sind die Einhörner eines ohnehin schon hart umkämpften Raums. Jede Branche hat ihre eigene Version eines erstklassigen, außergewöhnlichen Beispiels ihrer Produkte und Dienstleistungen, wobei Software keine Ausnahme bildet.
Wenn wir an drei Schlüsselelemente in Anwendungen denken, die bei gleicher (hoher) Qualität schwer auszubalancieren sind, könnten das Funktionalität/Eleganz plus uneingeschränkte Sicherheit sowie Wirtschaftlichkeit sein, wenn man die erforderliche Liefergeschwindigkeit berücksichtigt. Nun, dieses letzte Merkmal ist zweifellos ein entscheidender Faktor dafür, wie gut die anderen beiden Optionen angewendet werden, und es kann ein Katalysator dafür sein, dass die Gesamtqualität im Laufe der Zeit abnimmt.
Muss jedoch die gesamte Software wie Hugh Jackman funktionieren, oder können wir mit Nicolas Cage durchkommen? Sagen wir es so: Wenn du Wolverine in dein Team holen kannst, dann gibst du dein Bestes.
Martin Fowler stellte die Frage, Ist hohe Qualität die Kosten wert? in der Softwareentwicklung und kam zu dem Schluss, dass es sich nicht nur „gelohnt“ hat, sondern im Laufe der Zeit sogar billiger wurde. Die meisten Benutzer werden nicht unter die Haube schauen, um zu beurteilen, ob der Code ein Chaos ist oder ob Sicherheit genauso wichtig für alles andere gemacht wurde. Diejenigen, die die Tools verwenden, werden jedoch wertvolle Zeit damit verschwenden, schlampigen Code zu überarbeiten, um neue Funktionen hinzuzufügen, oder große Teile des Projekts zu durchsuchen, um zu verstehen, was vor sich geht, oder, im schlimmsten Fall: das Beheben einer Sicherheitslücke, die vom AppSec-Team zurückgekehrt ist und die Produktion verzögert hat. Jetzt Zeit damit zu verbringen, Code sowohl sicher als auch qualitativ hochwertig zu machen, erspart eine Menge zukünftiger Herzschmerz, ganz zu schweigen von den Kosten, die entstehen, wenn schlecht ausgeführte Arbeit enträtselt wird.
Erfahrene sicherheitsbewusste Entwickler schreiben Code, der ihre kreative, problemlösende Vision bei der Bereitstellung von Funktionen beibehält. Dabei wird darauf geachtet, die üblichen Sicherheitslücken zu beseitigen, die Ingenieure in ihrer Phase des Prozesses kontrollieren können. Sicherer Code ist für sich genommen nicht besonders effektiv. Aus diesem Grund trägt die Idee, „links von links“ zu beginnen, dazu bei, eine Sicherheitskultur zu fördern, die für Entwickler eine Selbstverständlichkeit ist und die in ihre Fähigkeit integriert ist, erstaunliche Funktionen mit reduziertem Risiko bereitzustellen.
Für eine sichere Benutzererfahrung ist es wichtig, „links von links“ zu beginnen. Sicherheit spielt bei der Benutzererfahrung von Software seit langem eine wichtige Rolle, führte aber eindeutig zu gemischten Erfolgen. Fehlkonfigurationen im Sicherheitsbereich wurden berücksichtigt 21% der Cloud-basierten Datenschutzverletzungen im vergangenen Jahr, als Amateurfehler wie das Speichern von Passwörtern im Klartext zu schwerwiegenden Produktivitäts-, Umsatz- und Kundenvertrauensverlusten für die betroffenen Unternehmen führten.
Das, und die Benutzer selbst können ihr eigener schlimmster Feind sein, wenn es darum geht, ihre eigenen Daten zu schützen. Viel zu viele Leute verwenden immer noch „Passwort“ als Passwort oder verwenden dieselbe Kombination für mehrere vertrauliche Konten.
Ich kenne keinen Entwickler, der mit der Faust Luft macht, wenn ihnen gesagt wird, dass sie an einem Anmeldebildschirm arbeiten müssen, und das ist kein Wunder: Es ist ein empfindliches Gleichgewicht, einen Sicherheitsfluss zu entwerfen, der robust und funktional ist und in dem die Benutzer so navigieren können, wie es für sie sinnvoll ist, mit der geringsten Störung.
Wenn Sie zu viele komplexe Schritte und Einschränkungen einplanen, schalten Benutzer möglicherweise ab, um nie wieder zurückzukehren (eine Katastrophe für eine neue App), machen Sie es zu verwirrend, und Sie könnten das Support-Team am Ende kollektiv verunsichern, wenn sie Anfragen von Benutzern beantworten, die versuchen, auf ihre Konten zuzugreifen. Wenn Sie es zu einfach machen, versagen Sie irgendwie im Sicherheitsbereich.
Eine erfolgreiche sichere Benutzererfahrung muss strenge Sicherheitsvorkehrungen in einen sinnvollen Ablauf integrieren, der auf eine Weise präsentiert wird, die 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 eingeben, aber wenn es ein totales Durcheinander ist, das Benutzer abschreckt, verfehlt es das Ziel.
Legen Sie den Grundstein für Software-Exzellenz. Da ich selbst Entwickler bin, weiß ich, dass die überwiegende Mehrheit von uns stolz auf unsere Arbeit ist und das Richtige tun möchte. Lästige Hindernisse wie Zeitbeschränkungen, plötzliche Änderungen des aktuellen Ziels oder dringende Hotfixes können den Arbeitsablauf stören und zu Fehlern führen, aber die harte Wahrheit ist, dass viele Softwareentwickler nicht auf Erfolg vorbereitet sind.
„Links von links“ zu beginnen ist ein Konzept, bei dem die Entwickler an erster Stelle stehen, und Unternehmen müssen ernsthaft daran arbeiten, ihre technische Kohorte zu verbessern. Sicherheitsbewusste Entwickler sind Gold wert, und Unterstützung in Form von Schulungen, der Bereitstellung der richtigen Tools und der Möglichkeit, von erfahreneren Entwicklern betreut zu werden, wird eine Umgebung fördern, in der Code mit einer sicherheitsorientierten Denkweise erstellt wird, mit der Präzision und Liebe zum Detail, die erforderlich sind, um Software auf die nächste Stufe zu heben.
Bist du bereit, das sichere Codierungsfeuer in dir selbst zu entfachen? Stellen Sie sich der Herausforderung .