heise devSec () 2019, Heidelberg: Vortrag von Mario-Leander Reimer (@LeanderReimer, Cheftechnologe bei QAware)
== Dokument bitte herunterladen, falls unscharf! Please download slides if blurred! ==
Abstract:
Holistische Sicherheit für Microservice-Architekturen ist komplex: Eine Vielzahl an Infrastruktur-Bausteinen, Technologien und Betriebseinheiten mit ihren API Endpunkten und Kommunikationskanälen müssen berücksichtigt werden. Hier braucht es einen flexiblen und mehrschichtigen Ansatz.
Dieser Vortrag gibt einen Überblick zu Ansätzen, relevanten Schutzmechanismen und Technologien zur Absicherung von Microservice-Architekturen auf Ebene der Infrastruktur, der Plattform und der Anwendung. Wir sprechen über die 4C's der Cloud Native Security und erklären, wie man Security by Design, Continuous Security und Continuous Compliance umsetzen kann. Außerdem erläutern wir das DHARMA-Konzept, einen einfachen, aber effektiven Ansatz für ganzheitliche Sicherheit in hoch verteilten Cloud-nativen Systemen.
4. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Monolithische Systeme waren vergleichsweise
einfach abzusichern.
• Kleinere Angriffsfläche in Bezug auf
die öffentlichen APIs.
• Keine Verteilung. Kaum IPC.
• Überschaubarer Technologie-Stack
• Geringe Infrastruktur-Komplexität
• Managed Infrastruktur (OS Updates,
Version Upgrades, Patches)
• Lange Release-Zyklen. One Team.
4
Monolithic
Legacy System
Users
system.example.com
5. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Microservice-basierte Systeme sind komplexer.
Ihre Absicherung ist deutlich aufwändiger.
• Starke Verteilung und zahlreiche
Kommunikationskanäle
• Heterogener Technologie-Stack
• Hohe Infrastruktur-Komplexität mit
vielen Komponenten
• Neues Betriebsmodell mit mehr
Verantwortung beim Entwickler
• Kurze Release Zyklen. Viele Teams.
5
Service
A
Service
B
Service
C
Service
X
Service
Y
Service
Z
Users
6. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Microservice-basierte Systeme müssen auf allen Ebenen
und Sichten der Softwarearchitektur gesichert werden.
6
TI - ArchitekturT - ArchitekturA - Architektur
Konzeptionelle Sicht
Modulsicht
Ausführungssicht
Programmsicht
Anforderungen
Komponenten
Schnittstellen
Nachbarsysteme
Anwendungsfälle
Entitätenmodell
Rechner
Netzwerke
Infrastruktur
Produkte
Bibliotheken
Frameworks
Technologien
7. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Die Sicherheitsarchitektur eines Systems sichert
die Architektur auf den verschiedenen Ebenen.
7
Anwendungs-Architektur
Technische Architektur
Sichere
Anwendungs-Architektur
Sichere
Technische Architektur
Sicherheits-Anforderungen
Security Targets
Externe Quellen:
OWASP Top 10, BSI, PSA,
Technische Infrastruktur
Sichere
Technische InfrastrukturSicherheits
Architektur
8. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Die Sicherheitsarchitektur besteht aus abgesicherten
Komponenten und Kommunikationskanälen.
8
Komponente A Komponente B
Kanal A-B
Trust boundary
(Abgesicherter)
Kommunikationskanal
Komponente
Schnittstelle über einen
Gatekeeper gesichert
• Ein System besteht aus Komponenten. Diese sind durch Kommunikationskanäle verbunden.
• Beispiele für Komponenten: Datacenter, VMs, Container, App Server, Datenbanken, Softwaremodule, Browser, …
• Jede Komponente wird von jemanden bereitgestellt, der vertrauenswürdig oder nicht vertrauenswürdig ist.
• Jede Komponente hat eine definierte Sicherheit (von unsicher bis sehr sicher): Wie gründlich muss der Gatekeeper
sein: Vom Jedermanns-Recht bis zur Festung
• Jeder Kanal hat eine definierte Sicherheit (von sehr sicher bis unsicher): Wie robust ist der Kanal und das dabei
verwendete Protokoll gegenüber den typischen Angriffen?
9. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Sicherheitskomponenten können Sicherheitsgruppen bilden
mit harten Grenzkontrollen oder laxer innerer Sicherheit.
9
Komponente A Komponente B
Komponente D
Komponente C
Strenge Sicherheit
Schwache Sicherheit
Keine Sicherheit
Sicherheitsgruppe und
Trust Boundary
10. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Konzepte aus dem Domain Driven Design helfen
beim Entwurf der Sicherheitsarchitektur.
• Bounded Context definiert die
fachlichen Systemgrenzen
• Fachlicher und technischer
Schnitt mit Event Storming
• Anti-Corruption Layer kapselt
und isoliert die Zugriffe
zwischen Bounded Contexts
• Value Objects: self-validated,
immutable Data Types
10
11. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Introducing DHARMA: Domain Hierarchy Access
Regulation for Microservices Architecture
• Nützliche Access Control Mechanismen für Microservices
• Network-Level Controls: Segmentation, SSL/TLS, SPIFFE
• Infrastructure: Network Overlays, Proxies / API Gateways, Service Meshes
• Application Level Controls: API keys, OAuth 2.0, OpenID Connect, JWT
• Die API Access Control Design Methodology mit DHARMA:
1. Identify Trust Domains
2. Define trust and access mechanisms
3. Determine interior and boundary endpoints
4. Select domain implementation platforms
11
https://www.ca.com/content/dam/ca/us/files/ebook/securing-microservice-apis-sustainable-and-scalable-access-control.pdf
12. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware12
DMZ A Shared PaaS
Reverse
Proxy
Reverse
Proxy
Namespace Bounded Context A
APIGateway
Reverse
Proxy
Users
3rd Party
Apps
Mobile
Namespace Context A
SecurityAPIGateway
Auth Token <-> JWT
Auth Service
X
Auth Service
Y
Auth Service
Z
Service A Service B
JWKS
Service
3
JWT JWT
5 2
2
1
4
4
1. Proprietary Authentication Token
2. Authorise and swap token to JSON Web Token
3. Propagate Token
4. Verify Token with JSON Web Key Set
5. Propagate Token
6. Like 4. Verify Token with JSON Web Key Set
13. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware13
W E
N
S
Ingress
Egress
API Gateways für
Nord-Süd Kommunikation
Service Meshes für
Ost-West Kommunikation
14.
15.
16. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware16
API Gateways
are like the Façade Pattern in
Cloud Native Application Design
and Microservice Architectures
17. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
• Traffic Management: Path, Header, Host based Routing, Path Rewrite
• Security: AAA, Terminate TLS, Support for JWT and JWKS, Open ID
• Quality of Service: Rate Limiting, Quota
• Observability: Logging, Monitoring, Tracing, Auditing
• Resiliency: Circuit Breaker, Retry, Timeouts
• Protocol Translation: XML to JSON, gRPC to JSON, …
• Transformation: Fan Out / Collect, Backend for Frontend, GraphQL
• Rollout and Deployment: A/B Deployment, Canary Release, et.al.
17
18. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Four Categories of API Gateways
A. API Management Solutions: Kong, Tyk, Mulesoft,
3scale, Apigee, …
B. Build Your Own API Gateway: Netflix Zuul 2, Spring
Cloud Gateway, Vert.x, Ballerina, Camel, …
C. Service Proxies: Envoy, Nginx, OpenResty, Traefik, …
D. Cloud Native API Gateways: KrakenD, Ambassador,
Gloo, Maesh, …
18
24. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
The 4C’s of Cloud Native Security
24
Cloud
Cluster
Container
Code
https://kubernetes.io/docs/concepts/security/overview/#the-4c-s-of-cloud-native-security
25. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Code
• Apply Defensive Programming Practices: Educate and Read
• 3rd Party Dependency Security: Trusted Repositories (Nexus,
Artifactory), Build Tool Integration (OWASP Plugins)
• Static Code Analysis: Google Error Prone, Sonar, et.al.
• Dynamic Probing Attacks als Teil der CI/CD Pipeline: Headless
OWASP Zed Attack proxy, Crashtest Security Suite
• Zero Trust Mindset: Access over TLS only, limit port ranges
25
26. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Container
• Disallow Privileged Users.
• Build minimal images. Consider Distroless.
• Use Trusted Registries and Trusted Images.
• Container Vulnerability Scanning und OS Dependency Security als
Teil der CI/CD Pipeline mit Tools wie Claire
• Image Signing and Enforcement: CNCF Projects (TUF and Notary)
are useful tools for signing container images and maintaining a
system of trust, IBM’s Portieris for enforcement.
26
# Start by building the application.
FROM golang:1.12 as build
WORKDIR /go/src/app
ADD . /go/src/app
RUN go get -d -v ./...
RUN go build -o /go/bin/app
# Now copy it into our base image.
FROM gcr.io/distroless/base
COPY --from=build /go/bin/app /
CMD ["/app"]
27. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Cluster
• Sowohl die Komponenten des Clusters selbst auch die Applications-Komponenten müssen gesichert
werden. Empfehlung: Nutze einen Managed CaaS Dienst.
• Application secrets management (and encrypting them in etcd at rest)
https://kubernetes.io/docs/concepts/configuration/secret/
• Pod Security Policies:
https://kubernetes.io/docs/concepts/policy/pod-security-policy/
• Quality of Service (and Cluster resource management)
https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/
• Network Policies:
https://kubernetes.io/docs/concepts/services-networking/network-policies/
• TLS For Kubernetes Ingress:
https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
27
28. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Cloud
• Beachte die Cloud Provider Security Guidelines!
28
IaaS Provider Link
Alibaba Cloud https://www.alibabacloud.com/trust-center
Amazon Web Services https://aws.amazon.com/security/
Google Cloud Platform https://cloud.google.com/security/
IBM Cloud https://www.ibm.com/cloud/security
Microsoft Azure https://docs.microsoft.com/en-us/azure/security/azure-security
VMWare VSphere https://www.vmware.com/security/hardening-guides.html
29. // heise devSec() 2019 // Holistische Sicherheit für Microservice-basierte Systeme // @LeanderReimer #cloudnativenerd #qaware
Holistische Sicherheit für Microservice-basierte Systeme
betrifft alle Ebenen vom Entwurf bis zum Betrieb.
29
Infrastructure
Certificates
Tokens
Passwords
Security Testing
DAST + SAST
Secure Components
Domain Driven Design
Security Patterns
Sicherheitsanforderungen
Schutzbedarfsanalyse
Angreifer-Analyse
OWASP Top 10
Defensive Programming
Dependencies
Package Signing
Container Security