Preventing SQL Injection Attacks in Stored Procedures

advertisement
Preventing SQL Injection
Attacks in Stored Procedures
Alex Hertz
Chris Daiello
CAP6135
Dr. Cliff Zou
University of Central Florida
March 19, 2009
Research Paper

Publication
◦ Australian Software Engineering Conference,
2006. (ASWEC 2006)

Authors
◦ Ke Wei
 Dept. of Electrical and Computer Engineering at Iowa
State University
◦ M. Muthuprasanna
 Dept. of Electrical and Computer Engineering at Iowa
State University
◦ Suraj Kothari
 Dept. of Electrical and Computer Engineering at Iowa
State University
SQL Injection Attack
Targets interactive web applications that
employ database services.
 These applications form SQL statements
from user input.
 An attacker can place malicious SQL
statements into the input

◦ Can gain access to vital database information
◦ Can use this vulnerability as an IP/Port
scanner of the internal network
SQL Injection Attack

There has been extensive research in the
field of guarding against this vulnerability
in the application layer.
◦ This can be done by examining dynamic SQL
query semantics at runtime.

There has been little research on the
vulnerabilities that exist in stored
procedures, which are at the database
layer.
Motivation
The growing popularity of the Internet in
the past decade has made it something we
rely on for everyday activities.
 The applications and their underlying
databases hold confidential and sensitive
data.
 Downtime can easily result in millions of
dollars damages.
 These databases have security flaws that
must be protected against targeted attacks.

Motivation
According to the Imperva Application
Defence Center, 92% of all web
applications are vulnerable to some form
of malicious intrusion.
 Vulnerabilities that lead to SQL Injection
attacks are well understood.
 However, there is still a lack of effective
techniques for detecting and preventing
them.

Stored Procedures

Stored procedures are an important part
of relational database systems
◦ They add an extra layer of abstraction into
the design of a software system
◦ This extra layer can hide some of the design
secrets from potentially malicious users
 i.e. Definitions of tables

The use of dynamic SQL queries can be
useful, but can pose an SQL injection
vulnerability
Example
Consider a stored procedure that is
called with a username and a password
 This procedure uses that user input to
dynamically generate an SQL statement
to be executed using the EXEC(@SQL)
system function.

Example

For instance, after calling the procedure
with the values “testuser” and
“testpasswd” for the username and
password respectively, the procedure
would generate the following SQL query
◦ select PROFILE from EMPLOYEE where
NAME=‘testuser’ and PASSWD=‘testpasswd’

This statement would then be passed to
the EXEC() function.
Example
A user could also input “‘OR 1=1 --’” as
the username and “null” as the password
 The SQL query generated would look like

◦ select PROFILE from EMPLOYEE where
NAME=“OR 1=1 −−’ and PASS=‘null’
The characters “−−” will comment out
anything following them
 The query will be interpreted as a
tautology, thus always satisfied.

Proposal

This paper proposes a technique designed
to defend against attacks directed at
stored procedures.
◦ Static application code analysis
 Stored procedure parser
◦ Runtime validation
Proposal
The key intuition behind the technique
described in this paper is that an SQL
injection will alter the structure of an
SQL statement.
 An SQL injection can be identified by
detecting the difference in the structures.
 This is done in two phases

Offline Phase

A parser is used to pre-process and
identify specific SQL statements in the
EXEC() call for runtime analysis.
Runtime Phase
The technique monitors all dynamicallygenerated SQL queries associated with
the user input.
 The technique captures the original
structure of the SQL statement and
checks for compliance after inclusion of
the user inputs.

Runtime Phase

If an attack is detected
◦ The malicious statement is prevented from
accessing the database
◦ Details about the attack are provided
Proposal

The control flow graph of the stored
procedures can be represented as an
SQL-graph
◦ Indicates which user inputs the dynamically
built SQL statements depend on.

The control flow graph is extracted
during the static analysis phase.
SQL-Graph
SQL-Graph
Only EXEC() calls that depend on user
input need to be tested in this system.
 Other EXEC() calls can exist, but pose no
security threat if they do not take user
input.
 The concept of the SQL-graph is to
reduce the runtime overhead by
displaying dependencies between multiple
queries and inputs.

Runtime Validation
Before an EXEC() is called, the SQL
statement is sent into a the validation
function to determine if it is a valid
statement.
 This function will be able to detect

◦
◦
◦
◦
Tautologies
Addition SQL statements
Second-Order Injection
Other Injection attacks
Our Intentions

We intend to implement this technique
on our own system.
◦ Verify the validity of the algorithm

We will try to analyze the effectiveness
on newer database management systems
◦ The authors used SQL Server 2005

We will try to improve upon the author’s
algorithm
Download