sql injection vulnerabilities and how to prevent them

27
Jumping Bean SQL Injection Vulnerabilities & How to stop them

Upload: jumping-bean

Post on 15-Jul-2015

315 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

SQL Injection Vulnerabilities & How to stop them

Page 2: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

About Me

● Mark Clarke – Solutions Architect at Jumping Bean,

– Java developer,

– Linux system administrator,

– Founding member of JoziJUG

● Contact– @mxc4- twitter,

– LinkedIn,

Page 3: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Where are we going?

● Why Cyber Security?● Attack vectors,● Why SQL injection?● Types of SQL injection,● How to prevent SQL injection exploits

Page 4: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Why Cyber Security?

● Recent notable breaches,– Sony,

– Target,

– Home Depo,

– LinkedIn

● Who is behind these breaches?– Organised crime,

– State sponsored cyber war,

● A legal requirement to secure data in many countries,

Page 5: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Attack Vectors

● People - social engineering e.g phishing, impersonating etc,● Devices – compromising the physical device, eg, replacing

firmware or physical chips,● Operating System – target vulnerabilities in the hosts operating

system,● Network – Intercepting or injecting network traffic. Network

services DNS, Web proxies etc,● Platforms – exploiting vulnerabilities in platform stacks e.g web

servers, database servers, technology stacks Java, .Net, PHP,● Applications - attacking applications directly, either standard

applications such as browsers or Flash or custom applications

Page 6: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Why focus on SQL Injection?

Page 7: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Web Application Attack Vectors(OWASP Top 10)

Source: OWASP TOP 10 2013

Page 8: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

The Open Web Application Security Project (OWASP)

● OWASP Top 10 Project– Most Critical Web Application

Security Risks

– 2003,2004,2007,2010,2013

– Attack vectors changing as developers and organisations begin to address identified risks,

– Provide information to:● Understand the risks,● help developers address them

Page 9: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Web Application Vulnerabilities

Page 10: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Injection Attacks

● Application passes data that has not been sanitised to an interpreter of some kind:– LDAP queries,

– Xpath,

– NoSQL queries

– SQL queries,

– SMTP,

– Command interpreter

Page 11: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

APT Attack Methodology

"Advanced persistent threat lifecycle" by Dell SecureWorks - http://www.secureworks.com/cyber-threat-intelligence/advanced-persistent-threats/understand-threat/. Licensed under CC BY-SA 3.0 via Wikimedia Commons

● Sophisticated attacks use “minor” security vulnerabilities to gain access and then escalate their privileges and gain further access to systems

Page 12: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

What is SQL Injection?

Page 13: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

What is SQL Injection (SQLi)?

● Unchecked input used to manipulate generated SQL statements – change the logic of the statement,

● Most effective against weakly typed languages,– PHP,

– Ruby, etc

● But any code that uses embedded SQL could be vulnerable i.e. JQL or JDBC statements,

● Manipulation of– URL parameters,

– Cookies,

– Form elements

E.G. Post Parameters username=”admin”pass=”SZK!k#$!DD”

orpass =”' or '1'='1”; <= SQL Injection

String username=request.getParameter("username"); String password=request.getParameter("pass");;//String password=

JDBCString query = "select id from users where username='”+ username+”' and password='"+password+”'”;

