CEN 5079 - Secure Application Programming

General Information

Professor: Amin Kharraz
Classroom: Online via Zoom
Time: Monday and Wednesday at 5:00 PM
Office Hours (via Zoom): Thursdays 11 am to 12 pm
Wall of Fame Here
Class Forum: On Piazza
Videos Class Sessions


04/07/2021 Project 8 is now online. Good Luck!
04/01/2021 Project 7 is now online. Good Luck!
03/18/2021 Project 6 is now online. Good Luck!
03/11/2021 Project 5 is now online. Good Luck!
02/25/2021 Project 4 is now online. Good Luck!
02/18/2021 Project 3 is now online. Good Luck!
02/04/2021 Project 2 is now online. Good Luck!
01/27/2021 Project 1 is now online. Good Luck!
01/21/2021 The course has a wall of fame page now. The faster you solve the challenges, the higher is your rank!
01/20/2021 Project 0 is now online. Good Luck!
01/11/2020 Videos will be posted here.
01/11/2020 Students' credentials were emailed.
01/11/2020 Piazza page was created.
01/04/2020 The course website got published.

Course Description

Internet security has become part of everyday life where security problems impact practical aspects of our lives. Even though there is a considerable corpus of knowledge about tools and techniques to protect systems, information about what are the actual vulnerabilities and how they are exploited is not generally available. This situation hampers the effectiveness of security research and practice. Understanding the details of attacks is a prerequisite for the design and implementation of secure systems.

This course deals with common programming, configuration, and design mistakes and ways to detect and avoid them. Examples are used to highlight general error classes, such as stack and heap overflows. Possible protection and detection techniques are examined. The course includes a number of practical lab assignments where participants are required to apply their knowledge as well as a discussion of the current research in the field. Students will learn how the security of systems can be violated, and how such attacks can be detected and prevented.

The course aims to make the students "security aware", and gain an in-depth understanding about security issues.


CEN 5079 requires significant programming experience. If you are a beginner, this course is not for you. For instance, constructing SQL queries, writing code in C/C++ should not be very difficult for you. Also, knowledge of the Unix/Linux command line is essential. You should know how to write code using emacs/vim, write a makefile, compile code using makefiles, use SSH and SCP, write very simple shell scripts, work with gdb, check for running processes, kill runaway processes, and create compressed archives.

Class Forum

The class forum is on Piazza. Why Piazza? Because they have a nice web interface, as well as iPhone and Android apps. Piazza is the best place to ask questions about projects, programming, debugging issues, exams, etc. To keep things organized, please tag all posts with the appropriate hashtags, e.g. #lecture1, #project3, etc. I will also use Piazza to broadcast announcements to the class. Bottom line: unless you have a private problem, post to Piazza before writing me an email.


In this class, you will learn about security techniques and tools that can potentially be used for offensive purposes; "hacking" in other words. It is imperative that students only use these tools and techniques on systems they own (your personal computers) or systems that are sanctioned by the instructor. NEVER perform attacks against public systems that you do not control. As we will discuss in class, it is ethically problematic to attack systems that you do not own, and may violate the law.

Lecture Format and In-class Prep

This class will use a traditional, lecture-style format, punctuated with in-class examples. Slides are available in the course schedule below.

I recommend that students bring a laptop to class that has access to a local Unix/Linux-style command line. You can rely on SSH or PuTTY to get a remote command line on the College machines, but you run the risk of Wifi connection issues leaving you unable to work. macOS users should be able to use the default Mac command line and Homebrew; Windows users can install Linux in a virtual machine, or, if you have a recent version of Windows 10, you can install the Windows Subsystem for Linux (WSL) and then download a copy of Ubuntu right from the Windows Store.

Schedule and Lecture Slides

Dates Slides Readings Comments
Jan. 11-13 Intro, History
Jan. 18-20 Martin Luther King Jr. Day, Threat Modeling Chal.0 on Lab Basics
Jan. 25-27 Security Architecture, Reconnaissance Chal. 1 on Reconnaissance
Feb. 01-03 Isolation Setuid Demystified
That Was Then, This Is Now
Understanding Password Choices
Chal. 2 on Unix Security
Feb. 08-10 Authentication
Feb. 15-17 Intro to Web Security, Quiz 1 You Are What You Include
Chal. 3 on Password
Feb. 22-24 Command Injection, SQL Injection Chal. 4 on SQL Injection
Mar. 01-03 XSS Vulnerability, Intro to Systems
Mar. 08-10 Memory Layout Midterm on Wednesday March 10th Chal. 5 on Parameter Injection
Mar. 15-17 Buffer Overflow1, Buffer Overflow2 Smashing the Stack for Fun and Profit Chal. 6 on Buffer OverFlow
Mar. 22-24 ROP, Return to Libc
Mar. 29-31 Reverse Engineering Quiz 2 on Monday March 29th Chal. 7 on Reverse Engineering
Apr. 05-07 Forensics, Malicious Code Chal. 8 on Forensics Analysis
Apr. 12-14 Malicious Code 2, DDoS Quiz 3 on Monday April 12th
Apr. 19 Final Exam


