Denken Sie beim Codieren aktiv an Sicherheit?


9

Denken Sie beim Codieren aktiv darüber nach, dass Ihr Code möglicherweise auf eine Weise ausgenutzt wird, für die er ursprünglich nicht vorgesehen war, und erhalten Sie so Zugriff auf geschützte Informationen, führen Sie Befehle aus oder etwas anderes, das Ihre Benutzer nicht tun sollen?


Beim Codieren was? Ich mache viele verschiedene Dinge.
David Thornley

9
Ja, oft. Normalerweise in Sätzen ähnlich wie "Verdammt, ich habe keine Zeit, ich hoffe, niemand wird es herausfinden".
Liori

Antworten:


10

So'ne Art. Haftungsausschluss: Ich bin ein Sicherheitsmann;)

Ich arbeite also mit meinem Bedrohungsmodell, das beschreibt, welche Art von Angriffen von welcher Art von Angreifern wahrscheinlich sind. Das hilft, die Sicherheitsanforderungen herauszufinden. Wenn ich tatsächlich codiere, mache ich die üblichen "sicheren Codierungs" -Verfahren, z. B. darauf zu achten, dass Cursor-Variablen immer innerhalb der Grenzen liegen, fehlerhafte Eingaben bereinigt werden und Fehlerbedingungen behandelt werden. Dann gehe ich zurück zu meinem Bedrohungsmodell, um zu sehen, welche Module am wahrscheinlichsten von Angreifern angegriffen werden. diese bekommen eine zusätzliche Bewertung.


4

Ich verwende branchenübliche Praktiken wie die Verwendung von SQL-Parametern. Ich verwende "sichere" Plattformen wie .NET Framework und nutze Sicherheitsfunktionen wie Fälschungsschutz-Token in ASP.NET MVC. Ich schreibe keine eigenen Verschlüsselungsalgorithmen, aber ich verstehe, was diese Verschlüsselungen in Bezug auf Sicherheitsvorteile bieten und wann ich sie verwenden muss, um diese Sicherheitsvorteile zu erhalten.

Kurz gesagt, ich verwende Best Practices, entwickle jedoch keine eigenen Sicherheitstools. Ich bin in dieser Hinsicht kein Sicherheitsexperte. Ich verlasse mich auf andere Sicherheitsexperten, die sich vermutlich bereits eingehend mit diesen Themen befasst haben und ein klares Verständnis für die Risiken und Vorteile haben.

Mein grundlegender Sicherheitsansatz besteht nicht nur darin, Sicherheitstools zu verwenden, sondern alle möglichen Eingaben in das System zu eliminieren, mit Ausnahme derjenigen, die ich erwarte. Wenn ich ein Feld für Sozialversicherungsnummern habe, sollten nur numerische Ziffern und Striche in einem bestimmten Muster angezeigt werden.

Ich überprüfe Benutzereingaben sowohl auf dem Client als auch auf dem Server.


Ich bin mit der Verwendung der eingebauten Sicherheitsfunktionen einverstanden, aber Sie müssen sich sicherlich überlegen, wann und wie es angemessen ist, sie zu verwenden. Ich muss sagen, ich bin besorgt darüber, dass ich mich darauf verlasse, dass andere über die Sicherheit Ihres Produkts nachdenken. Das haben sie nicht getan.
Michael Shaw

@Ptolemy: Wann ist es nicht angebracht, eine SQL-Anweisung zu parametrisieren? Wann ist es nicht angebracht, einen Fälschungsschutz zu verwenden? Wenn die Daten vertraulich sind, wann ist die Verwendung der Verschlüsselung nicht angemessen?
Robert Harvey

Betrachten wir die Verschlüsselung für einen Moment. Erste Frage, welche Verschlüsselung verwenden Sie? Die Verwendung einer schlechten Verschlüsselung vermittelt ein falsches Sicherheitsgefühl. Irgendwann müssen Sie die Daten entschlüsseln. Ab wann tun Sie dies, was sind die Risiken dafür im Vergleich zur Komplexität des Codes. Welchen tatsächlichen Schutz bietet Ihnen die Verschlüsselung tatsächlich? Ist Ihr DLL-Bytecode verschlüsselt oder kann der Verschlüsselungsschlüssel aus Ihrer DLL gelesen werden? Deshalb ist es gefährlich, nur die Funktionen mit wenig oder gar keinem Verständnis zu verwenden.
Michael Shaw

@Ptolemy: Wenn Sie das mit Sicherheit meinen, dann stimme ich zu, dass Sie diese Dinge tatsächlich wissen müssen, um diese Tools richtig zu verwenden.
Robert Harvey

3

Absolut.

Sicherheit ist alles. Und mit numerischer Software geht das zweimal.
Erst neulich gelang es einem Benutzer, den Fehler in einem meiner alten Programme zu finden und auszunutzen. Der Schaden war nicht reparabel. Siehe unten:

Alt-Text

Früher war es rund.


7
Dies bedarf weiterer Erklärung :)
Toby Allen


2

Nein, da ich nicht in einer Problemdomäne arbeite, in der Sicherheit relevant ist (massive Datenvisualisierungs-SW). Ich tue ein Bündel hat , in meinem Code (Index Prüfung, Konsistenzprüfung, etc.) geltend mache, nicht wegen Sicherheitsbedenken, sondern weil ich wie falscher Code früh zum Absturz zu bringen und sichtbar zum Absturz bringen.


1

Absolut. Ich denke über Injection-Schwachstellen nach und darüber, wie meine Geschäftslogik in einer Desktop-Umgebung im Vergleich zu einer Webumgebung funktioniert und wie Sicherheit in beiden Arten von Umgebungen implementiert wird.


1

