Java Web Application Security
Matt Raible
http://raibledesigns.com
@mraible
Photos by Trish - http://mcginityphoto.com
2013 Raible Designs
Who is Matt Raible?
Father, Skier, Cyclist
Web Framework Connoisseur
Founder of AppFuse
Blogger on raibledesigns.com
2013 Raible Designs
Why am I here?
Purpose
To learn more about Java webapp security and
transform myself into a security expert.
Goals
Show how to implement Java webapp security.
Show how to penetrate a Java webapp.
Show how to fix vulnerabilities.
2013 Raible Designs
Why are you here?
For the free beer?
Because you care about
security?
Have you used Java EE 6,
Spring Security or Apache
Shiro?
What do you want to get
from this talk?
2013 Raible Designs
Session Agenda
Security Development
Java EE 6, Spring Security, Apache Shiro
SSL and Testing
Verifying Security
OWASP Top 10 & Zed Attack Proxy
Commercial Tools and Services
Conclusion
Develop
Penetrate
2013 Raible Designs
Protect
Relax
Develop
2013 Raible Designs
Dynamic Language Support?
If it deploys on Tomcat, it has a web.xml
Grails
JRuby on Rails
Lift
Play! Framework
2013 Raible Designs
Java EE 6
Security constraints defined in web.xml
web resource collection - URLs and methods
authorization constraints - role names
user data constraint - HTTP or HTTPS
User Realm defined by App Server
Declarative or Programmatic Authentication
Annotations Support
2013 Raible Designs
Java EE 6 Demo
http://www.youtube.com/watch?v=8bXBGU7uo4o
2013 Raible Designs
Servlet 3.0
HttpServletRequest
authenticate(response)
login(user, pass)
logout()
getRemoteUser()
isUserInRole(name)
2013 Raible Designs
Servlet 3.0 and JSR 250
Annotations
@ServletSecurity
@HttpMethodConstraint
@HttpConstraint
@RolesAllowed
@PermitAll
@DenyAll
2013 Raible Designs
Java EE Security Limitations
No error messages for
failed logins
No Remember Me
Container has to be
configured
Doesnt support
regular expressions for
URLs
2013 Raible Designs
Spring Security
Filter defined in web.xml
Separate security context file loaded by Spring
Defines URLs, Roles and Authentication Providers
Defines UserService (provided or custom)
Password Encoding
Remember Me
2013 Raible Designs
Spring Security Demo
http://www.youtube.com/watch?v=poc5dyImbig
2013 Raible Designs
Securing Methods
<global-method-security secured-annotations="enabled"/>
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account readAccount(Long id);
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account[] findAccounts();
@Secured("ROLE_TELLER")
public Account post(Account account, double amount);
<global-method-security jsr250-annotations="enabled"/>
2013 Raible Designs
Securing Methods 3.x
<global-method-security pre-post-annotations="enabled"/>
@PreAuthorize("isAnonymous()")
public Account readAccount(Long id);
@PreAuthorize("isAnonymous()")
public Account[] findAccounts();
@PreAuthorize("hasAuthority('ROLE_TELLER')")
public Account post(Account account, double amount);
2013 Raible Designs
Spring Security Limitations
Authentication
mechanism in WAR
Securing methods only
works on Spring beans
My remember me
example doesnt work
2013 Raible Designs
Apache Shiro
Filter defined in web.xml
shiro.ini loaded from classpath
[main], [urls], [roles]
Cryptography
Session Management
2013 Raible Designs
Apache Shiro Demo
http://www.youtube.com/watch?v=YJByiDvOhsc
2013 Raible Designs
Apache Shiro Limitations
Limited Documentation
Getting Roles via LDAP
not supported
No out-of-box support
for Kerberos
REST Support needs
work
2013 Raible Designs
Testing with SSL
Cargo doesnt support http and
https at same time
Jetty and Tomcat plugins work
for both
Pass javax.net.ssl.trustStore &
javax.net.ssl.trustStorePassword
to maven-failsafe-plugin as
<systemPropertyVariables>
2013 Raible Designs
Ajax Login
http://raibledesigns.com/rd/entry/implementing_ajax_authentication_using_jquery
2013 Raible Designs
Securing a REST API
Use Basic or Form
Authentication
Use Developer Keys
Use OAuth
2013 Raible Designs
OAuth
2013 Raible Designs
REST Security and OAuth Demo
http://raibledesigns.com/rd/entry/implementing_oauth_with_gwt
http://raibledesigns.com/rd/entry/grails_oauth_and_linkedin_apis
2013 Raible Designs
Integrating OAuth with AppFuse and REST
http://raibledesigns.com/rd/entry/integrating_oauth_with_appfuse_and
2013 Raible Designs
REST Security Resources
Implementing REST Authentication
http://www.objectpartners.com/2011/06/16/
implementing-rest-authentication/
Swagger ApiAuthorizationFilter
https://github.com/wordnik/swagger-core/tree/
master/samples/java-jaxrs
2013 Raible Designs
REST Security Resources
Spring Security OAuth
- version 1.0.1
Spring Social
- version 1.0.2
Facebook, Twitter,
LinkedIn, TripIt, and
GitHub Bindings
2013 Raible Designs
Penetrate
OWASP Testing Guide and Code Review Guide
OWASP Top 10
OWASP Zed Attack Proxy
Burp Suite
OWASP WebGoat
2013 Raible Designs
OWASP
The Open Web Application Security Project (OWASP) is
a worldwide not-for-profit charitable organization
focused on improving the security of software.
At OWASP youll find free and open ...
Application security tools, complete books, standard
security controls and libraries, cutting edge research
http://www.owasp.org
2013 Raible Designs
Penetration Testing Demo
http://raibledesigns.com/rd/entry/java_web_application_security_part4
2013 Raible Designs
Fixing ZAP Vulnerabilities
<session-config>
<session-timeout>15</session-timeout>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
<form action="${ctx}/j_security_check" id="loginForm"
method="post" autocomplete="off">
2013 Raible Designs
7 Security (Mis)Configurations
in web.xml
1. Error pages not configured
2. Authentication &
Authorization Bypass
3. SSL Not Configured
4. Not Using the Secure Flag
http://software-security.sans.org/blog/2010/08/11/security-misconfigurations-java-webxml-files
2013 Raible Designs
7 Security (Mis)Configurations
5. Not Using the HttpOnly
Flag
6. Using URL Parameters for
Session Tracking
7. Not Setting a Session
Timeout
http://software-security.sans.org/blog/2010/08/11/security-misconfigurations-java-webxml-files
2013 Raible Designs
OWASP Top 10 for 2010
1. Injection
2. Cross-Site Scripting (XSS)
3. Broken Authentication and Session
Management
4. Insecure Direct Object References
5. Cross-Site Request Forgery (CSRF)
2013 Raible Designs
OWASP Top 10 for 2010
6. Security Misconfiguration
7. Insecure Cryptographic Storage
8. Failure to Restrict URL Access
9. Insufficient Transport Layer Protection
10.Unvalidated Redirects and Forwards
2013 Raible Designs
Protect
[SWAT] Checklist
Firewalls
IDS and IDPs
Audits
Penetration Tests
Code Reviews with Static
Analysis Tools
2013 Raible Designs
2013 Raible Designs
Firewalls
Stateless Firewalls
Stateful Firewalls
Invented by Nir Zuk at
Check Point in the mid-90s
Web App Firewalls
Inspired by the 1996 PHF
CGI exploit
WAF Market $234m in 2010
2013 Raible Designs
Gartner on Firewalls
2013 Raible Designs
Content Security Policy
An HTTP Header with whitelist of trusted content
Bans inline <script> tags, inline event handlers and
javascript: URLs
No eval(), new Function(), setTimeout or setInterval
Supported in Chrome 16+, Safari 6+, and Firefox 4+,
and (very) limited in IE 10
2013 Raible Designs
Content Security Policy
2013 Raible Designs
Relax
Web App Firewalls: Imperva, F5, Breach
Open Source: WebNight and ModSecurity
Stateful Firewalls: Juniper, Check Point, Palo Alto
IDP/IDS: Sourcefire, TippingPoint
Open Source: Snort
Audits: ENY, PWC, Grant Thornton
Pen Testing: WhiteHat, Trustwave, Electric Alchemy
Open Source: OWASP ZAP
Static Analysis: Fortify, Veracode
2013 Raible Designs
Remember...
Security is a quality, and as all other quality, it is
important that we build it into our apps while we are
developing them, not patching it on afterwards like
many people do. -- Erlend Oftedal
From a comment on my blog: http://bit.ly/mjufjR
2013 Raible Designs
Action!
Use OWASP and Open Source Security Frameworks
Dont be afraid to contribute!
Follow the Security Street Fighter Blog
http://software-security.sans.org/blog
Use OWASP ZAP to pentest your apps
Dont be afraid of security!
2013 Raible Designs
Additional Reading
Securing a JavaScript-based Web Application
http://eoftedal.github.com/WebRebels2012
Michal Zalewskis The Tangled Web
http://lcamtuf.coredump.cx/tangled
2013 Raible Designs
Additional Resources
OWASP Denver
https://www.owasp.org/index.php/Denver
Next Meeting: Wednesday, February 20, 6-8pm
Front Range OWASP Security Conference
March 28 - 29 in Denver
David Campbell of Electric Alchemy
http://www.electricalchemy.net
2013 Raible Designs
Questions?
Contact Information
http://raibledesigns.com
@mraible
My Presentations
http://slideshare.net/mraible
2013 Raible Designs