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.
quelle
Antworten:
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:
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.
quelle
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.
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.
quelle
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.
quelle