SlideShare uma empresa Scribd logo
1 de 82
Baixar para ler offline
Integration von Security-Checks
in die CI-Pipeline
@_openknowledge #WISSENTEILEN
ÜBER MICH
• Software-Entwickler
• Speaker
• CI / CD Flüsterer
• Angular(-ität)
• Java EE
Christian Schulz
#WISSENTEILEN
ÜBER OPEN KNOWLEDGE
Branchenneutrale Softwareentwicklung und IT-Beratung
#WISSENTEILEN
Warum?
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
Softwarelebenszyklus
Product Design Development Testing Deployment Production
Product Design Development
#WISSENTEILEN
Software Entwicklung …
#WISSENTEILEN
… ist eine unendliche Geschichte
#WISSENTEILEN
Security?
#WISSENTEILEN
WORKED FINE IN DEV
NOW OPS PROBLEM
#WISSENTEILEN
Softwarelebenszyklus
Product Design Development Testing Deployment Production
Penetration
Tests
Real-Time Application
Self Protection
oder
Web Application Firewall
#WISSENTEILEN
Doppelter Boden?
#WISSENTEILEN
Doppelter Boden
Web Application Firewall Anwendung
?!
#WISSENTEILEN
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
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
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)
#WISSENTEILEN
Selbsttraining
WebGoat
• Entwickelt von OWASP
• Java Spring
• Unsichere Webanwendung mit
Sicherheitslücken
• Spielwiese zum Lernen
https://github.com/WebGoat/WebGoat
#WISSENTEILEN
WebGoat – Beispiel
#WISSENTEILEN
Damn Vulnerable Web Application (DVWA)
• Entwickelt von RandomStorm
• PHP
• Unsichere Webanwendung mit
Sicherheitslücken
• Spielwiese zum Lernen
https://github.com/ethicalhack3r/DVWA
#WISSENTEILEN
Juice Shop
• Entwickelt von OWASP
• JavaScript
• AngularJS
• NodeJS
• Unsichere Webanwendung mit
Sicherheitslücken
• Spielwiese zum Lernen
https://github.com/bkimminich/juice-shop
#WISSENTEILEN
Juice Shop – Beispiel
#WISSENTEILEN
Game of Hacks
• Checkmarx
• http://www.gameofhacks.com/
#WISSENTEILEN
Schwachstellenanalyse
#WISSENTEILEN
Softwarelebenszyklus
Product Design Development Testing Deployment Production
Static Application Security Testing
Dynamic Application Security Testing
Real-Time Application
Self Protection
oder
Web Application FirewallSicherheitsanforderungen
Penetration
Tests
#WISSENTEILEN
Anforderungen
• Integration
• IDE
• BuildTools
• CI Server
• Automatisiert ausführbar
#WISSENTEILEN
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
#WISSENTEILEN
Static Application Security Testing
• Abhängigkeitsanalyse
• OWASP Dependency Check
• Source Code Analyse
• PMD
• Byte Code Analyse
• findbugs
• SpotBugs
• find-sec-bugs
#WISSENTEILEN
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
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
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();
}
#WISSENTEILEN
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();
}
#WISSENTEILEN
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();
}
#WISSENTEILEN
PMD
• Sourcecode Analyse
• Keine dedizierten Sicherheitsregeln
• CLI
• Build Tool Integration
• IDE Integration
• Jenkins Integration
https://pmd.github.io/
#WISSENTEILEN
findbugs
• Bytecode Analyse
• Bis Java 8
• CLI mit GUI
• Build Tool Integration
• IDE Integration
• Jenkins Integration
http://findbugs.sourceforge.net/
#WISSENTEILEN
SpotBugs
• Bytecode Analyse
• findbugs Nachfolger
• Plugin System
• CLI mit GUI
• Build Tool Integration
• IDE Integration
• Jenkins Integration
https://spotbugs.github.io/
#WISSENTEILEN
SpotBugs Beispiel
public boolean authenticate() {
boolean authenticated = true;
try {
authenticated = ldapService.isUserAuthenticated(...);
} catch (SomeException e) {
}
return authenticated;
}
#WISSENTEILEN
SpotBugs Beispiel
public boolean authenticate() {
boolean authenticated = true;
try {
authenticated = ldapService.isUserAuthenticated(...);
} catch (SomeException e) {
}
return authenticated;
}
#WISSENTEILEN
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;
}
#WISSENTEILEN
find-sec-bugs
• Erweiterung für SpotBugs
• Fokus auf Sicherheit
https://find-sec-bugs.github.io/
#WISSENTEILEN
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
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
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
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
SonarQube
• Tool Aggregator
• Eigene Regeln
• IDE Integration (sonarlint)
• Build Tool Integration (Sonar Scanner)
• Jenkins Integration
https://www.sonarqube.org/
#WISSENTEILEN
#WISSENTEILEN
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
sonarlint im Einsatz
#WISSENTEILEN
Integration
Integration
IDE Build Tools SonarQube SQ + sonarlint
#WISSENTEILEN
Integration
IDE Build Tools SonarQube SQ + sonarlint
Sichtbarkeit
Entwickler
CI Unterstützung
Konfigurationspflege
#WISSENTEILEN
Integration
IDE Build Tools SonarQube SQ + sonarlint
Sichtbarkeit
Entwickler
++ o + (Web) +(+)
CI Unterstützung
Konfigurationspflege
#WISSENTEILEN
Integration
IDE Build Tools SonarQube SQ + sonarlint
Sichtbarkeit
Entwickler
++ o + (Web) +(+)
CI Unterstützung -/- + ++ -/-
Konfigurationspflege
#WISSENTEILEN
Integration
IDE Build Tools SonarQube SQ + sonarlint
Sichtbarkeit
Entwickler
++ o + (Web) +(+)
CI Unterstützung -/- + ++ -/-
Konfigurationspflege -- -- ++ ++
#WISSENTEILEN
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
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
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
Integration – SonarQube + sonarlint
✓Sehr hohe Sichtbarkeit für den Entwickler
✓Zentrale Konfigurationspflege
✓Offline fähig
o Einmaliger minimaler Konfigurationsaufwand
#WISSENTEILEN
Und was ist
mit der CI?
Integration – CI
IDE Build Tools SonarQube SQ + sonarlint
Sichtbarkeit
Entwickler
++ o + (Web) +(+)
CI Unterstützung -/- + ++ -/-
Konfigurationspflege -- -- ++ ++
#WISSENTEILEN
#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
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
Integration – CI
Grundsätze:
• Genug Metall
• Kein Spammen
• Dedizierte Channel, z.B. Slack
• Aussagekräftige Meldungen
• Tickets erstellen
#WISSENTEILEN
Softwarelebenszyklus
Product Design Development Testing Deployment Production
Static Application Security Testing
#WISSENTEILEN
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
#WISSENTEILEN
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
ZAP Demo
#WISSENTEILEN
ZAP in CI?
• Manuell die URL eingeben?
• Spider soll die ganze Anwendung crawlen?
• Attacke starten?
#WISSENTEILEN
UI Tests
Product Design Development Testing Deployment Production
Warum nicht wieder verwenden?
#WISSENTEILEN
ZAP in CI
UI Test
Framework
ZAP
(Proxy Mode)
Deployed
Application
ZAP
(Attack Mode)
Deployed
Application
Session
#WISSENTEILEN
Softwarelebenszyklus
Product Design Development Testing Deployment Production
Static Application Security Testing
Dynamic Application Security Testing
#WISSENTEILEN
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
Fazit – CI
• Menschen sind faul
• AUTOMATISIERUNG!
• Separate Pipeline
• Hoher Zeitfaktor
• So früh wie möglich
• „Eigene“ Umgebung
#WISSENTEILEN
Menschen die Security-Bugs mögen
#WISSENTEILEN
FRAGEN
#WISSENTEILEN
KONTAKT
Christian Schulz,
Enterprise Developer
christian.schulz@openknowledge.de
+49 (0)441 4082 – 146
OFFENKUNDIGGUT
#WISSENTEILEN
BILDNACHWEISE
• Folie 7, http://candycrush.wikia.com/wiki/Level_1350?file=Level_1350_Reality.png
• Folie 32: https://wiki.jenkins.io/display/JENKINS/OWASP+Dependency-Check+Plugin
• Folie 36: https://www.javatips.net/blog/pmd-in-eclipse-tutorial
• Folie 37: http://findbugs.sourceforge.net/manual/example-details.png
• Folie 42: https://find-sec-bugs.github.io/images/screens/eclipse.png
• Folie 47: https://www.sonarqube.org/index/detect-bugs-2@2x.png
• Folie 49: 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
#WISSENTEILEN

