17
Best Practices der sicheren Programmierung mit .NET Andrea Janes

Best Practices der sicheren Programmierung mit.NET Andrea Janes

Embed Size (px)

Citation preview

Page 1: Best Practices der sicheren Programmierung mit.NET Andrea Janes

Best Practices der sicheren Programmierung mit .NET

Andrea Janes

Page 2: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 2

Inhalt

EinleitungSichere Systeme entwerfenSoftware testenEmpfehlenswerte Verfahren

Page 3: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 3

Sichere Systeme entwerfen

Page 4: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 4

Design der Archi-tektur und des

Anwendungskerns

Sicherheit im Softwareentwicklungsprozess

Konzept

ErsteAnforderungs-

analyse

Eine Versionentwickeln

Feedback berücksichtigen

Version liefern

Feedback desKunden ermitteln

Fertige Version ausliefern

Page 5: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 5

Design der Archi-tektur und des

Anwendungskerns

Sicherheit im Softwareentwicklungsprozess

Konzept

ErsteAnforderungs-

analyse

Eine Versionentwickeln

Feedback berücksichtigen

Version liefern

Feedback desKunden ermitteln

Fertige Version ausliefern

Worum geht es? Welches Resultat wird

angestrebt? Wer hat welchen Nutzen? Wie wird dieser Nutzen

erreicht?

Ermittlung der Anforderungen basierend auf potentielle Kundenoder

Ermittlung der Anforderungen basierend auf dem Markt (d.h. unter Berücksichtigung der Anforderungen der anzusprechenden Marktsegmente)

Anforderungsentwicklung1)

Funktionale Anforderungen beschreiben die möglichen Features, d.h.: welche Möglichkeiten hat der Benutzer die Anwendung zu verwenden?

1) http://en.wikipedia.org/wiki/Functional_requirements2) http://www-128.ibm.com/developerworks/web/library/wa-qualbust1/

Nicht-funktionale Anforderungen legen Design-Einschränkungen fest (Beispiele: Anforderungen hinsichtlich der Geschwindigkeit, Qualität, Design und Sicherheit)

Anforderungen müssen klar, korrekt, eindeutig, spezifisch und überprüfbar sein.

Einflussfaktoren bei der Anwendungsentwicklung2):

Page 6: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 6

Sicherheit zu spät berücksichtigen

Zeit

Kosten

Konzept

Analyse&

Design Coding Einsatz Konzept

Page 7: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 7Überprüfen

Ausführen

Richten Sie einen Sicherheitsprozess ein.

Planen

Handeln

Handeln

Sicherheitsprozess verbessernProzess und Änderungen des Prozesses dokumentieren (z.B. indem Sie ein Wiki verwenden)

Planen

Sicherheitszielsetzungen für das Produkt definierenBedrohungsmodellierung– Bedrohungen ermitteln– Klassifizierung der Gefahrentypen– Wie soll reagiert werden?– Welche Techniken werden zur

Abwehr gewählt?

Überprüfen

Lernen Sie aus Ihren FehlernDokumentieren Sie wieso etwas fehlschlägt.

Ausführen

Verwenden Sie minimale RechteErrichten Sie mehrere VerteidigungslinienExterne Systeme sind unsicherPlanen Sie ein Versagen einSicherheitsfeature != sicheres FeatureSetzen Sie sichere StandardeinstellungenVerstecken != Sicherheit

Page 8: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 8

Software testen

Page 9: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 9

Wieso/Was/Womit wird getestet?

Was?(Application,

components, ...)Wie?

(Test strategien, Test tools, ...)

Wieso?(Regressionstest, Sicherheitstest,

Verhaltenstest, Performancetest, ...)

Page 10: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 11

Rückverfolgbarkeit

Test

Design

Coding

Anforderungen

“Testfirst”

Tests bestätigen die Implementierungvon Anforderungen

Stellt sicher, dass der “richtige” Code erstellt wird

Page 11: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 12

Wie soll „test-first“ Code erstellt werden?

“Schreibe mindestens einen Test für jedes Feature.”

“Schreibe zuerst die Schnittstelle/das

Klassengerüst, dann schreib den Test, stelle sicher dass

der Test fehlschlägt (da ja der Code, der die gewünschte

Funktionalität umsetzt noch nicht existiert!)

“Nur ein fehlgeschlagener Test gibt dir das Recht, ein neues

Feature zu implementieren. Das Ziel jeder

Zeile Code sollte sein, den

fehlgeschlagenen Test zum Laufen

zu bringen.”

•Wenn du einen Fehler findest, repariere ihn nicht... •...stattdessen, schreibe einen Test der den Fehler findet und deshalb fehlschlägt... •...und dann bereinige den Fehler.

Page 12: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 13

NUnit

Page 13: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 14

NUnit

Page 14: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 15

Empfehlenswerte Verfahren

Page 15: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 16

Empfehlenswerte Verfahren

Datenschutz!Verraten Sie dem Angreifer nichts!Alle Codezweige prüfen!Lassen Sie es ausgeschaltet!Sichern Sie sicherheitsrelevante Codeteile durch Tests ab!Nutzen Sie die Fähigkeiten des Betriebssystems!Bürden Sie dem Benutzer keine Entscheidungen auf!

Page 16: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 17

Empfehlenswerte Verfahren

Verwenden Sie minimale Rechte– Schreiben Sie keine Benutzerdateien in „C:\

Programme\“– Schreiben Sie keine Benutzerdateien in HKLM– Wasser predigen und Wein trinken...

(http://nonadmin.editme.com/)

Speichern Sie temporäre Dateien in %TEMP%!Speichern Sie keine privaten Schlüssel in .NET Code!Verwenden Sie einen Obfuscator!

START F. Wieso ist Windows so unsicher? A. Weil jeder als Administrator eingeloggt ist. F. Wieso loggt sich jeder als Administrator ein? A. Weil die meisten Sicherheitsprobleme nicht verstehen und meinen, ein User Account gäbe ihnen nur eingeschränkte Arbeits- möglichkeiten. F. Wieso verstehen die meisten nichts von Sicherheit? A. Weil Sie als Administrator eingeloggt sind und so alle Sicherheitsmechanismen umgehen.ZURÜCK ZUM START

Page 17: Best Practices der sicheren Programmierung mit.NET Andrea Janes

IT Security Day - Folie 18

Faule Ausreden

Niemand wird so etwas tun!Warum sollte irgendjemand so etwas tun?Wir wurden nie angegriffen.Wir sind sicher – wir nutzen Kryptografie.Wir sind sicher – wir verwenden ACLs.Wir sind sicher – wir haben eine Firewall.Wir haben unseren Code prüfen lassen, er enthält keine Sicherheitsprobleme.Es ist zwar die Standardeinstellung, aber der Administrator kann es abschalten.Wenn wir uns nicht als Administrator anmelden, funktioniert das Zeug nicht.