top 10 defenses for website security

46
1 Page © 2012 WhiteHat Security, Inc. 1 Top 10 Defenses for Top 10 Defenses for Website Security Website Security Jim Manico VP of Security Architecture Jim.Manico@whitehatsec. com June 2012

Upload: gaenor

Post on 05-Jan-2016

33 views

Category:

Documents


0 download

DESCRIPTION

Top 10 Defenses for Website Security. Jim Manico VP of Security Architecture [email protected] June 2012. Jim Manico. VP Security Architecture, WhiteHat Security 15 years of web-based, database-driven software development and analysis experience - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Top 10 Defenses for Website Security

1Page

© 2012 WhiteHat Security, Inc.

1

Top 10 Defenses for Website Top 10 Defenses for Website SecuritySecurityTop 10 Defenses for Website Top 10 Defenses for Website SecuritySecurity

Jim ManicoVP of Security [email protected]

June 2012

Page 2: Top 10 Defenses for Website Security

2Page

© 2012 WhiteHat Security, Inc.

2

Jim ManicoJim Manico• VP Security Architecture, WhiteHat Security

• 15 years of web-based, database-driven software development and analysis experience

• Over 7 years as a provider of secure developer training courses for SANS, Aspect Security and others

• OWASP Connections Committee ChairOWASP Connections Committee Chair- OWASP Podcast Series Producer/Host- OWASP Cheat-Sheet Series Manager

Page 3: Top 10 Defenses for Website Security

3Page

© 2012 WhiteHat Security, Inc.

3

Top 10 Website Attack MethodsTop 10 Website Attack Methods

1. Query Parameterization (PHP PDO)2. XSS3. Access Control Positive Patterns 4. Cross-Site Request Forgery Defenses5. Authentication Defenses6. Forgot Password Secure Design7. Session Defenses8. Clickjacking Defense9. Secure Password Storage

9b. Password Defenses10. Encryption in Transit (TLS)

Page 4: Top 10 Defenses for Website Security

4Page

© 2012 WhiteHat Security, Inc.

4

Query Parameterization (PHP PDO)Query Parameterization (PHP PDO)

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");

$stmt->bindParam(':name', $name);$stmt->bindParam(':value', $value);

[1][1][1][1]

Page 5: Top 10 Defenses for Website Security

5Page

© 2012 WhiteHat Security, Inc.

5

Query Parameterization (.NET)Query Parameterization (.NET)SqlConnection objConnection = new SqlConnection(_ConnectionString);

objConnection.Open();