Mais conteúdo relacionado

Semelhante a Integration von Security-Checks in die CI-Pipeline

JSF Testing - Tools und Technics
JSF Testing - Tools und TechnicsJSF Testing - Tools und Technics
JSF Testing - Tools und Technics
adesso AG
 
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsHTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
Ulrich Schmidt
 

Semelhante a Integration von Security-Checks in die CI-Pipeline (20)

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!
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
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!
 
Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010
 
Hdc2012 cordova-präsi
Hdc2012 cordova-präsiHdc2012 cordova-präsi
Hdc2012 cordova-präsi
 
JSF Testing - Tools und Technics
JSF Testing - Tools und TechnicsJSF Testing - Tools und Technics
JSF Testing - Tools und Technics
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
 
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
 
Mit jQTouch auf's iPhone & Android
Mit jQTouch auf's iPhone & AndroidMit jQTouch auf's iPhone & Android
Mit jQTouch auf's iPhone & Android
 
Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"
 
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsHTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Sicherheit in Single-Page-Web-Anwendungen
Sicherheit in Single-Page-Web-AnwendungenSicherheit in Single-Page-Web-Anwendungen
Sicherheit in Single-Page-Web-Anwendungen
 
MicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardMicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative Standard
 
Wicket Kurzübersicht
Wicket KurzübersichtWicket Kurzübersicht
Wicket Kurzübersicht
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
INTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINE
INTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINEINTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINE
INTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINE
 
