tex: add content
This commit is contained in:
parent
026e93212b
commit
d1d1f9db44
297
presentation.tex
297
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}
|
||||
|
Reference in New Issue
Block a user