Reading List
Below is a basic reading list in operating systems, networks, and security. There is a mix of conceptual books (Nutt; Kurose; Anderson; and Kaufmann) and programming books (Stevens; Stevens; Beck). The books are listed in no particular order: I suggest Ross Anderson's book as a first book in security; students should read these books in the order dicatated by their interests and backgrounds.- W. Richard Stevens, Advanced Programming in the UNIX Environment, Addison-Wesley, 1992. Programming and advanced use of OS resources.
- James Kurose and Keith Ross, Introduction to Networking: A Top-Down Approach Featuring the Internet, Addison-Wesley. Excellent conceptual intro to networks.
- W. Richard Stevens, UNIX Network Programming, Volume 1, Second Edition: Networking APIs: Sockets and XTI, Prentice Hall, 1998. Network programming.
- M. Beck, H. Bohme, M. Dziadzka, U. Kunitz, R. Magnus, C. Schroter, D. Verworner, "Linux Kernel Programming", 3rd Ed., Addison-Wesley. Intro to Linux kernel programming.
- Ross Anderson, Security Engineering, Wiley, 2002. Very broad book on computer security and security in general.
- Charlie Kaufman, Radia Perlman and Mike Speciner, Network Security: Private Communication in a Public World, 2nd ed., Prentice-Hall, 2002.
- Annotated bibliography of papers on computer security (available only at UIC and contains actual papers)
Students wishing to join the lab
The lab is highly experimental. Students typically spend a significant amount of time designing and then implementing a project. The projects can be either system code or simulators intended to study computer systems security and networks. This system code can either be part of the Linux Kernel, or as a process which runs on top of Linux. We also do some theoretical work related to these projects, usually in conjunction with other faculty.At the kernel level we are 1) building a new access control model and also 2) investigating high performance techniques or unique semantics. Before beginning a kernel programming project, a student should have a solid conceptual understanding of operating systems, substantial programming using standard libraries and system calls, study of the structure of Linux, and knowledge of C, make, gdb, cvs, ...
At the process level we build 1) tools for the operating system and 2) modify or build applications using novel operating features. Projects include modification of applications to work with our protection model, analysis of protection properties of a system, security configuration management tools, Students need to know Linux, C++, gdb, make, svn, ...