Detail předmětu

Bezpečné kódování

FIT-SCOAk. rok: 2025/2026

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. 

Proč je předmět vyučován

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.

Podmínky zápočtu

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í.

Jazyk výuky

čeština

Počet kreditů

5

Vstupní znalosti

Základní znalosti programování a algoritmizace. 

Pravidla hodnocení a ukončení předmětu

Bodové hodnocení výsledků vypracovaných projektů. 
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. 

Učební cíle

Cílem předmětu je seznámit studenty se základními principy bezpečného psaní programů a vysvětlit obecné principy zranitelných míst a obrany proti nim. K zajištění korektního návrhu a implementace aplikací tak, aby splňovali bezpečnostní požadavky je nutno začlenit praktiky bezpečného kódování jako běžnou součást všech fází procesu vývoje software. Klíčovým krokem je vzdělání vývojářů, tak aby znali podstatné základní principy bezpečného kódování, uměli je aplikovat, a to bez ohledu na prostředí ve kterém pracují. 

 
Studenti se naučí obecné principy a postupy bezpečného psaní programů. 

Doporučená literatura

Fred Long et al. The Oracle/CERT Secure Coding Standard for Java, Addison-Wesley, 2011. Available online at http://www.cert.org/secure-coding/
John Viega, Matt Messier: Secure Programming Cookbook for C and C++, 2003, O'Reilly Media, Inc., ISBN: 9780596003944
Michael Howard, David LeBlanc: Writing Secure Code, Microsoft Press, Second Edition, ISBN-13: 978-0735617223
Michael Howard, Steve Lipner: The Security Development Lifecycle, 2006, Microsoft Press, ISBN: 0735622140
Mitigating the Risk of Software Vulnerabilities by Adopting a Secure Software Development Framework (SSDF), https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.04232020.pdf
Ross Anderson: Security Engineering: A Guide to Building Dependable Distributed Systems, 3rd Edition, ISBN: 978-1-119-64281-7
The OWASP web application security project: https://www.owasp.org/

Zařazení předmětu ve studijních plánech

  • Program MITAI magisterský navazující

    specializace NSEC , 0 ročník, zimní semestr, volitelný
    specializace NISY do 2020/21 , 0 ročník, zimní semestr, volitelný
    specializace NNET , 0 ročník, zimní semestr, volitelný
    specializace NMAL , 0 ročník, zimní semestr, volitelný
    specializace NCPS , 0 ročník, zimní semestr, volitelný
    specializace NHPC , 0 ročník, zimní semestr, volitelný
    specializace NVER , 0 ročník, zimní semestr, volitelný
    specializace NIDE , 0 ročník, zimní semestr, volitelný
    specializace NISY , 0 ročník, zimní semestr, volitelný
    specializace NEMB do 2023/24 , 0 ročník, zimní semestr, volitelný
    specializace NSPE , 0 ročník, zimní semestr, volitelný
    specializace NEMB , 0 ročník, zimní semestr, volitelný
    specializace NBIO , 0 ročník, zimní semestr, volitelný
    specializace NSEN , 0 ročník, zimní semestr, volitelný
    specializace NVIZ , 0 ročník, zimní semestr, volitelný
    specializace NGRI , 0 ročník, zimní semestr, volitelný
    specializace NADE , 0 ročník, zimní semestr, volitelný
    specializace NISD , 0 ročník, zimní semestr, volitelný
    specializace NMAT , 0 ročník, zimní semestr, volitelný

Typ (způsob) výuky

 

Přednáška

26 hod., nepovinná

Vyučující / Lektor

Osnova

  1. Ú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)
  2. Cíle útočníků, únik z pískovište, elevace privilegií, cesta od zranitelnosti k exploitu, CVE. (HaP)
  3. Základní zranitelnosti kompilovaných jazyků - buffer overflow, řetězce, integer overflow. (HaP)
  4. 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)
  5. Usable security a vliv UX na bezpečnost celého systému. Bezpečnost implementace protokolů, IoT, bezpečnost API. (KM)
  6. Validace vstupních hodnot, testování, fuzzing. (DK)
  7. Statická a dynamická analýza. (DK)
  8. Standardy pro bezpečné kódování, OWASP, SSDF. (KM)
  9. Bezpečné generování náhodných čísel. (HaP)
  10. Seminář - Útok na javascript a jak se tomu bránit. (DK, KM)
  11. Seminář - Útok na Java a jak se tomu bránit. (DK, KM)
  12. Seminář - Útoky na binárku a jak se tomu bránit. (DK, KM)
  13. Seminář - Demonstrace zajímavých projektů, řešení. (KM)

Projekt

26 hod., nepovinná

Vyučující / Lektor

Osnova

Samostatně řešené projekty.