it-swarm.com.de

Was sollte jeder Programmierer über Sicherheit wissen?

Ich bin ein IT-Student und ich bin jetzt im 3. Jahr an der Universität. Bisher beschäftigten wir uns mit vielen Themen im Zusammenhang mit Computern im Allgemeinen (Programmierung, Algorithmen, Computerarchitektur, Mathematik usw.).

Ich bin mir sehr sicher, dass niemand alles über Sicherheit lernen kann, aber sicher, dass es ein "Minimum" an Kenntnissen gibt, das jeder Programmierer oder IT-Student darüber wissen sollte, und meine Frage lautet: Was ist dieses Minimum an Kenntnissen?

Können Sie einige E-Books oder Kurse vorschlagen oder kann irgendetwas dazu beitragen, mit dieser Straße zu beginnen?

421

Beachten Sie die folgenden Grundsätze, wenn Sie möchten, dass Ihre Anwendungen sicher sind:

  • Vertraue niemals einer Eingabe!
  • Eingabe validieren aus allen nicht vertrauenswürdigen Quellen - Whitelists und keine Blacklists verwenden
  • Planen Sie die Sicherheit von Anfang an ein - es ist nichts, woran Sie am Ende festmachen können
  • Halten Sie es einfach - Komplexität erhöht die Wahrscheinlichkeit von Sicherheitslücken
  • Halten Sie Ihre Angriffsfläche auf ein Minimum
  • Stellen Sie sicher, dass Sie sicher fehlschlagen
  • Verwenden Sie Tiefenverteidigung
  • Halten Sie sich an das Prinzip geringstes Privileg
  • Verwenden Sie Bedrohungsmodellierung
  • Aufteilen - Ihr System ist also nicht alles oder nichts
  • Geheimnisse zu verbergen ist schwierig - und Geheimnisse, die im Code verborgen sind, werden nicht lange geheim bleiben
  • Schreiben Sie keine eigene Krypto
  • Die Verwendung von Krypto bedeutet nicht, dass Sie sicher sind (Angreifer suchen nach einem schwächeren Link).
  • Beachten Sie Pufferüberläufe und wie Sie sich davor schützen können

Es gibt einige hervorragende Bücher und Artikel online, in denen es darum geht, Ihre Anwendungen sicher zu machen:

Trainieren Sie Ihre Entwickler in den besten Methoden zur Anwendungssicherheit

Codebashing (bezahlt)

Sicherheitsinnovation (bezahlt)

Sicherheitskompass (bezahlt)

OWASP WebGoat (kostenlos)

545
bignum

Regel Nr. 1 der Sicherheit für Programmierer: Machen Sie keine eigenen Regeln

Sofern Sie nicht selbst Sicherheitsexperte und/oder Kryptograf sind, sollten Sie immer eine gut konzipierte, getestete und ausgereifte Sicherheitsplattform, ein Framework oder eine Bibliothek verwenden die Arbeit für Sie zu erledigen. Diese Dinge wurden jahrelang von Experten und Hackern gleichermaßen durchdacht, gepatcht, aktualisiert und untersucht. Sie möchten diese Vorteile nutzen, nicht aber das Rad neu erfinden.

Das heißt nicht, dass Sie nichts über Sicherheit lernen müssen. Sie müssen auf jeden Fall genug wissen, um zu verstehen, was Sie tun, und um sicherzustellen, dass Sie die Tools richtig verwenden. Wenn Sie jedoch jemals anfangen sollten, Ihren eigenen Kryptografiealgorithmus, Ihr eigenes Authentifizierungssystem, Ihren Input Sanitizer usw. zu schreiben, halten Sie an, treten Sie einen Schritt zurück und merken Sie sich die Regel 1.

102
Tyler McHenry

Jeder Programmierer sollte wissen, wie man Exploit-Code schreibt.

Ohne zu wissen, wie Systeme ausgenutzt werden, stoppen Sie versehentlich Sicherheitslücken. Das Patchen von Code ist absolut bedeutungslos, es sei denn, Sie wissen, wie Sie Ihre Patches testen. Sicherheit ist nicht nur eine Ansammlung von Gedankenexperimenten, Sie müssen wissenschaftlich sein und Ihre Experimente testen.

