Java EE 6 Security in practice with GlassFish

61
Markus Eisele & Masoud Kalali Java EE 6 Security in practice with GlassFish

description

Slides for the #JavaOne Session ID: CON11881

Transcript of Java EE 6 Security in practice with GlassFish

Page 1: Java EE 6 Security in practice with GlassFish

Markus Eisele & Masoud Kalali

Java EE 6 Security in practice with

GlassFish

Page 2: Java EE 6 Security in practice with GlassFish

Agenda

• Introduction

• The Top 10 Most Critical Web Application Security Risks

• Take Away

Page 3: Java EE 6 Security in practice with GlassFish

Markus Eisele http://blog.eisele.net

http://twitter.com/myfear [email protected]

Java EE 7 EG,

architect, husband, father of two, photographer, speaker, writer

Masoud Kalali http://kalali.me http://twitter.com/MasoudKalali [email protected] software engineer, author, blogger, climber and flute enthusiast

Page 4: Java EE 6 Security in practice with GlassFish

Java EE 6 & GlassFish

glassfish.org

Page 5: Java EE 6 Security in practice with GlassFish

Galleria Project

https://bitbucket.org/VineetReynolds/java-ee-6-galleria/

Page 6: Java EE 6 Security in practice with GlassFish

Galleria Project

http://blog.eisele.net/2012/03/java-ee-6-galleria-example-part-1.html

?

Page 7: Java EE 6 Security in practice with GlassFish
Page 8: Java EE 6 Security in practice with GlassFish

Galleria and Security

• Form based authentication

• JDBCRealm

• request.login(userId, new String(password));

• @RolesAllowed({ "RegisteredUsers" })

Enough? State-of-the-Art? Feeling-good-with-it™?

Page 9: Java EE 6 Security in practice with GlassFish

Motivation for this talk

• Seen a lot

• Providing a starting point

• Sharing something

• Making you aware

• Plus: Finding out about “the security state of Galleria”

Page 10: Java EE 6 Security in practice with GlassFish

The Top 10 Most Critical Web Application Security Risks

Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) Source: http://owasptop10.googlecode.com Aka OWASP Top-10*

Page 11: Java EE 6 Security in practice with GlassFish

What is OWASP?

• Open Web Application Security Project • Improving the security of (web) application software

– Not-for-profit organization since 2001 – Raise interest in secure development

• Documents – Top 10 – Cheat Sheets – Development Guides

• Solutions – Enterprise Security API (ESAPI) – WebScarab – WebGoat

Page 12: Java EE 6 Security in practice with GlassFish

A1 - Injection

Page 13: Java EE 6 Security in practice with GlassFish

What is it?

• Sending unintended data to applications

• Manipulating and reading Data stores (e.g. DB, LDAP)

• Java EE 6 affected:

– UI technology of choice (e.g. JSF, JSP)

– Database access (JPA, JDBC)

Page 14: Java EE 6 Security in practice with GlassFish

How to spot it

String id = "x'; DROP TABLE members; --"; // user-input

