\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}
AMD) afin de palier au problème introduit par \textcolor{red}{17 instructions privilégiées}
ne générant pas de **_trap_**[^1]
ne générant pas de **_trap_**[^1]
:::
:::
...
@@ -120,7 +120,7 @@ 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)
[^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
## Rootkits
...
@@ -138,13 +138,13 @@ of a computer system **without being detected**"_ [^2]
...
@@ -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)
[^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}
::: {.incremental}
- Point de départ $\rightarrow$ \textcolor{red}{Ring 0}, on se situe déjà au **même niveau** que
- Point de départ $\rightarrow$ \textcolor{red}{Ring 0}, on se situe déjà au **même niveau** que
le **noyau de l'OS**
le **noyau de l'OS**
- _Hijacking_ complet du système possible
- _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 !
- Invisibilité pas forcément garantie !
- _Hypervisor as a rootkit_ $\rightarrow$ un **changement de paradigme**
- _Hypervisor as a rootkit_ $\rightarrow$ un **changement de paradigme**
- Insertion \textcolor{red}{entre} le **noyau de l'OS** et le **matériel**
- Insertion \textcolor{red}{entre} le **noyau de l'OS** et le **matériel**
...
@@ -156,7 +156,7 @@ le **noyau de l'OS**
...
@@ -156,7 +156,7 @@ le **noyau de l'OS**
# Blue Pill, les points clés
# Blue Pill, les points clés
## Background
## Historique
::: {.incremental}
::: {.incremental}
- \small 1ère démonstration lors du _Black Hat Briefings_ du 3 août 2006[^3]
- \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**
...
@@ -174,6 +174,48 @@ le **noyau de l'OS**
redémarrage du système, est simplement chargé en tant que pilote Windows (`.sys`)
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`
- \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 -->
<!-- # État de l'art -->
<!-- -->
<!-- -->
<!-- ## SubVirt -->
<!-- ## SubVirt -->
...
@@ -208,7 +250,6 @@ redémarrage du système, est simplement chargé en tant que pilote Windows (`.s
...
@@ -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`) -->
<!-- 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)