Secure Coding

Prof. Dr. P. Barth

Kurzinhalt

Vorlesung:
> Überblick sichere Softwareentwicklung (kurz): IT-Sicherheit, Softwareentwicklungsprozess, Testen, Reviews, Metriken
> Typische Schwachstellen und ihre Folgen: Programmieren und Debugging in C/C++/Assembler (Wiederholung), Typische Sicherheitsprobleme in maschinennahen Programmen (C/C++) wie versteckte Geheimnisse, Überläufe (Puffer, Zahlen), Freispeicher (Initialisierung, use after free, Lecks…), implizite Datentyp-Konvertierung, etc. und ihre Folgen (Exploits, Capture The Flag, Stack Smashing, ...)
> Vermeidung typischer Fehler: Code-Qualität und Code-Standards, keine magischen Werte, garantierte Initialisierung, Überprüfung aller Eingaben und Ausgaben, Reduktion von Komplexität, kurze Gültigkeitsbereiche, Nutzung geprüfter Bibliotheken für passende abstrakte Datentypen, Moderne Sprachmittel zur typsicheren Programmierung, Fokus C/C++
> Statische und dynamische Analyse: Einhalten von Code-Standards (Warnungen, clang format, clang tidy), Finden von typischen Fehlern mit Hilfe von statischer (Quellcode) Analyse (clang analyzer, Coverity) und dynamischer (Laufzeit) Analyse (adress sanitizer, valgrind), Generierung von problematischen Eingaben durch Fuzzing mit LibFuzzer und AFL
> Build, Test, Review: Erhöhung der Codequalität durch automatisiertes Testen, Testmetriken wie Code-Abdeckung, Anpassung von Code-Standards, statische und dynamische Checks und deren automatisierte Überprüfung, (Continuous Build, Test und Integration, Code-Reviews und Freigabeprozesse)
> Einsatz sichererer Programmiersprachen: Maschinennahe Sprachen mit Konzepten für typsichere Speicherüberprüfung und Speicherbesitz wie zum Beispiel Rust und Garbage Collection und integrierte Nebenläufigkeit wie zum Beispiel Go

Labor:
> Praktische Übungen mit virtuellen Maschinen (exploit targets), Tools (address sanitizer, valgrind, clang format, clang tidy, clang analyzer, Coverity, LibFuzzer, afl), Sprachen (C/C++ mit tcc, gcc, clang sowie Go und Rust), Unit-Testing (GoogleTest), Versionskontrolle, Ticketing (git, gogs)