CRASH/SAFE ¡
Benjamin ¡C. ¡Pierce ¡ March ¡11, ¡2011 ¡
CRASH/SAFE Benjamin C. Pierce March 11, 2011 Present-day - - PowerPoint PPT Presentation
CRASH/SAFE Benjamin C. Pierce March 11, 2011 Present-day compuCng plaForms are distressingly insecure! One culprit: legacy requirements complex instrucCon
Benjamin ¡C. ¡Pierce ¡ March ¡11, ¡2011 ¡
One ¡culprit: ¡legacy ¡requirements ¡
complex ¡instrucCon ¡sets ¡ complex, ¡monolithic ¡operaCng ¡systems ¡ insecure, ¡low-‑level ¡programming ¡languages ¡
Patch? ¡
Clean-‑Slate ¡Design ¡ ¡
Consul-ng ¡ University ¡of ¡Pennsylvania ¡ BAE ¡Systems ¡
5 ¡
Northeastern ¡ Harvard ¡
Bryan ¡Loyall ¡ Greg ¡Sullivan ¡ Howard ¡Reubenstein ¡ Basil ¡Krikeles ¡ Greg ¡Frazier ¡ Jothy ¡Rosenberg ¡ André ¡DeHon ¡ Tom ¡Knight ¡ Benjamin ¡Pierce ¡ Olin ¡Shivers ¡ Jonathan ¡Smith ¡ Greg ¡Morrise[ ¡ Also: ¡Tim ¡Anderson, ¡Chris ¡White, ¡… ¡ Also: ¡Ben ¡Karel, ¡Benoit ¡ Montagu ¡ Also: ¡Gregory ¡Malecha ¡
Core ¡Principles ¡
intents & security interlocks, without compromising performance
cycle basis. Checking performed in parallel to mainline for high performance.
suspicious components with separated privileges.
Haskell-‑like) ¡ ¡
HARDWARE ¡
datapath ¡
– No ¡impact ¡on ¡cycle ¡Cme ¡
speculaCon/in-‑order ¡ excepCon ¡and ¡reCrement ¡ hardware ¡
Tag ¡Management ¡Unit ¡
– Similar ¡in ¡size/complexity ¡to ¡ TLB ¡
11/2/2010 ¡ 10 ¡ CRASH ¡SAFE ¡
– informaCon-‑flow ¡tracking ¡a ¡la ¡JIF/JFlow ¡
read ¡(eliminate) ¡it ¡
– communicaCon ¡channels ¡(elided ¡for ¡today) ¡and ¡ threads ¡(soon) ¡
current ¡authority ¡ current ¡PC ¡label ¡ current ¡environment ¡ (binding ¡variables ¡to ¡ their ¡values) ¡ current ¡store ¡ expression ¡being ¡evaluated ¡ new ¡store ¡ result ¡ (atom ¡= ¡value+label) ¡
[E: ¡{Benjamin: ¡Simon, ¡Steve}, ¡I: ¡…] ¡ ¡
confiden+ality ¡part ¡ integrity ¡part ¡
readers ¡
[E: ¡{Benjamin: ¡Simon, ¡Steve; ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Stephanie: ¡Simon, ¡John, ¡Mary}, ¡I: ¡…] ¡ ¡
readers ¡
readers ¡
Decentralized ¡Label ¡Model ¡(Liskov/Myers) ¡ MulCple ¡owners, ¡each ¡asserCng ¡a ¡constraint ¡on ¡who ¡may ¡read ¡
val bool = auth BOOL in let label private = [ E: BOOL:BOOL | * & I: * : {} ] in let label public = [ E: * : * & I: * : {} ] in { true = (\t f. t) \/ private ; false = (\t f. f) \/ private ; ifthen = (\b t f. let label L = [ E: BOOL : * | {} & I: * : * ] in (b t f) /\ L) \/ public } \/ public