---
# System prepended metadata

title: 10 Bezpečný kód

---

# 10. Bezpečný kód

Metody autentizace a řízení přístupu. Biometrické metody autentizace, jejich dopady a problémy. Elektronický podpis a jeho použití. Autentizace strojů a aplikací. Zásady a principy bezpečného kódu. Typické bezpečnostní chyby na úrovni kódu, souběžnost, ošetření vstupů. Detekce bezpečnostních zranitelností, penetrační testování. Příklady z praxe pro vše výše uvedené. (PV157, PV286 , PV017, PV276)

---

Medzi **základné pojmy** patrí:

- **Hashovanie** - odtlačok (fingerprint) dát fixnej dĺžky, jedinečný (ideálne)
	- Problém kolízií
	- Po zmene dát sa musí zmeniť aspoň 50% výstup
	- Jednosmernosť
	- Bezkolíznosť (slabá, silná)
		- Slabá - nájdenie kolízie pre daný fixný vstup
		- Silná - ľubovolná dvojica vstupov, výhodnejšie pre útočníka
- **Kľúč**
	- Rozsiahle reťazce bitov - náhodné čísla, prvočísla
	- Symetrická kryptografia - rovnaký kľúč pre A,B
	- Asymetrická kryptografia - privátny (podpis, dešifrovanie), verejný (overenie podpisu, šifrovanie)
- Realita - **hybridný kryptosystém**
	- Asymetria - pomalé
	- Symetria - rýchle
	- Kombinujeme ich
- Kryptografické **primitivum** - jedna kryptografická funkcia
- Kryptografický **protokol** - algoritmus, ktorý zahŕňa dve (a viac) komunikujúce strany

- **Druhy a parametre** kľúčov:
    - Symetrické (zdieľané)
    - Asymetrické (verejné, súkromné)
    - Bez kľúčové (hash, RNG)

**Kerckhoffov princíp**
- Algoritmus (postup) je všetkým známy
- Kľúč je tajná informácia - musí byť chránená

## Metódy autentizácie

- **Autentizácia** - proces overenia entity (a tým aj ustanovenie) identity (s požadovanou mierou záruky)
	- čo poznáme (PIN,  heslo)
	- čo máme (kľúč, čipová karta)
	- čo sme (biometria)
	- niekde, kde sme
	- vzťah 1:1
- **Identifikácia** - rozpoznanie určitej entity v danej množine entít - vzťah 1:N
- **Autorizácia** - udelenie určitých práv a určenie povolených aktivít

**Obecne**
- Krátke/slabé - iba pre ľudí
- Dostatočne dlhé - kryptografické kľúče
	- Protokoly výzva-odpoveď
- Protokoly s nulovým šírením znalosti (**zero-knowledge**)

**Hesla, PIN, a podobne**
- Čo najjednoduchšie pre autorizovaných používateľov
- Čo najkomplikovanejšie pre neautorizovaných používateľov

**Autentizácia tajnou informáciou**
- Musí byť naozaj tajná
- Musí byť vybraná z veľkého priestoru možných hodnôt
- Ak dôjde ku kompromitácii hesla, musí byť možné zmeniť ho

### Bezpečnosť vs. ľudská pamäť

**Protokoly výzva-odpoveď**
- Odosiela sa náhodné číslo
- Vráti sa digitálne podpísané

**Druhy hesiel**
- Skupinová
- Unikátny pre každú osobu (userID = heslo)
- Neunikátny (spoločný s userID)
- Jednorázový (ne/unikátny)

**Ukladanie hesiel**
- Šifrované
- Hashované

**Hashovanie hesiel**
- Hodí sa nám jednosmernosť
- Funkcia je pomalá
- **Solenie** - salt
    - Pridáme k heslu informáciu, s ktorou ho zahashujeme a to si uložíme s heslom
	- Dlhšie efektívne heslo
	- Riešenie pre rovnaké heslá (budú mať iný hash)
