Skip to content
Snippets Groups Projects
Verified Commit 46f84450 authored by iliya.saroukha's avatar iliya.saroukha :first_quarter_moon:
Browse files

wip: more or less done

parent a48fe9be
Branches
No related tags found
No related merge requests found
...@@ -176,47 +176,49 @@ redémarrage du système, est simplement chargé en tant que pilote Windows (`.s ...@@ -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) [^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
![Schéma simplifié du fonctionnement de Blue Pill](../../thesis/figures/diagrams/blue_pill_diagram.png){width="90%"}
## Déroulement du code source -- étapes clés ## Déroulement du code source -- étapes clés
::: {.incremental} ::: {.incremental}
- Lancement du pilote -- `DriverEntry` - Lancement du pilote $\rightarrow$ **`DriverEntry`**
- Préparation du CPU - Préparation du CPU
- Épinglage de l'exécution -- `KeSetSystemAffinityThread` - **Épinglage** de l'exécution $\rightarrow$ **`KeSetSystemAffinityThread`**
- Contexte de l'hyperviseur - Allocation du contexte de l'hyperviseur
- Pile noyau - Pile noyau
- Utilisé lors des gestions des **interceptions de l'invité**
- GDT et IDT - GDT et IDT
- Initialisation du VMCB - Gestion des **zones mémoire** et **interruptions** respectivement
- Définition des interceptions -- `SvmSetupControlArea` - Initialisation du **VMCB**
- État des registres de travaux du CPU -- `SvmInitGuestState` - Définition des interceptions $\rightarrow$ **`SvmSetupControlArea`**
- État des registres de travaux du CPU $\rightarrow$ **`SvmInitGuestState`**
- Subversion de l'OS - Subversion de l'OS
- Chargement du VMCB via `VMLOAD` - Chargement du VMCB avec \textcolor{red}{l'état de l'OS} via **`VMLOAD`**
- Exécution de `VMRUN` - Exécution de **`VMRUN`**
- Gestion des `#VMEXIT` par le pilote noyau - Gestion des **`#VMEXIT`** par l'hyperviseur
::: :::
## Principe de fonctionnement <!-- ::: {.columns} -->
<!-- ::: {.column width="45%" .incremental} -->
<!-- ![](../../thesis/figures/diagrams/blue_pill_diagram.png){width="80%" fig-align="center"} --> <!-- - \footnotesize Appel au pilote Blue Pill -->
<!-- - \footnotesize Préparation du VMCB avec l'état de l'OS -->
::: {.columns} <!-- - \scriptsize Définition des instructions à intercepter -->
::: {.column width="45%" .incremental} <!-- - \footnotesize `VMRUN` -->
- \footnotesize Appel au pilote Blue Pill <!-- - \scriptsize CPU en mode \textcolor{teal}{non-root} -->
- \footnotesize Préparation du VMCB avec l'état de l'OS <!-- - \scriptsize OS cantonné dans une VM en tant qu'invité (zone rouge hachurée) -->
- \scriptsize Définition des instructions à intercepter <!-- - \scriptsize `RET` de la "fonction" Blue Pill n'est jamais -->
- \footnotesize `VMRUN` <!-- atteint en mode hôte -->
- \scriptsize CPU en mode \textcolor{teal}{non-root} <!-- - \footnotesize `#VMEXIT` -->
- \scriptsize OS cantonné dans une VM en tant qu'invité (zone rouge hachurée) <!-- - \scriptsize État sauvegardé dans le _save-state area_ du VMCB -->
- \scriptsize `RET` de la "fonction" Blue Pill n'est jamais <!-- - \scriptsize Gestion par l'hyperviseur en mode hôte -->
atteint en mode hôte <!---->
- \footnotesize `#VMEXIT` <!-- ::: -->
- \scriptsize État sauvegardé dans le _save-state area_ du VMCB <!-- ::: {.column width="55%"} -->
- \scriptsize Gestion par l'hyperviseur en mode hôte <!-- ![Schéma de Blue Pill](../../thesis/figures/diagrams/blue_pill_diagram.png) -->
<!-- ::: -->
::: <!-- ::: -->
::: {.column width="55%"}
![Schéma de Blue Pill](../../thesis/figures/diagrams/blue_pill_diagram.png)
:::
:::
<!-- # État de l'art --> <!-- # État de l'art -->
<!-- --> <!-- -->
...@@ -253,12 +255,12 @@ redémarrage du système, est simplement chargé en tant que pilote Windows (`.s ...@@ -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 ## Hyperviseur sous forme de module noyau chargeable
::: {.incremental} ::: {.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_) - 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`) - Appel à **`cpuid`** avec `eax = 1` (bit 5 _set_ de `ecx`)
- Vérification du **_"feature control"_** MSR (_"model specific register"_) pour - Vérification du **_"feature control"_** MSR (_"model specific register"_) pour
...@@ -280,36 +282,62 @@ de la région allouée et initialisée ...@@ -280,36 +282,62 @@ de la région allouée et initialisée
- VMExit $\rightarrow$ état du CPU en mode \textcolor{teal}{non-root} - 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} <!-- # Méthodes de détection -->
- Construire un ensemble d'opérations nécessitant des `VMExit` <!-- -->
- Établir une _baseline_ temporelle sur un hôte **pas soumis** à l'attaque <!-- ## Analyse temporelle -->
- Calculer les **différences de temps** entre la _baseline_ et un sujet infecté <!-- -->
::: <!-- ::: {.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} ## Travail effectué
- 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
:::
# 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} ::: {.incremental}
- Approfondissement des connaissances liées à la virtualisation de plateforme - Mécanisme d'accès à la mémoire $\rightarrow$ **Extended Page-Table**
- Recensement des enjeux liés à la cybersécurité - Mise en place du VMCS
- Étude de l'utilisation d'hyperviseur en guise de _rootkit_ - Initialisation avec l'état de l'OS
- Développement d'un hyperviseur à l'aide des instructions matérielles x86 - Définition des interceptions
- Études des méthodes de détection - 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 - Analyse temporelle
- Détection de virtualisation - \textcolor{red}{Impact} d'une interception sur les performances de l'invité
::: :::
# Questions ? # Questions ?
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment