Course details
Secure Coding
SCO Acad. year 2022/2023 Winter semester 5 credits
Předmět seznamuje s principy a postupy bezpečného kódování. Bezpečné kódování znamená psaní programů bezpečným způsobem, aby se předešlo zranitelnostem, které mohou útočníci zneužít. Znamená to také náležitě a efektivně využívat funkce zabezpečení poskytované knihovnami, jako je ověřování a šifrování. Bude zvážena řada programovacích platforem, od nízkoúrovňových (např. Android OS), přes webové programování (např. JavaScript a Python) až po rozsáhlé jazyky na vysoké úrovni (např. Java). Budou zkoumány nové a vznikající jazykové bezpečnostní mechanismy, včetně způsobů statické a dynamické analýzy.
Guarantor
Course coordinator
Language of instruction
Completion
Time span
- 26 hrs lectures
- 26 hrs projects
Assessment points
- 55 pts final exam (written part)
- 45 pts projects
Department
Lecturer
Kolář Dušan, doc. Dr. Ing. (UIFS)
Malinka Kamil, Mgr., Ph.D. (UITS)
Instructor
Subject specific learning outcomes and competences
Studenti se naučí obecné principy a postupy bezpečného psaní programů.
Learning objectives
Why is the course taught
V současnosti je stále vzrůstajícím problémem to, že díky nedokonalostem v programovém kódu aplikací se útočník může dostat k tak ceněným údajům uloženým na počítači, nebo nad počítačem získat vládu zcela. Cílem tohoto předmětu je jednak ukázat, jak k takové situaci může zcela neúmyslně dojít a jednak demonstrovat, jak je možné psát kód, který bude takovým útokům předcházet.
Prerequisite knowledge and skills
Základní znalosti programování a algoritmizace.
Study literature
- Fred Long et al. The Oracle/CERT Secure Coding Standard for Java, Addison-Wesley, 2011. Available online at http://www.cert.org/secure-coding/
- The OWASP web application security project: https://www.owasp.org/
- Mitigating the Risk of Software Vulnerabilities by Adopting a Secure Software Development Framework (SSDF), https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.04232020.pdf
- Michael Howard, David LeBlanc: Writing Secure Code, Microsoft Press, Second Edition, ISBN-13: 978-0735617223
- John Viega, Matt Messier: Secure Programming Cookbook for C and C++, 2003, O'Reilly Media, Inc., ISBN: 9780596003944
- Michael Howard, Steve Lipner: The Security Development Lifecycle, 2006, Microsoft Press, ISBN: 0735622140
- Ross Anderson: Security Engineering: A Guide to Building Dependable Distributed Systems, 3rd Edition, ISBN: 978-1-119-64281-7
Syllabus of lectures
- Úvod, rekapitulace pojmů (robustní kód, bezpečný kód, samo se chránící kód, reentrantní kód, intermediární kód, binární kód, binární kód pro VM, role OS, role VM, ...). (DK)
- Cíle útočníků, únik z pískovište, elevace privilegií, cesta od zranitelnosti k exploitu, CVE. (HaP)
- Základní zranitelnosti kompilovaných jazyků - buffer overflow, řetězce, integer overflow. (HaP)
- Mechanismy ochrany paměti, ochrana zásobníku, Return oriented programming, ASLR. Základní zranitelnosti interpretovaných jazyků - práce s pamětí, use after free. (HaP)
- Usable security a vliv UX na bezpečnost celého systému. Bezpečnost implementace protokolů, IoT, bezpečnost API. (KM)
- Validace vstupních hodnot, testování, fuzzing. (DK)
- Statická a dynamická analýza. (DK)
- Standardy pro bezpečné kódování, OWASP, SSDF. (KM)
- Bezpečné generování náhodných čísel. (HaP)
- Seminář - Útok na javascript a jak se tomu bránit. (DK, KM)
- Seminář - Útok na Java a jak se tomu bránit. (DK, KM)
- Seminář - Útoky na binárku a jak se tomu bránit. (DK, KM)
- Seminář - Demonstrace zajímavých projektů, řešení. (KM)
Syllabus - others, projects and individual work of students
Samostatně řešené projekty.
Progress assessment
Bodové hodnocení výsledků vypracovaných projektů.
Controlled instruction
Průběžná kontrola a hodnocení projektů, závěrečná zkouška. Pro získání bodů ze zkoušky je nutné zkoušku vypracovat tak, aby byla hodnocena více než 20 body. V opačném případě bude zkouška hodnocena 0 body.
Exam prerequisites
Získání alespoň jednoho bodu z každého projektu a získání alespoň 10 bodů v průběhu semestru. Jakákoli forma plagiátorství nebo nesamostatné práce vede k neudělení zápočtu. Zápočty uděluje cvičící.
Schedule
Day | Type | Weeks | Room | Start | End | Capacity | Lect.grp | Groups | Info |
---|---|---|---|---|---|---|---|---|---|
Mon | exam | 2023-01-02 | E112 | 11:00 | 12:50 | řádná | |||
Mon | lecture | 1., 6., 7., 13. of lectures | D0207 | 11:00 | 12:50 | 9999 | 1MIT 2MIT | xx | Kolář |
Mon | lecture | 2., 3., 4., 9. of lectures | D0207 | 11:00 | 12:50 | 9999 | 1MIT 2MIT | xx | Hanáček |
Mon | lecture | 5., 8., 10., 11., 12. of lectures | D0207 | 11:00 | 12:50 | 9999 | 1MIT 2MIT | xx | Malinka |
Mon | exam | 2023-01-23 | A112 | 14:00 | 15:50 | 2. oprava | |||
Thu | exam | 2023-01-12 | A112 | 13:00 | 14:50 | 1. oprava |
Course inclusion in study plans