Hails: Protecting Data Privacy in Untrusted Web Applications
Daniel B. Giffin, Amit Levy, Deian Stefan, David Terei, John Mitchell, David Mazières, and Alejandro Russo
Hails: Protecting Data Privacy in Untrusted Web Applications Daniel - - PowerPoint PPT Presentation
Hails: Protecting Data Privacy in Untrusted Web Applications Daniel B. Giffin, Amit Levy, Deian Stefan, David Terei, John Mitchell, David Mazires, and Alejandro Russo Web platforms are great ! They allow third-party developers to build apps
Daniel B. Giffin, Amit Levy, Deian Stefan, David Terei, John Mitchell, David Mazières, and Alejandro Russo
Web platforms are great! They allow third-party developers to build apps that use our personal data.
Web platforms are scary! They allow third-party developers to build apps that use our personal data.
➤ Cannot determine trustworthiness of apps
➤ Even well-meaning authors cannot be trusted
Use popular MVC paradigm
Model: interface to data View: renders pages Controller: handles and
responds to HTTP requests
Jen’s Browser Model View Controller
How is security policy specified and enforced?
➤ E.g., only Jen’s friends may
see her email address
Jen’s Browser Model View Controller
➠ Error prone and not scalable
How is security policy specified and enforced?
➤ E.g., only Jen’s friends may
see her email address
Intertwined throughout code
Jen’s Browser Model View Controller
Can decide to give an app access to data, but
can’t control how the app uses your data.
Is there any hope for privacy on platforms?
➤ App developers host their own apps ➤ Platform enforces security: terms of service
➤ Platform provider hosts apps ➤ Platform enforces security: information flow
control
➤ Specified as single concise module
➤ Language-level information flow control
guarantees apps always obey policy
Aeolus, HiStar, Nexus, Jif, Ur/Web, ...
➤ Enforcing policy across untrusted apps
Implement UI and
➤ Users need not
trust VCs
Specify data model and policy on data
➤ Users trust MPs they
use to handle data
Models-Polices (MPs) Views-Controllers (VCs) + + Policy enforced globally
➤ Wrong: app can’t read Jen’s email address
because it may leak it to Eve
➤ Right: app can read Jen’s email, but only
reveal it to Jen, Alice or Bob
➤ E.g., when making HTTP request
➤ MPs that specify projects and users ➤ VC for managing projects and users
➤ Code viewer ➤ Wiki ➤ Follower app ➤ etc.
CodeViewer Wiki
PM GitStar MPs +
Untrusted VCs:
Model-Policy View-Controller + +
Data model: document-oriented ➤ Collection: set of documents ➤ Document: set of field-value pairs
Name Value user jen email jen@ friends [alice, bob, … ] Name Value user jen email jen@ friends [alice, bob, … ] Field Value
user Jen email jen@aol.com friends [Alice, Bob]
users collection:
Data model: document-oriented ➤ Collection: set of documents ➤ Document: set of field-value pairs
Name Value user jen email jen@ friends [alice, bob, … ] Name Value user jen email jen@ friends [alice, bob, … ] Field Value
user Jen email jen@aol.com friends [Alice, Bob]
users collection:
➤ Collections, documents, fields
➤ E.g., only Jen may modify her profile ➤ E.g., only Jen and her friends may read her email
address
➤ E.g., to read document you must be able to read
the collection
AddrBook
Field Value user Jen email jen@aol.com friends [Alice, Bob] Policy: Only Jen, Alice and Bob can read
GitStar User MP +
AddrBook
Bob’s Browser
GitStar User MP +
Eve’s spam server Eve’s server
AddrBook
Bob’s Browser
GitStar User MP +
Eve’s spam server Eve’s server
AddrBook
Bob’s Browser
GitStar User MP +
Eve’s spam server Eve’s server
Allow?
AddrBook
Bob’s Browser
GitStar User MP +
Eve’s spam server Eve’s server
AddrBook
Bob’s Browser
findEmail users “user” “Jen”
GitStar User MP +
Eve’s spam server Eve’s server
Allow?
AddrBook
Bob’s Browser
findEmail users “user” “Jen”
GitStar User MP +
Eve’s spam server Eve’s server
AddrBook
Bob’s Browser
findEmail users “user” “Jen”
GitStar User MP +
Eve’s spam server
Field Value
user Jen email jen@aol.com friends [Alice, Bob]
Policy: Only Jen, Alice and Bob can read
Eve’s server
AddrBook
Bob’s Browser
findEmail users “user” “Jen”
GitStar User MP +
Eve’s spam server
jen@aol.com
Field Value
user Jen email jen@aol.com friends [Alice, Bob]
Policy: Only Jen, Alice and Bob can read
Eve’s server
AddrBook
Bob’s Browser
findEmail users “user” “Jen”
GitStar User MP +
Eve’s spam server
jen@aol.com
Field Value
user Jen email jen@aol.com friends [Alice, Bob]
Policy: Only Jen, Alice and Bob can read Allow?
Eve’s server
jen@aol.com
AddrBook
Bob’s Browser
findEmail users “user” “Jen”
GitStar User MP +
Eve’s spam server
jen@aol.com
Field Value
user Jen email jen@aol.com friends [Alice, Bob]
Policy: Only Jen, Alice and Bob can read
Eve’s server
AddrBook
Bob’s Browser
findEmail users “user” “Jen”
GitStar User MP +
Eve’s spam server
jen@aol.com
Field Value
user Jen email jen@aol.com friends [Alice, Bob]
Policy: Only Jen, Alice and Bob can read
Eve’s server
jen@aol.com
Allow?
AddrBook
Bob’s Browser
findEmail users “user” “Jen”
GitStar User MP +
Eve’s spam server
jen@aol.com
Field Value
user Jen email jen@aol.com friends [Alice, Bob]
Policy: Only Jen, Alice and Bob can read
Eve’s server
jen@aol.com
Allow?
Web app data models already encode policy
➤ Ownership ➤ Relationships between users ➤ …
Field Value user Jen email jen@aol.com friends [Alice, Bob] Policy: Only user can modify Policy: Only user and friends can read
collection “users” $ do access $ do readers ==> anybody writers ==> anybody field “user” key document $ λdoc -> do readers ==> anybody writers ==> (“user” `from` doc) field “email” $ labeled $ λdoc -> do readers ==> (“user” `from` doc) ⋁ fromList (“friends” `from` doc) writers ==> anybody
collection “users” $ do access $ do readers ==> anybody writers ==> anybody field “user” key document $ λdoc -> do readers ==> anybody writers ==> (“user” `from` doc) field “email” $ labeled $ λdoc -> do readers ==> (“user” `from` doc) ⋁ fromList (“friends” `from` doc) writers ==> anybody
Collection is public
collection “users” $ do access $ do readers ==> anybody writers ==> anybody field “user” key document $ λdoc -> do readers ==> anybody writers ==> (“user” `from` doc) field “email” $ labeled $ λdoc -> do readers ==> (“user” `from` doc) ⋁ fromList (“friends” `from` doc) writers ==> anybody
collection “users” $ do access $ do readers ==> anybody writers ==> anybody field “user” key document $ λdoc -> do readers ==> anybody writers ==> (“user” `from` doc) field “email” $ labeled $ λdoc -> do readers ==> (“user” `from` doc) ⋁ fromList (“friends” `from` doc) writers ==> anybody
Index documents by user names
collection “users” $ do access $ do readers ==> anybody writers ==> anybody field “user” key document $ λdoc -> do readers ==> anybody writers ==> (“user” `from` doc) field “email” $ labeled $ λdoc -> do readers ==> (“user” `from` doc) ⋁ fromList (“friends” `from` doc) writers ==> anybody
collection “users” $ do access $ do readers ==> anybody writers ==> anybody field “user” key document $ λdoc -> do readers ==> anybody writers ==> (“user” `from` doc) field “email” $ labeled $ λdoc -> do readers ==> (“user” `from` doc) ⋁ fromList (“friends” `from` doc) writers ==> anybody
Only Jen can modify document fields
collection “users” $ do access $ do readers ==> anybody writers ==> anybody field “user” key document $ λdoc -> do readers ==> anybody writers ==> (“user” `from` doc) field “email” $ labeled $ λdoc -> do readers ==> (“user” `from` doc) ⋁ fromList (“friends” `from` doc) writers ==> anybody
collection “users” $ do access $ do readers ==> anybody writers ==> anybody field “user” key document $ λdoc -> do readers ==> anybody writers ==> (“user” `from` doc) field “email” $ labeled $ λdoc -> do readers ==> (“user” `from` doc) ⋁ fromList (“friends” `from` doc) writers ==> anybody
Only Jen, Alice and Bob can read Jen’s email address
collection “users” $ do access $ do readers ==> anybody writers ==> anybody field “user” key document $ λdoc -> do readers ==> anybody writers ==> (“user” `from` doc) field “email” $ labeled $ λdoc -> do readers ==> (“user” `from` doc) ⋁ fromList (“friends” `from` doc) writers ==> anybody
Model-Policy View-Controller + +
➤ E.g., source code browser, blog editor, …
➤ Runtime enforces security policy
Model-Policy View-Controller + +
➤ Models and policies are reusable
GitStar Project MP +
Code viewer VC Wiki VC
➤ Quick turnaround on API design ➤ Developers can use existing tools and libraries
➤ Provides HTTP server that invokes VC ➤ Enforces information flow at the
language-level
building a platform
E.g., mass assignment vulnerability
0.25 0.5 0.75 1
Pong Table DB Read DB Write Normalized Requests/Seconds
Hails Sinatra Apache PHP
47.6K R/s 479 R/s 1.1K R/s 1.4K R/s
Java Jetty
➤ Host apps on platform ➤ Make policy explicit ➤ Enforce policy with information flow control
http://gitstar.com http://hails.io $ cabal install hails