tex: add content
This commit is contained in:
parent
026e93212b
commit
d1d1f9db44
297
presentation.tex
297
presentation.tex
@ -29,8 +29,301 @@
|
|||||||
\tableofcontents[pausesections]
|
\tableofcontents[pausesections]
|
||||||
\end{frame}
|
\end{frame}
|
||||||
|
|
||||||
\begin{frame}[plain]{Conclusion}
|
\section{Teroretická časť}
|
||||||
\textbf{Thank you for your attention.}
|
\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{frame}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
Reference in New Issue
Block a user