Continuous Delivery (CD) ist in aller Munde. Zu Recht, doch wollen wir unsere Software kontinuierlich ausliefern, müssen wir auch kontinuierlich Sicherheitstests durchführen.
Continuous Security Testing bedeutet, statische und dynamische Analysen bereits während der Entwicklung durchzuführen, um frühzeitig und regelmäßig Sicherheitsmaßnahmen umzusetzen, bevor manuelle Prüfungen wie Penetrationstests zum Einsatz kommen. Um eine Anwendung bereits während der Entwicklung auf das Vorhandensein sicherheitskritischer Schwachstellen hin überprüfen zu können, ist eine Integration in den Entwicklungsprozess und somit eine kontinuierliche und am besten automatisierte Prüfung notwendig.
Der Vortrag stellt die praktischen Erfahrungen aus einem Projekt vor, bei dem Sicherheitsrichtlinien (Secure Coding Guide) für die eigene Entwicklung von Java-Webanwendungen aufgestellt und Sicherheitstests in den Softwareentwicklungsprozess integriert wurden. Dabei wird auf die organisatorischen, inhaltlichen und technischen Überlegungen eingegangen.
9. Continuous Security Testing bedeutet:
statische und dynamische Analysen
bereits während der Entwicklung durchzuführen,
um frühzeitig und regelmäßig
Sicherheitsmaßnahmen umzusetzen,
bevor manuelle Prüfungen
wie Penetrationstests zum Einsatz kommen
Was ist das?
10. • Secure Coding Guide
• Integration in Build-Prozess (SDLC)
• Automatisierung (wenn möglich)
• Zusammenarbeit von Entwicklung, Betrieb und
Sicherheitsbeauftragten (SecDevOps)
Im Detail
13. • Wir müssen
– ISO 2700x, BSI Grundschutz
• Wir wollen
– proaktiv werden
– Mysterium enträtseln
• „moving security to the left!“
Warum machen wir das?
23. • Java Web-Anwendungen:
– Als Basis die TOP 10 des OWASP
– Schwachstellen zu den einzelnen Risiken
• eindeutige Vorgaben formulieren
• Testbar durch statische Analysen
• Integration in Build-Prozess möglich
Konkret
25. • Erstellung und Etablierung von
Programmierrichtlinien zur sicheren
Softwareentwicklung
• Schneller Start mit Quick Wins
• Umsetzung mit wenig Aufwand möglich
• Richtlinien sollen leicht und schnell testbar sein
Ziele
29. • Ursache:
– Ungeprüfte Übernahme von Usereingaben oder
Input-Parametern in SQL-Abfragen
• Auswirkung:
– Ausführung unberechtigter Abfragen oder
Manipulation von Daten
Beispiel: SQL Injection
30. • Kann verhindert werden durch:
– Verwendung von Prepared Statements
– Verwendung von Hibernate Criteria
Beispiel: SQL Injection
32. • Ursache:
– Technische Fehlermeldungen werden bis zum
Anwender durchgereicht
• Auswirkung:
– Sensible Informationen über eine Anwendung, die
Infrastruktur oder verarbeitete Daten werden für
Unberechtigte sichtbar
Beispiel: techn. Fehlermeldungen
33. • Kann verhindert werden durch:
– Definition von Standard-Error-Pages in der web.xml
– Ausgabe von StackTraces in separate Log-Dateien
Beispiel: techn. Fehlermeldungen
55. 1. Verify for Security Early and Often
2. Parameterize Queries
3. Encode Data
4. Validate All Inputs
5. Implement Identity and Authentication Controls
6. Implement Appropriate Access Controls
7. Protect Data
8. Implement Logging and Intrusion Detection
9. Leverage Security Frameworks and Libraries
10.Error and Exception Handling
OWASP Proactive Controls
67. • Aufstellen von Richtlinien, die durch eine kurze und
präzise Erläuterung verstanden werden
• Einführung von kleinen Tools, die sich in den Build-
Prozess integrieren lassen und somit kontinuierlich
und am besten automatisiert die Einhaltung der
Richtlinien verifizieren.
Wichtige Erfolgskriterien
68. • Ausführung dynamischer Tests kann sehr viel
Zeit in Anspruch nehmen
• Nicht bei jedem Build-Lauf möglich
• Oder weniger Auslieferungen
ABER
69. Nur wenn sich Security Testing nahtlos in den
Entwicklungs-Workflow integriert, indem Security
Bugs genauso aufgespürt, verwaltet und behoben
werden wie andere Bugs, dann wird dieses
Instrument auch von Entwicklern akzeptiert und die
Art und Weise, wie sichere Software entwickelt wird,
positiv beeinflusst.
Fazit
73. Suppression of False Positives
• BDD-Security
– Use false positive tables in story files
• FindSecurityBugs
– Use exclusion lists in config (XML filter files)
– Use annotation @SuppressWarnings on false
positive code lines
• Dependency-Check
– XML file of suppressions (checked-in along with
the project)