Prednášky
- vysvetliť, čo je softvérová bezpečnosť a čím sa líši od ochrany proti vírusom
- pomenovať dôsledky (produktivita, dôvera, financie) úspešného napadnutia softvéru
- vysvetliť štyri základné princípy softvérovej bezpečnosti
- orientovať sa v organizácii predmetu a v systéme hodnotenia
- vysvetliť rozdiel medzi steganografiou (one-to-one) a watermarkingom (one-to-many)
- popísať základné prvky steganografického procesu (utajená správa, krycie médium, stegomédium, stegokľúč) a štyri vlastnosti, ktoré musí spĺňať
- vysvetliť princíp LSB (Least Significant Bit) steganografie a uviesť príklady, kde možno v súborovom systéme ukryť dáta
- vysvetliť rozdiel medzi pasívnym a aktívnym útokom v rámci steganalýzy a popísať aspoň dve kategórie steganalytických metód
- vysvetliť účel watermarkingu a rozdiel oproti steganografii
- rozlíšiť hlavné typy watermarkingu (copyright, forenzný, fragile, semi-fragile, viditeľný)
- vysvetliť princíp softvérového watermarkingu (statický vs. dynamický vodoznak)
- pripraviť sa na praktické zadanie 2 (kódovanie watermarku do zdrojového kódu, týždeň 10)
- vysvetliť účel obfuskácie a čo obfuskácia negarantuje
- rozlíšiť základné kategórie obfuskácie (syntaktická, kontrolno-toková, dátová, virtualizačná)
- na jednoduchom príklade ukázať control flow flattening
- vysvetliť limity obfuskácie
- vymenovať fázy životného cyklu dát a stručne charakterizovať každú z nich
- vysvetliť aspoň tri dimenzie kvality dát
- rozlíšiť validáciu a verifikáciu dát a uviesť, aké akcie môže systém vykonať pri neplatných dátach
- vysvetliť pojem integrita dát a poznať typy poškodenia dát (data corruption)
- vysvetliť skratku RASM a jednotlivé jej zložky
- popísať rozdiel medzi klasickým SDLC a Secure SDLC a vymenovať šesť fáz SSDLC
- vysvetliť princíp SD3 (Secure by Design, by Default, in Deployment)
- vysvetliť princíp File Integrity Monitoring (FIM) a vypracovať Praktické zadanie 1
- vysvetliť rozdiel medzi fail-safe a fail-secure prístupom
- vymenovať aspoň štyri zásady defenzívneho programovania
- vysvetliť, čo je canonical representation a prečo súvisí s path traversal
- vysvetliť princíp race condition/TOCTOU zraniteľnosti
- nakresliť jednoduchý Data Flow Diagram (DFD) a rozpoznať jeho základné prvky
- vymenovať a vysvetliť všetkých šesť kategórií STRIDE
- stručne charakterizovať aspoň jednu ďalšiu metodiku modelovania hrozieb (PASTA/TRIKE/VAST/DREAD/OCTAVE)
- vymenovať základné stavy, v ktorých sa dáta môžu nachádzať, a priradiť ku každému typické bezpečnostné opatrenie
- vysvetliť rozdiel medzi ochranou dát pri uložení (at rest) a pri prenose (in transit)
- vypracovať Praktické zadanie 2 (softvérový watermarking, nadväzujúce na týždeň 4)
- vysvetliť pojmy pamäťová bezpečnosť (memory safety) a typová bezpečnosť (type safety)
- porovnať aspoň tri jazyky (napr. C/C++, Java/Python, Rust) z hľadiska bezpečnosti
- prakticky predviesť jednoduchý buffer overflow útok na zraniteľný C program a vysvetliť, ako sa mu dá zabrániť
- zhrnúť kľúčové témy predmetu Softvérová bezpečnosť
Cvičenia
- Pochopiť, čím sa bezpečnostné inžinierstvo zaoberá a prečo je to samostatná disciplína
- Získať prehľad o desiatich najčastejších bezpečnostných chybách v softvéri
- Overiť si, čo z materiálov naozaj vieš
- Organizácia predmetu
- Rozbor reálneho bezpečnostného incidentu
- Štyri princípy na konkrétnom softvéri
- Ukazať použitie elementov scenára
- Dokumentovať generované HTML pre autorov tém
- Automaticky testovať správnosť generovaného HTML
- Priprav si prostredie
- Pozri sa, čo o tebe vie obyčajná fotka
- Ukry správu najhrubším možným spôsobom
- Ukry správu metódou LSB
- Over, či je to naozaj nedetegovateľné
- Znič správu tak, ako to urobí bežná aplikácia
- Priprav si prostredie a nosič
- Vlož vodoznak podľa kľúča
- Vyber ho späť a over, že bez kľúča to nejde
- Odmeraj, čo s ním urobí kompresia
- Vykonaj útok spolčením
- Porovnaj to s krehkým vodoznakom
- Vlož vodoznak do vlastného kódu
- Priprav si program, ktorý budeš upravovať
- Premenuj a zavádzaj
- Skry konštanty v dátach
- Splošti tok riadenia
- Pridaj nepriehľadné podmienky
- Odmeraj, čo ťa to stálo
- Prečítaj cudzí obfuskovaný kód
- Riziko v životnom cykle
- Validačné akcie
- Kontrolný súčet
- Baseline databáza
- Detekcia zmien
- Klasifikácia zmien
- Logovanie a upozornenie
- Konfiguračný súbor
- Fázy SSDLC v projekte
- Rozpoznanie porušenia zásady
- Ochrana proti path traversal
- Diskusia fail-safe vs. fail-secure
- Nákres DFD
- Identifikácia hrozieb STRIDE
- Návrh protiopatrení
- Program P s watermarkom
- Vkladač watermarku
- Rozpoznávač watermarku
- Hodnotenie nenápadnosti
- Základné pretečenie zásobníka
- Skúmanie pamäťových adries
- Obídenie kontroly hesla
- Obídenie chybnej kontroly dĺžky
- Bezpečná verzia
- Kontrolné otázky
Zadania
- Vytvoriť nástroj na monitorovanie integrity súborov v zadanom adresári.
- Zakódovať watermark do zdrojového kódu programu a vytvoriť nástroje na jeho vloženie a extrakciu.