diff --git a/latex/projet_semestre.pdf b/latex/projet_semestre.pdf index abedbd2020a307e357bdebaabc39be9bc88e00ce..9d3f5bfade5c5beca93995846a298b8d216aefcc 100644 Binary files a/latex/projet_semestre.pdf and b/latex/projet_semestre.pdf differ diff --git a/latex/projet_semestre.synctex.gz b/latex/projet_semestre.synctex.gz index bb6daf43b03dde43082511e9d970f237d7b7031d..bfdf97f0667c3598a4d08222d1c4393cb8f31219 100644 Binary files a/latex/projet_semestre.synctex.gz and b/latex/projet_semestre.synctex.gz differ diff --git a/latex/projet_semestre.tex b/latex/projet_semestre.tex index 567ede1272a2efd3b93ea5a5ee39ad0f34f2c864..ea689d695d09f0d4d9d529c75f29775e0e925433 100644 --- a/latex/projet_semestre.tex +++ b/latex/projet_semestre.tex @@ -42,7 +42,7 @@ Le développement actif de la DMI s'est arrêté le 31 décembre 2003 et la fin de vie du produit a été conclue définitivement en mars 2005.\cite{dmi_end_life}\\\\ Depuis, le nouveau standard est System Management BIOS (SMBIOS), repris par DMTF (développeur de la DMI) afin de permettre une communication simplifiée des composants matériels aux platformes qui souhaites récuperer les informations de ces derniers.\cite{dmi_smbios_spec} \subsubsection{Méthode de détection} - Lorsqu'un système est virtualisé, si aucune option n'est spécifiée, alors QEMU charge le fichier binaire \textit{/usr/share/qemu/bios-256k.bin} qui est une implémentation de \textit{Legacy BIOS}. + Lorsqu'un système est virtualisé, si aucune option n'est spécifiée, alors QEMU charge le fichier binaire \textit{/usr/share/qemu/bios-256k.bin} qui est une implémentation de \textit{Legacy BIOS}.\\\\ Sous linux, Il est possible de détecter la virtualisation d'une OS en scannant des fichiers exposés dans le dossier \textit{/sys/class/dmi/id}, correspondant à certaines informations contenues dans les tables DMI/SMBIOS: \begin{itemize} \item Nom de produit, \textit{/sys/class/dmi/id/product\_name} @@ -72,7 +72,7 @@ \begin{itemize} \item Sans aucune option BIOS passée à QEMU, l'implémentation par défaut du \textit{legacy BIOS} ne met pas ce bit à 1. \item Si nous souhaitons utiliser UEFI, alors nous devons passer un fichier de BIOS à QEMU, cependant aucune option ne permet explicitement de ne pas mettre ce bit à 1.\\\\ - Alors il est possible de modifier le code source de QEMU (version 9.2.50), dans le fichier \textit{hw/smbios/smbios.c}. Dans ce fichier nous retrouvons le code suivant pour la construction de la table SMBIOS (type 0):\\\\ + Alors il est possible de modifier le code source de QEMU (ici, version 9.2.50), dans le fichier \textit{hw/smbios/smbios.c}. Dans ce fichier nous retrouvons le code suivant pour la construction de la table SMBIOS (type 0):\\\\ Dans la fonction \textit{smbios\_build\_type\_0\_table}, nous pouvons retrouver la valeur suivante: \begin{lstlisting}[language=c,style=AntoineStyle] t->bios_characteristics_extension_bytes[1] = 0x14; @@ -118,7 +118,7 @@ Une première méthode de détection de virtualisation est de vérifier l'output des registres \textit{ebx,ecx et edx} de la \textit{leaf} 0.\\\\ Ces registres contiennent le \textit{vendor\_id}\cite{intel_doc_2020}, qui est modifié par les hyperviseurs avec leur ID.\\\\ Une deuxième méthode est de vérifier le bit 31 du registre \textit{ecx} qui correspond à la présence d'un hypervisor dans la leaf \textit{0x1}.\cite{amd_doc_vol2_2024}.\\\\ - En temps normal, ce bit n'est pas utilisé par Intel (bit toujours à 0)\cite{intel_doc_2020}, alors que AMD le documente comme réservé, étant utilisé par les hyperviseurs pour annoncer leur présence dans les CPUs virtuels.\\\\ + En temps normal, ce bit n'est pas utilisé par les CPUs physiques (bit toujours à 0)\cite{intel_doc_2020}, AMD le documente comme réservé, étant utilisé par les hyperviseurs pour annoncer leur présence dans les CPUs virtuels.\\\\ Dans la pratique, KVM, que ce soit Intel ou AMD, met ce bit à 1 pour s'annoncer.\\\\ Une troisième méthode est de regarder les données contenues dans la \textit{leaf 0x40000000}, utilisée pour retourner la signature de KVM dans les registres \textit{ebx à edx}. \subsubsection{Parades} @@ -135,7 +135,16 @@ \begin{lstlisting}[language=bash] qemu-system-x86_64 [...] -cpu host,hypervisor=off,kvm=off [...] \end{lstlisting} - Ceci désactive la signature retourner par KVM dans la \textit{leaf 0x40000000} + Ceci désactive la signature retourner par KVM dans la \textit{leaf 0x40000000} et met les valeurs de ces \textit{leaves} à 0. + \subsection{Température} + \subsubsection{Explication} + Dans un système physique, les composants chauffent lorsqu'un système tourne. Il y a un besoin de logger ces températures afin de pouvoir prendre des mesures protectrices si un système surchauffe.\\\\ + Dans un système virtualisé, il n'y a pas de capteur de température donc le guest OS ne charge pas les fichiers en lien avec la température. + \subsubsection{Méthode de détection} + Sous linux, il existe un dossier \textit{/sys/class/thermal/thermal\_zone0}. Dans une VM, ce chemin n'existe pas. Vérifier l'existance voire les contenus du dossier permet de détecter la virtualisation. + \subsubsection{Parades} + VMAware ne vérifie que l'existance du dossier et rien d'autre. Il suffirait de lancer un script au démarrage de la machine qui crée ce dossier afin de parier à la détection.\\\\ + Optionnellement --note: il existe un git qui re-build QEMU avec un nouveau device pour la température, potentiellement en écrire un moi aussi ou vérifier si qemu en propose déjà un\\\\ \clearpage \printbibliography[title=Bibliographie, heading=bibintoc] \end{document} diff --git a/notes/.vmaware.autosave.xopp b/notes/.vmaware.autosave.xopp deleted file mode 100644 index 23927b727fdb1e455e8a158f9c327766b50116d7..0000000000000000000000000000000000000000 Binary files a/notes/.vmaware.autosave.xopp and /dev/null differ diff --git a/notes/vmaware.xopp b/notes/vmaware.xopp index dd8f2471af71b325b67cea8c416cb63f800ba8d0..706abf64030c386e8ee89e7172cba0c431608f88 100644 Binary files a/notes/vmaware.xopp and b/notes/vmaware.xopp differ diff --git a/presentation_blanc/images/hepia_logo.jpg b/presentation_blanc/images/hepia_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d885c710084a2a1e79d08fe32170a848c446e3a1 Binary files /dev/null and b/presentation_blanc/images/hepia_logo.jpg differ diff --git a/presentation_blanc/images/hes-so_geneve_logo.png b/presentation_blanc/images/hes-so_geneve_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..90403e3e4c5829acf0a7e75507c64ef8fce032b1 Binary files /dev/null and b/presentation_blanc/images/hes-so_geneve_logo.png differ diff --git a/presentation_blanc/preambule.tex b/presentation_blanc/preambule.tex new file mode 100644 index 0000000000000000000000000000000000000000..836bbf45dfa193564ff98b15f89c147f99d3bd56 --- /dev/null +++ b/presentation_blanc/preambule.tex @@ -0,0 +1,114 @@ +\usepackage[utf8]{inputenc} +\usepackage{hyperref} +\usepackage{graphicx} +\usepackage{xcolor} +\usepackage{amsmath,amsfonts} +\usepackage{listings} +\usepackage{hyperref} +\usepackage{float} +\usepackage{attachfile} +\usepackage{placeins} +\usepackage{wrapfig} + +\usetheme{Madrid} + +\def\TITLE{Incognito-VM: Détection de virtualisation de machine et techniques d'évasion associées} +\def\DATE{\today} +\def\NAME{Ricardo Dos Santos} + +\setbeamertemplate{navigation symbols}{} +\addtobeamertemplate{frametitle}{}{\section{\insertframetitle}} +\definecolor{greyblue}{rgb}{0.219, 0.286, 0.341} + +\setbeamercolor{frametitle}{bg=greyblue, fg=white} + +\logo{\includegraphics[scale=0.17]{hepia_logo}\hspace*{7.3cm}\includegraphics[scale=0.15]{hes-so_geneve_logo}} + +\setbeamertemplate{section in toc}{\inserttocsectionnumber.~\inserttocsection} +\setbeamertemplate{subsection in toc}{\hspace{1cm}~\inserttocsubsection} + +% Optionally, apply the custom color to other headers +\setbeamercolor{section in head/foot}{bg=greyblue, fg=white} +\setbeamercolor{author in head/foot}{bg=greyblue, fg=white} +\setbeamercolor{title in head/foot}{bg=greyblue, fg=white} +\setbeamercolor{title}{bg=greyblue, fg=white} +\setbeamercolor{date in head/foot}{bg=greyblue, fg=white} +\setbeamercolor{itemize}{fg=greyblue} +\setbeamercolor{itemize item}{fg=greyblue} + + +% Define custom colors based on the example +\definecolor{backgroundcolor}{rgb}{0.16,0.16,0.16} % Dark background, close to black +\definecolor{promptcolor}{rgb}{0.06,0.53,0.53} % Teal color for the prompt +\definecolor{commandcolor}{rgb}{0.78,0.78,0.78} % Light grey for the command text + +% Define custom colors based on the image provided +\definecolor{backgroundcolor}{rgb}{0.12,0.12,0.12} % Dark background +\definecolor{commandcolor}{rgb}{0.12,0.56,0.16} % Greenish-blue color for commands +\definecolor{usercolor}{rgb}{0.5,0.5,0.5} % Grey for user text +\definecolor{inputtextcolor}{rgb}{0.85,0.85,0.85} % Light grey for input text + +\definecolor{mGreen}{rgb}{0,0.6,0} +\definecolor{mGray}{rgb}{0.5,0.5,0.5} +\definecolor{mPurple}{rgb}{0.58,0,0.82} +\definecolor{backgroundColour}{rgb}{0.95,0.95,0.92} + +\lstdefinestyle{CStyle}{ + backgroundcolor=\color{backgroundcolor}, + commentstyle=\color{mGreen}, + keywordstyle=\color{magenta}, + numberstyle=\tiny\color{mGray}, + stringstyle=\color{mPurple}, + basicstyle=\footnotesize, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=false, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=1, + language=C +} + +% lstlisting configuration for bash +\lstset{ + language=bash, + basicstyle=\ttfamily\small\color{inputtextcolor}, + breaklines=true, + breakatwhitespace=true, + showstringspaces=false, + commentstyle=\color{usercolor}\ttfamily, + keywordstyle=\color{commandcolor}\bfseries, + stringstyle=\color{inputtextcolor}\ttfamily, + frame=tlbr, % Top, left, bottom, right frames + framesep=5pt, % Frame separation + framerule=0pt, % Frame rule size + rulecolor=\color{backgroundcolor}, % Frame color + tabsize=1, + captionpos=b, + numbers=none, % No line numbers + backgroundcolor=\color{backgroundcolor}, + escapeinside={(*@}{@*)}, % Escape to LaTeX between (*@ and @*) +} + +\lstdefinestyle{AntoineStyle}{ + backgroundcolor=\color{backgroundcolor}, + commentstyle=\color{mGreen}, + keywordstyle=\color{magenta}, + numberstyle=\tiny\color{mGray}, + stringstyle=\color{codepurple}, + basicstyle=\ttfamily\small\color{inputtextcolor}, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=false, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=2 +} \ No newline at end of file diff --git a/presentation_blanc/pres.nav b/presentation_blanc/pres.nav new file mode 100644 index 0000000000000000000000000000000000000000..25dddd7cbc64781166b83b1af5fb279ce58e3381 --- /dev/null +++ b/presentation_blanc/pres.nav @@ -0,0 +1,72 @@ +\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}} +\headcommand {\beamer@framepages {1}{1}} +\headcommand {\beamer@sectionpages {1}{1}} +\headcommand {\beamer@subsectionpages {1}{1}} +\headcommand {\sectionentry {1}{{Table of contents}}{2}{{Table of contents}}{0}} +\headcommand {\slideentry {1}{0}{0}{2/2}{}{0}} +\headcommand {\beamer@framepages {2}{2}} +\headcommand {\beamer@sectionpages {1}{2}} +\headcommand {\beamer@subsectionpages {1}{2}} +\headcommand {\sectionentry {2}{{Objectifs du projet}}{3}{{Objectifs du projet}}{0}} +\headcommand {\slideentry {2}{0}{0}{3/3}{}{0}} +\headcommand {\beamer@framepages {3}{3}} +\headcommand {\beamer@sectionpages {1}{3}} +\headcommand {\beamer@subsectionpages {1}{3}} +\headcommand {\sectionentry {3}{{Raison du projet}}{4}{{Raison du projet}}{0}} +\headcommand {\slideentry {3}{0}{0}{4/4}{}{0}} +\headcommand {\beamer@framepages {4}{4}} +\headcommand {\beamer@sectionpages {1}{4}} +\headcommand {\beamer@subsectionpages {1}{4}} +\headcommand {\sectionentry {4}{{Outils utilisés}}{5}{{Outils utilisés}}{0}} +\headcommand {\slideentry {4}{0}{0}{5/5}{}{0}} +\headcommand {\beamer@framepages {5}{5}} +\headcommand {\beamer@sectionpages {1}{5}} +\headcommand {\beamer@subsectionpages {1}{5}} +\headcommand {\sectionentry {5}{{Informations Système}}{6}{{Informations Système}}{0}} +\headcommand {\slideentry {5}{0}{0}{6/6}{}{0}} +\headcommand {\beamer@framepages {6}{6}} +\headcommand {\beamer@sectionpages {1}{6}} +\headcommand {\beamer@subsectionpages {1}{6}} +\headcommand {\sectionentry {6}{{DMI/SMBIOS}}{7}{{DMI/SMBIOS}}{0}} +\headcommand {\slideentry {6}{0}{0}{7/7}{}{0}} +\headcommand {\beamer@framepages {7}{7}} +\headcommand {\beamer@sectionpages {1}{7}} +\headcommand {\beamer@subsectionpages {1}{7}} +\headcommand {\sectionentry {7}{{DMI/SMBIOS - Parades}}{8}{{DMI/SMBIOS - Parades}}{0}} +\headcommand {\slideentry {7}{0}{0}{8/8}{}{0}} +\headcommand {\beamer@framepages {8}{8}} +\headcommand {\beamer@sectionpages {1}{8}} +\headcommand {\beamer@subsectionpages {1}{8}} +\headcommand {\sectionentry {8}{{CPUID\relax {} \beamer@insertframetitlecontinuation }}{9}{{CPUID\relax {} \beamer@insertframetitlecontinuation }}{0}} +\headcommand {\slideentry {8}{0}{0}{9/9}{}{0}} +\headcommand {\beamer@framepages {9}{9}} +\headcommand {\beamer@sectionpages {1}{9}} +\headcommand {\beamer@subsectionpages {1}{9}} +\headcommand {\sectionentry {9}{{CPUID\relax {} \beamer@insertframetitlecontinuation }}{10}{{CPUID\relax {} \beamer@insertframetitlecontinuation }}{0}} +\headcommand {\slideentry {9}{0}{0}{9/10}{}{0}} +\headcommand {\beamer@framepages {9}{10}} +\headcommand {\beamer@sectionpages {1}{10}} +\headcommand {\beamer@subsectionpages {1}{10}} +\headcommand {\sectionentry {10}{{CPUID - Parades}}{11}{{CPUID - Parades}}{0}} +\headcommand {\slideentry {10}{0}{0}{11/11}{}{0}} +\headcommand {\beamer@framepages {11}{11}} +\headcommand {\beamer@sectionpages {1}{11}} +\headcommand {\beamer@subsectionpages {1}{11}} +\headcommand {\sectionentry {11}{{Température}}{12}{{Température}}{0}} +\headcommand {\slideentry {11}{0}{0}{12/12}{}{0}} +\headcommand {\beamer@framepages {12}{12}} +\headcommand {\beamer@sectionpages {1}{12}} +\headcommand {\beamer@subsectionpages {1}{12}} +\headcommand {\sectionentry {12}{{Température - Parades}}{13}{{Température - Parades}}{0}} +\headcommand {\slideentry {12}{0}{0}{13/13}{}{0}} +\headcommand {\beamer@framepages {13}{13}} +\headcommand {\beamer@sectionpages {1}{13}} +\headcommand {\beamer@subsectionpages {1}{13}} +\headcommand {\sectionentry {13}{{Conclusion}}{14}{{Conclusion}}{0}} +\headcommand {\slideentry {13}{0}{0}{14/14}{}{0}} +\headcommand {\beamer@framepages {14}{14}} +\headcommand {\beamer@partpages {1}{14}} +\headcommand {\beamer@subsectionpages {1}{14}} +\headcommand {\beamer@sectionpages {1}{14}} +\headcommand {\beamer@documentpages {14}} +\headcommand {\gdef \inserttotalframenumber {14}} diff --git a/presentation_blanc/pres.pdf b/presentation_blanc/pres.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4a4061c0a7d59d33e6cc9fe2aef099541b375c0c Binary files /dev/null and b/presentation_blanc/pres.pdf differ diff --git a/presentation_blanc/pres.snm b/presentation_blanc/pres.snm new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/presentation_blanc/pres.synctex.gz b/presentation_blanc/pres.synctex.gz new file mode 100644 index 0000000000000000000000000000000000000000..241fc96812d81d5cc61384a4d87437458e4f0662 Binary files /dev/null and b/presentation_blanc/pres.synctex.gz differ diff --git a/presentation_blanc/pres.tex b/presentation_blanc/pres.tex new file mode 100644 index 0000000000000000000000000000000000000000..e844c0922ec66e0ba8b5089387c3d98e53a8355e --- /dev/null +++ b/presentation_blanc/pres.tex @@ -0,0 +1,237 @@ +\documentclass{beamer} +\usepackage{import} +\import{./}{preambule.tex} +\graphicspath{ {./images/} } +\title{\TITLE} +\author{\NAME} +\date{\DATE} +\begin{document} + \frame{\titlepage} + + \begin{frame}[t] + \frametitle{Table of contents} + \setbeamertemplate{itemize items}[circle] + \begin{columns}[t] + \begin{column}{0.5\textwidth} + \tableofcontents[sections={2-8},firstsection=2] + \end{column} + \begin{column}{0.5\textwidth}\\ + \tableofcontents[sections={10-},firstsection=3] + \end{column} + \end{columns} + \end{frame} + + \begin{frame} + \frametitle{Objectifs du projet} + \setbeamertemplate{itemize items}[circle] + Le but de ce projet est de rendre une Machine Virtuelle (VM) indétectable: + \begin{itemize} + \item Il ne doit pas être possible de faire la différence entre une machine physique et virtuelle + \item Cette VM doit passer un maximum de tests d'outils de détections + \end{itemize} + \end{frame} + + \begin{frame}[t] + \frametitle{Raison du projet} + \setbeamertemplate{itemize items}[circle] + + \begin{block}{Questionnements} + Qu'est-ce-qu'une machine virtuelle permet de faire/faciliter comparer à une machine physique, quand la distinction entre les deux "n'existe plus" ?\\~\\ + Quels dangers cela a pour la sécurité informatique d'un system virtualisé ou son userspace ?\\~\\ + Au contraire, quels avantages cela peut avoir pour la sécurité informatique (outre les bénéfices de la virtualisation)? + \end{block}~\\ + Le but est d'explorer ces questions et d'y trouver, au minimum, un début de réponse, tout en mettant en pratique l'indétectabilité de la VM. + \end{frame} + + \begin{frame}[t] + \frametitle{Outils utilisés} + \setbeamertemplate{itemize items}[circle] + + \begin{block}{Acronymes} + \textit{QEMU:} Quick Emulation~\\ + \textit{KVM:} Kernel-based Virtual Machine + \end{block} + + \begin{columns}[t] + + \begin{column}{0.5\textwidth} + + \begin{itemize} + \item Utilisation de QEMU pour la gestion de VM. + \begin{itemize} + \item Chaque composant en ligne de commande + \item KVM pour du \textit{hardware-assisted virtualization} + \item Potentiel automatisation de la création de VM + \end{itemize} + \end{itemize} + \end{column} + \vline + \begin{column}{0.5\textwidth} + + \begin{itemize} + \item Outils utilisés pour la détection de VM + + \begin{itemize} + \item systemd-detect-virt + \item VM\textbf{A}ware + \item Al-khaser + \item Pafish + \end{itemize} + \end{itemize} + \end{column} + \end{columns} + \end{frame} + + \begin{frame}[t] + \frametitle{Informations Système} + \setbeamertemplate{itemize items}[circle] + \begin{itemize} + \item Operating System (OS): + \begin{itemize} + \item Linux + \item Kernel: 6.12.10-arch1-1 + \item Distribution: Archlinux (I use arch btw) + \item Rolling release, les versions présentées \textbf{vont} changer + \end{itemize} + \item CPU: + \begin{itemize} + \item Intel(R) Core(TM) i7-10750H + \end{itemize} + \item GPU: + \begin{itemize} + \item GeForce RTX 2070 Mobile + \item Driver: nvidia (proprietary) 565.77 (nvidia-dkms) + \end{itemize} + \item RAM + \begin{itemize} + \item 16G + \end{itemize} + \end{itemize} + \end{frame} + + \begin{frame}[t] + \frametitle{DMI/SMBIOS} + \setbeamertemplate{itemize items}[circle] + Desktop Management Interface (DMI) est un framework qui traque les composants d'un ordinateur (fin de vie en mars 2005).\\~\\ + System Management BIOS (SMBIOS) est le standard qui hérite de la mission de DMI.\\~\\ + \begin{alertblock}{Méthode de détection} + \begin{itemize} + \item Les informations de la table DMI/SMBIOS est rempli de strings qui spécifie le Virtual Machine Manager (VMM), donc QEMU.\\~\\ + \item SMBIOS a une table d'extension (byte 2), où le 4ème bit de cette table est mis à 1 pour indiquer la présence d'une VM. + \end{itemize} + \end{alertblock} + \end{frame} + \begin{frame}[t,fragile] + \frametitle{DMI/SMBIOS - Parades} + \setbeamertemplate{itemize items}[circle] + \begin{block}{Solution} + Il est possible de modifier les informations de la table DMI/SMBIOS dans QEMU. + \end{block} + \begin{columns}[t] + \begin{column}{0.5\textwidth} + \begin{itemize} + \item option \textbf{-smbios} de QEMU + \begin{itemize} + \item Permet de spécifier le type de la table à modifier et la valeur associée\\~\\ + \item \textbf{Ex:}\\ + \textit{-smbios type=0,vendor=AMI} + \end{itemize} + \end{itemize} + \end{column} + \vline + \begin{column}{0.5\textwidth} + \begin{itemize} + \item Il y a deux solution pour le 4ème bit dans SMBIOS: + \begin{itemize} + \item Legacy BIOS (option BIOS par défaut de QEMU) ne met pas ce bit à 1\\~\\ + \item Modifier le code source QEMU et hard-coder le bit à 0 (Obligatoire pour UEFI) + \end{itemize} + \end{itemize} + \end{column} + \end{columns} + \end{frame} + \begin{frame}[t,allowframebreaks] + \frametitle{CPUID} + \setbeamertemplate{itemize items}[circle] + CPUID est une instruction présente dans les CPUs x86:\\~\\ + Elle permet de récupérer des informations sur le CPU à l'aide des registres \textit{eax, ebx, ecx} et \textit{edx}.\\~\\ + La valeur contenue dans le registre \textit{eax} défini le type d'information que l'on reçoit, appeler \textit{leaf}. + \begin{block}{Type de \textit{leaves}} + \begin{itemize} + \item \textbf{Basic function}, où \textit{eax} accepte les valeurs: + \begin{itemize} + \item \textit{0x0} à \textit{0xB}, \textit{0xD} et \textit{0xF} + \item \textit{0x10}, \textit{0x12}, de \textit{0x14} à \textit{0x1A} et \textit{0x1F} + \end{itemize} + \item \textbf{Extended functions}, quand à elles, acceptent les valeurs \textit{eax} allant de \textit{0x80000000} à \textit{0x80000008}. + \end{itemize} + \end{block} + \framebreak + \begin{alertblock}{Méthode de détection} + \begin{itemize} + \item La valeur du \textit{vendor\_id} en \textit{leaf} 0 (\textit{eax = 0x0}) contient l'ID de la VMM en cas de virtualisation.\\~\\ + \item En \textit{leaf} 1 (\textit{eax = 0x1}), le bit 31 du registre \textit{ecx} est utilisé par la VMM pour indiquer sa présence (toujours à 0 pour les CPUs physiques).\\~\\ + \item Les VMMs utilisent une \textit{leaf} normalement invalide (\textit{eax = 0x40000000}) sur les CPUs physiques. \\~\\Cette \textit{leaf} contient la signature de KVM dans notre cas. + \end{itemize} + \end{alertblock} + \end{frame} + \begin{frame}[t,fragile] + \frametitle{CPUID - Parades} + \setbeamertemplate{itemize items}[circle] + \begin{block}{Solution} + Il est possible de passer des arguments sur le CPU utilisé par QEMU + \end{block} + \begin{columns}[t] + \begin{column}{0.5\textwidth} + \begin{itemize} + \item option \textbf{-cpu} de QEMU + \begin{itemize} + \item Permet de spécifier le modèle de l'hôte comme CPU à passer à QEMU.\\~\\ + \item Il est aussi possible de passer des arguments supplémentaires au modèle.\\~\\ + \item \textbf{Ex:}\\ + \textit{-cpu host,hypervisor=off} + \end{itemize} + \end{itemize} + \end{column} + \vline + \begin{column}{0.5\textwidth} + \begin{itemize} + \item Nous pouvons désactiver la signature KVM en passant un argument supplémentaire au modèle CPU:\\~\\ + \begin{itemize} + \item \textit{-cpu host,kvm=off} + \end{itemize} + \end{itemize} + \end{column} + \end{columns} + \end{frame} + \begin{frame}[t] + \frametitle{Température} + \setbeamertemplate{itemize items}[circle] + Un système physique logge les températures des composants afin de pouvoir prendre des mesures préventive en cas de surchauffe de l'ordinateur.\\~\\ + Dans une VM, il n'y a pas ce besoin, donc il n'existe aucun capteur de température.\\~\\ + \begin{alertblock}{Méthode de détection} + \begin{itemize} + \item Sous linux, il existe un dossier \textit{/sys/class/thermal/thermal zone0} à cet effet.\\~\\ + Si ce dossier n'existe pas dans le sytème, alors cela indique une potentielle virtualisation. + \end{itemize} + \end{alertblock} + \end{frame} + \begin{frame}[t] + \frametitle{Température - Parades} + \begin{block}{Solution} + systemd-detect-virt ne vérifie pas l'existance du dossier.\\~\\ + Quant à VMAware, il ne fait que vérifier son existance sans autre action pour vérifier la légitimité de la thermal\_zone\\~\\ + Il suffit donc de créer ce dossier (manuellement ou au boot via un script) + \end{block} + \end{frame} + \begin{frame}[t] + \frametitle{Conclusion} + \setbeamertemplate{itemize items}[circle] + \begin{block}{} + Ce projet permet d'affiner mes connaissances de QEMU et des différences entre une machine virtuelle et une machine physique.\\~\\ + La VMM indique sa présence par plusieurs moyens.\\~\\ + Il manque des options pour offusquer les bit de la table d'extension de SMBIOS, qui nous force à modifier QEMU directement pour utiliser UEFI.\\~\\ + Ouverture: Une première idée de réponse aux questions formulées précédemment peut être amenée si ces techniques d'évasions sont combinés à un hyperviseur rootkit. (Cf. Projet de semestre de M. Iliya Saroukhanian.) + \end{block} + \end{frame} +\end{document} \ No newline at end of file diff --git a/presentation_blanc/pres.vrb b/presentation_blanc/pres.vrb new file mode 100644 index 0000000000000000000000000000000000000000..8c30cad8ac3bade4a04c39672de331c28a7edeef --- /dev/null +++ b/presentation_blanc/pres.vrb @@ -0,0 +1,27 @@ +\frametitle{CPUID - Parades} + \setbeamertemplate{itemize items}[circle] + \begin{block}{Solution} + Il est possible de passer des arguments sur le CPU utilisé par QEMU + \end{block} + \begin{columns}[t] + \begin{column}{0.5\textwidth} + \begin{itemize} + \item option \textbf{-cpu} de QEMU + \begin{itemize} + \item Permet de spécifier le modèle de l'hôte comme CPU à passer à QEMU.\\~\\ + \item Il est aussi possible de passer des arguments supplémentaires au modèle.\\~\\ + \item \textbf{Ex:}\\ + \textit{-cpu host,hypervisor=off} + \end{itemize} + \end{itemize} + \end{column} + \vline + \begin{column}{0.5\textwidth} + \begin{itemize} + \item Nous pouvons désactiver la signature KVM en passant un argument supplémentaire au modèle CPU:\\~\\ + \begin{itemize} + \item \textit{-cpu host,kvm=off} + \end{itemize} + \end{itemize} + \end{column} + \end{columns} diff --git a/presentation_blanc/reference.bib b/presentation_blanc/reference.bib new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391