Query query = em.createNativeQuery("SELECT * FROM PHOTO

WHERE ID =" + id, Photo.class);

Query query2 = em.createNativeQuery("SELECT * FROM MAG

WHERE ID ?1", Magazine.class);

query2.setParameter(1, id);

Page 15: Java EE 6 Security in practice with GlassFish

Prevent Injection

• Sanitize the input

• Escape/Quotesafe the input

• Use bound parameters (the PREPARE statement)

• Limit database permissions and segregate users

• Use stored procedures for database access (might work)

• Isolate the webserver

• Configure error reporting

Page 16: Java EE 6 Security in practice with GlassFish

A2 - Cross-Site Scripting (XSS)

Page 17: Java EE 6 Security in practice with GlassFish

What is it?

• Inject malicious code into user interfaces

• Get access to browser information – E.g. javascript:alert(document.cookie)

• Steal user’s session, steal sensitive data

• Rewrite web page or parts

• Redirect user to phishing or malware site

• Java EE 6 affected: – UI technology of choice (e.g. JSF, JSP)

Page 18: Java EE 6 Security in practice with GlassFish

How to spot it

<h:outputText value="#{user.content}" escape="false"/>

• Problems with sanitizing

• Weird Input <a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgvWFNTLyk8L3NjcmlwdD4=">Test</a>

Page 19: Java EE 6 Security in practice with GlassFish

Prevent

• Sanitize the input

• Escape/Quotesafe the input

• Use Cookie flags:

– httpOnly (prevents XSS access)

https://code.google.com/p/owasp-esapi-java/

Page 20: Java EE 6 Security in practice with GlassFish

A3 - Broken Authentication and Session Management

Page 21: Java EE 6 Security in practice with GlassFish

What is it?

• Container Security vs. own solution • Session Binding / Session Renewal • Passwords

– Strength (length/complexity) – Plain text passwords (http/https) – Recovery mechanisms

• Number of factors used for authentication

• Java EE 6 affected: – JAAS / JASPIC – Filter / PhaseListener – Container and Web-App configuration

Page 22: Java EE 6 Security in practice with GlassFish

How to spot it

• Authentication over http

• Custom security filter

• Not using Container Functionality

• No password strength requirements

• No HttpSession binding

• Way of saving Passwords

• Not testing security

Page 23: Java EE 6 Security in practice with GlassFish

Best Practices

• Go with provided Standard Realms and LoginModules whenever possible

• If you need custom ones: Test them extremely carefully!

• Use transport layer encryption (TLS/SSL)

• Use Cookie flags:

– secure (avoid clear text transmission)

Page 24: Java EE 6 Security in practice with GlassFish

A4 – Insecure Direct Object References

Page 25: Java EE 6 Security in practice with GlassFish

What is it?

• Accessing domain objects with their PK https://you.com/user/1 => https://you.com/user/21

• Opening opportunities for intruders

• Information hiding on the client

• Parameter value tampering

• Java EE 6 affected:

– All layers

– Especially data access

Page 26: Java EE 6 Security in practice with GlassFish

How to spot it

• Data separation for users (tenants)

• Request mode access for data (RUD)

• Query constraints

Page 27: Java EE 6 Security in practice with GlassFish

Best Practices

• Use AccessReferenceMaps

• Validate object references

• Use data-driven security

• Always Perform additional data authorization on the view

http://app?file=1

http://app?id=7d3J93 http://app?id=9182374

http://app?file=Report123.xls

Page 28: Java EE 6 Security in practice with GlassFish

A5 - Cross Site Request Forgery (CSRF)

Page 29: Java EE 6 Security in practice with GlassFish

What is it?

• Basically a capture-replay attack

• Malicious code executes functions on your behalf while being authenticated

• Deep links make this easier

• JavaEE 6 affected:

– UI technology of choice (e.g. JSF, JSP)

Page 30: Java EE 6 Security in practice with GlassFish

How to spot it

• A “secret Cookie”

• Only POST requests

• Wizard like transactions

• Simple URL rewriting

Page 31: Java EE 6 Security in practice with GlassFish

Best Practices

• Add Unpredictability (tokens)

– Hidden Field, Single-Use URLs

– Request or Session Scope

• CSRFPreventionForm (JSF 1.2 & 2) http://blog.eisele.net/2011/02/preventing-csrf-with-jsf-20.html

• Use OWASP ESAPI http://www.jtmelton.com/2010/05/16/the-owasp-top-ten-and-esapi-part-6-cross-site-request-forgery-csrf/

Page 32: Java EE 6 Security in practice with GlassFish

A6 - Security Misconfiguration

Page 33: Java EE 6 Security in practice with GlassFish

What is it?

• Applies to – Operating System

– Application Server

– Databases

– Additional Services

• Includes (beside _many_ others) – All security relevant configuration

– Missing Patches

– Default accounts

Page 34: Java EE 6 Security in practice with GlassFish

Worst Practices

• Not restricting GlassFish user nor enabling security manager

• Network interfaces/sockets access control

• Relaxed File system access control

• Using any defaults like: – Passwords: Admin, master password

– Network interface binding: Listening on 0.0.0.0

– Certificates: Self signed certificate

• Using a not hardened OS!

Page 35: Java EE 6 Security in practice with GlassFish

Policy Files location

• Global Policy File: java.home/jre/lib/security/java.policy

• User Policy File: user.home/.java.policy

• Domain Policy File: domain.home/config/server.policy

• Application Policy File: domain.home/generated/policy/<app.name>/<module.name>/granted.policy

// Following grant block is only required by

Connectors. If Connectors// are not in use the

recommendation is to remove this

grant.grant {

permission

javax.security.auth.PrivateCredentialPermission

"javax.resource.spi.security.PasswordCredential

* \"*\"","read";};

Page 37: Java EE 6 Security in practice with GlassFish

Review the *.policy files

• Policy files precedence order • Remove unused grants • Add extra permissions only to applications or

modules that require them, not to all applications deployed to a domain.

• Document your changes!

Page 38: Java EE 6 Security in practice with GlassFish

A7 - Failure to Restrict URL Access

Page 39: Java EE 6 Security in practice with GlassFish

What is it?

• Presentation layer access control

• Related to A4 – Insecure Direct Object References

Page 40: Java EE 6 Security in practice with GlassFish

Worst Practice

• Using home-grown security features instead of container provided ones

• Assuming people wont know some URLs to try them

• Assuming no one would misuse the extra permission and access they have

Page 41: Java EE 6 Security in practice with GlassFish

Java EE 6

• What you do to prevent, A4 plus:

– Use Container security (security-constraint)

– Use programmatic login of Java EE 6 if needed.

– Properly configure security realms

– Accurately map roles to principal/groups (auth-constraint / security-role-mapping)

– Only allow supported/required HTTP methods

– Accurately Categorize the URL patterns and permit the relevant roles for each

Page 42: Java EE 6 Security in practice with GlassFish

Best Practices

• Any none public URL should be protected

• Use container authentication/authorization features or extend on top of them

• If not enough use proven frameworks/ products to protect the resources

• If user can get /getpic?id=1x118uf it does not mean you should show /getpic?id=1x22ug

Page 43: Java EE 6 Security in practice with GlassFish

A8 - Insecure Cryptographic Storage

Page 44: Java EE 6 Security in practice with GlassFish

What is it?

• Sensitive data kept unprotected

• Sensitive data exposed to wrong persons

• Could be:

– Passwords

– Financial/Health care data

– Credit cards

Page 45: Java EE 6 Security in practice with GlassFish

Worst Practices

• Storing sensitive data unencrypted

• Storing comparative data unhashed (passwords/security question answer…)

• Keeping clear text copies of encrypted data

• Not keeping the keys/passwords well guarded

Page 46: Java EE 6 Security in practice with GlassFish

GlassFish

• Protect the keystore

• Protect GlassFish accounts

– Use aliasing to protect the password and keep the master password safe to protect the aliases

• Ignoring digest authentication/hashed password storage

Page 47: Java EE 6 Security in practice with GlassFish

Prevention

• Identify sensitive data • Wisely encrypt sensitive data

– On every level (application, appserver, db) – with the right algorithm and – with the right mechanism

• Don’t keep clear text copies • To decrypt and view clear text should be restricted to

authorized personnel • Keep the keys as protected as possible (HSM) • Keep offsite encrypted backups in addition to on-site

copies

Page 48: Java EE 6 Security in practice with GlassFish

A9- Insufficient Transport Layer Protection

Page 49: Java EE 6 Security in practice with GlassFish

What is it?

Page 50: Java EE 6 Security in practice with GlassFish

Worst Practice

• Using basic/form authentication without SSL

• Not using HTTPS for pages with private information

• Using default self signed certificate

• Storing unencrypted cookies

• Not setting cookies to be securely transmitted Cookie.setSecure(true)

• Forgetting about the rest of the infrastructure

Page 51: Java EE 6 Security in practice with GlassFish

GlassFish

• Properly configure HTTPS listener/s (set the right keystore)

• Install the right server certificates to be used by SSL listeners

• Properly configure the ORB over SSL listeners if needed (set the right keystore)

• Enable auditing under Security and access log under HTTP Service

Page 52: Java EE 6 Security in practice with GlassFish

Java EE

• Group the resources in regard to transport sensitivity using web-resource-collection

• Use user-data-constraint as widely as you need for data integrity and encryption needs

• Ensure that login/logout pages (in case of form auth-type) are protected by <transport-guarantee>CONFIDENTIAL</transport-guarantee>

Page 53: Java EE 6 Security in practice with GlassFish

Best Practice

• Use TLS on all connections with sensitive data

• Individually encrypt messages

• Sign messages before transmission

• Use standard strong algorithms

• Use proven mechanisms when sufficient

Page 54: Java EE 6 Security in practice with GlassFish

A10 - Unvalidated Redirects and Forwards

Page 55: Java EE 6 Security in practice with GlassFish

What is it?

• Redirecting to another URL computed by user provided parameters

• Forward to another URL computed by user provided parameters

http://www.java.net/external?url=http://www.adam-

bien.com/roller/abien/entry/conveniently_transactionally_a

nd_legally_starting

Page 56: Java EE 6 Security in practice with GlassFish

Worst Practices

• Not using a proper access control mechanism (e.g container managed and proper security-constraint )

• Redirecting to a user provided parameter, e.g to an external website

• Not to validate/verify the target with user’s access level before doing the forward

Page 57: Java EE 6 Security in practice with GlassFish

Java EE 6

• Don’t use redirect or forward as much as possible

• Accurately verify/validate the target URL before forwarding or redirecting

• Redirects are safe when using container managed authentication/authorization properly

• Forwards happen without authentication and thus requires triple check to prevent unauthorized access.

Page 58: Java EE 6 Security in practice with GlassFish

WRAP-UP

Page 59: Java EE 6 Security in practice with GlassFish

Galleria Wrap Up

Page 60: Java EE 6 Security in practice with GlassFish

Security isn‘t all candy..

… but you will love it in the end!

Page 61: Java EE 6 Security in practice with GlassFish

CC picture reference

• http://www.flickr.com/photos/wallyg/2439494447/sizes/l/in/photostream/

• http://www.flickr.com/photos/62983199@N04/7188112487/sizes/l/in/photostream/

• http://www.flickr.com/photos/stuckincustoms/3466470709/sizes/l/in/photostream/

• http://www.flickr.com/photos/lukemontague/187987292/sizes/l/in/photostream/

• http://www.flickr.com/photos/082007/7108942911/sizes/l/in/photostream/

• http://www.flickr.com/photos/ndrwfgg/140411433/sizes/l/in/photostream/

• http://www.flickr.com/photos/gingerblokey/4130969725/sizes/l/in/photostream/

• http://www.flickr.com/photos/bpc009/3328427457/sizes/l/in/photostream/

• http://www.flickr.com/photos/marine_corps/6950409157/sizes/l/in/photostream/

• http://www.flickr.com/photos/cindy47452/2898015652/sizes/l/in/photostream/