- Pepř - pepper
    - Pridáme k heslu informáciu, s ktorou ho zahashujeme, ale uložíme ho bezpečne niekde inde

**Hashovanie hesiel v UNIX**
- Kedysi - DES 25x
- Teraz - SHA-2
- Shadow file

**Útoky**
- Cielený
- Plošný
- Online
- Offline
- Krádež hesla
- Slovníkový
- Permutácie písmen so znakmi a náhradami
- Slova, dáta, číslice súvisiace s užívateľom
- Hrubou silou
- Pomocné techniky, nástroje

**Úspešnosť útoku hrubou silou**
$$
\frac{\text{čas platnosti}\times\text{počet odhadov za jednotku času}}{\text{veľkosť abecedy}^{\text{dĺžka hesla}}}
$$
**Kde k útoku dochádza**
- Klient
- Databáza hesiel + kópie
- Server/host - pamäť
- Sieťová komunikácia
- Tvrdo zakódované heslá v aplikácii a HW
- Manuály a dokumentácia

**Prečo dochádza k zisteniu hesla**
- Užívatelia volia slabé heslá
- Servery a ich databáze sú častými cielmi
- Oddelené kanály nie sú oddelené
- Obnova hesla/prístupu je jednoduchšia ako iné útoky

**Expirácia hesla**
- Málo účinné

**Blacklist**
- Zakázané slabé heslá

**Odporúčanie**
- Fráze
- Dĺžka 8-10
- Používať nealfabetické znaky
- Presadzovať politiku hesiel (blacklist)
- Správca hesiel

**Generovanie kryptografického kľúča z hesla**
- Potreba kryptografického kľúča - generuje sa z hesla od užívateľa
- Entropia kľúča = entropia hesla (nízka)
- Známa funkcia PBKDF2

**Jednorázové hesla**
- Lamport hash chain
- HOTP HMAC One-time Password Algorithm
- OTP založené na čase

**Autentizácia obrazovou informáciou**
- Podobné ako PIN

**PIN (Personal Identification Number)**
- Lacnejšia klávesnica
- Zle sa pamätá
- Max 4 čísla

**Token**
- niečo, čo užívateľ má
- čo najjednoduchšie pre autorizovaných používateľov
- čo najkomplikovanejšie pre neautorizovaných užívateľov
- **Dilema** - cena výroby vs cena falšovania
- **Prevencia**
    - Vybavenie
    - Kontrola licencie
    - Utajovanie určitých informácií
- **Najčastejšie tokeny**
    - Karty
	    - Karta s magnetickým pruhom - Ľahko sa kopíruje
	    - Čipové karty
		    - Obvyklá - bankomatová
		    - SIM karta
		    - USB Token
    - Autentizačné kalkulátory

**Čipová karta s procesorom**
- Podobná PC
- Nemá štandardné rozhranie
- Logická štruktúra karty
	- Koreňový adresár MF (master file)
	- Adresáre DF (dedicated file)
	- Súbory EF (elementary file)
- Personalizované pre danú banku
- Je to **aktívny prvok** - dokáže robiť kryptografické výpočty
- Cieľom je **chrániť kľúč**

**Bezpečnosť čipových kariet**
- **Fyzická bezpečnosť**
- Odolnosť voči narušeniu - existuje prvok, ktorý chráni proti útočníkovi
- Zistiteľnosť narušenia - zistenie neautorizovanej modifikácie
- Detekcia narušenia - automatická detekcia narušenia
- Odpoveď na narušenie - po narušení napr. premaže hodnoty

**Klasifikácia útočníkov**
- Trieda 0 - script kiddies
- Trieda 1 - múdri útočníci bez "insider knowledge"
- Trieda 1.5 - úroveň akademických pracovníkov
- Trieda 2 - majú značné technické vzdelanie aj skúsenosti
- Trieda 3 - dobre finančne podporované organizácie

**Útoky na čipové karty**
- Logické
	- Vyžadujú detailné znalosti o štruktúre karty
	- Nevyžadujú špeciálne vybavenie
	- Typy útokov
		- Monitorovanie činnosti karty
			- **Časová analýza**
				- Zistenie s akým dlhým kľúčom algoritmus pracuje
				- Aktivita procesora
			- **Výkonová analýza**
				- Analýza odberu energie
				- Napr. čítačka chybového PINu
		- Indukcia chýb behom činnosti
			- Zmeníme napätie, teplotu, čo môže zrušiť ochranu
		- Programové útoky cez API
			- Využitie chýb, nedokumentovaných operácií
- Fyzické
	- Invazívne - rekonštrukcia a analýza návrhu čipu
		- Po útoku veľmi často prestáva fungovať
	- Semi-invazívne
		- Nedochádza k priamemu zničeniu čipu
		- Využíva žiarenie, laser, elektromagnetické polia

**Autentizačné kalkulačky**
- Využívané v bankách
- Zabezpečené PINom

**Tokeny založené na hodinách**
- Je potrebné riešiť synchronizáciu
- Generovaný kód je závislý na čase

**Bezkontaktná karta**
- Založené na overení ID
- Ľahko sa dá skopírovať a replikovať

**FIDO token**
- Využíva techniky asymetrickej kryptografie
- **Výhody tokenov**
    - Rýchlo sa zistí ich strata
    - Nie sú jednoducho kopírovateľné
    - Môžu sami o sebe spracovávať alebo prenášať ďalšie informácie
- **Nevýhody tokenov**
    - Potrebuje špeciálnu čítačku
    - Bez tokenu nie je autorizovaný používateľ rozpoznaný
    - Token musí byť dostatočné zložitý
    - Može prestať fungovať, čo nie je ľahko zistiteľné

## Riadenie prístupu

- Funkcie na riadenie, ktorý subjekt má aký prístup k určitému objektu
- Implementovaná bezpečnostným mechanizmom riadenia prístupu
- Zvyčajne sa upravuje nejaká tabuľka OS

**Pojmy**
- Vlastník dát
- Správca
- Užívateľ

**Typy obmedzenia**
- R, RW, X
- Čas

**Metódy**
- Centralizovaná správa
	- Správca všetkých objektov
	- Nastavuje kto, čo
	- Výhoda - konzistencia
	- Nevýhoda - vlastník nemôže nastavovať práva k svojim dátam
- Decentralizovaná správa
	- Vlastník spravuje svoje vlastné dáta
	- Nevýhoda - náročné zaistenie politík a konzistencie
	- Výhoda - flexibilita

**Heslo**
- Rôznym heslom meníme prístup k objektom
- Napr. heslo na zápis, heslo na čítanie
- Jednoduché ale nepraktické

**Matica prístupových práv**
- Objekty - stĺpce
- Subjekty - riadky
- Obvykle ukladáme iba stĺpce (nazývame ACL)
- Alebo aj podľa riadkov (C-list)
- Môže byť aj trojrozmerná - tretí rozmer je program
	- Máme trojice a k nim zodpovené prístupové práva

**Zoznam prístupových práv (ACL)**
- Ukladáme iba neprázdne prvky matice
- ACE (Access Control Element) - element prístupových práv
- Výhoda - obmedzovanie práv jednicov alebo skupiny
- Nevýhoda - ťažko vieme zistiť ku ktorým všetkým objektom má jeden používateľ prístup

**Implementácia ACL UNIX**
- User, Group, Other
- RWX, setuid, setgid, sticky (t) bit
- Nie je možné vybrať práve jedného jedinca, ktorému dávame prístup
- Nevieme zabezpečiť, že niekto zo skupiny nám nakopíruje súbory a nesprístupní ich

**Implementácia ACL moderný UNIX**
- Flagy navyše - append-only, immutable, undeletable
- Nastavuje sa pomocou chattr alebo pri bootu
- Využívajú sa klasické rwx + výnimky ACE

**POSIX ACL**
- Príkaz getfacl
- Subjekty user,group,other
- Zápis user:meno:rw-
- Pridáva sa aj maska, ktorá obmedzuje default práva

