static enforcement of security with types christian skalka and scott smith johns hopkins university

49
Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Post on 20-Dec-2015

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Static Enforcement of Security with Types

Christian Skalka and Scott Smith

Johns Hopkins University

Page 2: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Background: PL Security

• Non-local execution of code (e.g. Applets) presents new security problems

• Some PLs provide user-level abstractions for security (Ambit, Spi-calculus, Java)

• Built-in mechanisms allow expression and enforcement of various models/policies

Page 3: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Varieties of Security

• Dataflow ensures security of data

• Certified Code (PCC) is an extremely general framework for extensible code security

• Access Control is a flexible system of code ownership and resource authorization

Page 4: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Varieties of Security

• Dataflow ensures security of data

• Certified Code (PCC) is an extremely general framework for extensible code security

• Access Control is a flexible system of code ownership and resource authorization

Page 5: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Overview

• Background: PL Security

• Java JDK 1.2 and stack inspection

• Using types instead of stack inspection

• Security Types: formal properties

• Possible improvements

• Work in Progress

• Conclusion

Page 6: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Java Security

• Java JDK 1.2 provides a system for access control and code security– possibly non-local program execution requires

protection of resources

• All code has a specified owner, granted certain privileges locally

• Resources are protected by a dynamic check (stack inspection)

Page 7: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

• Stack frames are annotated with names of owners and any enabled privileges

• During inspection, stack frames are searched from most to least recent:– fail if a frame belonging to someone not

authorized for privilege is encountered– succeed if activated privilege is found in frame

Page 8: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Example: privileged printing

privPrint(f) = (* owned by system *){checkPrivilege(PrintPriv);print(f);

}

foreignProg() = (* owned by Joe *)

{

…; privPrint(file); …;

}

Page 9: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

(* local policy *)AccessCreds = { Joe = {???},…}

(* owned by system *)enablePriv(PrintPriv);foreignProg();

Page 10: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

(* local policy *)AccessCreds = { Joe = {PrintPriv},…}

(* owned by system *)enablePriv(PrintPriv);foreignProg();

Page 11: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

systemsystem

Main

(* local policy *)AccessCreds = { Joe = {PrintPriv},…}

(* owned by system *)enablePriv(PrintPriv);foreignProg();

Page 12: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

system

PrintPriv

system

PrintPriv

Main

(* local policy *)AccessCreds = { Joe = {PrintPriv},…}

(* owned by system *)enablePriv(PrintPriv);foreignProg();

Page 13: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

system

PrintPriv

system

PrintPriv

joejoe

Main

foreignProg

(* local policy *)AccessCreds = { Joe = {PrintPriv},…}

(* owned by system *)enablePriv(PrintPriv);foreignProg();

Page 14: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

system

PrintPriv

system

PrintPriv

joejoe

systemsystem

Main

foreignProg

privPrint

(* local policy *)AccessCreds = { Joe = {PrintPriv},…}

(* owned by system *)enablePriv(PrintPriv);foreignProg();

Page 15: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

system

PrintPriv

system

PrintPriv

joejoe

systemsystem

Main

foreignProg

privPrint

(* local policy *)AccessCreds = { Joe = {PrintPriv},…}

(* owned by system *)enablePriv(PrintPriv);foreignProg();

Page 16: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

system

PrintPriv

system

PrintPriv

joejoe

systemsystem

Main

foreignProg

privPrint

success(* local policy *)AccessCreds = { Joe = {PrintPriv},…}

(* owned by system *)enablePriv(PrintPriv);foreignProg();

Page 17: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

(* local policy *)AccessCreds = { Joe = {},…}

(* owned by system *)enablePriv(PrintPriv);foreignProg();

Page 18: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

system

PrintPriv

system

PrintPriv

joejoe

systemsystem

Main

foreignProg

privPrint

(* local policy *)AccessCreds = { Joe = {},…}

(* owned by system *)enablePriv(PrintPriv);foreignProg();

Page 19: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection

system

PrintPriv

system

PrintPriv

joejoe

systemsystem

Main

foreignProg

privPrint

failure

(* local policy *)AccessCreds = { Joe = {},…}

(* owned by system *)enablePriv(PrintPriv);foreignProg();

Page 20: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Why Stack Inspection?

• How is it different from a capability system?

• Why not just use an access control matrix and a global set of allowable privileges?– Privileges not held by current code owner are

removed from allowable set

Page 21: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection: Callbacks

• Stack inspection allows security contexts

to be temporarily raised.

Page 22: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Stack Inspection: Callbacks

(* owned by system *)

getIPaddr(url) =

{

checkPriv(IPPriv);

addr = IPlookup(url);

return addr;

}

• Stack inspection allows security contexts

to be temporarily raised:

Page 23: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Callbacks

(* owned by system *)

appletIP(applet) =

{

enablePriv(IPPriv);

url = applet.source();return getIPaddr(url);

}

(* owned by Joe, not

authorized for IPPriv *)

getMyIP() = appletIP(this);

Page 24: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Callbacks

(* owned by system *)

appletIP(applet) =

{

enablePriv(IPPriv);

url = applet.source();return getIPaddr(url);

}

(* owned by Joe, not

authorized for IPPriv *)

getMyIP() = appletIP(this);

joejoe

getMyIP

Page 25: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Callbacks

(* owned by system *)

appletIP(applet) =

{

enablePriv(IPPriv);

url = applet.source();return getIPaddr(url);

}

(* owned by Joe, not

authorized for IPPriv *)

getMyIP() = appletIP(this);

joejoe

systemsystem

getMyIP

appletIP

Page 26: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Callbacks

(* owned by system *)

appletIP(applet) =

{

enablePriv(IPPriv);

url = applet.source();return getIPaddr(url);

}

