Was machen Programmierer bei Sicherheitsfirmen?


10

Ich habe von Sicherheitsfirmen gehört, die sich über die Sicherheit der Systeme eines Kunden beraten. Alle Leute, die ich auf diesem Gebiet kenne, sind Netzwerktechniker, aber ich weiß, dass Programmierer sich auch mit Sicherheit befassen. Was tun Sicherheitsprogrammierer, die Audits / Beratungen durchführen? Gehen sie buchstäblich die Codebasis durch und suchen nach jeder Sicherheitslücke in den Legacy-Systemen der Menschen? Ich habe immer angenommen, dass dies das ist, was sie getan haben, aber es scheint, als wäre dies höchst unzuverlässig und würde nicht viel mehr tun, als ein falsches Sicherheitsgefühl zu vermitteln. Hinweis: Ich spreche nicht von Programmierern, die Verschlüsselungsalgorithmen oder ähnliches schreiben, sondern nur von solchen, die sich mit Software-Sicherheitsüberprüfungen / -beratung befassen.


1
Durchsuchen Sie security.stackexchange.com nach einem Publikum mit vielen weiteren Sicherheitsleuten!
Rory Alsop

1
Was er gesagt hat, wir sind beide dort Moderatoren.

Antworten:


12

Ehrlich gesagt versuchen wir, Ihre Codebasis nicht zu durchsuchen. Wir versuchen, Tools zu schreiben, die dies für uns tun.

Erstens die Theorie. Sicherheit ist eine Anforderung an ein Softwaresystem. Daher sollte sie wie andere Anforderungen (Funktionalität, Benutzerfreundlichkeit, Zugänglichkeit, Leistung usw.) in jeder Phase des Software-Engineering-Workflows von der Erfassung der Anforderungen bis zur Bereitstellung und Wartung berücksichtigt werden. Dies ist in der Tat möglich, und es gibt Anleitungen, die Softwareprojektteams dabei unterstützen. Obwohl ich hauptsächlich mit iOS-Entwicklern zusammenarbeite, stammt meine Lieblingsbeschreibung des "sicheren Entwicklungslebenszyklus" von Microsoft Press .

In diesem Modell beginnt die Anwendungssicherheit, wenn wir versuchen, Anforderungen von unseren Benutzern zu ermitteln. Wir müssen ihre Sicherheits- und Datenschutzbedenken herausfinden, was nicht einfach ist, da wir die Experten und nicht die Benutzer sind und wenn sie ihre Sicherheitsanforderungen verstehen, fällt es ihnen möglicherweise schwer, sie auszudrücken. Wir müssen auch herausfinden, welchen Risiken die Software bei der Bereitstellung ausgesetzt ist und welches Risiko akzeptabel ist.

Wir gestalten unsere Anwendung so, dass diese Anforderungen erfüllt werden. Wir schreiben den Code mit dem Ziel, diese Anforderungen zu erfüllen und zusätzliche Risiken zu vermeiden, die mit Sicherheitsfehlern auf Codeebene verbunden sind. Wir testen die Software, um sicherzustellen, dass unser Sicherheitsmodell mit dem übereinstimmt, was wir wirklich erstellt haben. Anschließend stellen wir die Software so bereit, dass sie den Annahmen entspricht, die wir bei der Entwicklung des Objekts über die Umgebung getroffen haben. Schließlich bieten wir Support und Wartung, die dem Benutzer helfen, die Software in Übereinstimmung mit seinen Sicherheitsanforderungen zu betreiben, und die es ihm (und uns) ermöglichen, auf neuartige Änderungen der dargestellten Risiken zu reagieren.

Ok, so viel zur Theorie. In der Praxis passieren aus Gründen, die in Geekonomics sehr gut (wenn auch nicht technisch) erklärt werden und die hauptsächlich auf die Motivation von Softwareunternehmen zurückzuführen sind, die meisten der oben genannten Dinge nicht. Stattdessen bekommen wir das. Entwickler werden:

  • Stellen Sie einen Sicherheitsmann oder eine Sicherheitsfrau ein, um anwesend zu sein, wenn sie für einen Vertrag bieten, um zu zeigen, dass sie Sicherheit "bekommen".
  • Software schreiben.
  • Stellen Sie einen Sicherheitsmitarbeiter oder eine Sicherheitsfirma ein, um die Software vor der Veröffentlichung zu validieren, und beheben Sie viele Probleme, die in Schritt 2 aufgetreten sind.
  • Patchen Sie alles andere nach der Bereitstellung.

