Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session...

91
Real World Java Web Security Dominik Schadow | bridging IT Java User Group Ostfalen

Transcript of Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session...

Page 1: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Real World Java Web Security

Dominik Schadow | bridgingIT

Java User Group Ostfalen

Page 2: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 3: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 4: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 5: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

… architecture while coding?

… architecture before coding?

Who thinks about …

Page 6: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

… security while coding?

… security before coding?

Who thinks about …

Page 7: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

… develop secure applications?

Who wants to …

Page 8: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 9: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

OWASP TOP 10 2013A01 InjectionA02 Broken Authentication and Session ManagementA03 Cross-Site Scripting (XSS)

A04 Insecure Direct Object ReferencesA05 Security Misconfiguration

A06 Sensitive Data ExposureA07 Missing Function Level Access Control

A08 Cross-Site Request Forgery (CSRF)A09 Using Components with Known Vulnerabilities

A10 Unvalidated Redirects and Forwards

Page 10: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 11: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

OWASP Proactive Controls 2016C01 Verify for Security Early and OftenC02 Parameterize QueriesC03 Encode Data

C04 Validate All InputsC05 Implement Identity and Authentication Controls

C06 Implement Appropriate Access ControlsC07 Protect Data

C08 Implement Logging and Intrusion DetectionC09 Leverage Security Frameworks and Libraries

C10 Error and Exception Handling

Page 12: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Verify for Security Early and Often

Know the web application Know all external entities

Identify all data flows Identify all risks

C01

Page 13: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Threat

Anything that threatens the application, its data or any other asset

Page 14: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Common security flaws

Forget to authenticate a user Broken authorization

No auditing functionality Using components with known vulns

Page 15: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Data Flow DiagramsBrowserExternal

EntityPeople or code outside your control

Process Any running code Web Server

Data Flow

Communication between processes or processes and data stores

Data Store

Things that store data Database

http

https

Page 16: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Browser Web Server DatabaseApp

Server

Page 17: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Trust BoundariesGeneric

Trust Boundary

Trust Boundary

Where entities with different privileges interact

Generic Trust Boundary

Web Server

httpshttpsWeb

Serverhttpshttps

Generic Trust Boundary

Page 18: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Data Center Cloud

Browser Web Server DatabaseApp

Server

Page 19: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Where are the threats?

Follow the data flowStart with data crossing boundaries

Page 20: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

STRIDESpoofing Pretending to be something or somebody else

Violated property: Authentication

Tampering

Repudiation

Modifying something on disk, network or memory Violated property: Integrity

Claiming that someone didn’t do something Violated property: Non-Repudiation

Page 21: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

STRIDEInformation Disclosure

Denial of Service

Elevation of Privilege

Providing information to someone not authorized Violated property: Confidentiality

Absorbing resources needed to provide service Violated property: Availability

Doing something someone is not authorized to do Violated property: Authorization

Page 22: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Spoofing (CSRF)

Denial of Service Repudiation

(log file tampering)

Elevation of Privilege (access backend

logic directly)

Tampering (data manipulation)

Information Disclosure

(dump database)

Data Center Cloud

Browser Web Server DatabaseApp

Server

Page 23: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 24: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Demo Threat Modeling

Page 25: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Threat Target

Mitigation Strategy Mitigation Technique Priority Issue

ID

Repudiating actions Log Logging all security relevant

actions in an audit log 2 1001

Spoofing a user

Identification and

authenticationPassword policy, token, password

reset process 1 1002

Network flooding Elastic cloud Dynamic cloud resources (servers

and databases) to provide service 3 1006

Tampering network packets

Cryptography HTTPS/TLS 1 1007

Page 26: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Fight the identified

threats by priority

Page 27: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Maintain your threat models

Page 28: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Leverage Security Frameworks and

Libraries

C09

Page 29: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Frameworks and libraries decline

C01

Page 30: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

The unfortunate reality of insecure libraries

Up to 80% of code in today’s applications comes from libraries and frameworks

113 million downloads analyzed for the 31 most popular Java libraries and frameworks

26% had known vulnerabilities (29 million)

Most vulnerabilities are undiscoveredJeff Williams & Arshan Dabirsiaghi

The Unfortunate Reality of Insecure Libraries Aspect Security (March 2012)

http://cdn2.hubspot.net/hub/315719/file-1988689661-pdf/download-files/The_Unfortunate_Reality_of_Insecure_Libraries.pdf

Page 31: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 32: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

## preparationmvn dependency:copy-dependencies

## single projectdependency-check --project SampleProject--scan target/dependency

## multiple projectsdependency-check --project MultipleProjects --scan ./**/*.jar

Page 33: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

## preparationmvn dependency:copy-dependencies

## single projectdependency-check --project SampleProject--scan target/dependency

## multiple projectsdependency-check --project MultipleProjects --scan ./**/*.jar

