在coursera选修了一门软件安全的课程。下面是教授列出来的阅读:
Week 1
Readings
Required reading
The only required reading this week is the following:
- Common vulnerabilities guide for C programmers. Take note of the unsafe C library functions listed here, and how they are the source of buffer overflow vulnerabilities. This list will be relevant for the project and this week's quiz.
- (Reference) Memory layout. Explains a C program's memory layout, replicating the discussion in the second lecture.
Supplemental readings
The following readings are optional: They are meant to supplement the material you are getting in the videos. Check them out if you are interested in learning more, or if you just want to see it all explained in a different way.
- (Reference/refresher) PC Assembly Language, by Paul Carter. This free book introduces x86 assembly, and should complement ideas seen in the lectures.
- Smashing the Stack for Fun and Profit - original article on the topic by Aleph One, in 1996
- Exploiting Format String Vulnerabilities - report describing these format string attacks when they were first recognized
- Basic Integer Overflows - discussion of how overflowing integers can be a vector of attack
WEEK2
Required Readings
The following two blog posts cover the topics of memory safety and type safety in somewhat greater depth
- What is memory safety?
- What is type safety?
-
Supplemental readings and links
The following readings are optional: Check them out if you are interested in learning more about material we've covered in lecture (many were explicitly linked in the lecture slides).
Attacks and modern defenses, generally
- On the effectiveness of Address Space Randomization, by Shacham, Page, Pfaff, Goh, Modadugu, and Boneh - showed how ASLR implementations on 32-bit systems can be defeated relatively easily
- Smashing the Stack in 2011 - Paul Makowski revisits the 1996 Aleph One article (on the supplemental reading list from last week), considering modern defenses
- Low-level software security by example, by Erlingsson, Younan, Piessens, describes several low-level attacks and modern defenses.
Return-oriented Programming (ROP)
- Geometry of Innocent Flesh on the Bone: Return to libc without Function Calls (on the x86), by Hovav Shacham - introduced the idea, and the term, return oriented programming
- Q: Exploit Hardening Made Easy, by Schwartz, Avgerinos, and Brumley - explains how to automatically generate ROP exploits
- Blind ROP - return-oriented programming without source code, automatically
Control-flow integrity (CFI)
- Control Flow Integrity, by Abadi, Budiu, Erlingsson, and Ligatti - paper that introduced CFI
- Enforcing Forward-Edge Control Flow Integrity, by Tice, Roeder, Collingbourne, Checkoway, Erlingsson, Lozano, and Pike, describing a partial CFI implementation now available in LLVM and gcc
- MoCFI, by Niu and Tan - modular CFI that has low overhead
- See also the paper Low-level software security by example, above
Secure coding
These are a few references linked in the lecture slides. We will cover secure coding and design in more depth during week 4.
- CERT C coding standard
- Secure Programming HOWTO by David Wheeler
- Robust Programming by Matt Bishop
- DieHard project - drop-in replacement for
malloc
that uses randomization to defend against heap-based exploits