diff options
author | rsc <rsc> | 2008-09-03 04:50:04 +0000 |
---|---|---|
committer | rsc <rsc> | 2008-09-03 04:50:04 +0000 |
commit | f53494c28e362fb7752bbc83417b9ba47cff0bf5 (patch) | |
tree | 7a7474710c9553b0188796ba24ae3af992320153 /web/l-okws.txt | |
parent | ee3f75f229742a376bedafe34d0ba04995a942be (diff) | |
download | xv6-labs-f53494c28e362fb7752bbc83417b9ba47cff0bf5.tar.gz xv6-labs-f53494c28e362fb7752bbc83417b9ba47cff0bf5.tar.bz2 xv6-labs-f53494c28e362fb7752bbc83417b9ba47cff0bf5.zip |
DO NOT MAIL: xv6 web pages
Diffstat (limited to 'web/l-okws.txt')
-rw-r--r-- | web/l-okws.txt | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/web/l-okws.txt b/web/l-okws.txt new file mode 100644 index 0000000..fa940d0 --- /dev/null +++ b/web/l-okws.txt @@ -0,0 +1,249 @@ + +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? |