Page 34: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

## preparationmvn dependency:copy-dependencies

## single projectdependency-check --project SampleProject--scan target/dependency

## multiple projectsdependency-check --project MultipleProjects --scan ./**/*.jar

Page 35: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

## preparationmvn dependency:copy-dependencies

## single projectdependency-check --project SampleProject--scan target/dependency

## multiple projectsdependency-check --project MultipleProjects --scan ./**/*.jar

Page 36: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 37: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

<reporting> <plugins><plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>1.3.6</version> <reportSets> <reportSet> <reports> <report>aggregate</report> </reports> </reportSet> </reportSets> </plugin></plugins></reporting>

Page 38: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Dependency Check might take too long for an automatic build after every push

Extend only the nightly build job with Dependency Check

Don’t set up an individual NVD per job, use a centralized one and update it separately

Jenkins integration

Page 39: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Create a NVD update only job

Page 40: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Reference the database in every build

Page 41: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 42: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Analyze your code

Page 43: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 44: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 45: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Demo FindSecurityBugs

Page 46: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Beyond the top 10

Page 47: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Server Transport Browser

Defense in depth

Page 48: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

X-Frame-Options

Content Security Policy (CSP)

HTTP Strict Transport Security (HSTS)

HTTP Public Key Pinning (HPKP)

Security response headers

Page 49: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Individual Servlet filter for every headerIntercepts all responses

Always identical configuration

Easier to test

A single place to configure each policy

Easier to integrate in other web applications (ok: copy)

Page 50: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

@WebFilter(filterName = "CacheControlFilter", urlPatterns = {"/*"})public class CacheControlFilter implements Filter { public void doFilter(ServletRequest sReq, ServletResponse sRes, FilterChain fc) { HttpServletResponse response = (HttpServletResponse) sRes; response.addHeader("Cache-Control", "no-cache, must-revalidate, max-age=0, no-store"); fc.doFilter(servletRequest, response); }

public void init(FilterConfig filterConfig){}

public void destroy() {}}

Page 51: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

@WebFilter(filterName = "CacheControlFilter", urlPatterns = {"/*"})public class CacheControlFilter implements Filter { public void doFilter(ServletRequest sReq, ServletResponse sRes, FilterChain fc) { HttpServletResponse response = (HttpServletResponse) sRes; response.addHeader("Cache-Control", "no-cache, must-revalidate, max-age=0, no-store"); fc.doFilter(servletRequest, response); }

public void init(FilterConfig filterConfig){}

public void destroy() {}}

Page 52: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

@WebFilter(filterName = "CacheControlFilter", urlPatterns = {"/*"})public class CacheControlFilter implements Filter { public void doFilter(ServletRequest sReq, ServletResponse sRes, FilterChain fc) { HttpServletResponse response = (HttpServletResponse) sRes; response.addHeader("Cache-Control", "no-cache, must-revalidate, max-age=0, no-store"); fc.doFilter(servletRequest, response); }

public void init(FilterConfig filterConfig){}

public void destroy() {}}

Page 53: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

response.addHeader( "Policy name", "Policy value");

Page 54: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Browser must understand

header

Additional security

layer

Page 55: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

X-Frame-Options

Prevents UI redressing attacks

Page 56: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

div

iframe

UI redressing attacks in a nutshell

Page 57: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

response.addHeader( "X-Frame-Options", "DENY");

"SAME-ORIGIN""ALLOW-FROM [uri]“

Page 58: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

ALLOW-FROM only supported in Firefox and Internet Explorer

X-Frame-Options browser compatibility

Page 59: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Content Security Policy (CSP)

Whitelist all content Prevents content injection

(Cross-Site Scripting)

Page 60: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

response.addHeader( "Content-Security-Policy", "default-src 'self'");

Page 61: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Content Security Policy Directivesdefault-srcobject-srcscript-src

default if specific directive is not set Sources in object, embed or applet tags Script sources (includes XSLT)

connect-src font-src child-src img-src media-src style-src

XMLHttpRequest, WebSocket, … Font sources Sources embeddable as frames/ iframes Image sources Video and audio sources CSS sources (does not include XSLT)

www.w3.org/TR/CSP2

Page 62: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

response.addHeader( "Content-Security-Policy", "default-src 'none'; script-src 'self'; image-src 'self'; font-src 'self' https://fonts.googleapis.com; style-src 'self' https://fonts.googleapis.com");

Page 63: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Violation Report{ "document-uri":"http://.../reporting.jsp? name=%3Cscript%3Ealert(%27XSS%27)%3C/script%3E", "referrer":"http://www.sample.com/security-header/ index.jsp", "blocked-uri":"self", "violated-directive":"default-src http://www.sample.com", "source-file":"http://.../reporting.jsp? name=%3Cscript%3Ealert(%27XSS%27)%3C/script%3E", "script-sample":"alert('XSS')", "line-number":10}

