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
No related branches found
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
[^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
::: {.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
<!-- ![](../../thesis/figures/diagrams/blue_pill_diagram.png){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%"}
![Schéma de Blue Pill](../../thesis/figures/diagrams/blue_pill_diagram.png)
:::
:::
<!-- ::: {.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%"} -->
<!-- ![Schéma de Blue Pill](../../thesis/figures/diagrams/blue_pill_diagram.png) -->
<!-- ::: -->
<!-- ::: -->
<!-- # É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 ?
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment