Instructor: Stephen Checkoway, s@cs.jhu.edu
Lectures: Tuesday and Thursday. 13:30–14:45 in Shaffer Hall, room 2
Office Hours: Wednesday. 13:30–15:00 in Malone Hall, room 305
This course will cover software vulnerabilities, exploitation techniques, and mitigation measures. It is designed as a projects-based course where you will get hands-on experience finding vulnerabilities and writing exploits.
Oct. 30. There is no class Nov. 4 and Nov. 6. Work on project 3.
Sep. 22. There is an extension to Project 0.
Sep. 7. There is no class on Sep. 9 and Sep. 11. Work on project 1.
Aug. 25. There is reading for the first day of class! See the Syllabus and Readings.
Students are expected to enter this course with a basic knowledge of operating systems, data structures, and programming in C and (very basic) C++. Some knowledge of assembly and compilers will be helpful, but the relevant information will be covered in the course or in provided references.
Your course grade will be determined entirely projects. See below. There are no exams.
Projects are due by 23:59 on the day specified on each project page. You have 3 late days that you can use throughout the semester. Each day that a project is late decreases the number of late days you and your partner have left. If you run out of late days, projects turned in late will receive a score of 0. There will be no exceptions to this policy without prior approval from Prof. Checkoway.
The programming projects are meant as a way to get hands-on experience exploiting software vulnerabilities. You will find that there is quite a difference between conceptually understanding how to exploit a given vulnerability and actually producing a working exploit.
The programming projects are designed to be done in groups of 2. (Working alone is allowed, but discouraged.) Each project will have both programming and writing components. Both group members are expected to participate fully in both the programming and writing.
You are encouraged to work with different people on each project, but group forming is completely up to you. If you're having trouble finding a group, I suggest you use the Piazza forum to find one.
Project 0: Fun with Assembly (15% of course grade)
Project 1: Memory Safety (25% of course grade)
Project 2: Reverse Engineering (20% of course grade)
Project 3: JIT Spraying (20% of course grade)
Project 4: Web Security (20% of course grade)
Here are some resources you may find helpful while working on the projects.
Intel 64 and IA-32 Architecture Software Developer Manuals. These manuals tell you everything you'll want to know about how modern Intel x86 processors work. In particular, you're probably going to want Volumes 2A, 2B, and 2C: Instruction Set Reference.
X86 Opcode and Instruction Reference. This page gives a handy way to look up each x86 instruction by opcode.
ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition. ARM manual for the processor we'll be looking at. It requires registering to download (or a quick Google search).
IA32_Help.zip OS X application for x86 instruction set reference.
EM64T_Help.zip OS X application for x86-64 instruction set reference.
ARM_Help.zip OS X application for ARM/Thumb instruction set reference.
The strength of the university depends on academic and personal integrity. In your studies, you must be honest and truthful. Ethical violations include cheating on exams, plagiarism, reuse of assignments, improper use of the Internet and electronic devices, unauthorized collaboration, alteration of graded assignments, forgery and falsification, lying, facilitating academic dishonesty, and unfair competition.
Academic honesty is required in all work you submit to be graded. Except where the instructor specifies group work, you must solve all homework and programming assignments without the help of others. For example, you must not look at any other solutions (including program code) to your homework problems or similar problems. However, you may discuss assignment specifications with others to be sure you understand what is required by the assignment.
If your instructor permits using fragments of source code from outside sources, such as your textbook or on-line resources, you must properly cite the source. Not citing it constitutes plagiarism. Similarly, your group projects must list everyone who participated.
Falsifying program output or results is prohibited.
Your instructor is free to override parts of this policy for particular assignments. To protect yourself: (1) Ask the instructor if you are not sure what is permissible. (2) Seek help from the instructor or TA, as you are always encouraged to do, rather than from other students. (3) Cite any questionable sources of help you may have received.
Students who cheat will suffer a serious course grade penalty in addition to being reported to university officials. You must abide by JHU's Ethics Code: Report any violations you witness to the instructor. You may consult the associate dean of students and/or the chairman of the Ethics Board beforehand. For more information, see the Undergraduate Academic Ethics Board website and the Procedures for Handling Allegations of Misconduct by Full-time & Part-time Graduate Students.
Any student with a disability who may need accommodations in this class must obtain an accommodation letter from Student Disability Services, 385 Garland, (410) 516-4720, studentdisabilityservices@jhu.edu.
An ability to apply knowledge of computing and mathematics appropriate to the discipline
An ability to analyze a problem, and identify and define the computing requirements appropriate to its solution
An ability to design, implement, and evaluate a computer-based system, process, component, or program to meet desired needs
An ability to function effectively on teams to accomplish a common goal
An understanding of professional, ethical, legal, security and social issues and responsibilities
An ability to use current techniques, skills, and tools necessary for computing practice