diff --git a/presentations/defense/defense.qmd b/presentations/defense/defense.qmd index d2711c225b4d08bf1f740c0fa63bab281eebce16..6c48d221b8579a2882423125af99b90c802b4a81 100644 --- a/presentations/defense/defense.qmd +++ b/presentations/defense/defense.qmd @@ -93,7 +93,7 @@ pertinence. ## _Hardware-assisted full virtualization_ ::: {.callout-note} -\scriptsize Depuis $\sim$ 2005, exposition d'**instructions matérielles** par les _vendors_ CPU (Intel, +\scriptsize Depuis $\sim$ 2005, exposition d'**instructions matérielles** par les fabricants CPU (Intel, AMD) afin de palier au problème introduit par \textcolor{red}{17 instructions privilégiées} ne générant pas de **_trap_**[^1] ::: @@ -120,7 +120,7 @@ ne générant pas de **_trap_**[^1] [^1]: [Platform Virtualization, Pr. Florent Glück](https://githepia.hesge.ch/flg_courses/virtualization/virtualization_pub_spring24/-/blob/master/course/02-Platform_Virtualization.pdf?ref_type=heads) -# Hypervisor as a rootkit +# Hyperviseur en guise de _rootkit_ ## Rootkits @@ -138,13 +138,13 @@ of a computer system **without being detected**"_ [^2] [^2]: [Oxford English Dictionary, s.v. "rootkit (n.)," December 2024](https://doi.org/10.1093/OED/6892331220) -## Valeur "offensive" ajoutée par un hyperviseur +## Valeur offensive ajoutée par un hyperviseur ::: {.incremental} - Point de départ $\rightarrow$ \textcolor{red}{Ring 0}, on se situe déjà au **même niveau** que le **noyau de l'OS** - _Hijacking_ complet du système possible - - Bras de fer entre les outils de détection (kernel mode) et le _malware_ + - Bras de fer entre les outils de détection (_kernel mode_) et le _malware_ - Invisibilité pas forcément garantie ! - _Hypervisor as a rootkit_ $\rightarrow$ un **changement de paradigme** - Insertion \textcolor{red}{entre} le **noyau de l'OS** et le **matériel** @@ -156,7 +156,7 @@ le **noyau de l'OS** # Blue Pill, les points clés -## Background +## Historique ::: {.incremental} - \small 1ère démonstration lors du _Black Hat Briefings_ du 3 août 2006[^3] @@ -174,6 +174,48 @@ le **noyau de l'OS** redémarrage du système, est simplement chargé en tant que pilote Windows (`.sys`) ::: +[^3]: [Subverting Vista™ Kernel For Fun and Profit](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2008/08/20084218/BH-US-06-Rutkowska.pdf) + +## Déroulement du code source + +- Lancement du pilote -- `DriverEntry` +- Préparation du CPU + - Épinglage de l'exécution -- `KeSetSystemAffinityThread` +- Contexte de l'hyperviseur + - Pile noyau + - GDT et IDT +- Initialisation du VMCB + - Définition des interceptions -- `SvmSetupControlArea` + - État des registres de travaux du CPU -- `SvmInitGuestState` +- Subversion de l'OS + - Chargement du VMCB via `VMLOAD` + - Exécution de `VMRUN` + - Gestion des `#VMEXIT` par le pilote noyau + +## Principe de fonctionnement + +<!-- {width="80%" fig-align="center"} --> + +::: {.columns} +::: {.column width="45%" .incremental} +- \footnotesize Appel au pilote Blue Pill +- \footnotesize Préparation du VMCB avec l'état de l'OS + - \scriptsize Définition des instructions à intercepter +- \footnotesize `VMRUN` + - \scriptsize CPU en mode \textcolor{teal}{non-root} + - \scriptsize OS cantonné dans une VM en tant qu'invité (zone rouge hachurée) + - \scriptsize `RET` de la "fonction" Blue Pill n'est jamais + atteint en mode hôte +- \footnotesize `#VMEXIT` + - \scriptsize État sauvegardé dans le _save-state area_ du VMCB + - \scriptsize Gestion par l'hyperviseur en mode hôte + +::: +::: {.column width="55%"} + +::: +::: + <!-- # État de l'art --> <!-- --> <!-- ## SubVirt --> @@ -208,7 +250,6 @@ redémarrage du système, est simplement chargé en tant que pilote Windows (`.s <!-- redémarrage du système, est simplement chargé en tant que pilote Windows (`.sys`) --> <!-- ::: --> <!-- --> -[^3]: [Subverting Vista™ Kernel For Fun and Profit](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2008/08/20084218/BH-US-06-Rutkowska.pdf) # _Reverse-Engineering_