Startseite > Fachgruppen > Softwaretechnik > Lehre > Vorlesungsarchiv > WS 2017/18 > Secure Software Engineering WS2017/2018

Secure Software Engineering WS2017/2018

New: This year includes practical contest Build It, Break it, Fix It!

Course material

The slides and exercise sheets will be uploaded after each lecture on the course's KoaLA page.

Final Exam

There will be two exam dates.

Date / Time / Room:

  • 1. Exam: Thursday, March 1st, 9:00 - 11:00, Room: L1
  • 2. Exam: Thursday, March 29th, 9:00 - 11:00, Room P5.2.01

We uploaded  a seating plan in koaLA for the second exam.
Please check this plan to find your seat number.
If you have questions concerning the plan, send a mail to


Further Information:

  • Duration: 90 min (4 ECTS) / 120 min (6 ECTS)
  • The exam will be given in English. Answers in German will be permitted.
  • The use of a English-Deutsch dictionary is permitted.



Time and place

The teaching language will be English. Questions in German will be permitted.


Thu 13:00-16:00 (c.t.) at O2

A preliminary schedule is available here.

Exercise classes:

The exercise classes will be held every two weeks.

Tue 09:00-11:00 (c.t.) at O1 258 (starting: 24.10)
Tue 11:00-13:00 (c.t.) at O1 258 (starting: 24.10)
Wed 09:00-11:00 (c.t.) at O1 252 (starting: 25.10)

Registering and asking questions

To attend the course, you have to register in the PAUL system as a participant. To ask questions, please use the discussion forum in KoaLA, so that others can benefit from the answers as well.


What does it take to engineer software systems securely? This is the key question we wish to address in this course. Answering it requires to develop an understanding of the following key areas of secure software engineering: threat modeling, secure design, secure coding, security validation, secure deployment and maintenance. In this course we will be covering those areas in an example-driven style, discussing current techniques applicable to those areas and lessons learned from concrete real-world security breaches.


Participants are expected to have completed or nearly completed the first section of the Bachelor degree, in particular the Softwaretechnikpraktikum or Softwarepraktikum. On top of that there are no special prerequisites for this course.


The course will be comprising different theoretical and practical parts:

  • The main lecture (Thu 13:00-15:00) will cover background information about all relevant aspects of a secure software-engineering lifecycle. We will be motivating and explaining the core ideas with real-world examples. An integral part of every lecture will be the discussion of one or two vulnerabilities of the day: inspired by past real-world vulnerabilities and attacks, we will discuss common vulnerability categories and attack patterns. Where possible, the vulnerabilities will directly relate to this day's remaining content of the lecture.
  • Right afterwards (Thu 15:00-16:00) we will be conducting a practical contest called Build It, Break It, Fix It. The course is meant to help students experience a secure development lifecycle first hand. In the "Build It" phase, students will be asked to gather in teams and develop small software projects based on a formal specification, also including security requirements. In the "Break It" phase, the developed software will be exchanged between development teams to break the implementation, i.e., find and exploit security vulnerabilities in code of other teams. Lastly, in the "Fix It" phase, teams will get the chance to fix found vulnerabilities and, hence, render their software product more secure. This contest will be conducted using an automated online infrastructure.
    During this one hour on Thursday, we will be describing the contest in some weeks, and give students free time to work on the contest in other weeks.
    We used to run this as a separate MSc course, see here for this previous edition.
  • The exercise classes (Tue/Wed) are meant to reinforce the student's understanding of the main lecture's content. With practical, sometimes interactive exercises students will be able to learn important skills that can also support their work in the Build It, Break It, Fix It contest.

The main lecture will discuss crucial elements of a Secure Software Development Lifecycle, including:

  • Threat modeling
  • Risk analysis
  • Architectural security
  • Secure coding
  • Applied Cryptography
  • Secure configuration and deployment
  • Updates and maintenance

Learning outcomes

After having attended this course, participants will have developed a solid understanding of the most important aspects of secure software engineering, both in theory and practice. This includes the ability to identify and model threats to software systems, to avoid the most common classes of vulnerabilities, and to identify and apply techniques and tools to avoid or identify the introduction of security vulnerabilities.

Recommended reading material

We will not be able to provide a script for this course.
However, a lot of the topics are also covered in the book:

Gary McGraw. Software Security: Building Security In which you can access within the university network.

Regarding the contest, we recommend this publication:

Andrew Ruef, Michael Hicks, James Parker, Dave Levin, Michelle L. Mazurek, and Piotr Mardziel. 2016. Build It, Break It, Fix It: Contesting Secure Development. In Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security (CCS '16). ACM, New York, NY, USA, 690-703. DOI: