SlideShare ist ein Scribd-Unternehmen logo
1 von 77
Downloaden Sie, um offline zu lesen
Integration von Security-Checks
in die CI-Pipeline
ÜBER MICH
• Software-Entwickler
• Speaker
• CI / CD Flüsterer
• Angular(-ität)
Christian Schulz
ÜBER OPEN KNOWLEDGE
Branchenneutrale Softwareentwicklung und IT-Beratung
Warum?
OOPSIE!
• 2017
Equifax 143 Millionen
• 2016
Adult Friend Finder 422 Millionen
• 2015
Anthem 78 Millionen
• 2014
eBay 145 Millionen
JP Morgan Chase 76 Millionen
Softwarelebenszyklus
Product Design Development Testing Deployment Production
Product Design Development
Software Entwicklung …
… ist eine unendliche Geschichte
Security?
WORKED FINE IN DEV
NOW OPS PROBLEM
Softwarelebenszyklus
Product Design Development Testing Deployment Production
Penetration
Tests
Real-Time Application
Security Protection
oder
Web Application Firewall
Doppelter Boden?
Doppelter Boden
Web Application Firewall Anwendung
?
Doppelter Boden
Web Application Firewall Anwendung
?
Doppelter Boden
Web Application Firewall Anwendung
!
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
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
Aber wie?!
OWASP & Co
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)
Selbsttraining
WebGoat
• Entwickelt von OWASP
• Java Spring
• Unsichere Webanwendung mit
Sicherheitslücken
• Spielwiese zum Lernen
https://github.com/WebGoat/WebGoat
WebGoat – Beispiel
Damn Vulnerable Web Application (DVWA)
• Entwickelt von RandomStorm
• PHP
• Unsichere Webanwendung mit
Sicherheitslücken
• Spielwiese zum Lernen
https://github.com/ethicalhack3r/DVWA
Game of Hacks
• Checkmarx
• http://www.gameofhacks.com/
Game of Hacks
• Checkmarx
• http://www.gameofhacks.com/
Game of Hacks
• Checkmarx
• http://www.gameofhacks.com/
Game of Hacks
• Checkmarx
• http://www.gameofhacks.com/
Schwachstellenanalyse
Softwarelebenszyklus
Product Design Development Testing Deployment Production
Static Application Security Testing
Dynamic Application Security Testing
Real-Time Application
Security Protection
oder
Web Application FirewallSicherheitsanforderungen
Penetration
Tests
Anforderungen
• Integration
• IDE
• BuildTools
• CI Server
• Automatisiert ausführbar
Static Application Security Testing
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
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
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/
SAST
@GET
@Path("/images/{image}")
@Produces("images/*")
public Response getImage(@PathParam("image") String image) {
File file = new File("resources/images/", image);
if (!file.exists()) {
return Response.status(Response.Status.NOT_FOUND).build();
}
return Response.ok().entity(
new FileInputStream(file)
).build();
}
SAST – Potential Path Traversal
@GET
@Path("/images/{image}")
@Produces("images/*")
public Response getImage(@PathParam("image") String image) {
File file = new File("resources/images/", image);
if (!file.exists()) {
return Response.status(Response.Status.NOT_FOUND).build();
}
return Response.ok().entity(
new FileInputStream(file)
).build();
}
SAST – Potential Path Traversal
@GET
@Path("/images/{image}")
@Produces("images/*")
public Response getImage(@PathParam("image") String image) {
File file = new File("resources/images/",
FilenameUtils.getName(image)
);
if (!file.exists()) {
return Response.status(Response.Status.NOT_FOUND).build();
}
return Response.ok().entity(
new FileInputStream(file)
).build();
}
PMD
• Sourcecode Analyse
• Keine dedizierten Sicherheitsregeln
• CLI
• Build Tool Integration
• IDE Integration
• Jenkins Integration
https://pmd.github.io/
PMD Beispiel
public boolean isGuest() {
return "guest" == user.getRole();
}
PMD Beispiel
public boolean isGuest() {
return "guest" == user.getRole();
}
PMD Beispiel – Fixed
public boolean isGuest() {
return "guest".equals(user.getRole());
}
findbugs
• Bytecode Analyse
• Bis Java 8
• CLI mit GUI
• Build Tool Integration
• IDE Integration
• Jenkins Integration
http://findbugs.sourceforge.net/
SpotBugs
• Bytecode Analyse
• findbugs Nachfolger
• Plugin System
• CLI mit GUI
• Build Tool Integration
• IDE Integration
• Jenkins Integration
https://spotbugs.github.io/
SpotBugs Beispiel
public boolean authenticate() {
boolean authenticated = true;
try {
authenticated = ldapService.isUserAuthenticated(...);
} catch (SomeException e) {
}
return authenticated;
}
SpotBugs Beispiel
public boolean authenticate() {
boolean authenticated = true;
try {
authenticated = ldapService.isUserAuthenticated(...);
} catch (SomeException e) {
}
return authenticated;
}
SpotBugs Beispiel – Fixed
public boolean authenticate() {
boolean authenticated = true;
try {
authenticated = ldapService.isUserAuthenticated(...);
} catch (SomeException e) {
logger.warn("User authentication failed", e);
authenticated = false;
}
return authenticated;
}
find-sec-bugs
• Erweiterung für SpotBugs
• Fokus auf Sicherheit
https://find-sec-bugs.github.io/
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
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();
}
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();
}
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();
}
SonarQube
• Tool Aggregator
• Eigene Regeln
• IDE Integration (sonarlint)
• Build Tool Integration (Sonar Scanner)
• Jenkins Integration
https://www.sonarqube.org/
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/
Integration
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
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
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
Integration – SonarQube + sonarlint
✓Sehr hohe Sichtbarkeit für den Entwickler
✓Zentrale Konfigurationspflege
✓Offline fähig
o Einmaliger minimaler Konfigurationsaufwand
sonarlint im Einsatz
sonarlint im Einsatz
sonarlint im Einsatz
Softwarelebenszyklus
Product Design Development Testing Deployment Production
Static Application Security Testing
War da nicht noch was?
Authentifizierung?
Dynamic Application Security Testing
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
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
ZAP Demo
ZAP in CI?
• Manuell die URL eingeben?
• Spider soll die ganze Anwendung crawlen?
• Attacke starten?
• AUTOMATISIERUNG!
UI Tests
Product Design Development Testing Deployment Production
Warum nicht wieder verwenden?
ZAP in CI
UI Test
Framework
ZAP
(Proxy Mode)
Deployed
Application
ZAP
(Attack Mode)
Deployed
Application
Session
Softwarelebenszyklus
Product Design Development Testing Deployment Production
Static Application Security Testing
Dynamic Application Security Testing
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
FRAGEN
KONTAKT
Christian Schulz,
Enterprise Developer
christian.schulz@openknowledge.de
+49 (0)441 4082 – 146
OFFENKUNDIGGUT
BILDNACHWEISE
• Folie 8,
http://candycrush.wikia.com/wiki/Level_1350?file=Level_1350_Reality.png
• Folie 36: https://wiki.jenkins.io/display/JENKINS/OWASP+Dependency-
Check+Plugin
• Folie 44: http://findbugs.sourceforge.net/manual/example-details.png
• Folie 49: https://find-sec-bugs.github.io/images/screens/eclipse.png
• Folie 54: https://www.sonarqube.org/index/detect-bugs-2@2x.png
• Folie 56: https://www.sonarlint.org/static/screenshot-feature-1-
07de0778bcba0a0fce549fedb082e187-9918a.png
• Icons in this presentation designed by “Freepik”, “Nice and Serious” and
“Elegant Themes” from www.flaticon.com

Weitere ähnliche Inhalte

Ähnlich wie Integration von Security-Checks in die CI-Pipeline

Ähnlich wie Integration von Security-Checks in die CI-Pipeline (20)

Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
 
CI und Android - Wie geht das? MTC2010
CI und Android - Wie geht das? MTC2010CI und Android - Wie geht das? MTC2010
CI und Android - Wie geht das? MTC2010
 
Automatisierung von Security Test im Build-Prozess
Automatisierung von Security Test im Build-ProzessAutomatisierung von Security Test im Build-Prozess
Automatisierung von Security Test im Build-Prozess
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
 
GWT
GWTGWT
GWT
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform Engineering
 
IT-Sicherheit und agile Entwicklung – geht das? Sicher!
IT-Sicherheit und agile Entwicklung – geht das? Sicher!IT-Sicherheit und agile Entwicklung – geht das? Sicher!
IT-Sicherheit und agile Entwicklung – geht das? Sicher!
 
Wartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-SoftwareWartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-Software
 
30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...
30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...
30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...
 
Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014
 
Quo vadis DevOps
Quo vadis DevOpsQuo vadis DevOps
Quo vadis DevOps
 
Creasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform Apps
 
2005 - NRW Conf: Design, Entwicklung und Tests
2005 - NRW Conf: Design, Entwicklung und Tests2005 - NRW Conf: Design, Entwicklung und Tests
2005 - NRW Conf: Design, Entwicklung und Tests
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
 