Java Persistence Query Languageem.createQuery("select id from users where username='”+ username+”' and password='"+password+”'”);

Page 14: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Types of SQL Injection

● Simple SQL injection– Tautologies, logic manipulation,

– Stacking queries

– Union queries,

– Command injection

● Error based,– Rely on error messages being output to the screen

● Blind SQL Injection– Content based attack,

– Timing attack

Page 15: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Simple SQL Injection - Tautologies

● Tautological injections – 1 or 1=1

– B') or 1=1; - -

Please preapre in advance!

● “Select desc,price,qty from orders where cust.id=”+id;

● Select desc,price,qty from orders where cust.id=1 or 1=1;

● “Select user from users where user='”+username+”' and pass = password('“+pass+“');

● Select user from users where user='a' and pass=password('B') or 1=1; - - ');

Page 16: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Demo with Web Goat

Page 17: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Simple SQL Injection -Stacking Queries

● Append additional SQL queries after escaping the original query,– “SELECT name,email, address FROM members where

id=”+id

– Parameter● “2; DROP TABLE users --”

– “SELECT name,email, address FROM members where id=2; Drop table users”

● Java is not vulnerable to stacked queries but some languages are. E.G. PHP

Page 18: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Simple SQL Injection - Union Queries

● Used to exfiltrate data via UI,– e.g. collection used to

populate a table for display

● Append a union SQL query to an exiting query,

● Need to match columns number and types

● “Select prodId, desc, brand,price from product where id=”+id;

– “1 union Select 1,grantee,privilege_type,1 from information_schema.user_privileges”

● How to determine number and type of columns?

– “1 order by 6”;

– Trial and error for column type

● Can convert numeric columns to string with cast function

Page 19: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

SQL Command Injection

● System stored procedures may allow attackers to escalate their breach:– xp_cmdshell (mssql),

– source (mysql),

– LoadFIle (mysql)

● xp_regaddmultistring● xp_regdeletekey● xp_regdeletevalue● xp_regenumkeys● xp_regenumvalues● xp_regread

● Medias (xp_availablemedia) ● ODBC Resources (xp_enumdsn) ● Managing Services

(xp_servicecontrol) ● Login mode (xp_loginconfig) ● Creating Cab Files (xp_makecab)

Page 20: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Error Based SQL Injection

● Relies on poor or non-existent error handling in code,

● Extract data via crafted SQL errors,

● "Error: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Something' AND Something > ('Something')' at line 1"

Page 21: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

SQL Blind Injection

● No error message sent to screen. User is either redirected to an standard error page or page just fails to render properly– Easily implemented by a global error catcher.

● Bad News – your application is still susceptible to SQL injection

● Blind SQL injection is when the result of the query has to be inferred either:– content based,based on response size,

– or a timing attack

Page 22: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Blind SQL Injection - Content Based

● Observe out come of parameter tampering e.g– Www.example.com/products.jsp?id=4

– www.example.com/products.jsp?id=5-1

● Generate a true and false result and compare response differences– Www.example.com/products.jsp?id=5-6;

– Www.example.com/products.jsp?id=5 and 1=0

Page 23: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Blind SQL Injection – Timing Based

● MSSQL – waitfor command

– if (select user) = 'sa' waitfor delay '0:0:10'

● MySQL – sleep, benchmark

– IF EXISTS (SELECT * FROM users WHERE username = 'root') BENCHMARK(1000000000,MD5(1)) ,

– Select distinct if(table_name='users',sleep(1),table_name) from tables;

● Exfiltrate data

– Select id,desc,price from products where product=1 and substring(Select TABLE_NAME from information_schema.tables limit 1)='a';

– Select id,desc,price from products where product=1 and substring(Select TABLE_NAME from information_schema.tables limit 1)='b';

– Select id,desc,price from products where product=1 and substring(Select TABLE_NAME from information_schema.tables limit 1,2,1)='a';

Page 24: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

SQL Prevention Measures

● Web Application Firewalls (WAF)– Used to protect against unknown vulnerability,

– mod_security for Apache,

– Uses pattern matching rules

– Problem: easy to bypass● Char() function● Select 0xaa → hexadecimal bypass● SELECT CONCAT('0x',HEX('c:\\boot.ini')● SELECT LOAD_FILE(0x633A5C626F6F742E696E69)

● SQL White listing,– Input validation, sanitisation routines,

– PHP add_slashes, mysql_real_escape_string vulnerablities

● Not the best ways

Page 25: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

Coding Best Practice

● Use of Prepared Statements (Parametrized Queries)– Java

● JDBC prepared statements,● JPA createQuery with named

parameters or place holders,● Use criteria API,

– PHP ● PDO

● Use of Stored Procedures

● JDBC String updateStatement = "update COFFEES " + "set TOTAL = TOTAL + ? " + "where COF_NAME = ?";

updateSales.setInt(1,300);updateSales.setString(2, “Java”);updateSales.executeUpdate();

● JPAQuery qry = em.createQuery("SELECT c FROM Customer c WHERE c.cust_id=:cust_id")

qry.setParameter("cust_id", cust_id)qry.getSingleResult();

Page 26: SQL Injection Vulnerabilities and How to Prevent Them

Jumping Bean

SQL Injection Testing?

● Write unit tests to check for parameter tampering,

● Penetration testing tools: (fuzzing)– Sqlmap,

– SQLNinja

– Zed Attack Proxy (ZAP) from OWASP