Ich bin kein Sicherheitsexperte, aber wenn ich Webanwendungen codiere, gehe ich immer davon aus, dass Benutzereingaben alle möglichen Verrücktheiten enthalten können und immer vollständig entkommen und dergleichen sein sollten. Außerdem bin ich vorsichtig, wenn Ajax den Server zurückruft, um zu überprüfen, ob der Benutzer angemeldet ist (falls dies für dieses bestimmte Ereignis der Fall sein sollte) und ob er die Berechtigung hat, das zu tun, was er versucht.

Die Codebasis verfügt über eine Reihe von Filtern für Eingaben. Ich überprüfe niemals PHPs $_GEToder $_POSTArrays direkt. Stattdessen ich fragen sie durch eine Funktion Request::get('parameter', 'filter')mit Filtern wie int, textund ein paar andere. (Und Request::post()natürlich für POST-Eingänge.)


1

Ja. Als ich an einem Multiplayer-Spiel arbeitete, waren alle paranoid gegenüber Exploits und Betrugsmöglichkeiten. Betrug kann ein Spiel völlig zerstören, ganz zu schweigen von Geschäftsmodellen, die mit dem Verkauf von In-Game-Sachen verbunden sind. Sicherheitsbedenken und Manipulationsschutzmaßnahmen standen daher ganz oben auf der Tagesordnung. Ich mochte es sehr. Ich habe bereits an anderen Projekten gearbeitet, bei denen Sie sich schuldig fühlen mussten, weil Sie länger an dem Code gearbeitet haben, um sicherzustellen, dass er sicher ist.


0

Ja. Sicherheit ist wichtig und sollte kein nachträglicher Gedanke sein. Das Hinzufügen von Sicherheit nachträglich ist im Allgemeinen schwieriger als das erstmalige Entwerfen in die Anwendung. Wenn Sie sie später hinzufügen, werden Sie wahrscheinlich einige Dinge übersehen (oder sich überhaupt nicht darum kümmern, sie hinzuzufügen).


0

Verstehen Sie die allgemeinen Prinzipien der Sicherheit (Integrität, Authentifizierung, Autorität) und lesen Sie dann ein paar Bücher darüber, wie Menschen diese Säulen der Sicherheit seit Jahrtausenden untergraben, und Sie sind ungefähr auf halbem Weg.

Lesen Sie dann ein paar gute Bücher über Design- und Teststrategien und lernen Sie, wie Sie Testbarkeit in Ihre Architektur integrieren.

Jetzt kommen wir zu dem Punkt, an dem ich über Sicherheit nachdenke. Ich denke darüber nach, wie ich die Datenquelle validieren kann. Ist es wichtig, ob die Daten manipuliert werden, wer ist die Datenquelle, wie sicher bin ich mir dessen? wie hätte es geändert werden können etc ...

Dies wirkt sich auf das Design aus. Bei Konfigurationsdateien können Schlüsselabschnitte verschlüsselt sein, oder bestimmte Felder können im Klartext mit einem zugehörigen Signaturfeld vorliegen. Bei mit dem Internet verbundenen Diensten wird es komplexer, da Sie dort ein höheres Maß an Feindseligkeit erwarten sollten.

Wie testen Sie das alles beim Testen? Was sind Ihre maximalen Dateneingaben, was passiert, wenn Sie die Software über diese Grenzen hinaus bewegen, wie geht sie damit um? Was vertraut es? Wie können Sie dieses Vertrauen vortäuschen?


0

Ja.

Ich habe in der Vergangenheit mit genug Hackern zu tun gehabt, um zu wissen, dass sie ständig versuchen, eine große Site zu kompromittieren, und es gibt genug Bots, dass selbst kleine Sites nicht sicher sind.

Ich versuche jetzt die ganze Zeit wie ein Hacker zu denken , bis zu dem Punkt, an dem ich meine Mitarbeiter manchmal mit beiläufigen Kommentaren darüber beunruhige, wie Systeme, die wir jeden Tag für selbstverständlich halten, gespielt werden können.


0

Es sollte etwas sein, das jeder Entwickler je nach Anwendung mehr oder weniger von Grund auf in den Prozess einbaut. Leider denken Käufer nicht daran, da Entwickler aus Sicherheitsgründen nicht zitieren ( Ich weiß, das ist ein bisschen Catch-22, denn wenn die Käufer das billigste Angebot wollen, wird es möglicherweise keine Sicherheit enthalten.)

Als Entwickler können Sie sich einen klaren Vorteil verschaffen, wenn Sie sich auf diesem Gebiet auskennen. Ich denke speziell an Banken und Finanzdienstleistungen, aber auch andere Branchen sind anwendbar. Derzeit können sie 70 bis 100.000 Schulungen für einen neuen Absolventen veranschlagen, um über Prozesse, Sicherheit und andere Besonderheiten dieser Organisation auf dem Laufenden zu bleiben. Wenn Sie ihnen 30.000 davon sparen können, ist das ein guter Lebenslauf plus!

In Großbritannien arbeiten das Institute of Information Security Professionals und in Schottland das Centre of Excellence in Security and Cybercrime eng mit den Universitäten zusammen, um Kursmaterialien zu überprüfen, Gastvorträge über die realen Auswirkungen schlechter Codierung zu halten und Sommerpraktika zu ermöglichen (z Softwareentwickler, die in Strafverfolgungsbehörden in Betrugsabteilungen eingeteilt sind.) Die meisten unterstützenden Organisationen tun dies kostenlos, da sie das Potenzial haben, eine große Menge Geld zu sparen - das klingt für mich nach Wert.

(Haftungsausschluss - Ich war Sicherheitsbeamter für verschiedene globale Organisationen)

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.