SqlCommand objCommand = new SqlCommand(

"SELECT * FROM User WHERE Name = @Name AND Password =

@Password", objConnection);

objCommand.Parameters.Add("@Name", NameTextBox.Text);

objCommand.Parameters.Add("@Password", PasswordTextBox.Text);

SqlDataReader objReader = objCommand.ExecuteReader();

if (objReader.Read()) { ...

Page 6: Top 10 Defenses for Website Security

6Page

© 2012 WhiteHat Security, Inc.

6

Query Parameterization (Java)Query Parameterization (Java)double newSalary = request.getParameter("newSalary") ;

int id = request.getParameter("id");

PreparedStatement pstmt = con.prepareStatement("UPDATE

EMPLOYEES SET SALARY = ? WHERE ID = ?");

pstmt.setDouble(1, newSalary);

pstmt.setInt(2, id);

Query safeHQLQuery = session.createQuery("from Inventory

where productID=:productid");

safeHQLQuery.setParameter("productid",

userSuppliedParameter);

Page 7: Top 10 Defenses for Website Security

7Page

© 2012 WhiteHat Security, Inc.

7

Query Parameterization (Ruby)Query Parameterization (Ruby)# Create

Project.create!(:name => 'owasp')

# Read

Project.all(:conditions => "name = ?", name)

Project.all(:conditions => { :name => name })

Project.where("name = :name", :name => name)

# Update

project.update_attributes(:name => 'owasp')

# Delete

Project.delete(:name => 'name')

Page 8: Top 10 Defenses for Website Security

8Page

© 2012 WhiteHat Security, Inc.

8

Query Parameterization (Cold Fusion)Query Parameterization (Cold Fusion)<cfquery name="getFirst" dataSource="cfsnippets">

SELECT * FROM #strDatabasePrefix#_courses WHERE intCourseID =

<cfqueryparam value=#intCourseID# CFSQLType="CF_SQL_INTEGER">

</cfquery>

Page 9: Top 10 Defenses for Website Security

9Page

© 2012 WhiteHat Security, Inc.

9

Query Parameterization (PERL)Query Parameterization (PERL)my $sql = "INSERT INTO foo (bar, baz) VALUES ( ?, ? )";

my $sth = $dbh->prepare( $sql );

$sth->execute( $bar, $baz );

Page 10: Top 10 Defenses for Website Security

10Page

© 2012 WhiteHat Security, Inc.

10

OWASP Query ParameterizationCheat Sheet

OWASP Query ParameterizationCheat Sheet

Page 11: Top 10 Defenses for Website Security

11Page

© 2012 WhiteHat Security, Inc.

11

2. XSS: Why So Serious? 2. XSS: Why So Serious?

• Session Hijacking• Site Defacement• Network Scanning• Undermining CSRF Defenses• Site Redirection/Phishing• Load of Remotely Hosted Scripts• Data Theft• Keystroke Logging

[2][2][2][2]

Page 12: Top 10 Defenses for Website Security

12Page

© 2012 WhiteHat Security, Inc.

12

XSS Defense by Data Type and ContextXSS Defense by Data Type and Context

Data Type Context Defense

String HTML Body HTML Entity Encode

String HTML Attribute Minimal Attribute Encoding

String GET Parameter URL Encoding

String Untrusted URL URL Validation, avoid javascript: URLs, Attribute encoding, safe URL verification

String CSS Strict structural validation, CSS Hex encoding, good design

HTML HTML Body HTML Validation (JSoup, AntiSamy, HTML Sanitizer)

Any DOM DOM XSS Cheat Sheet

Untrusted JavaScript Any Sandboxing

JSON Client Parse Time JSON.parse() or json2.js

Safe HTML Attributes include: align, alink, alt, bgcolor, border, cellpadding, cellspacing, class, color, cols, colspan, coords, dir, face, height, hspace, ismap, lang, marginheight, marginwidth, multiple, nohref, noresize, noshade, nowrap, ref, rel, rev, rows, rowspan, scrolling, shape, span, summary, tabindex, title, usemap, valign, value, vlink, vspace, width

Page 13: Top 10 Defenses for Website Security

13Page

© 2012 WhiteHat Security, Inc.

13

HTML Body ContextHTML Body Context

<span>UNTRUSTED DATA</span>

Page 14: Top 10 Defenses for Website Security

14Page

© 2012 WhiteHat Security, Inc.

14

HTML Attribute ContextHTML Attribute Context

<input type="text" name="fname" value="UNTRUSTED DATA">

Page 15: Top 10 Defenses for Website Security

15Page

© 2012 WhiteHat Security, Inc.

15

HTTP GET Parameter ContextHTTP GET Parameter Context

<a href="/site/search?value=UNTRUSTED DATA">clickme</a>

Page 16: Top 10 Defenses for Website Security

16Page

© 2012 WhiteHat Security, Inc.

16

URL ContextURL Context

<a href="UNTRUSTED URL">clickme</a>

<iframe src="UNTRUSTED URL" />

Page 17: Top 10 Defenses for Website Security

17Page

© 2012 WhiteHat Security, Inc.

17

CSS Value ContextCSS Value Context

<div style="width: UNTRUSTED DATA;">Selection</div>

Page 18: Top 10 Defenses for Website Security

18Page

© 2012 WhiteHat Security, Inc.

18

JavaScript Variable ContextJavaScript Variable Context

<script>var currentValue='UNTRUSTED DATA';</script>

<script>someFunction('UNTRUSTED DATA');</script>

Page 19: Top 10 Defenses for Website Security

19Page

© 2012 WhiteHat Security, Inc.

19

JSON Parsing ContextJSON Parsing Context

JSON.parse(UNTRUSTED JSON DATA)

Page 20: Top 10 Defenses for Website Security

20Page

© 2012 WhiteHat Security, Inc.

20

Dangerous jQuery “sinks”

.after() .prependTo()

.append() .replaceAll()

.appendTo() .replaceWith()

.before() .unwrap()

.html() .wrap()

.insertAfter() .wrapAll()

.insertBefore() .wrapInner()

.prepend()

Properly escape before sending untrusted data to these methods!

Page 21: Top 10 Defenses for Website Security

21Page

© 2012 WhiteHat Security, Inc.

21

Contextual encoding is a crucial technique needed to stop all types of XSS

jqencoder is a jQuery plugin that allows developers to do contextual encoding in JavaScript to stop DOM-based XSS

http://plugins.jquery.com/plugin-tags/security $('#element').encode('html', cdata);

Jquery Encoding with JQencoderJquery Encoding with JQencoder

Page 22: Top 10 Defenses for Website Security

22Page

© 2012 WhiteHat Security, Inc.

22

Best Practice: DOM-Based XSS DefenseBest Practice: DOM-Based XSS Defense• Untrusted data should only be treated as displayable text

• JavaScript encode and delimit untrusted data as quoted strings

• Use document.createElement("…"), element.setAttribute("…","value"), element.appendChild(…), etc. to build dynamic interfaces (safe attributes only)

• Avoid use of HTML rendering methods

• Make sure that any untrusted data passed to eval() methods is delimited with string delimiters and enclosed within a closure

• eval(someFunction(‘UNTRUSTED DATA’));

Page 23: Top 10 Defenses for Website Security

23Page

© 2012 WhiteHat Security, Inc.

23

OWASP Abridged XSS PreventionCheat Sheet

OWASP Abridged XSS PreventionCheat Sheet

Page 24: Top 10 Defenses for Website Security

24Page

© 2012 WhiteHat Security, Inc.

24

Attacks on Access ControlAttacks on Access Control• Vertical Access Control Attacks

- A standard user accessing administration functionality- "Privilege Escalation"

• Horizontal Access Control Attacks- Same role, but accessing another user's private data

• Business Logic Access Control Attacks- Abuse of workflow

Page 25: Top 10 Defenses for Website Security

25Page

© 2012 WhiteHat Security, Inc.

25

Best Practice: Code to the PermissionBest Practice: Code to the Permission

if (AC.hasAccess(ARTICLE_EDIT, NUM)) {

//execute activity

}

• Code it once, and it never needs to change again

• Implies policy is persisted in some way

• Requires more design/work up front to get right

Page 26: Top 10 Defenses for Website Security

26Page

© 2012 WhiteHat Security, Inc.

26

Best Practice: Use a Centralized Access ControllerBest Practice: Use a Centralized Access Controller

In Presentation Layerif (ACL.isAuthorized(VIEW_LOG_PANEL)){

<h2>Here are the logs</h2><%=getLogs();%/>

}

In Controllertry (ACL.assertAuthorized(DELETE_USER)){

deleteUser();}

Page 27: Top 10 Defenses for Website Security

27Page

© 2012 WhiteHat Security, Inc.

27

Access Control Positive PatternsAccess Control Positive Patterns

• Code to the permission, not the role

• Centralize access control logic

• Design access control as a filter

• Fail securely (deny-by-default)

• Apply same core logic to presentation andserver-side access control decisions

• Server-side trusted data should driveaccess control

• Provide privilege and user grouping forbetter management

• Isolate administrative features and access

[3][3][3][3]

Page 28: Top 10 Defenses for Website Security

28Page

© 2012 WhiteHat Security, Inc.

28

OWASP Access ControlCheat Sheet

OWASP Access ControlCheat Sheet

Page 29: Top 10 Defenses for Website Security

29Page

© 2012 WhiteHat Security, Inc.

29

Anatomy of a CSRF AttackAnatomy of a CSRF AttackConsider a consumer banking application that contains the following form:

<form action="https://bank.com/Transfer.asp" method="POST"

id="form1">

<p>Account Num: <input type="text" name="acct"

value="13243"/></p>

<p>Transfer Amt: <input type="text" name="amount"

value="1000" /></p>

</form>

<script>document.getElementById(‘form1’).submit(); </script>

Page 30: Top 10 Defenses for Website Security

30Page

© 2012 WhiteHat Security, Inc.

30

Cross-Site Request Forgery DefensesCross-Site Request Forgery Defenses

• Cryptographic Tokens- Primary and most powerful defense. Randomness is

your friend

• Require users to re-authenticate- Amazon.com does this *really* well

• Requests that cause side effects should use (and require) the POST method- Alone, this is not sufficient

• Double-cookie submit defense- Decent defense, but not based on randomness; instead,

based on SOP

[4][4][4][4]

Page 31: Top 10 Defenses for Website Security

31Page

© 2012 WhiteHat Security, Inc.

31

OWASP Cross-Site Request Forgery

Cheat Sheet

OWASP Cross-Site Request Forgery

Cheat Sheet

Page 32: Top 10 Defenses for Website Security

32Page

© 2012 WhiteHat Security, Inc.

32

Authentication DangersAuthentication Dangers• Weak Password

• Login Brute Force

• Username Harvesting

• Session Fixation

• Weak or Predictable Session

• Plaintext or Poor Password Storage

• Weak "Forgot Password" Feature

• Weak "Change Password" Feature

• Credential or Session Exposure in Transit via Network Sniffing

• Session Hijacking via XSS

Page 33: Top 10 Defenses for Website Security

33Page

© 2012 WhiteHat Security, Inc.

33

Authentication DefensesAuthentication Defenses

• 2FA/MFA/Passwords as a single factor are DEAD

• Develop generic failed login messages that do not indicate whether the user-id or password was incorrect

• Enforce account lockout after a pre-determined number of failed login attempts

• Force re-authentication at critical application boundaries- edit email, edit profile, edit finance info, ship to new address,

change password, etc.

• Implement server-side enforcement of credential syntax and strength

[5][5][5][5]

Page 34: Top 10 Defenses for Website Security

34Page

© 2012 WhiteHat Security, Inc.

34

OWASP Authentication SheetCheat Sheet

OWASP Authentication SheetCheat Sheet

Page 35: Top 10 Defenses for Website Security

35Page

© 2012 WhiteHat Security, Inc.

35

Forgot Password Secure DesignForgot Password Secure Design

• Require identity and security questions - Last name, account number, email, DOB- Enforce lockout policy- Ask one or more good security questions

- http://www.goodsecurityquestions.com/

• Send the user a randomly generated token via out-of-band method- email, SMS or token

• Verify code in same Web session- Enforce lockout policy

• Change password- Enforce password policy

[6][6][6][6]

Page 36: Top 10 Defenses for Website Security

36Page

© 2012 WhiteHat Security, Inc.

36

OWASP Forgot PasswordCheat Sheet

OWASP Forgot PasswordCheat Sheet

Page 37: Top 10 Defenses for Website Security

37Page

© 2012 WhiteHat Security, Inc.

37

• Ensure secure session IDs- 20+ bytes, cryptographically random- Stored in HTTP Cookies- Cookies: Secure, HTTP Only, limited path

• Generate new session ID at login time- To avoid session fixation

• Session Timeout- Idle Timeout- Absolute Timeout- Logout Functionality

Session DefensesSession Defenses[7][7][7][7]

Page 38: Top 10 Defenses for Website Security

38Page

© 2012 WhiteHat Security, Inc.

38

OWASP Session ManagementCheat Sheet

OWASP Session ManagementCheat Sheet

Page 39: Top 10 Defenses for Website Security

39Page

© 2012 WhiteHat Security, Inc.

39

Clickjacking Defense Clickjacking Defense

• Standard Option: X-FRAME-OPTIONS Header// to prevent all framing of this content response.addHeader( "X-FRAME-OPTIONS", "DENY" );

// to allow framing of this content only by this site response.addHeader( "X-FRAME-OPTIONS", "SAMEORIGIN" );

• Frame-Breaking Script Defense:

<style id="antiClickjack">body{display:none}</style><script type="text/javascript"> if (self == top) { var antiClickjack = document.getElementByID("antiClickjack"); antiClickjack.parentNode.removeChild(antiClickjack)} else {

top.location = self.location;}</script>

[8][8][8][8]

Page 40: Top 10 Defenses for Website Security

40Page

© 2012 WhiteHat Security, Inc.

40

OWASP ClickjackingCheat Sheet

Missing? Care to Help?

OWASP ClickjackingCheat Sheet

Missing? Care to Help?

Page 41: Top 10 Defenses for Website Security

41Page

© 2012 WhiteHat Security, Inc.

41

Secure Password Storage Secure Password Storage

public String hash(String plaintext, String salt, int iterations) throws EncryptionException {byte[] bytes = null;try { MessageDigest digest = MessageDigest.getInstance(hashAlgorithm); digest.reset(); digest.update(ESAPI.securityConfiguration().getMasterSalt()); digest.update(salt.getBytes(encoding)); digest.update(plaintext.getBytes(encoding));

// rehash a number of times to help strengthen weak passwords bytes = digest.digest(); for (int i = 0; i < iterations; i++) { digest.reset(); bytes = digest.digest(bytes); } String encoded = ESAPI.encoder().encodeForBase64(bytes,false); return encoded;} catch (Exception ex) { throw new EncryptionException("Internal error", "Error");}}

[9][9][9][9]

Page 42: Top 10 Defenses for Website Security

42Page

© 2012 WhiteHat Security, Inc.

42

Password Security DefensesPassword Security Defenses

• Disable browser autocomplete- <form AUTOCOMPLETE="off">- <input AUTOCOMPLETE="off">

• Password and form fields- Input type=password

• Additional password security- Do not display passwords in HTML document- Only submit passwords over HTTPS

[9[9bb]][9[9bb]]

Page 43: Top 10 Defenses for Website Security

43Page

© 2012 WhiteHat Security, Inc.

43

OWASP Password StorageCheat Sheet

OWASP Password StorageCheat Sheet

Page 44: Top 10 Defenses for Website Security

44Page

© 2012 WhiteHat Security, Inc.

44

Encryption in Transit (TLS)Encryption in Transit (TLS)

• Authentication credentials and session identifiers mustbe encrypted in transit via HTTPS/SSL- Starting when the login form is rendered- Until logout is complete- All other sensitive data should be protected via HTTPS!

• https://www.ssllabs.com free online assessment ofpublic-facing server HTTPS configuration

• https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet for HTTPSbest practices

[10][10][10][10]

Page 45: Top 10 Defenses for Website Security

45Page

© 2012 WhiteHat Security, Inc.

45

OWASP Transport Layer ProtectionCheat Sheet

OWASP Transport Layer ProtectionCheat Sheet

Page 46: Top 10 Defenses for Website Security

46Page

© 2012 WhiteHat Security, Inc.

46

Thank YouThank YouThank YouThank YouJim ManicoVP of Security [email protected]