Welcome to the 2018 Penn State Cybersecurity Competition, a security contest sponsored by NSA (National Security Agency)!
This competition is a 2-stage (i.e., two rounds) cyber competition on crash forensics against memory corruption attacks. Being different from existing Capture the Flag (CTF) competitions, which focus on skills such as reverse-engineering, network sniffing, and cryptanalysis, our competition focuses on software vulnerability identification. In other words, the skills required for this contest include memory forensics, and dynamic and static analysis of vulnerable programs.
The main goal of the competition is to serve as an educational exercise helping participants gain essential experience in finding security loopholes that may be found in commonly available software. In addition, the contest aims to attract a diverse population of students to the field of cybersecurity. The contest will produce a collection of core dumps attributable to real-world memory corruption attacks. We will make these core dumps publicly available as a resource to cybersecurity educators and researchers.
The Competition consists of two stages:
The competition is open to all students: high school students, undergraduate students, and graduate students. Each individual who participates in the Competition must:
For more background information of this competition, see http://sites.psu.edu/nsacomptest
First Prize: $5,000
Second Prize: $3,500
Third Prize: $1,500
Online registration site: http://sites.psu.edu/nsacomptest/prelimroundov/registration/
If you have any questions, please do not hesitate to send emails to: s2istnsa@gmail.com
First, you need to download VirtualBox from Download Page according to your host system.
Second, you need to install VirtualBox on your host system. You could refer to :
Step by step screenshots:
Step-by-step videos :
Third, you need to download the S2ISTNSA.zip or S2ISTNSA.tar.xz, extract it and double click file S2ISTNSA.vbox. The username and password are s2ist and s2ist, respectively. All the files related to the 7 problems are in folder /home/s2ist/Challenges/. Please carefully read the README file in this folder before taking the next step.
NOTE:
Using the given vulnerable binary, the participants should generate a malicious input to get the following output: “Welcome to overflow!”. To make this challenge easier, the source code of the vulnerable binary is provided.
What should be submitted: a screenshot with the md5 of the given vulnerable binary, and the commands to get the desired output.
Using the given vulnerable binary, the participants should generate a malicious input to get the following output: “Welcome to overflow!”. To make this challenge easier, the source code of the vulnerable binary is provided.
What should be submitted: a screenshot with the md5 of the given vulnerable binary, and the commands to get the desired output.
Using the given vulnerable binary, generate a malicious input file to open a gedit window. To make this challenge easier, the source code of the vulnerable binary is provided.
Hint: Reference 2 is particularly helpful for this challenge.
What should be submitted: a screenshot with the md5 of the given vulnerable binary, and the commands to invoke a gedit window.
Using the given vulnerable binary, generate a malicious input file to execute a command hidden in the source code. To make this challenge easier, the source code of the vulnerable binary is provided.
Hint: Reference 3 is particularly helpful for this challenge.
What should be submitted: a screenshot with the md5, and the commands to invoke the command hidden in source code.
Using the given post-crash core dump and the corresponding binary, answer the following four questions:
Hint: Tip 2 and References 4, 5 and 6 are particularly helpful for this challenge.
What should be submitted: your answers for the 4 questions
The following files are given: core dump (core
), binary (gdb
), and source code (gdb.tar.gz
). Using these files, find the root cause for the crash (i.e., the buggy source code file and the corresponding line number).
Hint: References 7 and 8 are helpful in leveraging the stack traces. You could read Reference 9 to check the value of a program variable.
What should be submitted: File_name:line_number, for example, test.c:10
.
The following files are given: core dump (core
), binary (latex2rtf
), and source code (latex2rtf.tar.gz
). Using these files, find the root cause for the crash (i.e., the buggy file and the corresponding line number).
Hint: References 7 and 8 are helpful in leveraging the stack traces. You could read Reference 9 to check the value of a program variable.
What should be submitted: File_name:line_number, for example, test.c:10
.
Online solution submission site: http://sites.psu.edu/nsacomptest/prelimroundov/submission-board/
Make sure that you include all of your solutions in a single file.
Six Teams will join our second stage.
In this challenge, we need your help to provide some detailed information of one software crash. To facilitate your analysis, we prepared one encrypted zip file that contains the following files:
mp3info.core
mp3info
We are expecting the following detailed information:
libc-2.19.so
?In this challenge, we need your help to locate the vulnerability behind a software crash. To facilitate your diagnosis, we provide one encrypted zip file that contains the following files:
aireplay-ng.core
aireplay-ng
aircrack-ng.tar.gz
We are expecting the following information:
test.c: 10-20
). The smaller the segment is, the more bonus you will getHints:
In this challenge, we would like you to recover execution state before a software crash. More specifically, we want to know the execution state, including memory cells and registers, at each instruction executed before the crash. To help you as much as we can, we prepared one encrypted zip file that contains the following resources:
join.core.tar.gz
join
trace
. We only provide binary for those instructions.We would really like to know one thing:
Hints:
In this challenge, we run into problems of finding the vulnerability behind a software crash. Here, unfortunately, source code of the software is unavailable. To facilitate your analysis, we tried our best but could only provide one encrypted zip file that contains the following items:
nasm.core
nasm
libc-2.23.so, ld-2.23.so
inst
. We only have the addresses of those instructionsIt will be greatly appreciated if you can share us the following information:
Hints:
rep
instruction has been extracted into multiple instructions according to the loop insidePlease send an email that contains your solution for each challenge to: s2istnsa@gmail.com.
Team Name | Score |
---|---|
Stevens Institute of Technology | 100 (with less time) |
Penn State University #1 | 100 |
StonyBrook | 86 |
Note: we have uploaded the password for each challenge in Stage II to the Github Repo - zip_password.csv
.
Challenge | Zip Password |
---|---|
C8 | mUmuWgtfd9M4sNFq |
C9 | RZmm5pd8zQtQywoG |
C10 | kWrkdGs45Z2U9tWN |
C11 | XjfYoXZiAsb3v7Db |
Q : How to turn off ASLR?
A : echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
Q : How to use binary and corresponding coredump from gdb?
A : gdb binary coredump
Q : How to find the vulnerable function that contributes to the corrupted object?
A : Traverse all the functions in the stack trace and figure out the function that modifies the corrupted object to bad state.
Q : How to get the MD5 value of a file?
A : md5sum filename
Q: How to easily feed input to those challenge programs?
A: 1. echo "XXX" > tmp ; ./challenge < tmp;
2. echo "XXX" | ./challenge
You could still use python/perl/ruby
to directly generate your own payload and feed it to challenge programs.
The Penn State Memory Corruption Forensics Competition is proudly sponsored by the National Security Agency, as well as the College of Information Sciences & Technology!