36
Sicher in die Cloud mit Angular 2 und Spring Boot Andreas Falk German OWASP Day 29.11.2016

Sicher in die Cloud mit Angular 2 und Spring Boot

Embed Size (px)

Citation preview

Page 1: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

Andreas FalkGerman OWASP Day

29.11.2016

Page 2: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

2

Andreas Falk / GermanyNovaTec Consulting [email protected]

@agile_security

AgileThreat Modeling

Clou

d

Spring

SecurityScrum

Kanb

an

TDD

Code ReviewClea

n Co

deStatic Analysis

ArchitectureOWASP

Java EE

Mic

rose

rvic

es

IoTBDD

DevO

ps

Web

Java

SSO

OAuth2

SAML

Page 3: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

3

Page 4: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

4

DevOpsProduct Owner

Entwicklung

QA

Betrieb

InfoSec

Crossfunktionale Teams

Page 5: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

5

DevOpsProduct Owner

Entwicklung

QA

Betrieb

InfoSec

Crossfunktionale Teams

Page 6: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

7

Identity Server

Angular 2

API Gateway

Microservice

HTTPS

Microservice

HTTPS

HTTPS HTTPS

DB

DB

JDBC

JDBC

Architektur / Threat Model

HTTPS

Page 7: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

8

Angular 2https://angular.io

Page 8: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

9

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

Angular 1.x

Angular 2

Page 9: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

10

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

Page 10: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

11

Sicherheitseinstufung in Angular 2Alle Werte (Alles was ins DOM wandert)

Angular Templates (Vorsicht: Template-Injection)

Kontextabhängige Sanitization und EscapingHTML (z.B. Bindings mit „innerHtml“)

Style (CSS Bindings)

URL (URL Eigenschaften wie <a href>

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

Page 11: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

12

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

Page 12: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

13

„Double Submit Cookie“ Support in Angular 2

XSRF-TOKEN Cookie

Client ServerX-XSRF-TOKEN Header +

XSRF-TOKEN Cookie

CSRF Schutz

Page 13: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

14

Backendhttps://spring.io/platform

Page 14: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

15

Spring Boot

Spring Security

Spring Data JPA

Spring Framework

Page 15: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

16

Eine sichere Web-Anwendung in 5 Minuten

Page 16: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

17

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

Sicher in die Cloud mit Angular 2 und Spring Boot

18

@Configurationpublic 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

Sicher in die Cloud mit Angular 2 und Spring Boot

19

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

Sicher in die Cloud mit Angular 2 und Spring Boot

20

Sichere Passwortverschlüsselung

Encoder Implementierungen:

BCryptPasswordEncoder

SCryptPasswordEncoder

Pbkdf2PasswordEncoder

BytesEncryptor (BouncyCastle)

Page 20: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

21

Authorization Server

Client Resource Server

OAuth2 = Autorisierung

https://oauth.net/2

Page 21: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

22

OpenID Connect = Authentifizierung

https://openid.net/connect

OAuth 2

JWT JWS JWE

OpenID Connect

JWK

Page 22: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

23

Tweetable OAuth2 Application

Page 23: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

24

https://github.com/IdentityServer/IdentityServer3

Page 24: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

25

@Entitypublic 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 ValidierungTypisierung und Bean Validation (REST Interface UND in JPA Entity)

Page 25: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

26

@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 SchutzPrepared Statements mit Spring Data JPA

Page 26: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

27

public class UserBoundaryService {

@PreAuthorize("hasRole('ADMIN')") public List<User> findAllUsers() {…}}-------------------------------------public class TaskBoundaryService {

@PreAuthorize("hasPermission(#task.getProject().getId(), @permissionTargetType.PROJECT, @accessType.WRITE)") public Task createTask(Task task) {…}}

Autorisierung der REST APIRollen- oder Rechtebasiert

Page 27: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

28

public class AuthorizationIntegrationTest {

@WithMockUser(roles = "ADMIN") @Test public void verifyFindAllUsersIsAuthorized() {…}

@WithMockUser(roles = "USER") @Test(expected = AccessDeniedException.class) public void verifyFindAllUsersIsUnauthorized() {…} …}

Test der REST APIServerseitige Tests (mit Security)

Page 28: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

29

Cloud Plattformhttps://www.cloudfoundry.org/

Page 29: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

30

Rotate

Repair

Repavehttps://www.youtube.com/watch?v=NUXpz0Dni50Justin Smith, Pivotal

Page 30: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

31

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 31: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

32

Rotate

MicroserviceDB

JDBC

Service Binding Credentials

Page 32: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

33

RepairSpring Boot + Spring Platform

CloudFoundry Java Buildpack

CloudFoundry OPS Manager

AWS Azure OpenStack30 Cloudfoundry Releases in 2016!

Page 33: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

34

Verify for Security Early and Often

Parameterize Queries

Encode Data

Validate All Inputs

DevOps / Code Reviews

Spring Data JPA

Angular 2 Kontext-Sanitizer

Typisierte Eingaben / Bean Validation

Summary (1)

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

Page 34: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

35

Implement Identity and Authentication Controls

Implement Access Controls

Protect Data

OAuth2 + OpenID Connect

Summary (2)

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

Spring Security Autorisierung

Spring Security Password Encoder

Page 35: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

36

Implement Logging and Intrusion Detection

Leverage Security Frameworks and Libraries

Error and Exception Handling Spring Error ControllerJava Exception Handling

Slf4J Logger, Splunk, Auditing, (AppSensor)

Spring SecuritySpring Boot + Spring Platform

Summary (3)

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

Page 36: Sicher in die Cloud mit Angular 2 und Spring Boot

Sicher in die Cloud mit Angular 2 und Spring Boot

37

Andreas Falk / GermanyNovaTec Consulting [email protected]

@agile_security