+ All Categories
Home > Documents > Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring...

Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring...

Date post: 29-Aug-2019
Category:
Upload: hoangdien
View: 217 times
Download: 0 times
Share this document with a friend
47
Sicher in die Cloud mit Angular 2 und Spring Boot Andreas Falk 16.02.2017
Transcript
Page 1: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

Andreas Falk 16.02.2017

Page 2: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Andreas Falk / Germany NovaTec Consulting GmbH [email protected]

@andifalk

Agile Threat Modeling

Clo

ud

Spring

Security Scrum

Kan

ban

TDD

Code Review

Cle

an C

od

e

Static Analysis

Architecture

OWASP

Java EE

Mic

rose

rvic

es

IoT

BDD

Dev

Op

s

Web

Java

SSO

OAuth2

SAML

Sicher in die Cloud mit Angular 2 und Spring Boot

2

Page 3: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

3

OWASP Top 10 (Neue Version in 2017)!

OWASP Mobile Top 10 (2016)

ASVS OpenSAMM

OWASP Zap ProActive Controls

Cheat Sheets

https://owasp.org

Lokale Chapters

Page 4: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

4

Angular 2

API Gateway

Microservice

Microservice

DB

DB

Architektur / Threat Model

XSS CSRF

SQLi

Cloud Security

Authentifizierung

Autorisierung

Session Fixation

Auditing Logging Monitoring

Intrusion Detection

SSL / TLS

OUT OF SCOPE: Mobile und IoT Devices!

Page 5: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

5

Angular 2 https://angular.io

Page 6: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

6

https://angularjs.blogspot.de/2016/09/angular-16-expression-sandbox-removal.html

Angular 1.x

Angular 2

Page 7: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

7

https://github.com/angular/angular/issues/8511

Page 8: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

8

Sicherheitseinstufung in Angular 2

Alle Werte (Alles was ins DOM wandert)

Angular Templates (Vorsicht: Template-Injection)

Kontextabhängige Sanitization und Escaping

HTML (z.B. Bindings mit „innerHtml“)

Style (CSS Bindings)

URL (URL Eigenschaften wie <a href>)

Resource URL (z.B. <image src> oder <script src>)

Page 9: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

9

https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html

Gefahr von XSS !!

bypassSecurityTrustHtml(value: string) : SafeHtml

bypassSecurityTrustStyle(value: string) : SafeStyle

bypassSecurityTrustScript(value: string) : SafeScript

bypassSecurityTrustUrl(value: string) : SafeUrl

bypassSecurityTrustResourceUrl(value: string) : SafeResourceUrl

Page 10: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

10

https://angular.io/docs/ts/latest/api/core/index/ElementRef-class.html

Direkter Zugriff auf das DOM Gefahr von XSS !!

class ElementRef {

constructor(nativeElement: any)

nativeElement : any

}

Page 11: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

11

@Component({ selector: 'app-root', templateUrl: 'app.component.html', styleUrls: ['app.component.css'] }) export class AppComponent { untrustedHtml:string = '<em><script>alert("hello")</script></em>'; }

<div>{{untrustedHtml}}</div> <div [innerHtml]="untrustedHtml"></div>

Page 12: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

12

„Double Submit Cookie“ Support in Angular 2

Client Server

XSRF-TOKEN Cookie

X-XSRF-TOKEN Header + XSRF-TOKEN Cookie

CSRF Schutz

Page 13: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

13

Backend https://spring.io/platform

Page 14: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

14

Spring Boot

Spring Security / OAuth2

Spring Data JPA

Spring Framework

Page 15: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

15

Eine sichere Web-Anwendung in 5 Minuten

Page 16: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

16

Authentifizierung aller URLs

Session Fixation Schutz

Session Cookie (HttpOnly, Secure)

CSRF Angriffschutz

Security Response Header

„Secure By Default“ Konfiguration

Page 17: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

17

@Configuration public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { … http .csrf().csrfTokenRepository( CookieCsrfTokenRepository.withHttpOnlyFalse() ); }

CSRF Konfiguration für Angular 2

Page 18: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

18

public interface PasswordEncoder { String encode(CharSequence rawPassword); boolean matches( CharSequence rawPassword, String encodedPassword); }

Sichere Passwortverschlüsselung

Page 19: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

19

Sichere Passwortverschlüsselung

Encoder Implementierungen:

BCryptPasswordEncoder

SCryptPasswordEncoder

Pbkdf2PasswordEncoder

BytesEncryptor (BouncyCastle)

Page 20: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

20

Authentifizierung

Session Cookie Token (Bearer, JWT, …)

Mit jedem Request mitgesendet Manuell als Header gesetzt

Gefahr von CSRF!!! Kein CSRF möglich!!

Persistiert bei Unload von DOM Keine automatische Persistenz

Auf eine Domain begrenzt Domainübergreifend (mit CORS)

Sensitive Information (HTTPS)!! Sensitive Information (HTTPS)!!

Page 21: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

Application Server

Authentifizierung im Java EE Monolith

https://docs.oracle.com/javaee/7/tutorial/security-intro001.htm

Client

Access protected resource 1

4 Provide protected resource

Show login form 2

Provide credentials 3

21

Page 22: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

OAuth2 = Authorization

https://oauth.net/2

22

Page 23: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

23

Authorization Server

Client Resource

Server

OAuth2 = Autorisierung

https://oauth.net/2

Page 24: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

Authorization Server

https://oauth.net/2

Client

OAuth2 = Autorisierung

Resource Server

Resource Owner

