BLOG

Beispielbasierte Unsicherheit veranschaulicht Bedarf an WAF

Lori MacVittie Miniaturbild
Lori MacVittie
Veröffentlicht am 05. Oktober 2017

Online-Lernen ist groß. Insbesondere für diejenigen, die sich selbst als Entwickler bezeichnen. Wenn Sie einen Blick auf die jährliche Entwicklerumfrage von Stack Overflow werfen (bei der Zehntausende Antworten eingehen), werden Sie feststellen, dass ein großer Teil der Entwickler keine formale Ausbildung hat:

Entwicklerausbildung
  • Unter den derzeit professionellen Entwicklern weltweit gaben 76,5 % der Befragten an, dass sie über einen Bachelor-Abschluss oder höher, also etwa einen Master-Abschluss oder einen gleichwertigen Abschluss verfügen.
  • 20,9 % gaben an, andere Bereiche wie Betriebswirtschaft, Sozialwissenschaften, Naturwissenschaften, Ingenieurwissenschaften (außer Computerwissenschaften) oder Kunst studiert zu haben.
  • 32 % der derzeitigen professionellen Entwickler gaben an, dass ihre formale Ausbildung für ihren beruflichen Erfolg nicht sehr wichtig oder überhaupt nicht wichtig sei. Dies ist nicht ganz überraschend, wenn man bedenkt, dass insgesamt 90 % der Entwickler der Meinung sind, dass sie sich ihre Kenntnisse zumindest teilweise selbst beigebracht haben : Ein formaler Abschluss ist nur ein Aspekt ihrer Ausbildung und ein großer Teil ihrer praktischen Alltagsarbeit hängt von den individuellen Technologie-Stack-Entscheidungen ihres Unternehmens ab.

Beachten Sie den hervorgehobenen Teil der Umfrageergebnisse. Ich könnte eine Abhandlung darüber schreiben, warum das so ist, aber es genügt zu sagen, dass ich während meines Bachelor-Studiums in Pascal, C++ und LISP geschrieben habe. Für meinen ersten richtigen Entwicklerjob waren C/C++ erforderlich, daher war ich da gut zurecht. Aber später musste ich Java lernen. Und SQL. Dafür bin ich nicht wieder zur Schule gegangen. Ich habe auf Bücher, Hilfedateien und alle anderen Unterlagen zurückgegriffen, die ich in die Finger bekommen konnte. Autodidaktisches Lernen ist die Norm, egal, ob Sie eine formale Ausbildung haben oder nicht, weil sich die Technologie ändert und Berufstätige nicht die Zeit haben, noch einmal zur Schule zu gehen, nur um eine neue Sprache oder ein neues Framework zu lernen.

Das ist, vermute ich, für keinen von uns ungewöhnlich. Wir gehen nicht zurück zur Schule, um eine neue CLI oder API zu lernen. Wir machen auch keinen neuen Abschluss, nur um Python oder Node.js zu lernen. Wir greifen auf Bücher und Inhalte im Internet sowie auf Communities zurück und verlassen uns stark auf „Beispielcode“.

Möglichkeiten, wie Entwickler sich selbst etwas beibringen

Ich verlasse mich immer noch auf Blogs und Dokumentationen, nicht nur von unseren eigenen Ingenieuren und Architekten, sondern auch von anderen Leuten. Denn wenn ich mich jetzt für einen Ph.D. anmelde, werde ich mit den Besonderheiten des Express-Frameworks oder von JQuery nicht wirklich vertraut.

Daher überrascht es nicht, dass Netzwerkingenieure und -betreiber (die als erste an der zweiten DevOps-Welle beteiligt waren und im Folgenden als NetOps bezeichnet werden) wahrscheinlich auch auf dieselben Materialien zurückgreifen werden, um die Fähigkeiten zu erwerben, die sie für den kompetenten Umgang mit den erforderlichen Tools und Technologien benötigen. Das sind Skriptsprachen und APIs für diejenigen, die gerade erst einschalten. Und auch sie werden zweifellos nach Herzenslust kopieren und einfügen, wenn sie sich mit der Sprache und den Systemen vertraut machen und beginnen, die Produktionspipeline zu automatisieren .