(* owned by Joe, not

authorized for IPPriv *)

getMyIP() = appletIP(this);

joejoe

system

IPPriv

system

IPPriv

getMyIP

appletIP

Page 27: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Callbacks

(* owned by system *)

appletIP(applet) =

{

enablePriv(IPPriv);

url = applet.source();return getIPaddr(url);

}

(* owned by Joe, not

authorized for IPPriv *)

getMyIP() = appletIP(this);

joejoe

system

IPPriv

system

IPPriv

joejoe

getMyIP

appletIP

this.source

Page 28: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Callbacks

(* owned by system *)

appletIP(applet) =

{

enablePriv(IPPriv);

url = applet.source();return getIPaddr(url);

}

(* owned by Joe, not

authorized for IPPriv *)

getMyIP() = appletIP(this);

joejoe

system

IPPriv

system

IPPriv

getMyIP

appletIP

Page 29: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Callbacks

(* owned by system *)

appletIP(applet) =

{

enablePriv(IPPriv);

url = applet.source();return getIPaddr(url);

}

(* owned by Joe, not

authorized for IPPriv *)

getMyIP() = appletIP(this);

joejoe

system

IPPriv

system

IPPriv

systemsystem

getMyIP

appletIP

getIPaddr

Page 30: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Callbacks

(* owned by system *)

appletIP(applet) =

{

enablePriv(IPPriv);

url = applet.source();return getIPaddr(url);

}

(* owned by Joe, not

authorized for IPPriv *)

getMyIP() = appletIP(this);

joejoe

system

IPPriv

system

IPPriv

systemsystem

getMyIP

appletIP

getIPaddr

success

Page 31: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

A Static Approach

Our thesis: types can statically enforce the Java security model.

• Unsafe programs rejected at compile time

• Need for runtime checks eliminated

• Types are a declaritive form of security policy expression and enforcement

Page 32: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Security Type Examples

(* privPrint needs PrintPriv *)

privPrint : file -{PrintPriv}-> unit

(* PrintPriv in AccessCreds(Joe) *)

foreignProg : unit -{PrintPriv}-> t

(* PrintPriv not in AccessCreds(Joe) *)

foreignProg : *ERROR*, cannot be typed

Page 33: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Security Type Examples

(* enables SomePriv for parameter f *)

privWrap(f) =

{enablePriv(SomePriv);

f();

}

privWrap : (unit -{SomePriv}-> unit) -{}-> unit

Page 34: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Subtyping Security Types

• With monotypes, subtypes allow typing of more safe programs:– privWrap can safely use the identity function id, so privWrap(id)

should be typable

id : unit -{}-> unit

privWrap : (unit -{SomePriv}-> unit) -{}-> unit

Page 35: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Subtyping Security Types

• Security requirements may safely be overestimated

C(fnlt)

u

’’’

C ’’’

unit -{}-> unit <: unit -{SomePriv}-> unitprivWrap(id) : unit

Page 36: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Security Type Judgements

Page 37: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

p checkPriv for e : p e :

(checkpriv)

u

Security Type Judgements

Page 38: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

p ee’ : p e : ’ p e’ : ’’

u

’ (appl)

p checkPriv for e : p e :

(checkpriv)

u

Security Type Judgements

Page 39: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

p ee’ : p e : ’ p e’ : ’’

u

’ (appl)

p checkPriv for e : p e :

(checkpriv)

u

p enablePriv for e : up e :

(enablepriv)

u

A(p)

Security Type Judgements

Page 40: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Formal Properties of the System

S, A e v

S (p, ) :: S’

S, A e secfail

• Stack Inspection is modeled in a language

with well-defined operational semantics:

(secstacks)

• Unsafe expressions reduce to secfail:

Page 41: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Formal Properties of the System

• We prove subject reduction and type safety results for the system– Well-typed programs are not unsafe.

• We prove soundness and completeness results for a type inference algorithm– type system can be transparently layered over

existing system

Page 42: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Type Inference

• Algorithm is standard constraint inference, plus a new constraint satisfiability check:– Privilege sets may contain variables– Privilege set variable constraints may be

recursive

• Satisfiability check is novel, efficient; correctness is proved

Page 43: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Incompleteness of the System

• Java privileges are first-class

• Java programs can conditionally branch on presence/absence of privileges

• Paramaterized privileges, e.g.: fileRead(filename)

• Dynamic access control lists

Page 44: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Work in Progress

• Extend type system to accurately type privilege tests

• Polymorphism

• More sophisticated language features (Java features, modules)

• Readability of types

Page 45: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Conclusion

• Java security model is sound, but dynamic checks impose penalties

• Types can be used to enforce the model, and eliminate these penalties

• Security Types may be inferred efficiently

http://www.cs.jhu.edu/~ces/work.html

Page 46: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Conclusion

• Java security model is sound, but dynamic checks impose penalties

• Types can be used to enforce the model, and eliminate these penalties

• Security Types may be inferred efficiently

http://www.cs.jhu.edu/~ces/work.html

Page 47: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Conclusion

• Java security model is sound, but dynamic checks impose penalties

• Types can be used to enforce the model, and eliminate these penalties

• Security Types may be inferred efficiently

http://www.cs.jhu.edu/~ces/work.html

Page 48: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Conclusion

• Java security model is sound, but dynamic checks impose penalties

• Types can be used to enforce the model, and eliminate these penalties

• Security Types may be inferred efficiently

http://www.cs.jhu.edu/~ces/work.html

Page 49: Static Enforcement of Security with Types Christian Skalka and Scott Smith Johns Hopkins University

Conclusion

• Java security model is sound, but dynamic checks impose penalties

• Types can be used to enforce the model, and eliminate these penalties

• Security Types may be inferred efficiently

http://www.cs.jhu.edu/~ces/work.html