70
rook

Sicherheit ist ein Prozess, kein Produkt.

Viele scheinen diese offensichtliche Tatsache zu vergessen.

41
ericteubert

Ich schlage vor, zu überprüfen CWE/SANS TOP 25 gefährlichsten Programmierfehler . Es wurde für 2010 mit dem Versprechen regelmäßiger Updates für die Zukunft aktualisiert. Die 2009 Revision ist ebenfalls verfügbar.

Von http://cwe.mitre.org/top25/index.html

Die 2010 CWE/SANS Top 25 Most Dangerous Programming Errors sind eine Liste der am häufigsten auftretenden und kritischsten Programmierfehler, die zu schwerwiegenden Software-Sicherheitslücken führen können. Sie sind oft leicht zu finden und leicht auszunutzen. Sie sind gefährlich, weil sie Angreifern häufig ermöglichen, die Software vollständig zu übernehmen, Daten zu stehlen oder die Software am Funktionieren zu hindern.

Die Top-25-Liste ist ein Tool für Aufklärung und Sensibilisierung, das Programmierern hilft, Schwachstellen in der Softwareindustrie zu vermeiden, indem allzu häufige Fehler identifiziert und vermieden werden, die auftreten, bevor Software überhaupt ausgeliefert wird. Software-Kunden können dieselbe Liste verwenden, um sicherere Software anzufordern. Forscher der Softwaresicherheit können die Top 25 verwenden, um sich auf eine enge, aber wichtige Untergruppe aller bekannten Sicherheitslücken zu konzentrieren. Schließlich können Software-Manager und CIOs die Top-25-Liste als Maßstab für Fortschritte bei der Sicherung ihrer Software verwenden.

23
jschmier

Ein guter Einstiegskurs könnte der MIT Kurs in Computernetzwerke und Sicherheit sein. Eine Sache, die ich vorschlagen würde, ist, die Privatsphäre nicht zu vergessen. Sicherheitsaspekte sind von grundlegender Bedeutung und werden in technischen Kursen zum Thema Sicherheit nicht häufig behandelt. In diesem Kurs finden Sie möglicherweise Material zum Thema Datenschutz unter Ethik und Recht in Bezug auf das Internet.

13
tvanfosson

Das Web Security-Team von Mozilla hat einen tollen Leitfaden zusammengestellt, den wir bei der Entwicklung unserer Websites und Dienste einhalten.

10
Potch

Die Bedeutung sicherer Standardeinstellungen in Frameworks und APIs:

  • Viele frühe Web-Frameworks haben sich in Vorlagen nicht standardmäßig dem HTML-Code entzogen und hatten deshalb XSS-Probleme
  • Viele frühe Webframeworks machten es einfacher, SQL zu verketten, als parametrisierte Abfragen zu erstellen, die zu vielen SQL-Injection-Fehlern führten.
  • Einige Versionen von Erlang (R13B, möglicherweise andere) verifizieren standardmäßig keine SSL-Peer-Zertifikate, und es gibt wahrscheinlich viele Erlang-Codes, die für SSL-MITM-Angriffe anfällig sind
  • Der XSLT-Transformer von Java ermöglicht standardmäßig die Ausführung von willkürlichem Java Code. Es wurden viele schwerwiegende Sicherheitslücken dadurch verursacht.
  • Mit den XML-Parsing-APIs von Java kann das analysierte Dokument standardmäßig beliebige Dateien im Dateisystem lesen. Mehr Spaß :)
8
benmmurphy

Sie sollten über die drei Einsen Bescheid wissen. Authentifizierung, Autorisierung, Audit. Ein klassischer Fehler besteht darin, einen Benutzer zu authentifizieren, ohne zu prüfen, ob der Benutzer berechtigt ist, eine Aktion auszuführen, damit sich ein Benutzer die privaten Fotos anderer Benutzer ansehen kann. Dies ist der Fehler, den Diaspora begangen hat. Viele, viele Menschen vergessen Audit. In einem sicheren System müssen Sie wissen, wer was wann getan hat.

