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. OOPSIE!
• 2017
Equifax 143 Millionen
• 2016
Adult Friend Finder 422 Millionen
• 2015
Anthem 78 Millionen
• 2014
eBay 145 Millionen
JP Morgan Chase 76 Millionen
16. 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
17. Der richtige Zeitpunkt
Während der Entwicklung Nach dem Release Nach dem Datenverlust
Kosten
Re-Launch
Impact Analysis
Version rollback
Reputation
damage
Reimbursements
monitoring services
Schedule delays
Development
Efforts
Re-Launch
Impact Analysis
Version rollback
Schedule delays
Development
Efforts
Development
Efforts
Legal Costs
20. 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)
22. WebGoat
• Entwickelt von OWASP
• Java Spring
• Unsichere Webanwendung mit
Sicherheitslücken
• Spielwiese zum Lernen
https://github.com/WebGoat/WebGoat
33. 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
34. 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
35. 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/
49. 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
50. 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();
}
51. 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();
}
52. 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();
}
55. sonarlint
• IDE / Editor Integration für SonarQube
• Eclipse
• Jetbrains Produkte
• Visual Studio
• VS Code
• Atom
• Kein Ersatz für PMD, findbugs und Co
https://www.sonarlint.org/
57. 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
58. 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
59. 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
60. Integration – SonarQube + sonarlint
✓Sehr hohe Sichtbarkeit für den Entwickler
✓Zentrale Konfigurationspflege
✓Offline fähig
o Einmaliger minimaler Konfigurationsaufwand
67. 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
68. 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
74. Fazit
• Entwickler sind (meistens) keine Sicherheitsexperten
• Jeder muss sich mit dem Thema Sicherheit beschäftigen
• Es muss Teil des Entwicklungsprozess sein
• Entwicklerbewusstsein
• CI Prozess
• Niemand mag (Security-) Bugs