**Linux Capabilities**
- Práva rootu rozdelíme na menšie oprávnenia, ktoré pridelujeme procesom
- Napr. pridelovanie portov CAP_NET_BIND_SERVICE

**Implementácia ACL Windows**
- Dedičnosť
- Mnoho ďalších atribútov a možností

**Riadenie prístupu na čipových kartách**
- Implementované ako riadením prístupu k súborom
- Založené na PINoch
- Počet neúspešných odblokovaní je obmedzený
- PINy sú tiež uložené v súboroch
- Zmeny PINu sú viazané oprávnením

**Zoznam prístupových oprávnení**
- Capabilities, C-lists
- Ukladáme maticu po subjektoch
- Zvyčajne používané v certifikátoch

**Skupinové politiky**
- Vzťahujú sa na domény, PC alebo celé organizácie

**SAML**
- Štandard na popis a výmenu autentizačných a autorizačných dát
- Používaný predovšetkým na webu
- Single sign-on

**SAML token**
- Subject - používateľský identifikátor
- AuthnStatement - spôsob autentizácie
- AttributeStatement - ďalšie atribúty napr. príslušnosť k fakultám, skupinám
- AuthorizationStatement - autorizačné informácie, napr. zoznam rolí, povolených akcií

**Spustenie nedôveryhodného kódu**
- Autentizácia kódu
- Špeciálny jazyk neumožňujúci škodlivú činnosť
- Kontrolné programy - v praxi heuristiky
- Spustenie programu s minimálnymi právami (napr. nobody)
- Obmedzené prostredie - sandbox

**Podpora riadenia prístupu k HW**
- Fence address - oddelenie pamäťového priestoru na bezpečnú časť
- Deskriptory - základná adresa + limit pre každý proces
	- Nedokážeme zdieľať pamäť medzi procesmi
- Segmentované adresovanie - segment + offset + atributy
- Dva režimy procesoru - autorizovaný, neautorizovaný
- Niekoľko režimov procesu tzv. rings

**Objektové programovanie**
- Private, protected

**Riadenie prístupu**
- Tzv. referenčný monitor
- Môže mať problémy - buffer overflow
- Veľa kódu OS je označené ako dôveryhodný napr. drivery
- Race condition - neatomickosť operácií prístupu k dátam
- Separácia oprávnení
	- Na vykonanie operácie je potrebný súhlas viacerých strán
	- OS toto nepodporuje
- Princip najmenších privilégií
	- Užívateľ má iba tie práva, ktoré potrebuje a nič viac
- Princip default deny
	- Povolené je iba to, čo je explicitne nastavené
	- Tvorba blacklistov je náchylná na chyby

**Politiky riadenia prístupu**
- Voliteľný prístup (discretionary)
    - chmod
	- Subjekt, vlastník objektu, rozhoduje o tom kto má prístup
	- Výhody - jednoduché, malá réžia, veľká vyjadrovacia schopnosť
	- Nevýhody - nedostatočná bezpečnosť (neodolné voči trojským koňom)
- Povinný prístup (mandatory)
    - SELinux
	- Systémová politika nezávislá na vôli subjektov rozhoduje o to, kto má k objektu prístup

**Voliteľné**
- Ak nevyhovuje -> **Multilevel systems (MLS)**

**Povinné**
- Je žiadúce podporovať aj voliteľné riadenie prístupu

**Bell-LaPadula**
- Model Objekt-Subjekt
- Užívateľ má počiatočné bezpečnostné oprávnenie
- Subjektom je typicky proces - R, RW, X
- Klasifikácia je dvojica L = (C, S)
	- $C \in \{TS, S, C, U\}$
	- $S \in$ podmnožina množiny kategórii
- Stav systému S = (b, M, f)
	- b - množina aktívnych prístupov
	- M - matica prístupových práv
	- f - úrovňová funkcia
	- Stav je bezpečný ak sú splnené všetky bezpečnostné vlastnosti
	- Subjekty sú rozdelené na dôveryhodné a nedôveryhodné
