Outline for March 13, 2002
Reading:
§15.2, 15.4, §18
-
Greetings and Felicitations
-
Puzzle of the day
-
Capabilities
-
Capability-based addressing: show picture of accessing object
-
Show process limiting access by not inheriting all parent's capabilities
-
Revocation: use of a global descriptor table
-
Lock and Key
-
Associate with each object a lock; associate with each process that has access to object a key (it's a cross between ACLs and C-Lists)
-
Example: use crypto (Gifford). X
object enciphered with key K. Associate an opener R
with X. Then:
OR-Access: K
can be recovered with any Di
in a list of n
deciphering transformations, so
R = (E1(K),
E2(K), ...,
En(K))
and any process with access to any of the Di's can access the file
AND-Access: need all n deciphering functions to get K:
R = E1(E2(...En(K)...))
-
Types and locks
-
Privilege in Languages
-
Nesting program units
-
Temporary upgrading of privileges; amplification
-
Malicious logic
-
Quickly review Trojan horses, viruses, bacteria; include animal and Thompson's compiler trick
-
Logic Bombs, Worms (Schoch and Hupp)
-
Ideal: program to detect malicious logic
-
Can be shown: not possible to be precise in most general case
-
Can detect all such programs if willing to accept false positives
-
Can constrain case enough to locate specific malicious logic
-
Can use: writing, structural detection (patterns in code), common code analyzers, coding style analyzers, instruction analysis (duplicating OS), dynamic analysis (run it in controlled environment and watch)
-
Best approach: data, instruction typing
-
On creation, it's type "data"
-
Trusted certifier must move it to type "executable"
-
Duff's idea: executable bit is "certified as executable" and must be set by trusted user
-
Practise: Trust
-
Untrusted software: what is it, example (USENET)
-
Check source, programs (what to look for); C examples
-
Limit who has access to what; least privilege
-
Your environment (how do you know what you're executing); UNIX examples
-
Practise: detecting writing
-
Integrity check files a la binaudit, tripwire; go through signature block
-
LOCUS approach: encipher program, decipher as you execute.
-
Co-processors: checksum each sequence of instructions, compute checksum as you go; on difference, complain