node.js
node.jsnode.js
node.js
 
Web Application Security
Web Application SecurityWeb Application Security
Web Application Security
 
Cross-Apps-Entwicklung für iPhone, Android und Co.
Cross-Apps-Entwicklung für iPhone, Android und Co.Cross-Apps-Entwicklung für iPhone, Android und Co.
Cross-Apps-Entwicklung für iPhone, Android und Co.
 

Mais de OPEN KNOWLEDGE GmbH

Mais de 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

  • 1. Integration von Security-Checks in die CI-Pipeline @_openknowledge #WISSENTEILEN
  • 2. ÜBER MICH • Software-Entwickler • Speaker • CI / CD Flüsterer • Angular(-ität) • Java EE Christian Schulz #WISSENTEILEN
  • 3. ÜBER OPEN KNOWLEDGE Branchenneutrale Softwareentwicklung und IT-Beratung #WISSENTEILEN
  • 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
  • 6. Softwarelebenszyklus Product Design Development Testing Deployment Production Product Design Development #WISSENTEILEN
  • 8. … ist eine unendliche Geschichte #WISSENTEILEN
  • 10. WORKED FINE IN DEV NOW OPS PROBLEM #WISSENTEILEN
  • 11. Softwarelebenszyklus Product Design Development Testing Deployment Production Penetration Tests Real-Time Application Self Protection oder Web Application Firewall #WISSENTEILEN
  • 13. Doppelter Boden Web Application Firewall Anwendung ?! #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
  • 22. Damn Vulnerable Web Application (DVWA) • Entwickelt von RandomStorm • PHP • Unsichere Webanwendung mit Sicherheitslücken • Spielwiese zum Lernen https://github.com/ethicalhack3r/DVWA #WISSENTEILEN
  • 23. Juice Shop • Entwickelt von OWASP • JavaScript • AngularJS • NodeJS • Unsichere Webanwendung mit Sicherheitslücken • Spielwiese zum Lernen https://github.com/bkimminich/juice-shop #WISSENTEILEN
  • 24. Juice Shop – Beispiel #WISSENTEILEN
  • 25. Game of Hacks • Checkmarx • http://www.gameofhacks.com/ #WISSENTEILEN
  • 27. Softwarelebenszyklus Product Design Development Testing Deployment Production Static Application Security Testing Dynamic Application Security Testing Real-Time Application Self Protection oder Web Application FirewallSicherheitsanforderungen Penetration Tests #WISSENTEILEN
  • 28. Anforderungen • Integration • IDE • BuildTools • CI Server • Automatisiert ausführbar #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
  • 31. Static Application Security Testing • Abhängigkeitsanalyse • OWASP Dependency Check • Source Code Analyse • PMD • Byte Code Analyse • findbugs • SpotBugs • find-sec-bugs #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
  • 34. 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(); } #WISSENTEILEN
  • 35. 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(); } #WISSENTEILEN
  • 36. 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(); } #WISSENTEILEN
  • 37. PMD • Sourcecode Analyse • Keine dedizierten Sicherheitsregeln • CLI • Build Tool Integration • IDE Integration • Jenkins Integration https://pmd.github.io/ #WISSENTEILEN
  • 38. findbugs • Bytecode Analyse • Bis Java 8 • CLI mit GUI • Build Tool Integration • IDE Integration • Jenkins Integration http://findbugs.sourceforge.net/ #WISSENTEILEN
  • 39. SpotBugs • Bytecode Analyse • findbugs Nachfolger • Plugin System • CLI mit GUI • Build Tool Integration • IDE Integration • Jenkins Integration https://spotbugs.github.io/ #WISSENTEILEN
  • 40. SpotBugs Beispiel public boolean authenticate() { boolean authenticated = true; try { authenticated = ldapService.isUserAuthenticated(...); } catch (SomeException e) { } return authenticated; } #WISSENTEILEN
  • 41. SpotBugs Beispiel public boolean authenticate() { boolean authenticated = true; try { authenticated = ldapService.isUserAuthenticated(...); } catch (SomeException e) { } return authenticated; } #WISSENTEILEN
  • 42. 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; } #WISSENTEILEN
  • 43. find-sec-bugs • Erweiterung für SpotBugs • Fokus auf Sicherheit https://find-sec-bugs.github.io/ #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
  • 48. SonarQube • Tool Aggregator • Eigene Regeln • IDE Integration (sonarlint) • Build Tool Integration (Sonar Scanner) • Jenkins Integration https://www.sonarqube.org/ #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
  • 53. Integration IDE Build Tools SonarQube SQ + sonarlint #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
  • 62. Und was ist mit der CI?
  • 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
  • 67. Softwarelebenszyklus Product Design Development Testing Deployment Production Static Application Security Testing #WISSENTEILEN
  • 68. War da nicht noch was? Authentifizierung?
  • 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
  • 73. ZAP in CI? • Manuell die URL eingeben? • Spider soll die ganze Anwendung crawlen? • Attacke starten? #WISSENTEILEN
  • 74. UI Tests Product Design Development Testing Deployment Production Warum nicht wieder verwenden? #WISSENTEILEN
  • 75. ZAP in CI UI Test Framework ZAP (Proxy Mode) Deployed Application ZAP (Attack Mode) Deployed Application Session #WISSENTEILEN
  • 76. Softwarelebenszyklus Product Design Development Testing Deployment Production Static Application Security Testing Dynamic Application Security Testing #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
  • 79. Menschen die Security-Bugs mögen #WISSENTEILEN
  • 82. BILDNACHWEISE • Folie 7, http://candycrush.wikia.com/wiki/Level_1350?file=Level_1350_Reality.png • Folie 32: https://wiki.jenkins.io/display/JENKINS/OWASP+Dependency-Check+Plugin • Folie 36: https://www.javatips.net/blog/pmd-in-eclipse-tutorial • Folie 37: http://findbugs.sourceforge.net/manual/example-details.png • Folie 42: https://find-sec-bugs.github.io/images/screens/eclipse.png • Folie 47: https://www.sonarqube.org/index/detect-bugs-2@2x.png • Folie 49: 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 #WISSENTEILEN