- NRU - no read up
	- Nie je možné čítať dáta na vyšśej úrovni
- NWD - no write down
	- Nie je možné zapisovať do nižšich úrovní
- \*-vlastnosť
	- Čítať iba nižšie
	- Zapisovať v rovnakej úrovni
	- Pridávať aj vyššie
- Podporuje aj voliteľný (discretionary access)

**Problémy viacúrovňových systémov**
- Ako klasifikovať?
- Tendencia na príliš striktnú klasifikáciu
- Vývoj MLS býva komplikovaný a drahý
- Administrácia je náročná
- Užívateľ býva pri svojej práci príliš obmedzovaný
- Ako riešiť zníženie klasifikácie?
- Ako prepojiť viacero MLS systémov?

**Skrytý kanál - covert channel**
- Zneužitie zdieľaného prostriedku na šírenie informácii
- Napr. zaplnenie disku, pozícia hlavičky na disku, záťaž procesora
- Obrana - zavedenie šumu, zníženie šírky pásma

**Polyinštancia**
- Chránime informácie o existencii súborov
- Noninterference - vlastnosť, kedy akcie užívateľa na vyššej úrovni nijak neovplyvní to, čo vidí užívateľ na nižšej úrovni
- Riešenie - zavedieme konvencie pre pomenovanie

**Model Biba**
- Slúži k zaisteniu integrity
- Prevrátený model Bell-LaPadula
- Čítať je možné iba dáta vyššej úrovne
- Zapisovať je možné iba smerom dolu

**Dopad MLS**
- Trusted Path
- Trusted Distribution
- Trusted Facility Management

**SELinux**
- Je nadstavbou nad POSIX systémom oprávnení
- Rozhoduje sa na základe trojice identita:rola:typ a klasifikácia v MLS (voliteľné)

**Windows**
- Integritné úrovne

**Role Based Access Control (RBAC)**
- Zavedieme role, ktorým priradíme práva
- Užívateľov priraďujeme do rolí
- Príklad: ORACLE permissions

## Biometrické metódy autentizácie, ich dopady a problémy

**Biometriky**
- automatizované metódy identifikácie
- na základe meriteľných fyziologických dát

**Režimy použitia biometrik**
- Verifikácia - 1:1
- Identifikácia - 1:N

**Proces použitia**
- Registrácia
	- Prvotné získanie biometrických dát
	- Vytvorenie registračného vzorku
	- Uloženie registračného vzorku (karta, snímač, stanica, server)
- Verifikácia/identifikácia
	- Získanie biometrických dát
	- Vytvorenie charakteristík
	- Zrovnanie charakteristík
	- Finálne rozhodnutie ano/nie

**Rozdiel medzi tokenom a biometriou**
- Variabilita - prahová hodnota
- Biometrická dáta nie sú nikdy 100% zhodné

**Chyba biometrických systémov**
- False acceptance
- False rejection
- Failure to enroll
- Failure to acquire

**Biometrické technológie**
- Fyziologické - odtlačok prstu, geometria ruky (statické)
- Behaviorálne - podpis, hlas (dynamické)
- Genotypické - geneticky založené (DNA)
- Fenotypické - ovplyvnené prostredím, vývojom (odtlačok prstu)

**Komerčné vs forenzné nástroje**
- Nízka presnosť vs vysoká
- Plne automatizované vs nutná intervencia
- Nekvalitné snímky znovu vs nie
- Uchovávame iba spracované charakteristiky vs aj pôvodné vzorky

## Elektronický podpis a jeho použitie

**Digitálny podpis**
- Musí zaistiť autentizáciu podpísaných dát
	- Integrita
	- Preukázanie pôvodu dát