Was die meisten Leute für App-Sicherheit wirklich tun, ist, wie Sie sagen, Fehler zu finden. Dies ist wirklich eine verherrlichte Codeüberprüfung, aber es ist eine sehr fokussierte Codeüberprüfung, die von Leuten durchgeführt wird, die Experten für die Art von Fehlern sind, nach denen diese Überprüfung sucht. Daher ist es immer noch sinnvoll, externe Hilfe zu erhalten. Das ist natürlich eine allgemeine Regel für das Teting: Lassen Sie immer jemanden testen, der nicht an der Herstellung des Dings beteiligt war.

Wenn wir das oben Gesagte als wahr akzeptieren, dann ist es wahrscheinlich, dass Leute, die Kaufentscheidungen treffen, "fähigen Sicherheitsmann" mit "findet viele Fehler" gleichsetzen. Diejenigen, die Computer dazu bringen, die Arbeit für sie zu erledigen, werden mehr Fehler finden als diejenigen, die dies nicht tun. Daher verlassen sie sich natürlich stark auf statische Analysetools und werden mehr Zeit damit verbringen, die Tools zu erweitern, als für bestimmte Probleme für bestimmte Kunden zu programmieren. Dann schließen wir, dass App-Sicherheitsleute eher Tools zum Lesen von Code schreiben als zum Lesen von Code.

** Warnung: Was bleibt, ist persönliche Meinung und Spekulation **

Die Realität ist gebrochen. Sie werden feststellen, dass es bei der Theorie der Software-Sicherheit darum ging, das Risiko zu identifizieren und auf das Risiko zu reagieren, sich auf ein Softwaresystem zu verlassen, während es in der Praxis darum ging, so viele Fehler wie möglich zu finden. Sicher, das reduziert das Risiko immer noch, aber nur als Nebeneffekt. Der Punkt des Spiels ist weniger wichtig als das "Gewinnen" des Spiels, daher werden die Regeln geändert, um das Gewinnen zu erleichtern.

Was können Sie als Softwareentwickler dagegen tun? Spielen Sie das Spiel nach den ursprünglichen Regeln. Finden Sie jemanden in Ihrem Team (vorzugsweise tatsächlich in Ihrem Team, anstatt einen Auftragnehmer, damit dieser motiviert ist, langfristige Ergebnisse zu erzielen, anstatt schnell zu gewinnen), der die Bedeutung der Sicherheit versteht und den Bejeezus aus ihnen heraus trainiert. Geben Sie dieser Person die Verantwortung, das Team anzuweisen, die zu Beginn meiner Antwort beschriebene End-to-End-Sicherheit bereitzustellen.

Außerdem geben Sie dieser Person die Autorität durch zu folgen . Wenn ein Design die Sicherheitsanforderungen nicht ausdrückt, muss er überarbeitet werden. Wenn die Implementierung die Sicherheitsanforderungen nicht erfüllt, darf sie nicht freigegeben werden . Ihre Sicherheitsperson kann das Urteil fällen, muss jedoch berechtigt sein, auf dieses Urteil zu reagieren. Mir ist klar, dass dies so klingt, als würde der Sicherheitsmann sagen "OMFG-Sicherheit ist das Wichtigste", aber das meine ich nicht. Wenn Ihr Produkt auch nicht die Anforderungen an Funktionalität, Benutzerfreundlichkeit oder Leistung erfüllt, sollten Sie dieses Produkt auch nicht freigeben.

Warum willst du das tun? Es sollte billiger sein: Wir haben alle die Code Complete-Tabelle gesehen (und wahrscheinlich für eine billige +10 Wiederholung angegeben), in der Fehler teurer werden, je später Sie sie beheben, oder? Nun, Sicherheitsmängel sind auch Mängel. Nach den realen Spielregeln sind die meisten Probleme bei den Anforderungen, die bei der Wartung behoben werden. Ist das billig

Ok, was kann ich als gemietete Sicherheitswaffe dagegen tun? Nun, es stellt sich heraus, dass ich mich auch weigern kann, nach den geänderten Regeln zu spielen. Ich kann Entwicklern sagen, dass es darum geht, das Risiko zu reduzieren, dass dies in jeder Phase möglich ist, und dann kann ich ihnen dabei helfen.


Für eine Person in Ihrer Position bin ich überrascht, dass Sie der Diskussion nicht mehr bieten können. Es würde mich sehr interessieren, was Sie zu sagen haben.
Steven Evers

Du hast recht, ich war müde (Jetlag), als ich die Antwort schrieb. Ich werde versuchen, es ein bisschen auszufüllen.

@snorfus Ich sollte mich dafür entschuldigen, dass ich keine gute Antwort gegeben habe. Es tut mir wirklich leid.

@ Abraham Lee: Ich vermutete, dass Sie eine großartige Antwort vor uns versteckt hatten :) Ihre Änderungen haben genau das bewiesen; Danke!
Steven Evers

@snorfus Ich sollte wirklich nachdenken, bevor ich poste. Und wenn ich nicht in der Lage bin zu denken, sollte ich nicht

5