There will be eight practical set of challenges throughout the semester. Assignments are due at 11:59:59pm on the specified date. You will use a turn-in script to create a compressed archive of the necessary files for the assignments, timestamp them, and submit them for grading. I highly recommend that students start assignments early!

Assignment Description Due Date Piazza Tag % of Final Grade
Project 0 Lab Basics #project0 2%
Project 1 Warm-up #project1 6%
Project 2 Unix Security #project2 6%
Project 3 Passwords #project3 6%
Project 4 SQL Injection #project4 6%
Project 5 Parameter Injection #project5 6%
Project 6 Buffer Overflow #project6 6%
Project 7 Reverse Engineering #project7 6%
Project 8 Forensics Analysis #project8 6%

Most projects can be programmed in a language of your choice. The only universal requirement is that your projects must compile and run on an unmodified Linux machine that we give you access to. Notice the stress on unmodified: if you're relying on libraries or tools that are only available in your home directory, then we will not be able to run your code and you will fail the assignment. You are welcome to develop and test code on your home machines, but in the end everything needs to work on the course Linux machines. If you have any questions about the use of particular languages or libraries, post them to Piazza.


There will be one midterm and one final. All exams will be closed book. The exams will cover material from lectures, readings, and the projects. The final will be cumulative, so review everything!


Throughout the semester, there will be three in-class quizzes. These quizzes will be brief; they are designed to be completed in 15 minutes or less. They are not meant to cause students grief, and the questions will be straightforward. The goals of the quizzes are to incentivize attendance and encourage careful study of the lecture material. If you need to miss class for any reason, please let me know ahead of time, just in case there is a quiz. Makeups will be provided on a needs-driven basis. We cannot accommodate requests after the test date.


I do not require students to attend class and I won't be taking attendance, although as stated above, there will be in-class quizzes. That said, I prefer an interactive classroom, and I encourage everyone to attend, ask questions, and participate!


To calculate final grades, I simply sum up the points obtained by each student (the points will sum up to some number x out of 100) and then use the following scale to determine the letter grade: [0-55] F, [56-69] D, [70-76] C, [77-79] C+, [80-82] B-, [83-87] B, [87-89] B+, [90-94] A-, [95-100] A. I do not curve the grades in any way. All fractions will be rounded up.

Request for Grading

In this class, each student is allotted two (2) challenges each semester to use on projects submitted before the specified due date. You cannot exercise the challenges on late projects. If you want a project or a test to be regraded, you must make a formal challenge specifying (a) the problem or problems you want to be regraded, and (b) for each of these problems, why you think the problem was misgraded. If it turns out that there has been an error in grading, the grade will be corrected, and you get to keep your challenge. However, if the original grade was correct, then you permanently lose your challenge. Once your two challenges are exhausted, you will not be able to request regrades. You may not challenge the use of slip days, or any points lost due to lateness.

Cheating Policy

It's ok to ask your peers about the concepts, algorithms, or approaches needed to do the assignments. We encourage you to do so; both giving and taking advice will help you to learn. However, what you turn in must be your own, or for projects, your group's own work. Looking at or copying code or homework solutions from other people or the Web is strictly prohibited. In particular, looking at other solutions (e.g., from other groups or students who previously took the course) is a direct violation. Projects must be entirely the work of the students turning them in, i.e. you and your group members. If you have any questions about using a particular resource, ask the course staff or post a question to the class forum.

All students are subject to the FIU's Academic Integrity Policy. Per College policy, all cases of suspected plagiarism or other academic dishonesty must be referred to the Office of Student Conduct and Conflict Resolution (OSCCR). This may result is deferred suspension, suspension, or expulsion from the university.

Accommodations for Students with Disabilities

If you have a disability-related need for reasonable academic accommodations in this course and have not yet met with a Disability Specialist, please visit FIU's DRC and follow the outlined procedure to request services. If the Disability Resource Center has formally approved you for an academic accommodation in this class, please present the instructor with your "Professor Notification Letter" at your earliest convenience, so that we can address your specific needs as early as possible.

Title IX

Title IX makes it clear that violence and harassment based on sex and gender are Civil Rights offenses subject to the same kinds of accountability and the same kinds of support applied to offenses against other protected categories such as race, national origin, etc. If you or someone you know has been harassed or assaulted, you can find the appropriate resources here.