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?
9
Antworten:
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.
quelle
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.
quelle
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:
Früher war es rund.
quelle
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.
quelle
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.
quelle
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
$_GET
oder$_POST
Arrays direkt. Stattdessen ich fragen sie durch eine FunktionRequest::get('parameter', 'filter')
mit Filtern wieint
,text
und ein paar andere. (UndRequest::post()
natürlich für POST-Eingänge.)quelle
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.
quelle
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).
quelle
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?
quelle
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.
quelle
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)
quelle