Nach 15 Jahren Sicherheitsprogramme für kleine und extrem große Apps, Umgebungen, Systeme usw. würde ich sagen, dass es von allem etwas gibt. In meinen Teams hatte ich immer einige, die Hardcore-Programmierer sind.

Auf der detaillierten Ebene kommt es zum Teil auf eine sehr gründliche Codeüberprüfung an. Als Beispiel arbeite ich derzeit an einer Codebasis mit mehreren Millionen Zeilen, bei der Tools verwendet werden, um mögliche Probleme einzugrenzen, und dann jedes einzelne zu betrachten kategorisieren.

(Zugegeben, ich übergebe es dann den Entwicklern, um es zu beheben oder mir zu erklären, warum das Problem kein Risiko darstellt.)

Dies ist jedoch ein spezifisches Engagement, für das das Risikoprofil sinnvoll ist, um diese Art von ressourcenintensiver Arbeit durchzuführen.

Weitaus standardisierter und kostengünstiger ist es, das Risikoprofil der Organisation zu verstehen und sich auf die Risiken von oben nach unten zu konzentrieren, z.

  • Risikoappetit - Auswirkungen auf das Geschäft, Bedrohungsmodellierung
  • Governance - Einhaltung gesetzlicher Vorschriften, Berichterstattung usw.
  • Richtlinien - Definitionen zur Gewährleistung eines wirksamen Governance-Rahmens
  • Prozesse - technisch und menschlich
  • Standards - Definitionen für jede Sicherheitskontrolle
  • Implementierung - das How To

Die Programmierseite kommt wirklich nur in die letzten beiden, mit Codeüberprüfung und benutzerdefinierten Penetrationstests. Für einige Organisationen ist dies von sehr geringer Bedeutung. Wenn Sie beispielsweise über mehrere Sicherheitskontrollen verfügen, die bereits ausführlich einer Peer-Review unterzogen wurden (z. B. verschiedene Verschlüsselungstypen), werden Sie bei der Überprüfung Ihrer Implementierung normalerweise nicht alle erneut überprüfen Code wie zuvor.


2
Ich + 1d, aber Vorsicht "oder um mir zu erklären, warum das Problem kein Risiko darstellt". Entwickler werden oft Grund finden, die von ihnen erstellten Dinge nicht zu ändern (als Entwickler zu sprechen) und außerdem die Risiken der Kunden möglicherweise nicht verstehen. Immerhin waren es Entwickler, die Windows 98 geschrieben haben ;-)

@ Abraham - du hast das gesagt, was nicht zu nennen war :-) Und ich mag deine neue Antwort in der längeren Version! +1
Rory Alsop

Oh, richtig. Ich habe das absichtlich gesagt, weil ich Windows 98 nicht nennen wollte, sondern drei Jahre zuvor.

1

Ich habe noch nie jemanden gefunden, der viel weiter geht, als Architektur / Best Practices während des Entwurfs und / oder der Ausführung von Angriffs- / Fritzing- / Ausnahmetestsuiten gegen abgeschlossene Projekte vage zu diskutieren.

In fast allen Fällen kann ich sogar anhand der von ihnen versuchten Angriffsvektoren und der Art und Weise, wie der Angriff ausgeführt wird, nachdem eines der Audits ein vorhandenes System übergeben hat, feststellen, welche Tools sie verwenden.

Ich stelle mir vor, dass es einige gibt, die sich tatsächlich die Zeit nehmen, um Code zu untersuchen und einige Überprüfungen / Whitebox-Tests durchzuführen, aber ich habe sie im wirklichen Leben noch nicht kennengelernt.


Es hört sich so an, als würde die Firma, für die Sie arbeiten, konsequent billiger und nimmt die Hacks, die ein gutes Spiel reden, aber nicht wirklich verstehen. Außer mir und den anderen Antwortenden hier habe ich mit vielen zusammengearbeitet und sie geschult, die es richtig machen. Zugegeben, ich habe wahrscheinlich mehr von der Art getroffen, die Sie auch hatten ...
AviD

@avid Ich habe es nicht negativ gemeint. Ich bin sicher, wenn Sie Top-Dollar bezahlt haben, könnten Sie genug konkurrierende Firmen finden, aber selbst wenn Sie dies tun, erhalten Sie viel mehr Vorschläge, um etwas zu kaufen, als Sie Ratschläge zur Verbesserung / Implementierung von etwas geben. Das ist keine schlechte Sache. Die Verwendung eines bekannten Produkts mit einer guten Sicherheitsaufzeichnung ist besser, wenn es für den Problembereich geeignet ist. Das OP erwähnte AUDIT speziell und in dem Bereich, den Sie für Ihr jährliches Audit durch Dritte bezahlen, erhalten Sie den 2., 3. und 1/2 des 4. von Rorys Punkten.
Bill
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.