- Mal by podporovať overenie dát/času podpisu
- Mal by byť overiteľný aj tretími stranami
- Mal by podporovať mechanizmy nepopierateľnosti (pôvodu a iné)
- Sám o sebe nezaisťuje dôvernosť - na to je šifrovanie
- Najznámejšie algoritmy - **RSA**, DSA
- Zvyčajne rozlišujeme
	1. s obnovou správy (podpis obsahuje podpisované dáta)
	2. bez obnovy správy (podpis neobsahuje dáta)
- Podpisuje sa väčšinou iba hash správy
- Postup
	- Vytvorenie a registrácia kľúčov (certifikát)
	- Vlastné podpisovanie
		- Dokument -> Hash -> Podpis
- Nepoužívať rovnaký pár pre šifrovanie a podpisovanie

**Digitálny podpis** spojí nerozdeliteľne kľúč s identitou a vzniká **certifikát verejného kľúča**.

**Certifikačná autorita**
- Potvrdí platnosť verejného kľúča
- Musí byť zodpovedná
- Dokážeme jej, že danú entitu vlastníme
- Certifikáty majú vždy platnosť od/do

**Využitie podpisu**
- Autentizácia dát
- Autentizácia počítačov/tokenov
	- Výzva-odpoveď
- Autentizácia osôb

**Typy podpisových schémat**
- Schémata s prílohou (pre overenie sú potrebné podpisované plaintext dáta)
	- DSA (Digital Signature Algorithm)
	- ElGamal
	- Schnorr
- Schémata s obnovou správy (pre overenie nie je potrebné nič naviac ako podpis)
	- RSA (Rivest-Shamir-Adleman)
	- Rabin
	- Nyberg-Rueppel
	- Ľahko sa konvertujú na schéma s prílohou

**Certifikát**
- Obsahuje **verejný kľúč** užívateľa
- Je podísaný **súkromným kľúčom** certifikačnej autority
- Zaisťuje integritu kľúča a identitu osoby

**Obsah certifikátu**
- Označenie
	- Bežný
	- **Kvalifikovaný** = overený certifikačnou autoritou
- Začiatok a koniec platnosti
- Identifikácia osoby, pseudonym
- Unikátne ID
- Voliteľné: obmedzenie použitia
- Voliteľné: doplnkové údaje
- Podpis autority

**PKI**
- Infraštruktúra pre správu verejných kľúčov
- Bezpečnostná politika
- Procedúry
- Produkty
- Autority

**Komponenty PKI**
- Certifikačná autorita CA
- Registračná autorita RA
- Adresárová služba

**Proces vystavenia certifikátu**
- Generovanie kľúčových dát
- Príprava identifikačných údajov
- Presunutie kľúčových dát a údajov do PCS/RA
- Overenie informácií
- Tvorba certifikátu
- Vystavenie certifikátu

**Hierarchická štruktúra CA**
- Vzájomné prepojenie CA
- Neexistuje centrálna autorita

**Základné pojmy**
- **Integrita dát** - dáta neboli neautorizovane zmenené
- **Autentizácia pôvodu dát** - potvrdzujeme, že dáta pochádzajú z daného subjektu

**Metódy autentizácia dát a správ**
- Bez použitia kryptografie
	- CRC
- S použitím kryptografie

**Elektronický podpis**
- Bez prívlastku
- Formálne bezvýznamná služba - mail, napísané meno ...

**Zaručený elektronický podpis**
- = Digitálny podpis
- Sám o sebe nám nedáva žiadnu záruku

**Čo podpisujeme?**
- V praxi nepodpisujeme celý dokument (pomalé)
- Iba hash
- Najprv dáta podpíšeme, až potom šifrujeme - analógia s listom v obálke
- Autenticitu sa snažime zachovať na dlhšiu dobu ako dôvernosť

**Bezpečnosť digitálneho podpisu**
- Musíme udržovať privátny kľúč v tajnosti
	- Key recovery
	- Rozdielny pár pre šifrovanie a podpisovanie
- Musíme zaistiť integritu verejného kľúča
	- Pomocou certifikátu verejného kľúča

**Časová náročnosť**
- Existujú algoritmy, ktorých podpis je dlhšia operácia ako overenie a naopak
- RSA vs DSA EC