Und damit kommen wir zu dem Grund, warum ich heute schreibe. Beispielcode.

Davon gibt es eine Menge. Und es ist guter Code. Gehen Sie also nicht weg und denken Sie, ich sei undankbar oder würde Beispielcode nicht wertschätzen. Es ist eine unschätzbare Ressource für jeden, der neue Sprachen und APIs erlernen möchte. Ich möchte mich darüber beschweren, dass zwischen dem Beispielcode und der Sicherheit eine Diskrepanz besteht, die behoben werden muss. Denn wenn wir neuen Leuten das Programmieren beibringen, sollten wir ihnen auch zumindest ein Bewusstsein für Sicherheit vermitteln, statt es einfach zu ignorieren.

Ich sage das, weil App-Sicherheit nicht – ich wiederhole: NICHT – optional ist . Ich könnte eine Statistik nach der anderen aufzählen, aber ich hoffe, dass ich an dieser Stelle offene Türen einrenne. App-Sicherheit ist nicht optional und es ist wichtig, diese Einstellung zu verbreiten, bis sie als fester Bestandteil der Entwicklung angesehen wird. Nicht nur Apps, wohlgemerkt, sondern auch die Skripte und Systeme, die die Automatisierung mithilfe von DevOps und NetOps vorantreiben.

Als Quelle meiner Angst stelle ich dieses Beispiel dar. 

Der Code selbst ist wunderschön. Wirklich. Gut formatiert, schöner Abstand. Lesbar. Ich liebe diesen Code. Außer dem Teil, der die Sicherheitsregel Null völlig verstößt.

Beispiel verstößt gegen Sicherheitsregel Null

DU SOLLST BENUTZEREINGABEN NICHT VERTRAUEN. IMMER.

Ich bin enttäuscht, dass nicht einmal ansatzweise darauf hingewiesen wird, dass die Eingaben bereinigt werden müssen. Weder in den Kommentaren noch im Artikeltext. Der Code gibt den „Benutzernamen“ einfach an eine andere Funktion weiter, ohne dass die Sorge besteht, dass er schädliche Inhalte enthalten könnte.

Aber Lori, dieser Code soll offensichtlich die Implementierung von etwas veranschaulichen, das nicht für die tatsächliche Produktion konzipiert ist. Es besteht kein Risiko.

Darum geht es nicht. Der Punkt ist, dass wir, wenn wir den Leuten weiterhin das Programmieren beibringen, zumindest versuchen sollten, ihnen beizubringen, es sicher zu tun . Dies muss so routinemäßig erwähnt werden , wie man C/C++-Neulingen erklärt, dass ein Zeiger abstürzt, wenn man ihm vor dem Zugriff keinen Speicher zuweist.

Ich könnte einen Blog nach dem anderen mit Beispielen füllen, die zeigen, wie Sicherheit und SDLC nur Lippenbekenntnisse sind, aber wenn es ans Eingemachte geht und man den Leuten das Programmieren beibringt, steht man plötzlich allein in der Ecke, umgeben von einem SEP-Feld (jemand anderes Problem).

Dies ist ein weiterer Grund, warum Web Application Firewalls eine entscheidende Komponente jeder App- Sicherheitsstrategie sind. Um zu vermeiden, dass Unternehmen das nächste Opfer einer langen Liste von App-Sicherheitslücken werden, benötigen sie eine Brandschutzbarriere zwischen den Benutzereingaben und den Apps, die diese blind als legitim akzeptieren.

Denn so gerne wir auch über die Sicherung von Code reden, wenn wir es anderen tatsächlich beibringen, halten wir uns nicht an die Taten. Wir müssen uns dieser mangelnden Aufmerksamkeit für die Sicherheit stärker bewusst sein – sogar in Beispielcode, denn dort lernen Entwickler (und zunehmend auch NetOps). Bis wir jedoch damit beginnen, benötigen wir Sicherheitslösungen wie WAF, um die Lücken zu schließen, die unsicherer Code hinterlässt.
 

* Oder anscheinend Englisch. Ach komm, das mache ich mit Absicht. Weil es manchmal Spaß macht, es falsch zu sagen.