sicher in die cloud mit angular 2 und spring boot
TRANSCRIPT
Sicher in die Cloud mit Angular 2 und Spring Boot
Andreas FalkGerman OWASP Day
29.11.2016
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
Sicher in die Cloud mit Angular 2 und Spring Boot
3
Sicher in die Cloud mit Angular 2 und Spring Boot
4
DevOpsProduct Owner
Entwicklung
QA
Betrieb
InfoSec
Crossfunktionale Teams
Sicher in die Cloud mit Angular 2 und Spring Boot
5
DevOpsProduct Owner
Entwicklung
QA
Betrieb
InfoSec
Crossfunktionale Teams
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
Sicher in die Cloud mit Angular 2 und Spring Boot
8
Angular 2https://angular.io
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
Sicher in die Cloud mit Angular 2 und Spring Boot
10
https://github.com/angular/angular/issues/8511
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>)
Sicher in die Cloud mit Angular 2 und Spring Boot
12
https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html
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
Sicher in die Cloud mit Angular 2 und Spring Boot
14
Backendhttps://spring.io/platform
Sicher in die Cloud mit Angular 2 und Spring Boot
15
Spring Boot
Spring Security
Spring Data JPA
Spring Framework
Sicher in die Cloud mit Angular 2 und Spring Boot
16
Eine sichere Web-Anwendung in 5 Minuten
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
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
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
Sicher in die Cloud mit Angular 2 und Spring Boot
20
Sichere Passwortverschlüsselung
Encoder Implementierungen:
BCryptPasswordEncoder
SCryptPasswordEncoder
Pbkdf2PasswordEncoder
BytesEncryptor (BouncyCastle)
Sicher in die Cloud mit Angular 2 und Spring Boot
21
Authorization Server
Client Resource Server
OAuth2 = Autorisierung
https://oauth.net/2
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
Sicher in die Cloud mit Angular 2 und Spring Boot
23
Tweetable OAuth2 Application
Sicher in die Cloud mit Angular 2 und Spring Boot
24
https://github.com/IdentityServer/IdentityServer3
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)
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
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
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)
Sicher in die Cloud mit Angular 2 und Spring Boot
29
Cloud Plattformhttps://www.cloudfoundry.org/
Sicher in die Cloud mit Angular 2 und Spring Boot
30
Rotate
Repair
Repavehttps://www.youtube.com/watch?v=NUXpz0Dni50Justin Smith, Pivotal
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
Sicher in die Cloud mit Angular 2 und Spring Boot
32
Rotate
MicroserviceDB
JDBC
Service Binding Credentials
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!
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
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
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
Sicher in die Cloud mit Angular 2 und Spring Boot
37
Andreas Falk / GermanyNovaTec Consulting [email protected]
@agile_security