**Výpočetná bezpečnosť**
- Kedy bude algoritmus prelomiteľný hrubou silou
- Bezpečnosť je založená na faktorizácii veľkých čísel

**Hashovacie funkcie**
- Kryptografická hashovacia funkcia
- Není prostá - vznikajú kolízie
- Má výstup pevnej dĺžky
- Vlastnosti
	- Jednosmernosť
	- Bezkoliznosť - silná, slabá
- Bežné kryptografické hashovacie funkcie
	- SHA-2
	- SHA-3
- Hashovaciu funkciu môžeme vytvoriť z ľubovolnej blokovej symetrickej šifry
- Narodeninový paradox

**Kód na detekciu chýb**
- CRC
- Slúži na detekciu neúmyselných zmien
- Nie je kryptografická funkcia

**Autentizačný kód (digitálna pečať)**
- MAC
- Slúži k zaistení integrity dát, nie dôvernosti
- HMAC
	- hash z kľúča + dát a ešte raz hash s kľúčom
- Chaffing and winnowing - zaistenie dôvernosti pomocou autentizácie

**Elektronická identifikácia - právna úprava**
- eIDAS
- Zaručený elektronický popis

## Autentizácia strojov a aplikácií

**Autentizácia počítačov**
- Na základe adresy (IP, MAC fyzická adresa)
- Na základe tajnej informáce (symetrická/asymetrická kryptografia)

**TLS/SSL**
- Autentizuje strany na základe certifikátu a protokolu challenge-response
- Povinná pre server, voliteľná pre klienta
- Zaisťuje dôvernosť, integritu a autenticitu dát
- Najprv prebehne iniciálny handshake, následne sa stanoví symetrický kľúč (Diffie-Hellman), ktorým je šifrovaný zvyšok komunikácie

**IPSec**
- Na zabezpečenie sieťovej vrstvy L4

**SSH**
- Aplikačný protokol na komunikáciu medzi klientom a serverom
- Používa symetrické a asymetrické šifrovanie podobne ako SSL/TLS

**SAML**
- Štandard založený na XML, popisuje autentizačné dáta
- Umožňuje služby Single Sign On

**Kerberos**
- Protokol a infraštruktúra na bezpečnú komunikáciu klientov a servero
- Ticket server

## Zásady a princípy bezpečného kódu

Základom bezpečného kódu je **defenzívne programovanie**.
- Overovať všetky vstupné dáta
- Ošetrenie aj tých situácií, o ktorých si myslíme, že nikdy nenastanú
- Pripraviť systém na jednoduché testovanie (Dependency Injection, dekompozícia)
- Logovanie udalostí

Ďalšie metódy:
- Použitie **bezpečného jazyka** (napr. pamäťový model, garbage collector) - Rust, Secure C
- Použitie striktného režimu prekladača
- Používať nízke prístupové práva
- Spúštanie aplikácie v sandboxe (Docker, GNU Jail)
- Dôkladné testovanie, code reviews, statická a dynamická analýza
- Z hľadiska kryptografie - používať overené knižnice (OpenSSL)
- Je nutné sledovať vývoj a vzniknuté chyby, dependency chain attacks
- Používať bezpečné funkcie (C, C++ sprintf miesto printf), nepoužívať obsolete funkcie
- Používať CI/CD
- Riadiť sa princípom deny-by-default

## Typické bezpečnostné chyby na úrovni kódu, súbežnosť a ošetrenie vstupov

Existuje **zoznam najčastejších bezpečnostných chýb** v jazykoch, a ako ich opraviť:
- Common Weakness Enumeration (**CWE**)
- OWASP Top 10 - webové aplikácie

Musíme sledovať zoznam **aktuálnych bezpečnostných dier**:
- Common Vulnerabilities and Exposures (**CVE**)

**Typické chyby**:
- Injection - vloženie vlastných inštrukcií do dát, ktoré potom program vykoná (SQL Injection, XSS)
    - Prepared Statements
    - Execute Disable Bit
