Dass eine Anwendung gegen Angriffe von Außen abgesichert werden muss, ist in der heutigen Zeit keine Frage mehr. Die OWASP Top10 sind in aller Munde. Um so verwunderlicher ist es, dass in den meisten Projekten die Suche nach Sicherheitslücken frühestens nach Fertigstellung der Software angegangen wird. Dabei gibt es ein paar Möglichkeiten, bekannte Security-Probleme bereits während der Entwicklung automatisiert zu erkennen und dem Entwickler so durch geeignetes Feedback die Möglichkeit zu geben, diese zeitnah zu beheben.
In dem Talk werden verschiedene Tools vorgestellt und gezeigt, welche Security-Probleme schon während der Entwicklung durch Continous Integration vermieden werden können.
5. Bekannte Vorfälle
• 2018
Mariott 500 Millionen
• 2017
Equifax 143 Millionen
• 2016
Adult Friend Finder 422 Millionen
• 2015
Anthem 78 Millionen
• 2014
eBay 145 Millionen
JP Morgan Chase 76 Millionen
OOPSIE!
#WISSENTEILEN
14. Warum?
• ca 90% der Anwendungen sind verwundbar
• Netzwerklösungen sind nicht dafür entworfen worden auf
Anwendungslevel zu schützen
• Moderne Webanwendungen erhöhen die Sicherheitsrisiken enorm
• Angriffe passieren im Geheimen
#WISSENTEILEN
15. Der richtige Zeitpunkt
Während der Entwicklung Nach dem Release Nach dem Datenverlust
Kosten
Erneut liefern
Auswirkungsanalys
Version Rollback
Rufschaden
Entschädigungen
Monitoring
Verzögerungen
Entwicklungs-
kosten
Erneut liefern
Auswirkungsanalyse
Version Rollback
Verzögerungen
Entwicklungs-
kosten
Entwicklungs-
kosten
Anwaltskosten
#WISSENTEILEN
18. OWASP & Co
• Open Web Application Security Project (OWASP)
• Non-Profit-Organisation mit dem Ziel WWW Anwendungen sicherer zu machen
• OWASP Top10
• Web Application Security Consortium (WASC)
• Non-Profit-Organisation mit dem Ziel WWW Anwendungen sicherer zu machen
• Best Practices in der Implementierung und Abwehr
• SysAdmin, Networking and Security (SANS) Institut
• Anbieter für Cybersicherheitsschulungen und –zertifizierungen
• SANS Top20
• MITRE Corporation
• Non-Profit-Organisation für die Verwaltung von Forschungsinstituten in den USA
• CWE (Common Weakness Enumeration)
• Common Attack Pattern Enumeration and Classification (CAPEC)
#WISSENTEILEN
20. WebGoat
• Entwickelt von OWASP
• Java Spring
• Unsichere Webanwendung mit
Sicherheitslücken
• Spielwiese zum Lernen
https://github.com/WebGoat/WebGoat
#WISSENTEILEN
30. Static Application Security Testing
Vorteile
✓Skalierbarkeit
✓Präzise Fehlerbeschreibungen
✓Benötigt keine laufende Instanz
✓Entdeckt SQL Injection, Buffer
Overflows, NPE und ähnliches
✓Keine Auswirkungen auf
(Test-)Umgebungen
Nachteile
− False Positives
− Entdeckt nicht alle Fehler z.B. in der
Konfiguration oder bei der
Authentifizierung
#WISSENTEILEN
32. SAST – Verwundbare Bibliotheken
CVE-2017-15708
Apache Commons Collection
Remote Code Execution während der Object Deserialisierung
in Version 3.2.2 und 4.1 behoben
CVE-2018-11771
Apache Commons Compress
Denial of Service beim Archiv lesen durch einen unendlichen Stream
in Version 1.18 behoben
#WISSENTEILEN
33. OWASP Dependency Check
• Analysiert Abhängigkeiten
• Sucht nach bekannten CVE (Common
Vulnerabilities and Exposures)
• Build Tool Integration
• Jenkins Integration
• Auch für Repository Server verfügbar
• Nexus Repository (Nexus Firewall)
• Artifactory (JFrog Xray)
https://jeremylong.github.io/DependencyCheck/
#WISSENTEILEN
44. find-sec-bugs Beispiel
public boolean authenticate(...) {
String user = request.getParameter("user");
String pass = request.getParameter("pass");
String query = "SELECT * FROM users WHERE user = '" +
user + "' AND pass = '" + pass + "'";
java.sql.Statement statement = connection.createStatement();
java.sql.ResultSet resultSet =
statement.executeQuery(query);
return resultSet.next();
}
#WISSENTEILEN
45. find-sec-bugs Beispiel
public boolean authenticate(...) {
String user = request.getParameter("user");
String pass = request.getParameter("pass");
String query = "SELECT * FROM users WHERE user = '" +
user + "' AND pass = '" + pass + "'";
java.sql.Statement statement = connection.createStatement();
java.sql.ResultSet resultSet =
statement.executeQuery(query);
return resultSet.next();
}
#WISSENTEILEN
46. find-sec-bugs Beispiel – Fixed
public boolean authenticate(...) {
String user = request.getParameter("user");
String pass = request.getParameter("pass");
String query =
"SELECT * FROM users WHERE user = ? AND pass = ?";
java.sql.Statement statement = connection.createStatement();
statement.setString(1, user);
statement.setString(2, pass);
java.sql.ResultSet resultSet =
statement.executeQuery(query);
return resultSet.next();
}
#WISSENTEILEN
47. find-sec-bugs Beispiel
• Unsichere Hash Algorithmen z.B. MD5, SHA1
• Hard kodierte Werte z.B. Passwörter, Secret Keys
• Unsichere Cipher Benutzung, z.B. No Padding bei RSA
#WISSENTEILEN
50. sonarlint
• IDE / Editor Integration für SonarQube
• Eclipse
• Jetbrains Produkte
• Visual Studio
• VS Code
• Atom
• Kein Ersatz für PMD, findbugs und Co
• Regeln vergleichen!
• Manche Regeln laufen nur serverseitig
https://www.sonarlint.org/
#WISSENTEILEN
54. Integration
IDE Build Tools SonarQube SQ + sonarlint
Sichtbarkeit
Entwickler
CI Unterstützung
Konfigurationspflege
#WISSENTEILEN
55. Integration
IDE Build Tools SonarQube SQ + sonarlint
Sichtbarkeit
Entwickler
++ o + (Web) +(+)
CI Unterstützung
Konfigurationspflege
#WISSENTEILEN
56. Integration
IDE Build Tools SonarQube SQ + sonarlint
Sichtbarkeit
Entwickler
++ o + (Web) +(+)
CI Unterstützung -/- + ++ -/-
Konfigurationspflege
#WISSENTEILEN
57. Integration
IDE Build Tools SonarQube SQ + sonarlint
Sichtbarkeit
Entwickler
++ o + (Web) +(+)
CI Unterstützung -/- + ++ -/-
Konfigurationspflege -- -- ++ ++
#WISSENTEILEN
58. Integration – IDE
✓Sehr hohe Sichtbarkeit für den Entwickler
− wird nur lokal beim Entwickler ausgeführt
− Keine Garantie der Ausführung
− CI muss extra konfiguriert werden
− Konfigurationsaufwand / -pflege
#WISSENTEILEN
59. Integration – Build Tools
✓Kann immer ausgeführt werden
✓„native“ CI Unterstützung
− Eingeschränkte Sichtbarkeit für den Entwickler
− Visualisierung in CI muss extra konfiguriert werden
− Konfigurationsaufwand / -pflege
#WISSENTEILEN
60. Integration – SonarQube
✓Hohe Sichtbarkeit für alle Entwickler
✓Zentrale Konfigurationspflege
✓Zentrale Fehlerpflege
o Analyse erfolgt verzögert oder Build muss warten
o IDE Integration durch eigenes Plugin
− Einmaliger Installationsaufwand
− Eigener Build Schritt in der CI / Build Tools
#WISSENTEILEN
61. Integration – SonarQube + sonarlint
✓Sehr hohe Sichtbarkeit für den Entwickler
✓Zentrale Konfigurationspflege
✓Offline fähig
o Einmaliger minimaler Konfigurationsaufwand
#WISSENTEILEN
63. Integration – CI
IDE Build Tools SonarQube SQ + sonarlint
Sichtbarkeit
Entwickler
++ o + (Web) +(+)
CI Unterstützung -/- + ++ -/-
Konfigurationspflege -- -- ++ ++
#WISSENTEILEN
64. #WISSENTEILEN
Integration – CI
• Analyse so früh wie möglich
• Build Tools führen Analyse Tools aus
• Visualisierung in CI muss extra konfiguriert werden
• Jenkins bietet verschiedene Plugins zur Visualisierung an
• Travis CI bietet keine eigene Visualisierung an
• Travis CI und GitLab CI unterstützen codeclimate
65. Integration – CI
• Wahrnehmbarkeit schwierig zu realisieren
• Build failed – I don‘t care
• Builds können länger dauern, beispielsweise mit SonarQube
• Analyse passiert asynchron
#WISSENTEILEN
66. Integration – CI
Grundsätze:
• Genug Metall
• Kein Spammen
• Dedizierte Channel, z.B. Slack
• Aussagekräftige Meldungen
• Tickets erstellen
#WISSENTEILEN
70. Dynamic Application Security Testing
Vorteile
✓Entdeckt Fehler die nur zur Laufzeit
passieren können z.B.
Fehlkonfigurationen
✓Analyse auf Client- und Serverseite
Nachteile
− Benötigt laufende Instanz
− Kann Teile der Anwendungen
verpassen
− Manuelles „Zeigen“
− Keine präzise Fehlerbeschreibungen
#WISSENTEILEN
71. OWASP Zed Attack Proxy (ZAP)
• Security Scanner
• DAST und Penetration Tests
• Kann automatisiert eingesetzt werden
• Viele Addons
• Jenkins Plugin
• SonarQube Plugin
https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
#WISSENTEILEN
77. Fazit
• Entwickler sind (meistens) keine Sicherheitsexperten
• Jeder (wirklich jeder) muss sich mit dem Thema Sicherheit beschäftigen
• Es muss Teil des Entwicklungsprozess sein
• Entwicklerbewusstsein
• Sowohl restliches Team
• CI Prozess
• Niemand mag (Security-) Bugs
#WISSENTEILEN
78. Fazit – CI
• Menschen sind faul
• AUTOMATISIERUNG!
• Separate Pipeline
• Hoher Zeitfaktor
• So früh wie möglich
• „Eigene“ Umgebung
#WISSENTEILEN