5
rapadura
  • Denken Sie daran, dass Sie (der Programmierer) alle Teile sichern müssen, der Angreifer jedoch nur einen Knick in Ihrer Rüstung finden muss.
  • Sicherheit ist ein Beispiel für "unbekannte Unbekannte". Manchmal werden Sie die möglichen Sicherheitslücken erst später erkennen.
  • Der Unterschied zwischen einem Bug und einer Sicherheitslücke hängt von der Intelligenz des Angreifers ab.
4
Rory

Ich würde folgendes hinzufügen:

  • So funktionieren digitale Signaturen und digitale Zertifikate
  • Was ist Sandboxing?

Verstehen Sie, wie verschiedene Angriffsvektoren funktionieren:

  • Pufferüberläufe/-unterläufe/etc im nativen Code
  • Social Engineering
  • DNS-Spoofing
  • Der Mann in der Mitte
  • CSRF/XSS et al
  • SQL-Injektion
  • Krypto-Angriffe (z. B .: Ausnutzen schwacher Krypto-Algorithmen wie DES)
  • Programm-/Framework-Fehler (z. B. Githubs neueste Sicherheitslücke)

Sie können leicht für all dies googeln. Dies gibt Ihnen eine gute Grundlage. Wenn Sie Schwachstellen in Webanwendungen anzeigen möchten, gibt es ein Projekt mit dem Namen google gruyere , das Ihnen zeigt, wie Sie eine funktionierende Webanwendung ausnutzen können.

4
Miguel Ping

wenn Sie ein Unternehmen oder eine eigene Software aufbauen, sollten Sie einfach wie ein Hacker denken. Wir wissen, dass Hacker in allen Dingen keine Experten sind, aber wenn sie eine Schwachstelle finden, fangen sie an, darin zu suchen, indem sie Informationen über alle sammeln die Dinge und schließlich Angriff auf unsere software.so um solche Angriffe zu verhindern, sollten wir einige bekannte Regeln befolgen wie:

  • versuchen Sie immer, Ihre Codes zu knacken (verwenden Sie Cheatsheets und googeln Sie die Dinge, um weitere Informationen zu erhalten).
  • auf Sicherheitslücken in Ihrem Programmierbereich aktualisiert werden.
  • und wie oben erwähnt, vertrauen Sie niemals einer Art von Benutzer oder automatisierten Eingaben.
  • verwenden Sie OpenSource-Anwendungen (die meisten Sicherheitslücken sind bekannt und behoben).

weitere Sicherheitsressourcen finden Sie unter den folgenden Links:

weitere Informationen zu den Sicherheitsabläufen Ihres Anwendungsherstellers finden Sie bei Google.

4
rahul_pratap
  1. Warum ist das wichtig?.
  2. Es dreht sich alles um Kompromisse.
  3. Kryptographie lenkt weitgehend von der Sicherheit ab.
3
Richard

Lesen Sie auch OWASP Top 10 List , um eine Kategorisierung aller Hauptangriffsmethoden/Schwachstellen zu erhalten.

Diese Dinge sind faszinierend zu lesen. Wenn Sie lernen, wie ein Angreifer zu denken, lernen Sie, woran Sie denken müssen, wenn Sie Ihren eigenen Code schreiben.

3

Für allgemeine Informationen zur Sicherheit empfehle ich unbedingt Bruce Schneier . Er hat eine Website, seinen Kryptogramm-Newsletter , mehrere Bücher und hat viele Interviews gemacht.

Ich würde mich auch mit Social Engineering (und Kevin Mitnick ) vertraut machen.

Für ein gutes (und ziemlich unterhaltsames) Buch darüber, wie Sicherheit in der realen Welt funktioniert, würde ich das ausgezeichnete (wenn auch etwas veraltete) 'The Cuckoo's Egg' von Cliff Stoll empfehlen.

3
Dan Esparza

Salt und Hash die Passwörter Ihrer Benutzer. Speichern Sie sie niemals im Klartext in Ihrer Datenbank.

2
Abdull

Ich wollte dies nur für Webentwickler freigeben:

sicherheitsleitfaden für Entwickler
https://github.com/FallibleInc/security-guide-for-developers

0
Destrif