497 lines
14 KiB
TeX
Executable File
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}
|