\documentclass{beamer} \let\textmdorig\textmd \let\textscorig\textsc \let\textttorig\texttt \usepackage[french]{babel} \usepackage[T1]{fontenc} \usepackage{csquotes} \usepackage{hyperref} \usepackage{footmisc} \usepackage{textcomp} \usepackage{amsmath} \usepackage{lmodern} \usepackage{xcolor} \usepackage{syntax} \usepackage{emoji} \usepackage{float} \newcommand{\ang}[1]{\emph{#1}} % texte anglais \newcommand{\TODO}[1]{\color{red}#1} \graphicspath{ {./figs/} } \usetheme{Madrid} \title{Soutenance de stage} \author{Augustin LUCAS} \institute[TARAN, IRISA]{ Encadré par Guillaume DIDIER, Angeliki KRITIKAKOU\\ Équipe TARAN, Laboratoire IRISA } \date{} \begin{document} \maketitle \begin{frame}{Plan} \begin{itemize} \item Contexte \begin{itemize} \item Hiérarchie de cache \item Attaques par canal auxiliaire sur le cache \end{itemize} \item Mise en application : analyse d'un système à deux \ang{sockets} \begin{itemize} \item Mise en oeuvre \item Topologie \ang{miss} \item Topologie \ang{hit} \end{itemize} \end{itemize} \end{frame} \begin{frame}{Hiérarchie de cache} \begin{center} \includegraphics[height=0.8\textheight]{Cores} \end{center} %Hiérarchie de cache \end{frame} \begin{frame}{Hiérarchie de cache} %Fonction de hachage \begin{center} \includegraphics[height=0.8\textheight]{hachage} \end{center} \end{frame} \begin{frame}{Cohérence de cache} \begin{center} \makebox[0.7\textwidth][r]{% \includegraphics<1->[scale=0.8]{protocols/exclusive} } \vspace{1em} \makebox[0.7\textwidth][r]{% \includegraphics<2->[scale=0.8]{protocols/modified} } \vspace{1em} \makebox[0.7\textwidth][r]{% \includegraphics<3->[scale=0.8]{protocols/shared} } \vspace{1em} \makebox[0.7\textwidth][r]{% \includegraphics<4->[scale=0.8]{protocols/invalid} } \end{center} \end{frame} \begin{frame}{Multi-\textit{socket}} \begin{center} \includegraphics[width=0.9\textwidth]{multi-socket} \end{center} \end{frame} \begin{frame}{Multi-\textit{socket}} \begin{center} \vspace{-10cm} \includegraphics[width=0.9\textwidth]{multi-socket} \end{center} \end{frame} \begin{frame}{NUMA} \begin{center} \includegraphics[width=0.9\textwidth]{lstopo} \end{center} \end{frame} \begin{frame}{Attaques par canal auxiliaire sur le cache} %Canal auxiliaire Objectif des attaques étudiées \begin{itemize} \item<2-> Savoir quelles adresses mémoire un programme accède \item<3-> A permis des attaques récupérant des clés privées via OpenSSL \item<4-> A permis d'implémenter des enregistreurs de frappe (\ang{keylogger}) \end{itemize} \end{frame} \begin{frame}{Flush+Reload} \only<1>{ \begin{center} \includegraphics[height=0.7\textheight]{flushattacks/initialb} Observons le mécanisme proposé par Flush+Reload \end{center} } \only<2>{ \begin{center} \includegraphics[height=0.7\textheight]{flushattacks/flushhit0} L'attaquant (en \textit{Core 0}) appelle \texttt{clflush(0xfe3a)} \end{center} } \only<3>{ \begin{center} \includegraphics[height=0.7\textheight]{flushattacks/flushhit1} L'attaquant (en \textit{Core 0}) appelle \texttt{clflush(0xfe3a)} \end{center} } \only<4>{ \begin{columns}[c] \column{.5\textwidth} \begin{center} \includegraphics[height=0.6\textheight]{flushattacks/initialb} La victime charge \texttt{0xfe3a} \end{center} \column{.5\textwidth} \begin{center} \includegraphics[height=0.6\textheight]{flushattacks/flushhit1} La victime ne fait rien \end{center} \end{columns} } \only<5>{ \center{L'attaquant charge à nouveau \texttt{0xfe3a}}, en mesurant le temps nécessaire \begin{columns}[c] \column{.5\textwidth} \begin{center} \includegraphics[height=0.6\textheight]{flushattacks/reloadhitb} \emoji{stopwatch} \sim{1ns} \end{center} \column{.5\textwidth} \begin{center} \includegraphics[height=0.6\textheight]{flushattacks/reloadmissb} \emoji{stopwatch} \sim{10-100ns} \end{center} \end{columns} } %F+R % 1. état actuel, émoji dans les caches [0x076e: :smile:] [0xfe3a: :disco:] % 2. flush(0xfe3a) % 3. attente, on sépare en deux options % 4. reload, temps différent, mettre une petite horloge en bas \end{frame} \begin{frame}{Flush+Flush} %F+F % 1. état actuel, émoji dans les caches [0x076e: :smile:] [0xfe3a: :disco:] % 2. flush(0xfe3a) % 3. attente, on sépare en deux options % 4. flush, temps différent, mettre une petite horloge en bas \only<1>{ \begin{center} \includegraphics[height=0.7\textheight]{flushattacks/initialb} Observons le mécanisme proposé par Flush+Flush \end{center} } \only<2>{ \begin{center} \includegraphics[height=0.7\textheight]{flushattacks/flushhit0} L'attaquant (en \textit{Core 0}) appelle \texttt{clflush(0xfe3a)} \end{center} } \only<3>{ \begin{center} \includegraphics[height=0.7\textheight]{flushattacks/flushhit1} L'attaquant (en \textit{Core 0}) appelle \texttt{clflush(0xfe3a)} \end{center} } \only<4>{ \begin{columns}[c] \column{.5\textwidth} \begin{center} \includegraphics[height=0.6\textheight]{flushattacks/initialb} La victime charge \texttt{0xfe3a} \end{center} \column{.5\textwidth} \begin{center} \includegraphics[height=0.6\textheight]{flushattacks/flushhit1} La victime ne fait rien \end{center} \end{columns} } \only<5>{ \center{L'attaquant appelle \texttt{clflush(0xfe3a)}, en mesurant le temps nécessaire} \begin{columns}[c] \column{.5\textwidth} \begin{center} \includegraphics[height=0.6\textheight]{flushattacks/flushhit0} \end{center} \column{.5\textwidth} \begin{center} \includegraphics[height=0.6\textheight]{flushattacks/flushhit1} \end{center} \end{columns} } \only<6>{ \center{L'attaquant appelle \texttt{clflush(0xfe3a)}, en mesurant le temps nécessaire} \begin{columns}[c] \column{.5\textwidth} \begin{center} \includegraphics[height=0.6\textheight]{flushattacks/flushhit1} \emoji{stopwatch} \sim{175 cycles} \end{center} \column{.5\textwidth} \begin{center} \includegraphics[height=0.6\textheight]{flushattacks/flushhit1} \emoji{stopwatch} \sim{160 cycles} \end{center} \end{columns} } \end{frame} \begin{frame}{Problématique} \begin{itemize} \item<1-> La différence de temps est moindre \item<2-> La décision de \textit{hit} ou \textit{miss} demande une bonne précision \item<3-> Le mieux est de calibrer par paire de coeurs, et pour chaque \textit{slice} % Cela a été fait en \textit{reversant} les messages échangés pour des machines à 1 socket, on va proposer une analyse pour des machines à 2 sock. \end{itemize} %Objectif \end{frame} \begin{frame}{Protocole expérimental} \center{ \includegraphics[height=0.15\textheight]{logo-Grid5000} \vspace{4em} \includegraphics[height=0.1\textheight]{logo-Kadeploy} } %Protocole expérimental \end{frame} \begin{frame}{Premiers résultats} %Premiers résultats \begin{figure}[ht] \centering \includegraphics[height=0.7\textheight]{hit-slice-bad} \caption{Premiers résultats sur \textit{paravance} (\textit{hit})} \end{figure} \end{frame} \begin{frame}{Premiers résultats} \begin{itemize} \item<1-> Beaucoup de bruit \item<2-> La fréquence, fixée avec le profil \textbf{performance} de \texttt{cpufreq} ne l'est pas réellement \item<3-> L'architecture NUMA change fréquemment les adresses physiques des données \end{itemize} \end{frame} \begin{frame}{Résultats après rectification} \begin{figure}[ht] \centering \includegraphics[height=0.7\textheight]{hit-slice-good} \caption{Nouveaux résultats sur \textit{paravance} (\textit{hit})} \end{figure} \end{frame} \begin{frame}{Modèle \ang{miss}} %Modèle miss, chemin de pensée \begin{itemize} \item Ne dépend pas du coeur de la victime \item Le temps minimal à \textit{slice} fixée est croissant selon la distance à l'autre \textit{socket} dans le sens horaire \item Les variations restantes indiquent le chemin suivant \end{itemize} \center{ \includegraphics[scale=0.5]{pattern-hor} } \end{frame} \begin{frame}{Modèle \ang{miss}} \begin{enumerate} \item Le coeur attaquant contacte la \ang{slice} locale en suivant le chemin précédent \item La \ang{slice} locale contacte la \ang{slice} distante en passant par le QPI. Le trajet de la \ang{slice} locale au QPI se fait dans le sens horaire, celui du QPI à la \ang{slice} distante dans le sens anti-horaire. \item Si le \ang{Home Agent} distant doit être contacté, cela se fait à ce moment, en faisant un tour complet de la \ang{socket} pour revenir à la \ang{slice} distante. \item Le chemin est parcouru à l'envers pour repasser par la \ang{slice} locale jusqu'au coeur attaquant \end{enumerate} \end{frame} \begin{frame}{Modèle \ang{miss}} \begin{figure}[ht] \centering \includegraphics[scale=0.35]{predicted-miss} \caption{Prédictions pour un \ang{miss}} \end{figure} \end{frame} \begin{frame}{Modèle \ang{hit}} \begin{itemize} \item<1-> On cherche un modèle cohérent avec le modèle des \ang{miss}, car le fonctionnement initial doit être le même ; \item<2-> Le temps d'exécution pour un \ang{hit} dépend largement du fait d'être inter-\ang{socket}, donc si la première \ang{slice} contactée contient la ligne en cache, tout semble s'arrêter. \end{itemize} \end{frame} \begin{frame}{Modèle \ang{hit}} \begin{center} Cela suggère le modèle suivant: \vspace{3em} \includegraphics[scale=0.7]{model-hit} \end{center} \end{frame} \begin{frame}{Modèle \ang{hit}} \begin{figure}[ht] \centering \includegraphics[scale=0.18]{predicted-remote-hit-cut} \caption{Prédictions pour un \ang{hit} au sein de \ang{sockets} différents} \end{figure} \end{frame} \begin{frame}{Pistes pour la suite} \end{frame} \end{document}