Sicher in die Cloud mit Angular 2 und Spring Boot

Werbung
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
Zugehörige Unterlagen
Herunterladen