Security in Java Real or Decaf? cs205: engineering software university of virginia

advertisement
cs205: engineering software
university of virginia
fall 2006
Security in Java
Real or Decaf?
(Duke suicide picture by Gary McGraw.)
cs205: engineering software
1
Project
• Last problem set – final report is due
last day of class
• Teams of 2-5: send me team
requests before 11am Friday
cs205: engineering software
2
Project Ideas
• Due next Wednesday
• For now, no suggestions – you can
do anything you want, as long as it:
– Is small enough to finish by Dec 4
– Is complex enough that a successful
project will demonstrate understanding
of and ability to apply key concepts in
CS205
• If you are really stuck...
cs205: engineering software
3
from Class 2...
Buzzword Description
“A simple, object-oriented,
distributed, interpreted,
robust, secure, architecture
neutral, portable, highperformance, multithreaded,
and dynamic language.”
[Sun95]
cs205: engineering software
4
What is a secure
programming language?
1. Language is designed so it cannot
express certain computations
considered insecure.
A few attempt to do this: PLAN, packet filters
2. Language is designed so that
(accidental) program bugs are
likely to be caught by the compiler
or run-time environment instead of
leading to security vulnerabilities.
cs205: engineering software
5
Safe Programming Languages
• Type Safety
– Compiler and run-time environment ensure
that bits are treated as the type they
represent
• Memory Safety
– Compiler and run-time environment ensure
that program cannot access memory outside
defined storage
• Control Flow Safety
– Can’t jump to arbitrary addresses
Is Java the first language to have them?
No way! LISP had them all in 1960.
cs205: engineering software
6
Java Safety
• Type Safety
– Most types checked statically
– Coercions, array assignments type
checked at run time
• Memory Safety
– No direct memory access (e.g., pointers)
– Primitive array type with mandatory runtime bounds checking
• Control Flow Safety
– Structured control flow, no arbitrary jumps
cs205: engineering software
7
Malicious Code
Can a safe programming language
protect you from malcode?
1. Code your servers in it to protect from
buffer overflow bugs
2. Only allow programs from
untrustworthy origins to run if the are
programmed in the safe language
cs205: engineering software
8
Safe Languages?
• But how can you tell program was
written in the safe language?
– Get the source code and compile it
(most vendors, and all malicious
attackers refuse to provide source code)
– Special compilation service
cryptographically signs object files
generated from the safe language
(SPIN, [Bershad96])
– Verify object files preserve safety
properties of source language (Java)
cs205: engineering software
9
JVML
malcode.java

Java
Source
Code
javac
Compiler
malcode.class
JVML
Object
Code
JavaVM
Alice User Alice wants to know JVML code satisfies
Java’s safety properties.
cs205: engineering software
10
Does JVML satisfy Java’s
safety properties?
No, we’ll learn some about JVML later...
cs205: engineering software
11
Bytecode Verifier
malcode.class
JVML
Object
Code
Trusted Computing Base
Java Bytecode Verifier
Invalid
“Okay”
STOP
JavaVM
Joe User
cs205: engineering software
12
Bytecode Verifier
• Checks class file is formatted
correctly
• Checks JVML code satisfies safety
properties
– Simulates program execution to know
types are correct, but doesn’t need to
examine any instruction more than
once
cs205: engineering software
13
Verifying Safety Properties
• Type safe
– Stack and variable slots must store and load as
same type
• Memory safe
– Must not attempt to pop more values from
stack than are on it
– Doesn’t access private fields and methods
outside class implementation
• Control flow safe
– Jumps must be to valid addresses within
function, or call/return
cs205: engineering software
14
Running Mistyped Code
> java Simple
Exception in thread "main" java.lang.VerifyError:
(class: Simple, method: main signature:
([Ljava/lang/String;)V)
Register 0 contains wrong type
cs205: engineering software
15
Java
malcode.java
javac
Compiler
malcode.class
JVML
Trusted Computing Base
Java Bytecode Verifier
Invalid
“Okay”
STOP
JavaVM
Joe User
cs205: engineering software
16
Charge
• Next classes: understanding byte
codes and the byte code verifier
• Start thinking about project ideas
and teams
• Send team requests by email
before 11am Friday
cs205: engineering software
17
Download