BachelorThesisPresentation/presentation.tex

497 lines
14 KiB
TeX
Executable File

\documentclass[11pt,aspectratio=169,t]{beamer}
% Beamer listing show one stuff
% \beamerdefaultoverlayspecification{<+->}
% \setbeamercovered{transparent=50}
\setbeamercovered{transparent=20}
% Note stuff
\usepackage{pgfpages}
% \setbeamertemplate{note page}[plain]
% \setbeameroption{show notes on second screen=right}
\usepackage{acronym}
% Import Inkscape stuff
\usepackage{import}
\usepackage{xifthen}
\usepackage{pdfpages}
\usepackage{transparent}
\newcommand{\incfig}[2][1]{%
\def\svgwidth{#1\columnwidth}
\import{./figures/}{#2.pdf_tex}
}
\usepackage[per-mode=symbol,range-phrase = \text{--}]{siunitx}
%\newcommand*{\PRINTTODO}{}
\newcommand{\todo}[1]{
\textcolor{red}{TODO: #1}
\ifdefined\PRINTTODO
\PackageWarning{TODO:}{#1!}
\fi
}
\input{./variables.tex}
\input{./commands.tex}
\input{./acronyms.tex}
% Always use short form
\renewcommand{\ac}[1]{\acs{#1}}
\renewcommand{\acp}[1]{\acsp{#1}}
\title{\thesisTitle}
\date{20. July 2022}
\author{\authorName}
\usetheme{eth}
\colorlet{titlefgcolor}{ETHBlue}
\colorlet{accentcolor}{ETHRed}
\begin{document}
\titleframe
\section*{Introduction}
\begin{frame}{Introduction}
\begin{itemize}
\item \retbleed{} is a new transient execution attack
\item \ac{pf} based mitigation introduces zero overhead
\begin{itemize}
\item Is said to be incomplete
\end{itemize}
\end{itemize}
\pause
\begin{block}{Research Question 1}
Can be build a \ac{pf} free variant of \retbleed?
\end{block}
\pause
\begin{itemize}
\item In-depth mitigations seem to introduced large overheads
\end{itemize}
\pause
\begin{block}{Research Question 2}
What is the performance overhead of the in-depth mitigation?
\end{block}
\end{frame}
% \tocframe
\section{Background}
\begin{frame}{Branch Prediction Unit}
\begin{itemize}
\item Predicts the target of a branching instruction
\begin{itemize}
\item If the destination takes some time to be evaluated
\end{itemize}
\item Consists of multiple branch predictors
\end{itemize}
\medskip
\begin{columns}
\begin{column}[t]{0.4\textwidth}
\pause
\textbf{Direct/Indirect Branch} Predictor
\begin{itemize}
\item[Assumes:] Branches go to same location as they went before
\item[Implemented:] \ac{btb} which is indexed by \ac{pc} and auxiliary structures like \ac{bhb}
\end{itemize}
\end{column}
\begin{column}[t]{0.4\textwidth}
\pause
\textbf{Return Instruction} Predictor
\begin{itemize}
\item[Assumes:] Function return to where they are called from
\item[Implemented:] \ac{rsb}
\item[Property:] Falls back to \ac{btb} on:
\begin{itemize}
\item \ac{rsb} underflow (CoffeeLake)
\item Collision with indirect branch (Zen1/Zen2)
\end{itemize}
\end{itemize}
\end{column}
\end{columns}
\end{frame}
\begin{frame}{Retbleed}
\begin{itemize}
\item Is a Spectre V2 like attack targeting return instruction
\item<3-> Requires two primitive:
\begin{itemize}[<+(3)->]
\item[1.] \ac{rsb} falls back to \ac{btb}
\item[2.] \ac{bti} works across privilege boundaries
\end{itemize}
\end{itemize}
\visible<2->{
\incfig[0.8]{retbleed_goal}
}
\end{frame}
\begin{frame}[fragile]{Retbleed}{Why are \acp{pf} cause?}
\begin{itemize}
\item \ac{bti} across privilege boundaries
\begin{itemize}
\item Indirect jump from \verb+KBR_SRC'+ to \verb+KBR_DST+
\begin{itemize}
\item \verb+KBR_SRC+ and \verb+KBR_SRC'+ collide
\end{itemize}
\end{itemize}
\end{itemize}
\visible<+(1)->{
\incfig{retbleed_train_goal}
}
\end{frame}
\section{Speculative Retbleed}
\begin{frame}[c]{\mbox{}}
\begin{block}{\centering Goal}
\centering
Can be build a \ac{pf} free variant of \retbleed?
\end{block}
\end{frame}
\begin{frame}{The Idea}
$\Rightarrow$ \alert{Speculative \ac{bti}}
\bigskip
\begin{columns}
\visible<3->{
\begin{column}[t]{0.48\textwidth}
Pros:
\begin{itemize}
\item No \ac{pf} is raised
\item \ac{bti} still works
\end{itemize}
\end{column}
}
\visible<4->{
\begin{column}[t]{0.48\textwidth}
\pause
Cons:
\begin{itemize}
\item Does it actually work?
\end{itemize}
\end{column}
}
\end{columns}
\bigskip
\centering
\visible<2->{
\incfig[0.8]{retbleed_spec_train_goal}
}
\end{frame}
\begin{frame}{Speculative \textsc{Ret}-\ac{bti}}{\textsc{Ret}-\ac{bti} PoC in Detail}
\begin{itemize}
\item Verify that spec \ac{bti} works in same privilege domain
\item \textsc{Ret}-\ac{bti} exploits the first required primitive
\end{itemize}
\medskip
\visible<+(1)->{
Training Phase:
\begin{center}
\incfig[0.8]{ret_bti_train}
\end{center}
}
\medskip
\visible<+(1)->{
Speculation Phase:
\begin{center}
\incfig[0.8]{ret_bti_spec}
\end{center}
}
\end{frame}
\begin{frame}{Speculative \textsc{Ret}-\ac{bti}}
\begin{itemize}
\item Use Spectre\ac{rsb} to cause speculation
\item History needs to be equivalent
\end{itemize}
\medskip
\visible<+(1)->{
\begin{columns}
\begin{column}[t]{0.2\textwidth}
Training Phase:
\end{column}
\begin{column}[t]{0.6\textwidth}
\vspace{-20pt}
\incfig{ret_spec_bti_train}
\end{column}
\end{columns}
}
\visible<+(1)->{
\begin{columns}
\begin{column}[t]{0.2\textwidth}
Speculation Phase:
\end{column}
\begin{column}[t]{0.6\textwidth}
\incfig{ret_spec_bti_spec}
\end{column}
\end{columns}
}
\end{frame}
\begin{frame}{Speculative \textsc{Ret}-\ac{bti}}{Results}
\begin{itemize}
\item Speculative \ac{bti} works in same privilege domains
\begin{itemize}
\item For Intel CoffeeLake and AMD Zen1, Zen1+ and Zen2
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}{Speculative CP-\ac{bti}}{CP-\ac{bti} PoC in Detail}
\begin{itemize}
\item Verify that spec \ac{bti} works across privilege boundaries
\item CP-\ac{bti} exploits the second required primitive
\end{itemize}
\medskip
\visible<+(1)->{
\begin{columns}
\begin{column}[t]{0.2\textwidth}
Training Phase:
\end{column}
\begin{column}[t]{0.5\textwidth}
\vspace{-25pt}
\incfig{cp_bti_train}
\end{column}
\end{columns}
}
\visible<+(1)->{
\begin{columns}
\begin{column}[t]{0.2\textwidth}
Speculation Phase:
\end{column}
\begin{column}[t]{0.5\textwidth}
\vspace{-25pt}
\incfig{cp_bti_spec}
\end{column}
\end{columns}
}
\end{frame}
\begin{frame}{Speculative CP-\ac{bti}}
\begin{itemize}
\item Again, use Spectre\ac{rsb} to cause speculation
\item History needs to be equivalent
\end{itemize}
\medskip
\visible<+(1)->{
\begin{columns}
\begin{column}[t]{0.2\textwidth}
Training Phase:
\end{column}
\begin{column}[t]{0.6\textwidth}
\vspace{-45pt}
\incfig{cp_spec_bti_train}
\end{column}
\end{columns}
}
\vspace{-20pt}
\visible<+(1)->{
\begin{columns}
\begin{column}[t]{0.2\textwidth}
Speculation Phase:
\end{column}
\begin{column}[t]{0.6\textwidth}
\incfig{cp_spec_bti_spec}
\end{column}
\end{columns}
}
\end{frame}
\begin{frame}{Speculative CP-\ac{bti}}{Results}
\begin{itemize}
\item Speculative \ac{bti} works across privilege boundaries
\begin{itemize}
\item Shown only for Intel CoffeLake
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}[c]{Summary}
\centering
$\Rightarrow$ \alert{It is possible to create a version of \retbleed{} which does not rely on \acp{pf}!}
\end{frame}
\section{Mitigation Overhead}
\begin{frame}[c]{\mbox{}}
\begin{block}{\centering Goal}
\centering
What is the performance overhead of the in-depth mitigation?
\end{block}
\end{frame}
\begin{frame}{In-Depth Mitigation Overview}
\centering
% \begin{tabular}{l || r | r || r | r}
% \toprule
% & \multicolumn{2}{c||}{Single} & \multicolumn{2}{c}{Multiple}\\
% Microarch. & Norm. Index Score & Overhead in \si{\percent} & Norm. Index Score & Overhead in \si{\percent} \\
% \midrule
% Coffee Lake & $0.78869$ & $26.79$ & $0.81910$ & $22.09$\\\midrule
% Zen1 & $0.87993$ & $13.65$ & $0.95128$ & $5.12$\\
% Zen1(NoSmt) & $0.88631$ & $12.83$ & $0.73145$ & $36.71$\\\midrule
% Zen2 & $0.86586$ & $15.49$ & $0.88393$ & $13.13$\\
% \bottomrule
% \end{tabular}
\begin{tabular}{l || r | r}
\toprule
Microarch. & Single Overhead in \si{\percent} & Multiple Overhead in \si{\percent} \\
\midrule
Coffee Lake & $26.79$ & $22.09$\\\midrule
Zen1 & $13.65$ & $5.12$\\
Zen1(NoSmt) & $12.83$ & $36.71$\\\midrule
Zen2 & $15.49$ & $13.13$\\
\bottomrule
\end{tabular}
\end{frame}
\section{Conclusion}
\begin{frame}{Conclusion}
\begin{itemize}[<+->]
\item[$\Rightarrow$] Spec \ac{bti} works in same and cross privilege domain
\item[$\Rightarrow$] \ac{pf} free \retbleed{} is possible
\item[$\Rightarrow$] In-depth mitigations introduce potentially huge overheads
\end{itemize}
\end{frame}
\bgroup
\setbeamercolor{background canvas}{bg=black}
\setbeamertemplate{navigation symbols}{}
\begin{frame}[plain]{}
\end{frame}
\egroup
\begin{frame}[fragile]{Rogue Function}
\vspace{-20pt}
\begin{verbatim}
asm(
".align 0x80000\n\t"
"rogue_spec_dst:\n\t"
"callq rogue_gadg_dst\n\t"
// Training: execute following code speculatively
// Misspredict: execute following code architectually
"jmp *%r9\n\t"
"rogue_gadg_dst:\n\t"
// If %rsi = 1: add 8 to rsp => cause speculation
// If %rsi = 0: do othing
"lfence\n\t"
"movq %rsp, %rdx\n\t"
"addq $0x8, %rdx\n\t"
"cmp $1, %rsi\n\t"
"cmoveq %rdx, %rsp\n\t"
"clflush (%rsp)\n\t"
"ret\n\t"
"rogue_spec_dst_end:\n\t"
);
\end{verbatim}
\end{frame}
\begin{frame}{Speculative \textsc{Ret}-\ac{bti}}{Results}
\begin{itemize}
\item Speculative \ac{bti} works in same privilege domains
\begin{itemize}
\item For Intel CoffeeLake and AMD Zen1, Zen1+ and Zen2
\end{itemize}
\item Success rate in $\%$\\
\smallskip
\begin{center}
\begin{tabular}{l | c c c}
\toprule
& CoffeeLake & Zen1 & Zen2\\
\midrule
\textsc{Ret}-\ac{bti} & $56.00$ & $98.85$ & $99.31$\\
Spec \textsc{Ret}-\ac{bti} & $77.40$ & ? & ?\\
\bottomrule
\end{tabular}
\end{center}
\smallskip
\item Speculative \textsc{Ret}-\ac{bti} is less stable
\begin{itemize}
\item Standard Derivation is up to $10$ times as large
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}{Speculative CP-\ac{bti}}{Results}
\begin{itemize}
\item Speculative \ac{bti} works across privilege boundaries
\begin{itemize}
\item Shown only for Intel CoffeLake
\end{itemize}
\item Success rate in $\%$\\
\begin{center}
\begin{tabular}{l | c c}
\toprule
& CP-\ac{bti} & Spec CP-\ac{bti}\\
\midrule
CoffeeLake & $27.16$ & $89.93$\\
\bottomrule
\end{tabular}
\end{center}
\item Mean standard derivation of:
\begin{itemize}
\item CP-\ac{bti}: $0.13$
\begin{itemize}
\item Stable for $N$
\end{itemize}
\item Spec CP-\ac{bti}: $0.26$
\begin{itemize}
\item Decreases for increasing $N$
\end{itemize}
\end{itemize}
\end{itemize}
\medskip
\end{frame}
\begin{frame}{In-Depth Mitigation Overview}
\centering
\begin{tabular}{l || r | r || r | r}
\toprule
& \multicolumn{2}{c||}{Single} & \multicolumn{2}{c}{Multiple}\\
Microarch. & Norm. Index Score & Overhead in \si{\percent} & Norm. Index Score & Overhead in \si{\percent} \\
\midrule
Coffee Lake & $0.78869$ & $26.79$ & $0.81910$ & $22.09$\\\midrule
Zen1 & $0.87993$ & $13.65$ & $0.95128$ & $5.12$\\
Zen1(NoSmt) & $0.88631$ & $12.83$ & $0.73145$ & $36.71$\\\midrule
Zen2 & $0.86586$ & $15.49$ & $0.88393$ & $13.13$\\
\bottomrule
\end{tabular}
% \begin{tabular}{l || r | r}
% \toprule
% Microarch. & Single Overhead in \si{\percent} & Multiple Overhead in \si{\percent} \\
% \midrule
% Coffee Lake & $26.79$ & $22.09$\\\midrule
% Zen1 & $13.65$ & $5.12$\\
% Zen1(NoSmt) & $12.83$ & $36.71$\\\midrule
% Zen2 & $15.49$ & $13.13$\\
% \bottomrule
% \end{tabular}
\medskip
\begin{itemize}
\item Benchmark Suit: Byte-UnixBench
\item Geometric Mean of the median of $10$ invocations of each workload
\item Overhead calculated as $\frac{\text{unpatched}}{\text{patched}} - 1$
\end{itemize}
\end{frame}
\end{document}