Page 64: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

CSP Level 1 browser compatibility

http://caniuse.com/#feat=contentsecuritypolicy

Page 65: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Don’t use inline styles or scripts

Start with default-src: 'none' (or default-src: 'self')

Configure other directives to make your application work

Specify a report URI and improve the CSP header

Use a generator, browser developer tools and an analyzer

Adding CSP to your application

Page 66: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

CSP Level 2 will replace other headers in the future

Be aware that older browsers understand the current (old) headers but will never understand CSP Level 2

One header to rule them all

Page 67: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Content Security Policy 2 extensionsframe-ancestorsAllow resource frame embedding (obsoletes X-Frame-Options header) reflected-xss(De-)activate user agent XSS heuristics (obsoletes X-XSS-Protection header) upgrade-insecure-requestLoad everything over HTTPS, even if URL specifies HTTP (page is loaded via HTTPS) block-all-mixed-contentPrevent browser from loading any assets using HTTP when using HTTPS

Page 68: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

response.addHeader( "Content-Security-Policy", "default-src 'self'; frame-ancestors 'none'");

Page 69: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Forces browsers to upgrade any link automatically to HTTPS

Does not block the request, but upgrades it

Implemented as CSP directive or meta tag

Upgrade requests to HTTPS

Page 70: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

Page 71: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

CSP Level 2 browser compatibility

http://caniuse.com/#feat=contentsecuritypolicy2

Page 72: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 73: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

HTTP Strict Transport Security (HSTS)

Force HTTPS Prevent TLS stripping

Page 74: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

HTTP301 HTTPS

HTTPS

Server is issuing a 301 redirect

Without HSTS, first call

Page 75: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

HTTP301 HTTPS

HTTPS

Server is issuing a 301 redirect

Without HSTS, second call

Page 76: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

response.addHeader( "Strict-Transport-Security", "max-age=31556926");

"max-age=31556926; includeSubDomains"

"max-age=31556926; includeSubDomains; preload"

Page 77: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

HTTP301 HTTPS (+ HSTS)

HTTPS

Server is issuing a 301 redirect

With HSTS, first call

Page 78: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

307 HTTPS

Browser is issuing a 307 internal redirect

With HSTS, second call

Page 79: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

The configured duration should not expire, there will be an initial unprotected request otherwise

All resources must be available via HTTPS, includes any (external) scripts, images, …

Valid certificate required, no self-signed certificates any more

Requires a HTTPS connection, not active on HTTP connections

HSTS requirements

Page 80: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Preload list for HSTS hosts hard coded into Chrome

Included in Firefox, Internet Explorer and Safari

Requires the complete HSTS headerStrict-Transport-Security "max-age=31556926; includeSubDomains; preload"

Submit your page at https://hstspreload.appspot.com

HSTS preload list

Page 81: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

HSTS browser compatibility

http://caniuse.com/#feat=stricttransportsecurity

Page 82: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

HTTP Public Key Pinning (HPKP)

Fixes the broken CA system Be careful, invalid hash prevents page access

Page 83: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

response.addHeader( "Public-Key-Pins", "pin-sha256='eSC+HM0…wuKgUzr4='; pin-sha256='7HIpact…oQYcRhJ3Y='; max-age=5184000; includeSubdomains; report-uri='https://...'"););

Page 84: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 85: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

HPKP browser compatibility

http://caniuse.com/#feat=publickeypinning

Page 86: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

HSTS + HPKPMost headers are only active in the current response

Page 87: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05
Page 88: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Recx is a HTTP header and cookie security analyzer plugin for Google Chrome

Alternatives are the Security Headers extensions for Chrome and Firefox

Page 89: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Demo security-header

Page 90: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

Summary

Use the OWASP Proactive Controls as a real world guide

Start small and secure your development part first

Spread the word

Page 91: Java User Group Ostfalen...OWASP TOP 10 2013 A01 Injection A02 Broken Authentication and Session Management A03 Cross-Site Scripting (XSS) A04 Insecure Direct Object References A05

[email protected] www.bridging-it.de

Demo Projects github.com/dschadow/JavaSecurity

Microsoft Threat Modeling Tool www.microsoft.com/en-us/sdl/adopt/threatmodeling.aspx

OWASP Dependency Checkwww.owasp.org/index.php/OWASP_Dependency_Check

OWASP TOP 10 www.owasp.org/index.php/Category:OWASP_Top_Ten_Project

OWASP TOP 10 Proactive Controls www.owasp.org/index.php/OWASP_Proactive_Controls

Recx Security Analyserwww.recx.co.uk/products/chromeplugin.php

Spring Security projects.spring.io/spring-security

Pictures www.dreamstime.com

Marienstraße 17 70178 Stuttgart

Blog blog.dominikschadow.de Twitter @dschadow