Web Security - Computing and Information Studies at
Download
Report
Transcript Web Security - Computing and Information Studies at
Wenliang (Kevin) Du
Associate Professor
Department of Electrical Engineering & Computer Science
Syracuse University
Joint work with
Dr. Karthick Jayaraman, Tongbo Luo, Xi Tan, and Dr. Zutao Zhu
Presentation at Microsoft Research, Redmond, 7/28/2011.
Overview
Access control in the Web
Our positions on Web’s access control
Our approaches to improve web security
Escudo: Browser-side access control
Scuta: Server-side access control
Database-side access control
The Alarming Situation
Vulnerabilities of web applications (from WhiteHat Security)
The Overall Web Architecture
Web Browser
Application
Server
e.g., PHP, Java Servlet
Web Browser
Database
e.g., MySQL
A Web Application Example
Current Access Control Systems
Web Browser
Web Application Server
Database
HTML Page
Static
Contents
JavaScript
Code
Browser Access
Control (SOP)
Server-side
Code
(PHP, C#,
Java Servlet)
Session + OS Access Control
SQL
Code
DB Access
Control
Same Origin Policy (SOP)
Google Mail
www.gmail.com
AJAX
DOM Tree
JavaScript
Code
AJAX
www.microsoft.com
(this action is now allowed)
Cookies from
Gmail.com
Cookies from
Microsoft.com
Same-Session Policy
After authentication, a session is established
Avoid repetitive authentication
Session cookies: authentication token
Same session, same privileges
Problems of SOP and SSP
Coarse granularity: one or nothing
No separation of privileges
Do we need to separate privileges?
Diversified Protection Needs
Untrusted
Region
Advertisements
Semi-Trusted Region
Third-party
Content
AddFriends.php
Trusted Region
DeleteFriends.php
First-party Content
Untrusted Region
Third-party Content
ViewFriends.php
The Loss of Trust State
F.php’s Output: HTML Page
Un-Trusted
Data
Un-trusted Region
Button1
Semi-Trusted
Data
F.php
Semi-Trusted Region
Button2
Trusted Data
ViewFriends.php
AddFriends.php
Trusted Region
Button3
Trust state of data gets lost:
led to the Same-Origin Policy.
DeleteFriends.php
Trust status gets lost again:
led to the “Same-Session Policy”.
Application-Specific Logic
Web Browser
HTML Page
Static
Contents
JavaScript
Code
Browser Access
Control (SOP)
Server-Side Access Control
Application-specific
Access Control
Browser-side
Access
Control
Database
SQL
Code
Database-side
Access
Control
Session + OS Access Control
DB Access
Control
Inadequate Access Control
Access control has to be built into program logic
Not easy for programmers
83% of web sites have at least one serious vulnerability
Deploy countermeasures in programs.
Developers need to be security experts
Do we have enough security experts?
I am a security expert, I am afraid of writing web apps.
Something is fundamentally wrong!
Don’t blame the developers
Blame the Web’s security infrastructure
Build Better Access Control
Web Browser
HTML Page
Static
Contents
JavaScript
Code
Server-Side Access Control
Application-specific
Access Control
Browser-side
Access Control
Database-side
Access Control
Better Access
Control
System
Better Access Control System
Database
SQL
Code
Better
Access
Control
The Benefit
Developers’ security efforts are reduced
They only need to “configure”
Enforcement is done by the system
Configuration: compared to Implementation
Much easier to do
Require less security expertise
Less error prone
Easier to verify
Design Principles
Civil Engineering Principles
Security Engineering Principles
Security Engineering Principles
[Saltzer and Schroeder 1975]: 8 design principles for
building protection systems:
Economy of mechanism
Fail-safe defaults
Complete mediation
Open design
Separation of privilege
Least privilege
Least common mechanism
Psychological acceptability
Key Security Principles
Separation of privilege
Partitioning access permissions
Example: Root vs. Ordinary user account
SOP & SSP: privileges are not separated
Principle of least privilege
A program must have no more privileges than necessary
for its legitimate purpose
SOP & SSP: do not support this principle
Requirement on the New Model
Finer Granularity
Reflect the nature of “Trust”
Multi-level, multi-lateral, etc.
Considering the Protection needs
Backward compatible
Well Vetted
Creativity is probably the enemy here.
Final Choice: the Ring model
Subjects and objects are labeled with rings
Widely used model: operating system, etc.
Hierarchy
Ring-Based Access Control for Web
Browser
Ring = 0
Submit
JavaScript Code
URL
Application Server
URL
URL
Escudo + SOP
2
1
1
0
A.php
Ring = 2 JavaScript Code
Submit
2
0
Ring = 1 JavaScript Code
Submit
Database
0
1
1
0
TableA
2
2
Scuta + Session
Scuta
Escudo: Shield in Portuguese
Policy Integrity
Scoping Rule
A “div” tag’s principal ring is
the lower bound for all its
children
Node-splitting
Use tag (or nonce) to
prevent
<div ring=3>
</div>
<div ring=0>
malicious code
</div>
<div>
</div>
Backward Compatibility
Escudo Browsers with Non-Escudo Applications
All principals and objects belong to the same ring,
mimicking same-origin policy
Escudo-applications with Non-Escudo Browsers
The configuration is ignored
Application still executes (no security)
Scuta: Roman Shield
Browser
Ring = 0
Submit
Application Server
JavaScript Code
URL
1
URL
URL
2
1
0
A.php
Ring = 2 JavaScript Code
Submit
2
0
Ring = 1 JavaScript Code
Submit
Database
1
Scuta + Session
Fill the gap
1
0
TableA
2
2
Escudo + SOP
0
Scuta
Fill the gap
Scuta: Subsession
Web Page
Ring = 0
F.php
JavaScript Code
call F.php
URL
(F.php)
JavaScript Code
call F.php
URL
(F.php)
Cookies: SubSID_0,
SubSID_1, SubSID_2, SID
Subsession = 0
F.php
Ring = 2
Cookies
F.php
Ring: 0
Ring: 1
SubSID_0
SubSID_1
Cookies: SubSID_2, SID
Ring: 2
SID,
SubSID_2
Browser Side Server Side
F.php
Subsession = 2
Scuta’s Basic Access Control
Browser
Ring = 0
Submit
JavaScript Code
URL
Application Server
1
Ring = 1 JavaScript Code
Submit
URL
1
URL
0
A.php
Ring = 2 JavaScript Code
Submit
2
0
2
Scuta: More Flexible Policy
Support Discretionary Security Policies:
Swich (session_esubsid() ) {
case 0: Do Task A;
break;
case 1: Do task B
break;
case 2: Do Task C
break;
}
Scuta: Gates
Exceptions invetible
Like system calls
Provide controlled access
Ring 0
Ring 1
Ring 2
Example
DB modification: Ring 0
Allow Ring 3 to modify DB
in a controlled way.
Scuta at Database
Browser
Ring = 0
Submit
JavaScript Code
URL
Application Server
URL
URL
Escudo + SOP
2
1
1
0
A.php
Ring = 2 JavaScript Code
Submit
2
0
Ring = 1 JavaScript Code
Submit
Database
1
0
1
0
TableA
2
2
Scuta + Session
Scuta
Another Gap
2
2
1
0
A.php
Application Server
dbuser
1
0
TableA
Database
Fill the Gap
2
1
dbuser_2
dbuser_1
0
A.php
Application Server
dbuser_0
2
1
0
TableA
Database
Place Data in Rings
Use the GRANT command
Fine granularity on tables, columns, and operations
Examples
GRANT ALL ON TableA TO dbuser_0
GRANT ALL ON TableB TO dbuser_1
GRANT ALL (Profile, Name) ON TableC TO dbuser_1
GRANT SELECT (Profile) ON TableC TO dbuser_2
Scuta: Architecture
PHP Code
Web
Request
Extensions
Session
Database
Zend Engine
Scuta
Reply
Initialization
Run-time Security Context
Case Studies
Browser-side Protection
Cross-Site Scripting Attacks (XSS)
Same-Origin Requests
Client-side extensions
Server-side extensions
Cross-Origin (or Cross-Site) Requests
Non-Ajax
Ajax
Defeating XSS Attacks with Escudo
Ring 0
First-Party Contents
(Trustworthy)
Ring 1
Ring 1
First-Party Contents
(Readable by Ads)
Ring 2
Other user’s comments
(Untrusted)
Session Cookie: Ring 0
Ring 2
Client-Side Extensions
Third-party JS code
Advertisements
Secure Client-Side Extensions
Modify()
A 3rd-party client-side extension
Display()
Renew()
Ring 0
Ring 1
Ring 2
Server-Side Extensions
Server-side code written by 3rd parties
Elgg has hundreds of such extensions
An “App” model
Problematic Server-Side Extensions
Malicious
Vulnerable: the SQL Injection case
Secure Server-Side Extensions
Trustworthy
Server-side
extensions
Ring 0
Ring 1
Ring 2
Not so-trustworthy
Server-side
extensions
Cross-Site Requests (non-Ajax)
Facebook.com
e.g. Delete Friends
Browsing
Facebook
User’s Browser
Secure Cross-Site Requests
Facebook’s Scuta Configuration
Cross-Site Requests
Ring 0
Ring 1
Ring 2
Cross-Site Requests are Mapped to
the Least Privileged Ring
Cross-Site Ajax Request
Security Policy
Not allowed in the past
Allowed now
Access Control Model
The new “Origin” header
White lists
Problems
“Origin” is too coarse-grained
A trusts B does not mean A trusts the Ads on B’s page.
Case 2
Secure Cross-Site Ajax Requests
Server’s Scuta Configuration
Ring 0
Ring 1
Browser’s Escudo Configuration
Originbased
Ring
Mapping
Ring 0
Ring 1
Ring 2
Ring 2
Case 2
Summary
Web is becoming part of the infrastructure
Should not be treated as yet-another application.
Need more system thinking for security
Web Security is a major problem
All web applications need to think about security
A good system support partially frees developers
So they can focus more on application logic
We are working on developing such a system support
Browser-side support
Server-side support
Database-side support