250 lines
7.8 KiB
Text
250 lines
7.8 KiB
Text
|
|
||
|
Security
|
||
|
-------------------
|
||
|
I. 2 Intro Examples
|
||
|
II. Security Overview
|
||
|
III. Server Security: Offense + Defense
|
||
|
IV. Unix Security + POLP
|
||
|
V. Example: OKWS
|
||
|
VI. How to Build a Website
|
||
|
|
||
|
I. Intro Examples
|
||
|
--------------------
|
||
|
1. Apache + OpenSSL 0.9.6a (CAN 2002-0656)
|
||
|
- SSL = More security!
|
||
|
|
||
|
unsigned int j;
|
||
|
p=(unsigned char *)s->init_buf->data;
|
||
|
j= *(p++);
|
||
|
s->session->session_id_length=j;
|
||
|
memcpy(s->session->session_id,p,j);
|
||
|
|
||
|
- the result: an Apache worm
|
||
|
|
||
|
2. SparkNotes.com 2000:
|
||
|
- New profile feature that displays "public" information about users
|
||
|
but bug that made e-mail addresses "public" by default.
|
||
|
- New program for getting that data:
|
||
|
|
||
|
http://www.sparknotes.com/getprofile.cgi?id=1343
|
||
|
|
||
|
II. Security Overview
|
||
|
----------------------
|
||
|
|
||
|
What Is Security?
|
||
|
- Protecting your system from attack.
|
||
|
|
||
|
What's an attack?
|
||
|
- Stealing data
|
||
|
- Corrupting data
|
||
|
- Controlling resources
|
||
|
- DOS
|
||
|
|
||
|
Why attack?
|
||
|
- Money
|
||
|
- Blackmail / extortion
|
||
|
- Vendetta
|
||
|
- intellectual curiosity
|
||
|
- fame
|
||
|
|
||
|
Security is a Big topic
|
||
|
|
||
|
- Server security -- today's focus. There's some machine sitting on the
|
||
|
Internet somewhere, with a certain interface exposed, and attackers
|
||
|
want to circumvent it.
|
||
|
- Why should you trust your software?
|
||
|
|
||
|
- Client security
|
||
|
- Clients are usually servers, so they have many of the same issues.
|
||
|
- Slight simplification: people across the network cannot typically
|
||
|
initiate connections.
|
||
|
- Has a "fallible operator":
|
||
|
- Spyware
|
||
|
- Drive-by-Downloads
|
||
|
|
||
|
- Client security turns out to be much harder -- GUI considerations,
|
||
|
look inside the browser and the applications.
|
||
|
- Systems community can more easily handle server security.
|
||
|
- We think mainly of servers.
|
||
|
|
||
|
III. Server Security: Offense and Defense
|
||
|
-----------------------------------------
|
||
|
- Show picture of a Web site.
|
||
|
|
||
|
Attacks | Defense
|
||
|
----------------------------------------------------------------------------
|
||
|
1. Break into DB from net | 1. FW it off
|
||
|
2. Break into WS on telnet | 2. FW it off
|
||
|
3. Buffer overrun in Apache | 3. Patch apache / use better lang?
|
||
|
4. Buffer overrun in our code | 4. Use better lang / isolate it
|
||
|
5. SQL injection | 5. Better escaping / don't interpret code.
|
||
|
6. Data scraping. | 6. Use a sparse UID space.
|
||
|
7. PW sniffing | 7. ???
|
||
|
8. Fetch /etc/passwd and crack | 8. Don't expose /etc/passwd
|
||
|
PW |
|
||
|
9. Root escalation from apache | 9. No setuid programs available to Apache
|
||
|
10. XSS |10. Filter JS and input HTML code.
|
||
|
11. Keystroke recorded on sys- |11. Client security
|
||
|
admin's desktop (planetlab) |
|
||
|
12. DDOS |12. ???
|
||
|
|
||
|
Summary:
|
||
|
- That we want private data to be available to right people makes
|
||
|
this problem hard in the first place. Internet servers are there
|
||
|
for a reason.
|
||
|
- Security != "just encrypt your data;" this in fact can sometimes
|
||
|
make the problem worse.
|
||
|
- Best to prevent break-ins from happening in the first place.
|
||
|
- If they do happen, want to limit their damage (POLP).
|
||
|
- Security policies are difficult to express / package up neatly.
|
||
|
|
||
|
IV. Design According to POLP (in Unix)
|
||
|
---------------------------------------
|
||
|
- Assume any piece of a system can be compromised, by either bad
|
||
|
programming or malicious attack.
|
||
|
- Try to limit the damage done by such a compromise (along the lines
|
||
|
of the 4 attack goals).
|
||
|
|
||
|
<Draw a picture of a server process on Unix, w/ other processes>
|
||
|
|
||
|
What's the goal on Unix?
|
||
|
- Keep processes from communicating that don't have to:
|
||
|
- limit FS, IPC, signals, ptrace
|
||
|
- Strip away unneeded privilege
|
||
|
- with respect to network, FS.
|
||
|
- Strip away FS access.
|
||
|
|
||
|
How on Unix?
|
||
|
- setuid/setgid
|
||
|
- system call interposition
|
||
|
- chroot (away from setuid executables, /etc/passwd, /etc/ssh/..)
|
||
|
|
||
|
<show Code snippet>
|
||
|
|
||
|
How do you write chroot'ed programs?
|
||
|
- What about shared libraries?
|
||
|
- /etc/resolv.conf?
|
||
|
- Can chroot'ed programs access the FS at all? What if they need
|
||
|
to write to the FS or read from the FS?
|
||
|
- Fd's are *capabilities*; can pass them to chroot'ed services,
|
||
|
thereby opening new files on its behalf.
|
||
|
- Unforgeable - can only get them from the kernel via open/socket, etc.
|
||
|
|
||
|
Unix Shortcomings (round 1)
|
||
|
- It's bad to run as root!
|
||
|
- Yet, need root for:
|
||
|
- chroot
|
||
|
- setuid/setgid to a lower-privileged user
|
||
|
- create a new user ID
|
||
|
- Still no guarantee that we've cut off all channels
|
||
|
- 200 syscalls!
|
||
|
- Default is to give most/all privileges.
|
||
|
- Can "break out" of chroot jails?
|
||
|
- Can still exploit race conditions in the kernel to escalate privileges.
|
||
|
|
||
|
Sidebar
|
||
|
- setuid / setuid misunderstanding
|
||
|
- root / root misunderstanding
|
||
|
- effective vs. real vs. saved set-user-ID
|
||
|
|
||
|
V. OKWS
|
||
|
-------
|
||
|
- Taking these principles as far as possible.
|
||
|
- C.f. Figure 1 From the paper..
|
||
|
- Discussion of which privileges are in which processes
|
||
|
|
||
|
<Table of how to hack, what you get, etc...>
|
||
|
|
||
|
- Technical details: how to launch a new service
|
||
|
- Within the launcher (running as root):
|
||
|
|
||
|
<on board:>
|
||
|
|
||
|
// receive FDs from logger, pubd, demux
|
||
|
fork ();
|
||
|
chroot ("/var/okws/run");
|
||
|
chdir ("/coredumps/51001");
|
||
|
setgid (51001);
|
||
|
setuid (51001);
|
||
|
exec ("login", fds ... );
|
||
|
|
||
|
- Note no chroot -- why not?
|
||
|
- Once launched, how does a service get new connections?
|
||
|
- Note the goal - minimum tampering with each other in the
|
||
|
case of a compromise.
|
||
|
|
||
|
Shortcoming of Unix (2)
|
||
|
- A lot of plumbing involved with this system. FDs flying everywhere.
|
||
|
- Isolation still not fine enough. If a service gets taken over,
|
||
|
can compromise all users of that service.
|
||
|
|
||
|
VI. Reflections on Building Websites
|
||
|
---------------------------------
|
||
|
- OKWS interesting "experiment"
|
||
|
- Need for speed; also, good gzip support.
|
||
|
- If you need compiled code, it's a good way to go.
|
||
|
- RPC-like system a must for backend communication
|
||
|
- Connection-pooling for free
|
||
|
|
||
|
Biggest difficulties:
|
||
|
- Finding good C++ programmers.
|
||
|
- Compile times.
|
||
|
- The DB is still always the problem.
|
||
|
|
||
|
Hard to Find good Alternatives
|
||
|
- Python / Perl - you might spend a lot of time writing C code /
|
||
|
integrating with lower level languages.
|
||
|
- Have to worry about DB pooling.
|
||
|
- Java -- must viable, and is getting better. Scary you can't peer
|
||
|
inside.
|
||
|
- .Net / C#-based system might be the way to go.
|
||
|
|
||
|
|
||
|
=======================================================================
|
||
|
|
||
|
Extra Material:
|
||
|
|
||
|
Capabilities (From the Eros Paper in SOSP 1999)
|
||
|
|
||
|
- "Unforgeable pair made up of an object ID and a set of authorized
|
||
|
operations (an interface) on that object."
|
||
|
- c.f. Dennis and van Horn. "Programming semantics for multiprogrammed
|
||
|
computations," Communications of the ACM 9(3):143-154, Mar 1966.
|
||
|
- Thus:
|
||
|
<object ID, set of authorized OPs on that object>
|
||
|
- Examples:
|
||
|
"Process X can write to file at inode Y"
|
||
|
"Process P can read from file at inode Z"
|
||
|
- Familiar example: Unix file descriptors
|
||
|
|
||
|
- Why are they secure?
|
||
|
- Capabilities are "unforgeable"
|
||
|
- Processes can get them only through authorized interfaces
|
||
|
- Capabilities are only given to processes authorized to hold them
|
||
|
|
||
|
- How do you get them?
|
||
|
- From the kernel (e.g., open)
|
||
|
- From other applications (e.g., FD passing)
|
||
|
|
||
|
- How do you use them?
|
||
|
- read (fd), write(fd).
|
||
|
|
||
|
- How do you revoke them once granted?
|
||
|
- In Unix, you do not.
|
||
|
- In some systems, a central authority ("reference monitor") can revoke.
|
||
|
|
||
|
- How do you store them persistently?
|
||
|
- Can have circular dependencies (unlike an FS).
|
||
|
- What happens when the system starts up?
|
||
|
- Revert to checkpointed state.
|
||
|
- Often capability systems chose a single-level store.
|
||
|
|
||
|
- Capability systems, a historical prospective:
|
||
|
- KeyKOS, Eros, Cyotos (UP research)
|
||
|
- Never saw any applications
|
||
|
- IBM Systems (System 38, later AS/400, later 'i Series')
|
||
|
- Commercially viable
|
||
|
- Problems:
|
||
|
- All bets are off when a capability is sent to the wrong place.
|
||
|
- Firewall analogy?
|