diff --git a/presentation.tex b/presentation.tex index 9ce9583..346e1f4 100644 --- a/presentation.tex +++ b/presentation.tex @@ -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}