diff --git a/thesis/chapters/chap1.tex b/thesis/chapters/chap1.tex index 5ae88c1a3daa2f9371604bb0db6f1840e973f002..8f26ac2f981b41406f91198ac8305a01feef4be7 100644 --- a/thesis/chapters/chap1.tex +++ b/thesis/chapters/chap1.tex @@ -81,7 +81,7 @@ d'exploitations \say{invités} qu'il hébèrge. \begin{center} \includegraphics[width=0.55\textwidth]{figures/diagrams/platform_virt} \end{center} - \caption{Diagramme d'un \acrshort{vmm}}\label{fig:platform_virt} + \caption{Diagramme simplifiée d'\acrshort{vmm}. Source : tiré de researchgate.net, ref. URL02 / réalisé par ALVARES Frederico}\label{fig:platform_virt} \end{figure} Dans le but de pouvoir re-créer des environnements informatiques virtuels @@ -222,7 +222,7 @@ côté, l'hyperviseur ainsi que les applications de l'hôte seront exécutés en \begin{center} \includegraphics[width=0.65\textwidth]{figures/diagrams/cpu_mode_flg} \end{center} - \caption{Diagramme représentant les deux modes d'exécution du \acrshort{cpu}}\label{fig:cpu_mode_flg} + \caption{Diagramme représentant les modes d'exécution du \acrshort{cpu}, privilégié et non-privilégié. Source : tiré du cours 02-Platform\_Virtualization.pdf 2025, p.28, ref. URL03 / réalisé par GLÜCK Florent}\label{fig:cpu_mode_flg} \end{figure} @@ -240,7 +240,7 @@ s'en chargera de la gérer de manière adéquate. \begin{center} \includegraphics[width=0.45\textwidth]{figures/diagrams/vmentry_vmexit_flg} \end{center} - \caption{Diagramme représentant les transitions entre les modes d'exécution du \acrshort{cpu}}\label{fig:vmentry_vmexit_flg} + \caption{Diagramme représentant les transitions entre les modes d'exécution du \acrshort{cpu}. Source : tiré du cours 02-Platform\_Virtualization.pdf 2025, p.29, ref. URL03 / réalisé par GLÜCK Florent}\label{fig:vmentry_vmexit_flg} \end{figure} L'implémentation de ses extensions matérielles ont permis de rendre diff --git a/thesis/chapters/chap2.tex b/thesis/chapters/chap2.tex index b7b51704fdc787b392fb59bb8cebcccb8fbad9af..d70453b78995ada885a594685762eb2adf442847 100644 --- a/thesis/chapters/chap2.tex +++ b/thesis/chapters/chap2.tex @@ -206,7 +206,7 @@ conséquence de lancer le \textit{malware} au prochain démarrage. \includegraphics[width=0.8\textwidth]{figures/diagrams/subvirt_repr} \end{center} \caption{Diagramme comparant l'état sain et infectée d'une machine infectée - par SubVirt. Les parties grises représentent les composantes du \acrshort{vmbr}}\label{fig:subvirt_repr} + par SubVirt, les parties grises représentent les composantes du \acrshort{vmbr}. Source : papier scientifique de SubVirt, p.5 \cite{king_subvirt_2006}}\label{fig:subvirt_repr} \end{figure} \subsection{Blue Pill}\label{sec:blue_pill} @@ -243,7 +243,7 @@ ou exfiltrer des données sensibles. \begin{center} \includegraphics[width=0.8\textwidth]{figures/diagrams/blue_pill_diagram} \end{center} - \caption{Diagramme représentant le fonctionnement simplifié de Blue Pill}\label{fig:blue_pill_simplified} + \caption{Diagramme représentant le fonctionnement simplifié de Blue Pill. Source : tiré de la présentation BH-US-06-Rutkowska.pdf, p.29, ref. URL04 / réalisé par RUTKOWSKA Joanna}\label{fig:blue_pill_simplified} \end{figure} % NOTE: section 3 (Design) of the paper is interesting diff --git a/thesis/chapters/chap3.tex b/thesis/chapters/chap3.tex index 2cf78ffdcad4017a45a1e8880bbc7e09cf70e9ae..372a41fe07a48f07b16a65b81c52257937fbbcd0 100644 --- a/thesis/chapters/chap3.tex +++ b/thesis/chapters/chap3.tex @@ -91,7 +91,7 @@ est le présenté ci-dessous : build -czgw ctags -R \end{minted} - \caption{Contenu du script de compilation build\_code.cmd}\label{fig:build_code_script} + \caption{Script de compilation build\_code.cmd. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:build_code_script} \end{figure} \newpage @@ -123,7 +123,7 @@ est stocké dans le répertoire \verb|.\bin\amd64|. \includegraphics[width=1\textwidth]{figures/screenshots/bluepill_compilation} \end{center} \caption{Capture d'écran illustrant la compilation réussie du code source - de Blue Pill}\label{fig:bluepill_compilation} + de Blue Pill. Source : \acrshort{vm} Windows Vista / réalisé par SAROUKHANIAN Iliya}\label{fig:bluepill_compilation} \end{figure} \subsection{Mise en place du pilote noyau} @@ -165,7 +165,7 @@ de démarrage via la touche F8 \includegraphics[width=0.75\textwidth]{figures/screenshots/disable_signature} \end{center} \caption{Désactivation de l'obligation de signer les pilotes via le menu - avancé de démarrage}\label{fig:disable_signature} + avancé de démarrage. Source : tiré de learn.microsoft.com, ref. URL05 / réalisé par MICROSOFT}\label{fig:disable_signature} \end{figure} Après que le système ait redémarré, il est finalement possible de lancer le @@ -282,7 +282,7 @@ NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, [...] } \end{minted} - \caption{Extrait du code source Blue Pill : \lstinline{common/newbp.c:46}}\label{fig:code_driver_entry} + \caption{Fichier \lstinline{common/newbp.c:46}. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:code_driver_entry} \end{figure} Dans la fonction \verb|HvmSwallowBluepill()|, dont le contenu est illustrer @@ -323,7 +323,7 @@ NTSTATUS NTAPI HvmSwallowBluepill ( [...] } \end{minted} - \caption{Extrait du code source Blue Pill : \lstinline{common/hvm.c:547}}\label{fig:code_hvm_swallow_bp} + \caption{Fichier \lstinline{common/hvm.c:547}. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:code_hvm_swallow_bp} \end{figure} Après la modification du masque d'affinité, la \textit{callback} \verb|CmSubvert()| @@ -385,7 +385,7 @@ typedef NTSTATUS ( PVOID GuestRsp ); \end{minted} - \caption{Extrait du code source Blue Pill : \lstinline{common/common.h:362}}\label{fig:code_arch_init_func_ptr} + \caption{Fichier \lstinline{common/common.h:362}. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:code_arch_init_func_ptr} \end{figure} \begin{figure}[tbph!] @@ -418,7 +418,7 @@ typedef struct } HVM_DEPENDENT, *PHVM_DEPENDENT; \end{minted} - \caption{Extrait du code source Blue Pill : \lstinline{common/common.h:420}}\label{fig:code_hvm_dependent_struct} + \caption{Fichier \lstinline{common/common.h:420}. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:code_hvm_dependent_struct} \end{figure} \newpage @@ -501,7 +501,7 @@ NTSTATUS NTAPI HvmSubvertCpu ( return Status; } \end{minted} - \caption{Extrait du code source Blue Pill : \lstinline{common/hvm.c:356}}\label{fig:code_hvm_subvert_cpu} + \caption{Fichier \lstinline{common/hvm.c:356}. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:code_hvm_subvert_cpu} \end{figure} \newpage @@ -559,7 +559,7 @@ svm_vmsave MACRO BYTE 0Fh, 01h, 0DBh ENDM \end{minted} - \caption{Extrait du code source Blue Pill : \lstinline{amd64/svm-asm.asm:24}}\label{fig:code_asm_svm_vmsave} + \caption{Fichier \lstinline{amd64/svm-asm.asm:24}. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:code_asm_svm_vmsave} \end{figure} @@ -615,7 +615,7 @@ static NTSTATUS NTAPI SvmInitialize ( return STATUS_SUCCESS; } \end{minted} - \caption{Extrait du code source Blue Pill : \lstinline{svm/svm.c:940}}\label{fig:code_svm_initialize} + \caption{Fichier \lstinline{svm/svm.c:940}. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:code_svm_initialize} \end{figure} \newpage @@ -672,7 +672,7 @@ static NTSTATUS NTAPI SvmVirtualize ( return STATUS_UNSUCCESSFUL; } \end{minted} - \caption{Extrait du code source Blue Pill : \lstinline{svm/svm.c:1174}}\label{fig:code_svm_virtualize} + \caption{Fichier \lstinline{svm/svm.c:1174}. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:code_svm_virtualize} \end{figure} La routine \verb|SvmVmrun()|, illustré par la Figure~\ref{fig:code_asm_svm_vmrun}, @@ -739,7 +739,7 @@ SvmVmrun PROC SvmVmrun ENDP \end{minted} - \caption{Extrait du code source Blue Pill : \lstinline{amd64/svm-asm.c:75}}\label{fig:code_asm_svm_vmrun} + \caption{Fichier \lstinline{amd64/svm-asm.c:75}. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:code_asm_svm_vmrun} \end{figure} Arrivant au terme de l'analyse du code source de Blue Pill, il est souhaitable diff --git a/thesis/chapters/chap4.tex b/thesis/chapters/chap4.tex index 2152982d5abf0e75795211c843b295e5bc68aa47..cffdbffdc4849f1e3ab308fa47157ac4229a2c75 100644 --- a/thesis/chapters/chap4.tex +++ b/thesis/chapters/chap4.tex @@ -109,7 +109,7 @@ all: clean: $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean \end{minted} - \caption{\lstinline{Makefile} du projet d'hyperviseur sous forme de \acrshort{lkm}}\label{fig:makefile_lkm} + \caption{Fichier \lstinline{proto/Makefile}. Source : tiré du code source de l'implémentation du \acrshort{lkm}, ref. URL07 / réalisé par SAROUKHANIAN Iliya}\label{fig:makefile_lkm} \end{figure} La variable \verb|obj-m| défini le nom que portera le module à travers @@ -165,8 +165,7 @@ et visuelle quant à la transition vers ce mode de fonctionnement. \begin{center} \includegraphics[width=0.55\textwidth]{figures/diagrams/vmm_life_cycle} \end{center} - \caption{Diagramme représentant le cycle de vie d'un \acrshort{vmm} selon - les extensions Intel \acrshort{vmx}}\label{fig:vmm_life_cycle} + \caption{Diagramme représentant le cycle de vie d'un \acrshort{vmm}. Source : tiré de la documentation officielle d'Intel, p.4 \cite{noauthor_intel_2024}}\label{fig:vmm_life_cycle} \end{figure} Lorsque l'on exécute l'instruction \verb|VMXON| sur un processeur logique, @@ -263,8 +262,7 @@ static bool vmx_support_cpuid(void) { return (ecx_vmx >> 5) & 1; } \end{minted} - \caption{Code source de l'implémentation du \acrshort{vmm}, - appel à l'instruction \lstinline{CPUID}}\label{fig:impl_cpuid_call} + \caption{Fichier \lstinline{proto/hypervisor.c:53}. Source : tiré code source de l'implémentation du \acrshort{lkm}, ref. URL07 / réalisé par SAROUKHANIAN Iliya}\label{fig:impl_cpuid_call} \end{figure} \subsection{Préparation de la région VMXON} @@ -299,13 +297,14 @@ sur un autre processeur. ] {c} struct vmxon_t { - unsigned long vmcs_rev_id : 31; - unsigned long shadow_vmcs : 1; + struct { + unsigned long vmcs_rev_id : 31; + unsigned long shadow_vmcs : 1; + } header; char state[0x1000 - sizeof(unsigned long)]; }; \end{minted} - \caption{Code source de l'implémentation du \acrshort{vmm}, - structure \lstinline{vmxon_t}}\label{fig:impl_vmxon_t} + \caption{Fichier \lstinline{proto/region/vmxon.h:3}. Source : tiré code source de l'implémentation du \acrshort{lkm}, ref. URL07 / réalisé par SAROUKHANIAN Iliya}\label{fig:impl_vmxon_t} \end{figure} La fonction \verb|alloc_vmxon()| présentée ci-dessous, illustre la manière @@ -341,10 +340,11 @@ struct vmxon_t *alloc_vmxon(void) { return vmxon; } \end{minted} - \caption{Code source de l'implémentation du \acrshort{vmm}, - fonction \lstinline{alloc_vmxon()}}\label{fig:impl_alloc_vmxon} + \caption{Fichier \lstinline{proto/region/vmxon.c:9}. Source : tiré code source de l'implémentation du \acrshort{lkm}, ref. URL07 / réalisé par SAROUKHANIAN Iliya}\label{fig:impl_alloc_vmxon} \end{figure} +\newpage + Pour pouvoir correctement renseigner la valeur du \acrshort{vmcs} \textit{revision identifier} au début de la région VMXON, il est nécessaire de l'obtenir en lisant les 31 premiers bits du \acrshort{msr} @@ -365,8 +365,7 @@ de l'obtenir en lisant les 31 premiers bits du \acrshort{msr} {c} #define VMCS_REVISION_ID (__rdmsr(IA32_VMX_BASIC) & 0x7fffffff) \end{minted} - \caption{Code source de l'implémentation du \acrshort{vmm}, - macro \lstinline{VMCS_REVISION_ID}}\label{fig:impl_vmcs_rev_id} + \caption{Fichier \lstinline{proto/msr/msr.h:16}. Source : tiré code source de l'implémentation du \acrshort{lkm}, ref. URL07 / réalisé par SAROUKHANIAN Iliya}\label{fig:impl_vmcs_rev_id} \end{figure} \subsection{Restrictions quant aux opérations en \acrshort{vmx}} @@ -412,8 +411,7 @@ void patch_control_registers(void) { [...] } \end{minted} - \caption{Code source de l'implémentation du \acrshort{vmm}, - fonction \lstinline{patch_control_registers()}}\label{fig:impl_patch_control_reg} + \caption{Fichier \lstinline{proto/msr/msr.c:27}. Source : tiré code source de l'implémentation du \acrshort{lkm}, ref. URL07 / réalisé par SAROUKHANIAN Iliya}\label{fig:impl_patch_control_reg} \end{figure} \subsection{Passage en mode \acrshort{vmx} \textit{Root}} @@ -474,8 +472,7 @@ bool ia32_feature_control_flags(void) { return true; } \end{minted} - \caption{Code source de l'implémentation du \acrshort{vmm}, - fonction \lstinline{ia32_feature_control_flags()}}\label{fig:impl_feature_control_flags} + \caption{Fichier \lstinline{proto/msr/msr.c:6}. Source : tiré code source de l'implémentation du \acrshort{lkm}, ref. URL07 / réalisé par SAROUKHANIAN Iliya}\label{fig:impl_feature_control_flags} \end{figure} Finalement, il ne reste plus qu'à infomer le processeur actuel que celui-ci @@ -504,8 +501,7 @@ static int cr4_enable_vmx(void) { return 0; } \end{minted} - \caption{Code source de l'implémentation du \acrshort{vmm}, - fonction \lstinline{cr4_enable_vmx()}}\label{fig:impl_cr4_enable_vmx} + \caption{Fichier \lstinline{proto/hypervisor.c:34}. Source : tiré code source de l'implémentation du \acrshort{lkm}, ref. URL07 / réalisé par SAROUKHANIAN Iliya}\label{fig:impl_cr4_enable_vmx} \end{figure} Ayant préparé le processeur via ses divers registres et en initialisant @@ -516,6 +512,8 @@ de ne pas commettre d'erreur dans cette partie délicate du code, la décision été prise de reprendre l'implémentation de cette fonction depuis le code source de \acrshort{kvm} \cite{noauthor_vmxc_nodate}. +\newpage + \begin{figure}[tbph!] \begin{minted} [ @@ -545,8 +543,7 @@ fault: return -EFAULT; } \end{minted} - \caption{Code source de l'implémentation du \acrshort{vmm}, - fonction \lstinline{kvm_cpu_vmxon()}}\label{fig:impl_kvm_cpu_vmxon} + \caption{Fichier \lstinline{arch/x86/kvm/vmx/vmx.c:2824}. Source : tiré du code source de Linux \cite{noauthor_vmxc_nodate}}\label{fig:impl_kvm_cpu_vmxon} \end{figure} Ceci conclut donc la partie initiale de l'implémentation d'un hyperviseur @@ -554,13 +551,11 @@ Ceci conclut donc la partie initiale de l'implémentation d'un hyperviseur présentées jusqu'à présent ont permis de faire basculer le processeur en mode \acrshort{vmx} \textit{Root}. Il sera dès lors possible de mettre ce processeur à disposition d'une machine virtuelle créée au préalable à travers -l'initialisation de son \acrshort{vmcs}. - -Dans la Section~\ref{sec:preambule_bp}, certaines difficultés quant à -l'implémentation de ce travail furent mentionnées, notamment dues à la -complexité de la mise en place d'un \acrshort{vmcs}. De ce fait, ce travail -fut temporairement suspendu afin d'acquérir davantage de connaissances sur -le fonctionnement d'un \textit{rootkit} \acrshort{hvm} et bénéficier de temps -supplémentaire afin de se documenter de manière plus détaillée sur les diverses -parties constituantes de cette structure de données phare pour la -virtualisation. +l'initialisation de son \acrshort{vmcs}. Dans la Section~\ref{sec:preambule_bp}, +certaines difficultés quant à l'implémentation de ce travail furent mentionnées, +notamment dues à la complexité de la mise en place d'un \acrshort{vmcs}. De ce +fait, ce travail fut temporairement suspendu afin d'acquérir davantage de +connaissances sur le fonctionnement d'un \textit{rootkit} \acrshort{hvm} et +bénéficier de temps supplémentaire afin de se documenter de manière plus +détaillée sur les diverses parties constituantes de cette structure de données +phare pour la virtualisation.