Hdc2012 cordova-präsi
Hdc2012 cordova-präsiHdc2012 cordova-präsi
Hdc2012 cordova-präsi
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
 
stackconf 2020 | SecDevOps in der Cloud by Florian Wiethoff
stackconf 2020 | SecDevOps in der Cloud by Florian Wiethoffstackconf 2020 | SecDevOps in der Cloud by Florian Wiethoff
stackconf 2020 | SecDevOps in der Cloud by Florian Wiethoff
 
Acceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJSAcceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJS
 

Mehr von OPEN KNOWLEDGE GmbH

Mehr von OPEN KNOWLEDGE GmbH (20)

Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AIWarum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
 
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
 
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
 
Nie wieder Log-Files!
Nie wieder Log-Files!Nie wieder Log-Files!
Nie wieder Log-Files!
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud. From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud.
 
API Expand Contract
API Expand ContractAPI Expand Contract
API Expand Contract
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
 
Shared Data in verteilten Architekturen
Shared Data in verteilten ArchitekturenShared Data in verteilten Architekturen
Shared Data in verteilten Architekturen
 
Machine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.jsMachine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.js
 
KI und Architektur
KI und ArchitekturKI und Architektur
KI und Architektur
 
It's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale NetzeIt's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale Netze
 
Shared Data in verteilten Systemen
Shared Data in verteilten SystemenShared Data in verteilten Systemen
Shared Data in verteilten Systemen
 
Business-Mehrwert durch KI
Business-Mehrwert durch KIBusiness-Mehrwert durch KI
Business-Mehrwert durch KI
 
Mehr Sicherheit durch Automatisierung
Mehr Sicherheit durch AutomatisierungMehr Sicherheit durch Automatisierung
Mehr Sicherheit durch Automatisierung
 
API-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingAPI-Design, Microarchitecture und Testing
API-Design, Microarchitecture und Testing
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
 
Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!
 

Integration von Security-Checks in die CI-Pipeline

  • 2. ÜBER MICH • Software-Entwickler • Speaker • CI / CD Flüsterer • Angular(-ität) Christian Schulz
  • 3. ÜBER OPEN KNOWLEDGE Branchenneutrale Softwareentwicklung und IT-Beratung
  • 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
  • 6. Softwarelebenszyklus Product Design Development Testing Deployment Production Product Design Development
  • 8. … ist eine unendliche Geschichte
  • 10. WORKED FINE IN DEV NOW OPS PROBLEM
  • 11. Softwarelebenszyklus Product Design Development Testing Deployment Production Penetration Tests Real-Time Application Security Protection oder Web Application Firewall
  • 13. Doppelter Boden Web Application Firewall Anwendung ?
  • 14. Doppelter Boden Web Application Firewall Anwendung ?
  • 15. Doppelter Boden Web Application Firewall Anwendung !
  • 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
  • 24. Damn Vulnerable Web Application (DVWA) • Entwickelt von RandomStorm • PHP • Unsichere Webanwendung mit Sicherheitslücken • Spielwiese zum Lernen https://github.com/ethicalhack3r/DVWA
  • 25. Game of Hacks • Checkmarx • http://www.gameofhacks.com/
  • 26. Game of Hacks • Checkmarx • http://www.gameofhacks.com/
  • 27. Game of Hacks • Checkmarx • http://www.gameofhacks.com/
  • 28. Game of Hacks • Checkmarx • http://www.gameofhacks.com/
  • 30. Softwarelebenszyklus Product Design Development Testing Deployment Production Static Application Security Testing Dynamic Application Security Testing Real-Time Application Security Protection oder Web Application FirewallSicherheitsanforderungen Penetration Tests
  • 31. Anforderungen • Integration • IDE • BuildTools • CI Server • Automatisiert ausführbar
  • 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/
  • 36. SAST @GET @Path("/images/{image}") @Produces("images/*") public Response getImage(@PathParam("image") String image) { File file = new File("resources/images/", image); if (!file.exists()) { return Response.status(Response.Status.NOT_FOUND).build(); } return Response.ok().entity( new FileInputStream(file) ).build(); }
  • 37. SAST – Potential Path Traversal @GET @Path("/images/{image}") @Produces("images/*") public Response getImage(@PathParam("image") String image) { File file = new File("resources/images/", image); if (!file.exists()) { return Response.status(Response.Status.NOT_FOUND).build(); } return Response.ok().entity( new FileInputStream(file) ).build(); }
  • 38. SAST – Potential Path Traversal @GET @Path("/images/{image}") @Produces("images/*") public Response getImage(@PathParam("image") String image) { File file = new File("resources/images/", FilenameUtils.getName(image) ); if (!file.exists()) { return Response.status(Response.Status.NOT_FOUND).build(); } return Response.ok().entity( new FileInputStream(file) ).build(); }
  • 39. PMD • Sourcecode Analyse • Keine dedizierten Sicherheitsregeln • CLI • Build Tool Integration • IDE Integration • Jenkins Integration https://pmd.github.io/
  • 40. PMD Beispiel public boolean isGuest() { return "guest" == user.getRole(); }
  • 41. PMD Beispiel public boolean isGuest() { return "guest" == user.getRole(); }
  • 42. PMD Beispiel – Fixed public boolean isGuest() { return "guest".equals(user.getRole()); }
  • 43. findbugs • Bytecode Analyse • Bis Java 8 • CLI mit GUI • Build Tool Integration • IDE Integration • Jenkins Integration http://findbugs.sourceforge.net/
  • 44. SpotBugs • Bytecode Analyse • findbugs Nachfolger • Plugin System • CLI mit GUI • Build Tool Integration • IDE Integration • Jenkins Integration https://spotbugs.github.io/
  • 45. SpotBugs Beispiel public boolean authenticate() { boolean authenticated = true; try { authenticated = ldapService.isUserAuthenticated(...); } catch (SomeException e) { } return authenticated; }
  • 46. SpotBugs Beispiel public boolean authenticate() { boolean authenticated = true; try { authenticated = ldapService.isUserAuthenticated(...); } catch (SomeException e) { } return authenticated; }
  • 47. SpotBugs Beispiel – Fixed public boolean authenticate() { boolean authenticated = true; try { authenticated = ldapService.isUserAuthenticated(...); } catch (SomeException e) { logger.warn("User authentication failed", e); authenticated = false; } return authenticated; }
  • 48. find-sec-bugs • Erweiterung für SpotBugs • Fokus auf Sicherheit https://find-sec-bugs.github.io/
  • 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(); }
  • 53. SonarQube • Tool Aggregator • Eigene Regeln • IDE Integration (sonarlint) • Build Tool Integration (Sonar Scanner) • Jenkins Integration https://www.sonarqube.org/
  • 54.
  • 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
  • 64. Softwarelebenszyklus Product Design Development Testing Deployment Production Static Application Security Testing
  • 65. War da nicht noch was? Authentifizierung?
  • 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
  • 70. ZAP in CI? • Manuell die URL eingeben? • Spider soll die ganze Anwendung crawlen? • Attacke starten? • AUTOMATISIERUNG!
  • 71. UI Tests Product Design Development Testing Deployment Production Warum nicht wieder verwenden?
  • 72. ZAP in CI UI Test Framework ZAP (Proxy Mode) Deployed Application ZAP (Attack Mode) Deployed Application Session
  • 73. Softwarelebenszyklus Product Design Development Testing Deployment Production Static Application Security Testing Dynamic Application Security Testing
  • 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
  • 77. BILDNACHWEISE • Folie 8, http://candycrush.wikia.com/wiki/Level_1350?file=Level_1350_Reality.png • Folie 36: https://wiki.jenkins.io/display/JENKINS/OWASP+Dependency- Check+Plugin • Folie 44: http://findbugs.sourceforge.net/manual/example-details.png • Folie 49: https://find-sec-bugs.github.io/images/screens/eclipse.png • Folie 54: https://www.sonarqube.org/index/detect-bugs-2@2x.png • Folie 56: https://www.sonarlint.org/static/screenshot-feature-1- 07de0778bcba0a0fce549fedb082e187-9918a.png • Icons in this presentation designed by “Freepik”, “Nice and Serious” and “Elegant Themes” from www.flaticon.com