Andreas Falk / Germany NovaTec Consulting GmbH [email protected]
@agile_security
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
Sicher in die Cloud mit Angular 2 und Spring Boot
3
DevOps Product Owner
Entwicklung
QA
Betrieb
InfoSec
Identity Server
Sicher in die Cloud mit Angular 2 und Spring Boot
6
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
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
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
„Double Submit Cookie“ Support in Angular 2
XSRF-TOKEN Cookie
Client Server
X-XSRF-TOKEN Header + XSRF-TOKEN Cookie
CSRF Schutz
Sicher in die Cloud mit Angular 2 und Spring Boot
14
Spring Boot
Spring Security
Spring Data JPA
Spring Framework
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
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
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
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
Authorization Server
Client Resource
Server
OAuth2 = Autorisierung
https://oauth.net/2
Sicher in die Cloud mit Angular 2 und Spring Boot
21
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
https://github.com/IdentityServer/IdentityServer3
Sicher in die Cloud mit Angular 2 und Spring Boot
24
@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)
Sicher in die Cloud mit Angular 2 und Spring Boot
25
@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
Sicher in die Cloud mit Angular 2 und Spring Boot
26
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 API
Rollen- oder Rechtebasiert
Sicher in die Cloud mit Angular 2 und Spring Boot
27
public class AuthorizationIntegrationTest { @WithMockUser(roles = "ADMIN") @Test public void verifyFindAllUsersIsAuthorized() {…} @WithMockUser(roles = "USER") @Test(expected = AccessDeniedException.class) public void verifyFindAllUsersIsUnauthorized() {…} … }
Test der REST API
Serverseitige Tests (mit Security)
Sicher in die Cloud mit Angular 2 und Spring Boot
29
Rotate
Repair
Repave
https://www.youtube.com/watch?v=NUXpz0Dni50
Justin Smith, Pivotal
Sicher in die Cloud mit Angular 2 und Spring Boot
30
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
31
Rotate
Microservice
DB JDBC
Service Binding Credentials
Sicher in die Cloud mit Angular 2 und Spring Boot
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
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
34
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
35
Implement Logging and Intrusion Detection Leverage Security Frameworks and Libraries Error and Exception Handling
Spring Error Controller Java Exception Handling
Slf4J Logger, Splunk, Auditing, (AppSensor)
Spring Security Spring Boot + Spring Platform
Summary (3)
https://www.owasp.org/index.php/OWASP_Proactive_Controls
Top Related