tex: add content

This commit is contained in:
leo 2023-06-15 02:52:48 +02:00
parent 026e93212b
commit d1d1f9db44
Signed by: wanderer
SSH Key Fingerprint: SHA256:Dp8+iwKHSlrMEHzE3bJnPng70I7LEsa3IJXRH/U+idQ

@ -29,8 +29,301 @@
\tableofcontents[pausesections]
\end{frame}
\begin{frame}[plain]{Conclusion}
\textbf{Thank you for your attention.}
\section{Teroretická časť}
\begin{frame}{}
\center
\huge
\textbf{Teoretická časť}
\end{frame}
\subsection{Prehľad}
\begin{frame}{}
\begin{block}{Prehľad}
\begin{itemize}[<+>]
\item definícia pojmoslovia
\item popis kryptografických primitív
\item stručný popis často spomínaných protokolov
\item kontext k používaniu hesiel a problémom vyplývajúcim z používania
hesiel
\item zhrnutie HTTP
\item popis fungovania webového prehliadača
\item zoznam možných problémov prehliadača
\item zhrnutie ochranných mechanizmov prehliadača
\item metódy útoku
\item metódy obrany
\end{itemize}
\end{block}
\end{frame}
\subsection{Kontext}
\begin{frame}{}
\begin{block}{Kontext}
\begin{itemize}[<+>]
\item rozšírenosť hesiel ako zabezpečovacieho mechanizmu
\item problém s používaním slabých hesiel
\item problém s opakovaný používaním hesiel
\item nenasledovanie tzv.\ \textit{best practices} ukladania,
validovania hesiel u implementátorov
\item slabé zabezpečenie aplikácie/vysoká exponovanosť poskytovateľov
\item sofistikovanosť útokov
\item časté \textit{breache} hesiel, resp. \textit{hashov}, PII a ich výskyt vo
verejných zdrojoch
\end{itemize}
\end{block}
\end{frame}
\subsection{Metódy útoku}
\begin{frame}{}
\begin{block}{Metódy útoku}
\begin{itemize}[<+>]
\item MiTM
\item phishing
\item credential \textit{stuffing}
\item SQL injection
\item hash cracking
\item rainbow tables
\item únik PII (osobných údajov)
\end{itemize}
\end{block}
\end{frame}
\subsection{Metódy obrany}
\begin{frame}{}
\begin{block}{Metódy obrany}
\begin{itemize}[<+>]
\item transport security (TLS) za použitia šifier podporujúcich forward secrecy
\item Content Security Policy
\item robustná autentizácia a autorizácia
\item izolácia používateľských rol
\item vyžadovanie komplexných (hlavne dlhých) hesiel, rotácia hesiel v rozumnom intervale
\item silné algoritmy na hashovanie hesiel, ideálne + \textit{salt}
(Argon2id, \texttt{bcrypt})
\item šifrovanie používateľských dát (at-rest) kľúčom, ktorý ovláda len používateľ
\item MFA (TOTP) povinne minimálne pre privilegované účty
\item parametrické SQL queries, sanitácia používateľských vstupov
\item rate-limiting
\item sledovanie udalostí (event monitoring), externe ukladané logy
\end{itemize}
\end{block}
\end{frame}
\section{Praktická časť}
\begin{frame}{}
\center
\huge
\textbf{Praktická časť}
\end{frame}
\subsection{Prehľad}
\begin{frame}{Návrh aplikácie}
\begin{block}{Praktická časť}
\begin{itemize}
\item<1> návrh aplikácie
% \item<2> implementácia
\item<2> konfigurácia
\frametitle<2->{Implementácia}
\framesubtitle<2>{Konfugurácia}
\item<3> integrita uložených dát
\framesubtitle<3>{Integrita dát}
\item<4> autenticita uložených dát
\framesubtitle<4>{Autenticita dát}
\item<5> validácia
\frametitle<5>{Validácia}
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{}
\begin{block}{Vývoj}
\begin{itemize}
\item program je písaný v Go, konfigurácia využíva Dhall, webové štýly
CSS
\item kód je verzionovaný nástrojom \texttt{git}
\item kód je konzistentne analyzovaný staticky (\textasciitilde{}25
linterov)
\item kód je kompilovaný zo zdrojov v CI na dvoch rôznych systémoch
\item program má vbudovaný \textit{live} mód, v ktorom čerpá templaty z
disku
\item program má vbudovaný \textit{devel} mód, v ktorom reloaduje všetky
templaty pri každom requeste
\item projekt má podporu pre hot-reloading pri zmene zdrojových kódov
alebo templatov
\end{itemize}
\end{block}
\end{frame}
\subsection{Návrh aplikácie}
\begin{frame}{}
\begin{block}{Požiadavky}
\begin{itemize}
\item minimum JavaScriptu (na ladenie, žiaden v produkcii) - Server-side
rendering
\item dostupné len explicitne deklarované endpointy a \textit{pathy}
\item program odpovedá len na explicitne povolené HTTP metódy (GET/POST)
\item endpointy servírujú hypermedia
\item overovanie autenticity každej webovej požiadavky
\item overovanie miery autorizácie každej webovej požiadavky
(admin/ne-admin)
\item v prípade chyby nevynáša program viac ako je potrebné
\item správa používateľov
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{}
\begin{block}{Požiadavky}
\begin{itemize}
\item štruktúrované loggovanie
\item integrácia s externým úložiskom logov
\item \textit{dark mode}
\item responzívne rozhranie
\item lokálny import breach dát na základe predefinovaného formátu
(\texttt{YAML})
\item integrácia so vzdialenou službou na overovanie kompromitácie hesiel
\end{itemize}
\end{block}
\end{frame}
\subsection{Konfigurácia}
\begin{frame}{}
\begin{block}{Konfigurácia}
\begin{itemize}
\item Dhall - striktne typovaný jazyk
\item programovateľné konfiguračné súbory
\item validácia
\item konfig.\ výrazom sa dá spočítať a \textit{pripnúť} hash
\item program pri spustení validuje konfiguráciu na základe predeklarovanej schémy
\end{itemize}
\end{block}
\end{frame}
\subsection{Integrita a autenticita dát}
\begin{frame}{}
\begin{block}{Integrita sessions}
\begin{itemize}[<+>]
\item session cookies sú overené za pomoci HMAC-SHA512
\item session cookies sú šifrované s AES256
\item kľúče k obom sú programom základne validované pri spustení
\begin{itemize}[<3>]
\item dĺžka kľúča (keďže je povolené dodať hex alebo surový reťazec)
\item kľúč o samých nulách je odmietnutý
\end{itemize}
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{}
\begin{block}{Integrita a autenticita dát}
\begin{itemize}[<+>]
\item používateľské dáta sú šifrované at-rest
\item administrátor v aplikácii nemá prístup k používateľským údajom mimo
isAdmin/isActive
\item kľúč k dátam má používateľ
\begin{itemize}[<3>]
\item používateľ má v skutočnosti heslo vstupujúce do \texttt{PBKDF}
predtým, než je použité ako AES kľúč, ktorým je šifrovaná samotná
\texttt{age} identita
\item slabé heslá sú menší problém
\item v prípade zmeny hesla sa znovu zašifruje \texttt{age} kľúč
\end{itemize}
\item používateľ, ktorý dešifruje dáta si môže byť istý, že s nimi nebolo
manipulované (prišlo by k chybe dešifrovania)
\item aplikácia by dodatočne mala využívať HMACy pre vyšší stupeň
dôveryhodnosti dát
\end{itemize}
\end{block}
\end{frame}
\subsection{Izolácia používateľov}
\begin{frame}{}
\begin{block}{Izolácia používateľov}
\begin{itemize}[<+>]
\item používateľ má na základe pridelenej roly oprávnené akcie, ktoré môže vykonávať
\item obyčajný používateľ môže zadávať heslo na kontrolu kompromitácie, admin nie
\item obyčajný používateľ nemôže vytvárať nových používateľov, admin áno
\end{itemize}
\end{block}
\end{frame}
\subsection{Validácia}
\begin{frame}{Testovanie}
\begin{block}{Unit testy}
\begin{itemize}
\item pokrytie (coverage) 6.2-77\%, v závislosti na balíčku (konkr.\
súčasti aplikácie)
\item \texttt{go test ./...}
\end{itemize}
\end{block}
\begin{block}{Integračné testy}
\begin{itemize}
\item kontrola integrácie s podporovanými databázami (Postgres, SQLite3)
\item kontrola vytvárania/úpravy používateľov
\item kontrola dostupnosti endpointov, správnosti odpovedí
\end{itemize}
\end{block}
\end{frame}
\section{Výzvy}
\begin{frame}{Výzvy}
\begin{block}{Výzvy}
\begin{itemize}
\item vytvorenie konfiguračnej schémy
\item vytváranie webového používateľského rozhrania
\item vytvorenie šifrovacia schéma pre encryption-at-rest používateľských dát
\item integrácia s online službou na overenie hesiel
\item lokálny import dát
\end{itemize}
\end{block}
\end{frame}
\section{Výhrady k diplomovej práci}
\begin{frame}{Výhrady}
\begin{block}{Chýbajúci komplexný návrh databázy}
\begin{itemize}
\item autor súhlasí, že by bolo vhodné databázovú schému detailnejšie popísať
\item schéma existuje v kóde (\texttt{./ent/schema/})
\item schému je možné získať z kódu s \texttt{go run -mod=mod entgo.io/ent/cmd/ent describe ./ent/schema}
\item aplikácia si sama deteguje stav databázy a buď odmietne na nej
pracovať, alebo si schéma vytvorí sama
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Výhrady}
\begin{block}{Neplatný DNS záznam pre testovacie prostredie}
V danom čase bolo testovacie prostredie naozaj nedostupné, čo bolo odvtedy
vyriešené. Aplikácia je nasadená na \url{https://testpcmt.dotya.ml}, beží
za pomoci \textit{rootless} Podman v OCI kontajneri a v rámci \textit{podu}
má dostupnú databázu Postgres. Aplikácia je nasadená za reverzným proxy
(Nginx) a transport je chránený TLS vďaka certifikátu vydanému Let's
Encrypt. Pokus o vydanie certifikátu inou CA by zlyhal kvôli hodnote
záznamu \texttt{CAA}.
\end{block}
\begin{block}{Nedostatočne zdokumentovaná aplikácia}
Autor plne súhlasí, že do práce by bolo vhodné doplniť množstvo
screenshotov. Autor sa domnieva, že rozhodnutie nepridávať do aplikácie
screenshoty bolo čiastočne ovplyvnené predstavou o kanonickosti
zdrojového kódu, čo je relatívne volatilný argument.
\end{block}
\end{frame}
\begin{frame}{Výhrady}
\begin{block}{Ďalšie výhrady}
\begin{itemize}
\item slabé ozdrojovanie niektorých častí, hlavne zo začiatku teoretickej
práce
\item chaotické názvy kapitol
\item neodôvodnená voľba služby HIBP (existuje tiež napr.\ \url{dehashed.com})
\end{itemize}
\end{block}
\end{frame}
\section*{Záver}
\begin{frame}[plain]{Záver}
\center
\huge
\textbf{Ďakujem za Vašu pozornosť!}
\end{frame}
\end{document}