Sicher in die Cloud mit Angular 2 und Spring Boot Andreas Falk German OWASP Day 29.11.2016 DevOps @agile_security Sicher in die Cloud mit Angular 2 und Spring Boot Java Kanban Microservices [email protected] Agile Web TDD Threat Modeling Spring OAuth2 Architecture Java EE BDD Scrum OWASP Security IoT SAML Code Review Static Analysis Clean Code Cloud Andreas Falk / Germany NovaTec Consulting GmbH SSO 2 Sicher in die Cloud mit Angular 2 und Spring Boot 3 DevOps Product Owner Entwicklung QA Betrieb InfoSec Sicher in die Cloud mit Angular 2 und Spring Boot 4 DevOps Product Owner Entwicklung QA Betrieb InfoSec Sicher in die Cloud mit Angular 2 und Spring Boot 5 Architektur / Threat Model HTTPS HTTPS Microservice JDBC DB API Gateway Microservice JDBC DB Angular 2 HTTPS HTTPS Identity Server HTTPS Sicher in die Cloud mit Angular 2 und Spring Boot 7 Angular 2 https://angular.io Sicher in die Cloud mit Angular 2 und Spring Boot 8 Angular 1.x Angular 2 https://angularjs.blogspot.de/2016/09/angular-16-expression-sandbox-removal.html Sicher in die Cloud mit Angular 2 und Spring Boot 9 https://github.com/angular/angular/issues/8511 Sicher in die Cloud mit Angular 2 und Spring Boot 10 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>) Sicher in die Cloud mit Angular 2 und Spring Boot 11 https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html Sicher in die Cloud mit Angular 2 und Spring Boot 12 CSRF Schutz „Double Submit Cookie“ Support in Angular 2 XSRF-TOKEN Cookie Client X-XSRF-TOKEN Header + XSRF-TOKEN Cookie Sicher in die Cloud mit Angular 2 und Spring Boot Server 13 Backend https://spring.io/platform Sicher in die Cloud mit Angular 2 und Spring Boot 14 Spring Boot Spring Framework Spring Security Spring Data JPA Sicher in die Cloud mit Angular 2 und Spring Boot 15 Eine sichere Web-Anwendung in 5 Minuten Sicher in die Cloud mit Angular 2 und Spring Boot 16 „Secure By Default“ Konfiguration Authentifizierung aller URLs Session Fixation Schutz Session Cookie (HttpOnly, Secure) CSRF Angriffschutz Security Response Header Sicher in die Cloud mit Angular 2 und Spring Boot 17 CSRF Konfiguration für Angular 2 @Configuration public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { … http .csrf().csrfTokenRepository( CookieCsrfTokenRepository.withHttpOnlyFalse() ); } Sicher in die Cloud mit Angular 2 und Spring Boot 18 Sichere Passwortverschlüsselung public interface PasswordEncoder { String encode(CharSequence rawPassword); boolean matches( CharSequence rawPassword, String encodedPassword); } Sicher in die Cloud mit Angular 2 und Spring Boot 19 Sichere Passwortverschlüsselung Encoder Implementierungen: BCryptPasswordEncoder SCryptPasswordEncoder Pbkdf2PasswordEncoder BytesEncryptor (BouncyCastle) Sicher in die Cloud mit Angular 2 und Spring Boot 20 OAuth2 = Autorisierung Authorization Server Resource Server Client https://oauth.net/2 Sicher in die Cloud mit Angular 2 und Spring Boot 21 OpenID Connect = Authentifizierung OpenID Connect JWT JWS JWE JWK OAuth 2 https://openid.net/connect Sicher in die Cloud mit Angular 2 und Spring Boot 22 Tweetable OAuth2 Application Sicher in die Cloud mit Angular 2 und Spring Boot 23 https://github.com/IdentityServer/IdentityServer3 Sicher in die Cloud mit Angular 2 und Spring Boot 24 Input Validierung Typisierung und Bean Validation (REST Interface UND in JPA Entity) @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; ... } Sicher in die Cloud mit Angular 2 und Spring Boot 25 SQL Injection Schutz Prepared Statements mit Spring Data JPA @Query( "select u from User u where u.username = " + " :username and u.password = :password" ) User findByUsernameAndPassword( @Param("username") String username, @Param("password") String password); Sicher in die Cloud mit Angular 2 und Spring Boot 26 Autorisierung der REST API Rollen- oder Rechtebasiert 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) {…} } Sicher in die Cloud mit Angular 2 und Spring Boot 27 Test der REST API Serverseitige Tests (mit Security) public class AuthorizationIntegrationTest { @WithMockUser(roles = "ADMIN") @Test public void verifyFindAllUsersIsAuthorized() {…} @WithMockUser(roles = "USER") @Test(expected = AccessDeniedException.class) public void verifyFindAllUsersIsUnauthorized() {…} … } Sicher in die Cloud mit Angular 2 und Spring Boot 28 Cloud Plattform https://www.cloudfoundry.org/ Sicher in die Cloud mit Angular 2 und Spring Boot 29 Rotate Repair Repave Justin Smith, Pivotal https://www.youtube.com/watch?v=NUXpz0Dni50 Sicher in die Cloud mit Angular 2 und Spring Boot 30 Repave “ 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 Sicher in die Cloud mit Angular 2 und Spring Boot “ 31 Rotate Microservice JDBC Service Binding Credentials Sicher in die Cloud mit Angular 2 und Spring Boot DB 32 Repair Spring Boot + Spring Platform CloudFoundry Java Buildpack CloudFoundry OPS Manager AWS Azure OpenStack Sicher in die Cloud mit Angular 2 und Spring Boot 33 Summary (1) Verify for Security Early and Often DevOps / Code Reviews Parameterize Queries Spring Data JPA Encode Data Angular 2 Kontext-Sanitizer Validate All Inputs Typisierte Eingaben / Bean Validation https://www.owasp.org/index.php/OWASP_Proactive_Controls Sicher in die Cloud mit Angular 2 und Spring Boot 34 Summary (2) Implement Identity and Authentication Controls OAuth2 + OpenID Connect Implement Access Controls Spring Security Autorisierung Protect Data Spring Security Password Encoder https://www.owasp.org/index.php/OWASP_Proactive_Controls Sicher in die Cloud mit Angular 2 und Spring Boot 35 Summary (3) Implement Logging and Intrusion Detection Slf4J Logger, Splunk, Auditing, (AppSensor) Leverage Security Frameworks and Libraries Spring Security Spring Boot + Spring Platform Error and Exception Handling Spring Error Controller Java Exception Handling https://www.owasp.org/index.php/OWASP_Proactive_Controls Sicher in die Cloud mit Angular 2 und Spring Boot 36 Andreas Falk / Germany NovaTec Consulting GmbH [email protected] @agile_security Sicher in die Cloud mit Angular 2 und Spring Boot 37