Outline for April 5, 2005
-
Principles of Secure Design
-
Refer to both designing secure systems and securing existing systems
-
Speaks to limiting damage
-
Principle of Least Privilege
-
Give process only those privileges it needs
-
Examples in programming (making things setuid to root unnecessarily, limiting protection domain; modularity, robust programming)
-
Example attacks (misuse of privileges, etc.)
-
Principle of Fail-Safe Defaults
-
Default is to deny
-
Example of violation: su program
-
Principle of Economy of Mechanism
-
KISS principle
-
Enables quick, easy verification
-
Example of complexity: sendmail
-
Principle of Complete Mediation
-
All accesses must be checked
-
Forces system-wide view of controls
-
Sources of requests must be identified correatly
-
Source of problems: caching (because it may not reflect the state of the system correctly); examples are race conditions, DNS poisoning
-
Principle of Open Design
-
Designs are open so everyone can examine them and know the limits of the security provided
-
Does not apply to cryptographic keys
-
Acceptance of reality: they can get this info anyway
-
Principle of Separation of Privilege
-
Require multiple conditions to be satisfied before granting permission/access/etc.
-
Advantage: 2 accidents/errors/etc. must happen together to trigger failure
-
Principle of Least Common Mechanism
-
Minimize sharing
-
New service: in kernel or as a library routine? Latter is better, as each user gets their own copy
-
Principle of Psychological Acceptability
-
Willingness to use the mechanisms
-
Understanding model
-
Matching user's goal
-
ACM and primitive operations
-
Go over subjects, objects (includes subjects), and state (S, O, A) where A is ACM
-
Transitions modify ACM entries; primitive operations
-
enter r into A[s, o]
-
delete r from A[s, o]
-
create subject s' (note A[s', x] = A[x, s'] = ∅ for all x)
-
create object o' (note A[x, o'] = ∅ for all x)
-
destroy subject s'
-
destroy object o'
-
Commands
-
command c(s1, ..., sk, o1, ..., ok)
if r1 in A[s1, o1] and
r2 in A[s2, o2] and
...
rm in A[sm, om]
then
op1;
op2;
...;
opn;
end. -
Example 1: creating a file
command create_file(p, f)
create object f;
enter Own into A[p, f]
enter Read into A[p, f]
enter Write into A[p, f]
end.
-
Example 2: granting one process read rights to a file
command grant_read(p, q, f)
if Own in A[p, f]
then
enter Read into A[q, f]
end.
Here is a PDF version of this document.