CSCE 790 – Secure Database Systems
Download
Report
Transcript CSCE 790 – Secure Database Systems
Web Application Access
to Databases
Logistics
Test 2: May 1st (24 hours)
Extra office hours: Friday 2:30 – 4:00 pm
Tuesday May 5th – you can review your
final before final grades are submitted
2
Three-Tier Architecture
DB
DB Server
DB Server
Application
Server
Web
Server
Application
Server
Web
Server
Internet
Clients
Application
Server
Web
Server
Web
Server
3
3
Options
1. Code in a specialized language is
stored in the database itself (e.g.,
PSM, PL/SQL).
2. SQL statements are embedded in a
host language (e.g., C).
3. Connection tools are used to allow a
conventional language to access a
database (e.g., CLI, JDBC, PHP/DB).
4
4
Code Security
Input validation!
5
Process Memory Organization
Process memory: 3 regions
Text:
fixed by the program, includes code,
read-only (attempt to write: segmentation
fault)
Data: initialized and uninitialized data
Stack: stores application data and control
data
Low-level languages: direct access to
application memory
6
Buffer Overflow
Inserting more data into the buffer than it
can handle
Stack-base attacks most common
Most vulnerable languages: C, C++
7
Exploitation of Buffer Overflow
Lack of input validation
Default case: mistrust input
Never
allow input over the maximum length to
be stored in a variable
Process input one character, word, or byte at
a time
Never leave extra input on the incoming line
8
Cases and Effects
Overwriting local variables change the
program’s behavior
Overwriting a return address execution will
resume at the attacker’s specified address,
executing the attacker’s code
9
Defensive Measures
Canaries
Pad buffers with a random, secret value
determined at compile time or runtime
Check to see if the secret value is the
same before allowing transfer of control
If you smash the boundaries of the array
on the stack, how do you know what the
values are?
10
Defensive Measures
Randomize locations for loading of code
Prevent data from being executed
Stop using unsafe code! strcpy -> strlcpy,
strncat -> strlcat, gets -> fgets
Use a safer language
Anything with bounds checking – Java, C#,
VB.net, Python, Perl, Ruby, PHP, D…
…but be careful when calling C/C++
libraries
11
Defensive Measures
Input validation
Allow only input that you expect
Example: [a-zA-Z0-9]+ on usernames
Prevent some shellcode
Run static code analyzers
Detects use of unsafe (unbounded)
functions
12
SQL Injection
Attacker
provides malformed data to
application
Application uses data to create a SQL
statement via string concatenation
Allows attacker to change the semantics of
the SQL query
Why use concatenation?
Don’t
know a safer way
Laziness
13
Spotting SQL Injection
Takes
user input
Does not check user input validity
Uses user-input data to query a database
Uses string concatenation or string
replacement to build the SQL query or uses
SQL EXEC command
14
Redemption
Thou
shalt never trust input to SQL
statements
Always
validate
Use regular expressions to parse input
Use
prepared or parameterized SQL
statements
Use placeholders or binding
15
Web Application
Vulnerabilities
16
Biggest Threats to Web Applications
Cross-site scripting (XSS)
Cross-site request forgeries (CSRF)
Remote file uploads, (buffer overflow, SQL
injection, etc.)
Trust between the client’s machine and
the web applications.
17
XSS – Server trusts client
Inject client-side script into Web pages
Client views web page download script
Used for bypass access controls such as the same origin
policy
Permits scripts running on pages originating from the
same site ( scheme, hostname, and port number) to
access each other's Document Object Model with no
specific restrictions
XMLHttpRequest and Robots.txt
18
How to avoid XSS?
Scrub all input
Escape output for display
Use trusted solutions when available
Use separate variables for scrubbed input
19
Cross-site request forgery –
Client trusts server
Exploits the trust between server and
client machine
Mostly http requests and responses
Based on how web pages are delivered
along with images and other web content
20
Prevent CSRF
Require verification and stages for sensitive
applications
Use anti-CSRF tokens in your forms and
processing
Use post as the mean of taking form input
Get: encodes the data of the form into the url
of the recipient, appending it to the query
string of the request
Post: encodes it as a message
21
Unrestricted file upload
Users may upload malicious files
Uploaded files can be called by a url (if
stored on the web server)
Example: php
Embedded
in image files
Compile php code
22
Avoid file upload problems
System should determine file name
Do not allow users to access the folders where
content is uploaded
Parse file extensions carefully or set your own
file parser
White list extensions
Be secure with the .htaccess file (controls
accesses to the files on the server
23