Access Protected Resource 1

2 3

Access Token 4

Protected Resource 5

24

Page 25: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

25

OpenID Connect = Authentifizierung

https://openid.net/connect

OAuth 2

JWT JWS JWE

OpenID Connect

JWK

Page 26: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

OpenID Provider

Relying Party Resource

Server

End User

1

2

Access Token 3

Protected Resource 6

OpenID Connect = Authentifizierung

https://openid.net/connect

26

Page 27: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

27

OAuth2 / OpenId Connect mit

Spring Security ?

Page 28: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

28

Tweetable OAuth2 Application

https://projects.spring.io/spring-security-oauth

Page 29: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

29

https://github.com/spring-projects/spring-security/issues/3907

Spring Security OAuth in „Maintenance Mode“!

Page 30: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

30

https://github.com/IdentityServer/IdentityServer3

http://www.keycloak.org

Page 31: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Identity Server

Sicher in die Cloud mit Angular 2 und Spring Boot

31

Angular 2

API Gateway

Microservice

Microservice

DB

DB

Architektur / Threat Model

Page 32: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

32

public class UserBoundaryService { @PreAuthorize("hasRole('ADMIN')") public List<User> findAllUsers() {…} } ------------------------------------- public class TaskBoundaryService { @PreAuthorize("hasPermission(#taskId, 'TASK', 'WRITE')") public Task findTask(UUID taskId) {…} }

Autorisierung der REST API

Rollen- oder Rechtebasiert

Page 33: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

33

public class AuthorizationIntegrationTest { @WithMockUser(roles = "ADMIN") @Test public void verifyFindAllUsersAuthorized() {…} @WithMockUser(roles = "USER") @Test(expected = AccessDeniedException.class) public void verifyFindAllUsersUnauthorized() {…} }

Test der REST API

Serverseitige Tests (Autorisierung)

Page 34: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

34

@Entity public class Person extends AbstractPersistable<Long> { @NotNull @Pattern(regexp = "^[A-Za-z0-9- ]{1,30}$") private String lastName; @NotNull @Enumerated(EnumType.STRING) private GenderEnum gender; ... }

Input Validierung

Typisierung und Bean Validation (REST Interface UND in JPA Entity)

Page 35: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

35

@Query( "select u from User u where u.username = " + " :username and u.password = :password") User findByUsernameAndPassword( @Param("username") String username, @Param("password") String password);

SQL Injection Schutz

Prepared Statements mit Spring Data JPA

Page 36: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

36

Ist die Cloud Sicher?

Page 37: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

37

Netzwerk

Speicher

Server

Virtualisierung

OS

Runtime

Middleware

Daten

Applikationen

Netzwerk

Speicher

Server

Virtualisierung

OS

Runtime

Middleware

Daten

Applikationen

Netzwerk

Speicher

Server

Virtualisierung

OS

Runtime

Middleware

Daten

Applikationen

Netzwerk

Speicher

Server

Virtualisierung

OS

Runtime

Middleware

Daten

Applikationen

On Premise IaaS PaaS SaaS

Cloud Service Modelle

Public

Private

Hybrid

Page 38: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

38

PaaS https://www.cloudfoundry.org/

Page 39: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

39

Rotate

Repair

Repave

https://www.youtube.com/watch?v=NUXpz0Dni50

Justin Smith, Pivotal

Page 40: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

40

What if every server inside my data center had a maximum lifetime of two hours?

This approach would frustrate malware writers, because it limits the amount of time to exploit known vulnerabilities before they are patched.

“ Justin Smith, Pivotal

Repave

Page 41: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

41

Rotate

Microservice

DB JDBC

Service Binding Credentials

Page 42: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

42

Repair

Spring Boot + Spring Plattform

CloudFoundry Java Buildpack

CloudFoundry OPS Manager

AWS Azure OpenStack

Page 43: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Identity Server

Sicher in die Cloud mit Angular 2 und Spring Boot

43

Angular 2

API Gateway

Microservice

HTTPS

Microservice

HTTPS

HTTPS HTTPS

DB

DB

JDBC

JDBC

Architektur / Threat Model

HTTPS

Page 44: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

44

Angular 2: XSS-Schutz + CSRF-Token Support

OAuth2 = Autorisierung

OpenId Connect = Authentifizierung

Spring Security kann (nur) OAuth2 mit JWT

Prepared Statements mit Spring Data JPA

Input Validierung mit Bean Validation

Summary (1)

Page 45: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

45

Cloud = Infrastruktur Security

HTTPS, HTTPS, HTTPS!

Korrekte Fehlerbehandlung

Logging, Monitoring, Auditing!

Code-Reviews

Summary (2)

Page 46: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Sicher in die Cloud mit Angular 2 und Spring Boot

46

Weiterführendes

https://www.owasp.org/index.php/OWASP_Proactive_Controls

https://tools.ietf.org/html/rfc6819

OAuth 2.0 Threat Model and Security Considerations

https://openid.net/specs/openid-connect-implicit-1_0.html

OpenID Connect Implicit Client Implementer's Guide

https://angular.io/docs/ts/latest/guide/security.html

Angular2 Security Guide

Page 47: Sicher in die Cloud mit Angular 2 und Spring Boot · OpenId Connect = Authentifizierung Spring Security kann (nur) OAuth2 mit JWT Prepared Statements mit Spring Data JPA Input Validierung

Andreas Falk / Germany NovaTec Consulting GmbH [email protected]

@andifalk

Sicher in die Cloud mit Angular 2 und Spring Boot

47


Recommended