- Absence of Logging and Monitoring
- Race Condition - (**súbežnosť**) súčasný zápis a čítanie do zdieľanej pamäte medzi vláknami
    - Riešime označením kritickou sekciou, mutex, semafor, a podobne (synchronizačné primitíva)
    - Lock-free štruktúry (podpora CPU)
    - Musíme dávať pozor na **deadlock**
- Buffer Overflow - zapisujeme dáta za reálnu veľkosť dátovej štruktúry (prepisujeme si iné dáta)
    - Vieme zamedziť použitím "canary", má ale overhead na beh programu
- Buffer Overread - vieme čítať dáta za reálnu veľkosť dátovej štruktúry
- Stack Exhaustion - vyplýtvanie miesta na zásobníku
- Heap Exhaustion - vyplýtvanie miesta na halde
- Use of Uninitialized Memory - veľmi nepríjemné, ak zabudneme inicializovať premennú a máme nedeterministické chovanie programu
    - Detekovať pomocou statickej a dynamickej analýzy kódu
- Type Overflow - pretečenie hodnoty napr. `INT_MAX+1`
    - Checked types (Rust)
    - Zakázať implicitné konverzie
- Floating Point Error - problém s dátovým typom IEEE 754, float, double
    - Použiť dátový typ Decimal
- Off-by-one Error - zvyčajne problém s indexami pri prechode dátovou štruktúrou
    - Detekovať pomocou statickej analýzy kódu
- Internal Structure Leaking - odosielame potenciálnemu útočníkovi užitočné informácie o našom systéme (verzia Nginx, Apache, Windows, Linux Kernel, OpenSSL, ...), prípadne mu dávame nápovedu, prečo dostal chybu (napr. uživateľ existuje miesto Server Error)

Pri programovaní sa riadime prístupom **fail-first** - akonáhle detekujeme nevalidné dáta, prerušíme beh programu.

## Detekcia bezpečnostných zraniteľností, penetračné testovanie

Chyby **detekujeme** pomocou:
- Statické a dynamické analýzy kódu (valgrind, callgrind)
- Taint analysis
- Fuzzing
- Automata-based modeling
- Mutation testing
- Security review

Za behu programu vieme detekovať, či do kódu niekto nezasahuje pomocou **anti-tampering techník**.
- Kontrola stavu programu pred volaním funkcie alebo pred if/else blokom
- Kontrola checksums a hashov
- Honeypots
- Platí aj pre HW (čipové karty a podobne)

**Penetračné testovanie** spočíva v špecifickom hľadaní bezpečnostných chýb v nejakom softvérovom riešení.
- Môže byť interné (náš tím) alebo externé (firma tretej strany)
- Blackbox (máme iba binárku) / whitebox (máme zdrojový kód) / greybox (máme binárku a dokumentáciu)
- Bug bounty
- Disassembly

## Príklady z praxe

**Autentizácia do GSM**
- Využíva SIM kartu
- SIM obsahuje tajný symetrický kľúč, ktorý sa porovnáva v autentizačnom centre siete

**Autentizácia e-bankovníctvo, autorizácia finančných transakcií**
- Využíva dvojfaktorovú autentizáciu
- Čísla CVC
- PIN
- Biometria

**Štruktúra bankovej siete**
- HSM - hardverové bezpečnostné moduly zabezpečujú uloženie kľúčov
- DES / 3DES

**Online verifikácia PINu**
- Odoslanie zašifrovaného PIN bloku do banky HSM, kde sa porovnáva s novo-vygenerovaným PINom

**Špecifikácia EMV**
- Definuje štandardy čipových kariet

**Offline autentizácia dát na čipovej karte**
- Komunikácia medzi terminálom a kartou štandardu EMV
- SDA (iba overenie certifikátu), DDA (SDA + verifikácia privátneho kľúča karty), CDA (DDA + zahrnutý kryptogram offline transakcie)
- Založená na asymetrickej kryptografii
- Detekcia falošných kariet

