diff --git a/presentations/defense/defense.qmd b/presentations/defense/defense.qmd index 92fce0dcc4cc5cb9d4522597385b0145fccdd70c..7568274e5bb0a4f25f6285174920184dc3d614c5 100644 --- a/presentations/defense/defense.qmd +++ b/presentations/defense/defense.qmd @@ -176,47 +176,49 @@ redémarrage du système, est simplement chargé en tant que pilote Windows (`.s [^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) +## Principe de fonctionnement + +{width="90%"} + ## Déroulement du code source -- étapes clés ::: {.incremental} -- Lancement du pilote -- `DriverEntry` +- Lancement du pilote $\rightarrow$ **`DriverEntry`** - Préparation du CPU - - Épinglage de l'exécution -- `KeSetSystemAffinityThread` -- Contexte de l'hyperviseur - - Pile noyau + - **Épinglage** de l'exécution $\rightarrow$ **`KeSetSystemAffinityThread`** +- Allocation du contexte de l'hyperviseur + - Pile noyau + - Utilisé lors des gestions des **interceptions de l'invité** - GDT et IDT -- Initialisation du VMCB - - Définition des interceptions -- `SvmSetupControlArea` - - État des registres de travaux du CPU -- `SvmInitGuestState` + - Gestion des **zones mémoire** et **interruptions** respectivement +- Initialisation du **VMCB** + - Définition des interceptions $\rightarrow$ **`SvmSetupControlArea`** + - État des registres de travaux du CPU $\rightarrow$ **`SvmInitGuestState`** - Subversion de l'OS - - Chargement du VMCB via `VMLOAD` - - Exécution de `VMRUN` - - Gestion des `#VMEXIT` par le pilote noyau + - Chargement du VMCB avec \textcolor{red}{l'état de l'OS} via **`VMLOAD`** + - Exécution de **`VMRUN`** + - Gestion des **`#VMEXIT`** par l'hyperviseur ::: -## 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%"} - -::: -::: +<!-- ::: {.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 --> <!-- --> @@ -253,12 +255,12 @@ redémarrage du système, est simplement chargé en tant que pilote Windows (`.s <!-- ::: --> <!-- --> -# _Reverse-Engineering_ +# Implémentation en cours ## Hyperviseur sous forme de module noyau chargeable ::: {.incremental} -- Concerne **l'architecture x86** pour **Intel VT-x** +- Concerne **l'architecture x86-64** pour **Intel VT-x** - Détection du CPU et de ses capacités pour la virtualisation (_support for VMX_) - Appel à **`cpuid`** avec `eax = 1` (bit 5 _set_ de `ecx`) - Vérification du **_"feature control"_** MSR (_"model specific register"_) pour @@ -280,36 +282,62 @@ de la région allouée et initialisée - VMExit $\rightarrow$ état du CPU en mode \textcolor{teal}{non-root} ::: -# Méthodes de détection +<!-- ## À l'ordre du jour --> -## Analyse temporelle +<!-- ::: {.incremental} --> +<!-- - Mise en place d'un VMCS --> +<!-- - Initialis --> +<!-- ::: --> -::: {.incremental} -- Construire un ensemble d'opérations nécessitant des `VMExit` -- Établir une _baseline_ temporelle sur un hôte **pas soumis** à l'attaque -- Calculer les **différences de temps** entre la _baseline_ et un sujet infecté -::: +<!-- # Méthodes de détection --> +<!-- --> +<!-- ## Analyse temporelle --> +<!-- --> +<!-- ::: {.incremental} --> +<!-- - Construire un ensemble d'opérations nécessitant des `VMExit` --> +<!-- - Établir une _baseline_ temporelle sur un hôte **pas soumis** à l'attaque --> +<!-- - Calculer les **différences de temps** entre la _baseline_ et un sujet infecté --> +<!-- ::: --> +<!-- --> +<!-- ## Détection de virtualisation --> +<!-- --> +<!-- ::: {.incremental} --> +<!-- - Vérifier si l'on est reparable par `systemd-detect-virt` --> +<!-- - Permet de détecter de manière granulaire QEMU, `kvm` et les technologies --> +<!-- de containerisation (e.g. `docker`) --> +<!-- - De même, avec [`VMAware`](https://github.com/kernelwernel/VMAware) --> +<!-- - Cf. projet de semestre de M. Ricardo Dos Santos --> +<!-- ::: --> -## Détection de virtualisation +# Conclusion -::: {.incremental} -- Vérifier si l'on est reparable par `systemd-detect-virt` - - Permet de détecter de manière granulaire QEMU, `kvm` et les technologies - de containerisation (e.g. `docker`) -- De même, avec [`VMAware`](https://github.com/kernelwernel/VMAware) -- Cf. projet de semestre de M. Ricardo Dos Santos -::: +## Travail effectué -# Conclusion +- Recherche sur les _rootkits_ **HVM** + - Concept théorique $\rightarrow$ \textcolor{red}{subversion d'un OS} + - Introduction aux extensions matérielles d'Intel et AMD +- Étude de Blue Pill + - Tentative de reproduction du _malware_ + - Fonctionnement à travers l'analyse du code source + - **Points à retenir** : + - Contexte de l'hyperviseur + - VMCB contenant l'état de l'OS, puis virtualisation de celui-ci +- Début d'implémentation sous GNU/Linux + - _Malware_ sous forme de module noyau + - Découverte des capacités du CPU et sa virtualisation + +## Suite du projet ::: {.incremental} -- Approfondissement des connaissances liées à la virtualisation de plateforme -- Recensement des enjeux liés à la cybersécurité - - Étude de l'utilisation d'hyperviseur en guise de _rootkit_ -- Développement d'un hyperviseur à l'aide des instructions matérielles x86 -- Études des méthodes de détection +- Mécanisme d'accès à la mémoire $\rightarrow$ **Extended Page-Table** +- Mise en place du VMCS + - Initialisation avec l'état de l'OS + - Définition des interceptions +- Migration à la volée dans une VM +- Étude des méthodes de détection + - Détection de virtualisation (e.g. `systemd-detect-virt`) - Analyse temporelle - - Détection de virtualisation + - \textcolor{red}{Impact} d'une interception sur les performances de l'invité ::: # Questions ?