
Pot de miel Windows utilisant ProjFS pour projeter des fichiers leurres qui déclenchent des alertes dans le Journal des événements et sur le bureau lorsqu'ils sont consultés, avec enregistrement des sessions distantes SMB pour la détection des mouvements latéraux.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/788/da15048d34f0c916d75fe48cdb87df4b643834ee3d20ec1c69de360d2b390d06.png" alt="PhantomFS — Faux fichiers. Vraie sécurité." width="420" />
</p>
<p align="center">
<strong>Faux fichiers. Vraie sécurité.</strong><br/>
Système de fichiers virtuels honeypot pour Windows — attirez les attaquants dans un répertoire qui a l'air réel, puis prenez-les sur le fait.
</p>
<p align="center">
<a href="https://github.com/alloysecuregroup/phantomfs/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT License"/></a>
<a href="https://docs.microsoft.com/en-us/windows/win32/projfs/projected-file-system"><img src="https://img.shields.io/badge/Platform-Windows%2010+-blue" alt="Platform"/></a>
<a href="https://dotnet.microsoft.com/download/dotnet-framework"><img src="https://img.shields.io/badge/.NET%20Framework-4.8-purple" alt=".NET 4.8"/></a>
<a href="https://github.com/sponsors/secdev02"><img src="https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink" alt="Sponsor"/></a>
</p>
---
## Qu'est-ce que PhantomFS ?
PhantomFS utilise le **système de fichiers projeté Windows (ProjFS)** pour afficher un répertoire virtuel rempli de fichiers leurres convaincants — rapports financiers, clés SSH, identifiants API, feuilles de calcul RH, NDA — qui n'existent qu'en mémoire. Aucune donnée n'est jamais écrite sur le disque tant qu'un attaquant (ou une menace interne) n'en ouvre un.
Au moment où un fichier est touché, PhantomFS :
- Écrit une entrée dans le **journal des événements Windows** (journal Application, source `PhantomFS`)
- Déclenche une **notification Toast** sur la session de bureau active
- Enregistre le nom exact du fichier, l'horodatage et le contexte du processus
- Lorsqu'il est accédé via un partage réseau — capture le **nom d'utilisateur SMB et l'adresse source**
Comme les utilisateurs légitimes n'ont aucune raison d'ouvrir des fichiers qu'ils n'ont pas placés là, chaque alerte est de haute fiabilité. Pas de réglage, pas de ML, pas de dépendances cloud — juste un pilote Windows natif et un exécutable unique.
---
## Fonctionnalités
| Fonctionnalité | Détails |
|---|---|
| **Leurres sans empreinte** | Les fichiers sont projetés à la demande — rien n'est écrit sur le disque sauf si un attaquant lit un fichier |
| **Journal des événements Windows** | ID d'événement 1001 (lecture de fichier), 1002 (création d'espace réservé), 1003 (démarrage), 1004 (arrêt) |
| **Alertes Toast** | Notification de bureau immédiate via Windows PowerShell — fonctionne même via RDP |
| **Journalisation de session distante** | Nom d'utilisateur SMB et adresse source capturés via `NetSessionEnum` lorsque le PID 4 déclenche l'accès |
| **Nettoyage automatique** | Les fichiers synthétiques matérialisés sont supprimés après un délai configurable ; retour à l'état virtuel lors du prochain accès |
| **Modèles configurables** | PDF, XLSX, DOCX, JSON, CSV, PEM, texte brut — tous servis à partir de modèles XML dans la configuration |
| **Refroidissement par fichier** | Limitation configurable (15 s par défaut) pour éviter une avalanche d'alertes lorsqu'un outil lit plusieurs blocs |
| **Liste de fichiers synthétiques** | Liste XML prête à l'emploi de noms de fichiers convaincants avec des tailles d'octets réalistes |
| **Exécutable unique** | `PhantomFS.exe` + `PhantomFS.exe.config` — pas d'installateur requis |
---
## Prérequis
- Windows 10 version 1809 (Build 17763) ou ultérieure — Windows 11 recommandé
- .NET Framework 4.8
- Fonctionnalité optionnelle **Système de fichiers projeté Windows** activée (`Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart`)
- Privilèges d'administrateur pour démarrer la racine virtuelle
---
## Démarrage rapide
### Commandes simples (recommandées)
1. Téléchargez `PhantomFS-v1.1.0-x64.zip` depuis [Releases](https://github.com/AlloySecureGroup/PhantomFS/releases) et extrayez-le
2. Exécutez en tant qu'administrateur — activez ProjFS, `Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart`
3. Exécutez `.\PhantomFS.exe --virtroot C:\PhantomFS\Virtual\Documents --syntheticonly`
4. Parcourez `C:\PhantomFS\Virtual\Documents` dans l'Explorateur — vous verrez les fichiers leurres
5. Ouvrez-en un — regardez la notification Toast se déclencher et vérifiez **Observateur d'événements → Journaux Windows → Application**
---
## Configuration
Tous les paramètres se trouvent dans `PhantomFS.exe.config`. **Toutes les clés sont facultatives** — omettre une clé utilise la valeur par défaut indiquée dans le tableau.
Utilisez le **Générateur de profil PhantomFS** pour créer différents profils de configuration pour vos scénarios de déploiement :
- https://alloysecuregroup.github.io/PhantomFS/
### Section `<settings>`
```xml
<settings>
<enableEventLog>true</enableEventLog>
<enableToast>true</enableToast>
<alertOnOpen>true</alertOnOpen>
<alertOnRead>true</alertOnRead>
<toastCooldownSeconds>15</toastCooldownSeconds>
<verbose>false</verbose>
<virtRoot></virtRoot>
<sourceRoot></sourceRoot>
<syntheticOnly>true</syntheticOnly>
<!-- v1.1.0 — nettoyage automatique -->
<autoCleanupEnabled>true</autoCleanupEnabled>
<autoCleanupDelaySeconds>300</autoCleanupDelaySeconds>
<!-- v1.1.0 — journalisation de session distante -->
<resolveRemoteIPs>true</resolveRemoteIPs>
</settings>
```
| Clé | Valeur par défaut | Depuis | Description |
|---|---|---|---|
| `enableEventLog` | `true` | 1.0.0 | Écriture dans le journal des événements Windows (Application) |
| `enableToast` | `true` | 1.0.0 | Envoi d'une notification Toast sur le bureau |
| `alertOnOpen` | `true` | 1.0.0 | Alerte lors de la première création d'un espace réservé (parcours du répertoire) |
| `alertOnRead` | `true` | 1.0.0 | Alerte lorsque les données du fichier sont réellement lues |
| `toastCooldownSeconds` | `15` | 1.0.0 | Secondes minimales entre les Toasts pour le même chemin de fichier |
| `verbose` | `false` | 1.0.0 | Sortie console supplémentaire pour le diagnostic |
| `virtRoot` | _(argument 1)_ | 1.0.0 | Remplacement du chemin racine virtuel depuis la configuration plutôt que la ligne de commande |
| `sourceRoot` | _(vide)_ | 1.0.0 | Répertoire de sauvegarde réel facultatif — laisser vide pour le mode synthétique uniquement |
| `syntheticOnly` | `true` | 1.0.0 | Servir uniquement les fichiers listés dans `<syntheticFileList>` |
| `autoCleanupEnabled` | `true` | **1.1.0** | Supprimer les fichiers synthétiques matérialisés après le délai et revenir à l'état virtuel |
| `autoCleanupDelaySeconds` | `300` | **1.1.0** | Secondes après la matérialisation avant la suppression du fichier (le minuteur de nettoyage s'exécute toutes les 30 s) |
| `resolveRemoteIPs` | `true` | **1.1.0** | Résolution DNS du nom d'hôte client SMB en adresse IP ; définir sur `false` si la latence de résolution est inacceptable |
### Journalisation de session distante
Lorsqu'un fichier est accédé via un partage SMB, PhantomFS détecte le PID 4 (le processus Système Windows / pilote SMB noyau) comme appelant et appelle automatiquement `NetSessionEnum` pour identifier l'utilisateur distant. L'entrée du journal des événements et la notification Toast incluront :
```
PhantomFS — Lecture du contenu d'un fichier leurre
Fichier : Documents\Rapport_Financier_T4_2024.pdf
Processus : Système (PID 4)
Distant : CORP\jsmith @ DESKTOP-A1B2C3D [192.168.1.45]
```
**Prérequis pour la journalisation distante :**
- Le service Serveur doit être en cours d'exécution (il démarre automatiquement dès qu'un partage est actif)
- PhantomFS doit être exécuté sur la machine hébergeant le partage
- `resolveRemoteIPs` nécessite que la machine cliente soit résolvable via DNS
### Comportement du nettoyage automatique
Après qu'un fichier synthétique est ouvert et matérialisé (contenu écrit sur le disque), un minuteur d'arrière-plan vérifie toutes les 30 secondes et supprime les fichiers dont le temps de matérialisation dépasse `autoCleanupDelaySeconds`. Le fichier supprimé revient à un espace réservé virtuel ProjFS — le prochain accès déclenche à nouveau le rappel ProjFS comme si le fichier n'avait jamais été ouvert.
Les fichiers encore ouverts lors du déclenchement du minuteur de nettoyage sont ignorés sans erreur et réessayés lors du prochain cycle de 30 secondes.
### Ajout de fichiers leurres
Ajoutez des entrées sous `<syntheticFileList>` dans la configuration :
```
\Documents,true,0,1744586986
\Documents\Rapport_Financier_T4_2024.pdf,false,8192,1744586986
\Documents\Salaires_Employes_2024.xlsx,false,4096,1743942586
\IT\Clefs,true,0,1744586986
\IT\Clefs\cle_deploiement.pem,false,3247,1742354986
```
### Ajout de modèles de contenu
```xml
<syntheticTemplates>
<template name="mon_fichier_personnalise.txt"><![CDATA[
... votre contenu de fichier ici ...
]]></template>
</syntheticTemplates>
```
---
## Référence du journal des événements
Ouvrez **Observateur d'événements → Journaux Windows → Application** et filtrez par source `PhantomFS`.
| ID d'événement | Niveau | Signification |
|---|---|---|
| 1001 | Avertissement | Les données d'un fichier leurre ont été lues (inclut l'utilisateur/IP distant le cas échéant) |
| 1002 | Avertissement | Un espace réservé de fichier leurre a été créé (fichier parcouru/interrogé via stat) |
| 1003 | Information | PhantomFS démarré — chemin racine virtuel et paramètres enregistrés |
| 1004 | Information | PhantomFS arrêté proprement |
---
## CI/CD — GitHub Actions
PhantomFS fournit un workflow à `.github/workflows/build.yml` qui compile pour **x64** et **ARM64** en parallèle, et publie une release GitHub sur chaque tag de version.
---
## Construction à partir des sources
```powershell
# Nécessite le SDK .NET Framework 4.8 ou les outils de build Visual Studio
csc.exe /platform:x64 /r:System.Xml.dll /out:PhantomFS.exe src\PhantomFS.cs
```
`csc.exe` se trouve généralement à :
```
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
```
---
## Idées de déploiement
- **Piège sur poste de travail** — exécuter en tant que tâche planifiée à l'ouverture de session ; tout mouvement latéral vers `\\nom_hote\PhantomFS\Virtual` déclenche une alerte immédiate avec le nom d'utilisateur et l'IP source de l'attaquant
- **Canari sur serveur de fichiers** — placer un partage `\Finance` pointant vers la racine virtuelle à côté du partage finance réel ; la journalisation de session distante identifie exactement quel compte a parcouru l'appât
- **Machine de développement** — afficher de fausses clés AWS et SSH dans `~\Documents` ; les attaques d'initiés ou de la chaîne d'approvisionnement déclenchent des alertes avant l'exfiltration
- **Segment isolé (air-gapped)** — définir `resolveRemoteIPs=false` pour ignorer le DNS dans les environnements où les recherches externes sont bloquées ; le nom de machine NetBIOS est toujours capturé
---
---
## Sponsoring
PhantomFS est gratuit, open-source et sous licence MIT. S'il vous a fait gagner du temps — ou a permis de capturer un véritable attaquant — merci d'envisager de sponsoriser le développement continu.
**[❤ Sponsoriser sur GitHub](https://github.com/sponsors/secdev02)**
Les sponsors reçoivent :
- Réponses prioritaires aux problèmes
- Accès anticipé aux nouveaux modèles et fonctionnalités
- Une mention dans les notes de version
Les sponsors corporatifs (500 $/mois et plus) reçoivent un canal Slack privé pour un support direct et des demandes de fonctionnalités.
---
## Licence
```
MIT License
Copyright (c) 2026 Alloy Secure
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
> **Avis de marque déposée :** PhantomFS™ est une marque déposée d'Alloy Secure. Tous droits réservés.
---
## Clause de non-responsabilité — Utilisation acceptable
PhantomFS est fourni **uniquement à des fins de sécurité défensive légales** — notamment la détection d'intrusion, la recherche sur les menaces et les tests d'intrusion autorisés sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite de surveiller.
**Vous êtes seul responsable de vous assurer que votre utilisation de PhantomFS est conforme à toutes les lois locales, nationales et internationales applicables**, y compris mais sans s'y limiter les lois sur la fraude informatique, les écoutes électroniques, la vie privée et le droit du travail. Déployer PhantomFS sur des systèmes ou réseaux sans autorisation appropriée peut être illégal.
Les auteurs et contributeurs de PhantomFS :
- Ne fournissent **aucune garantie**, expresse ou implicite, concernant l'adéquation à un usage particulier
- N'assument **aucune responsabilité** pour tout dommage direct, indirect, incident ou consécutif découlant de l'utilisation ou de la mauvaise utilisation de ce logiciel
- Ne sont **pas responsables** de toute perte de données, dommage système, responsabilité légale ou préjudice à des tiers résultant du déploiement de PhantomFS dans tout environnement
**Utilisation à vos risques et périls.** En utilisant PhantomFS, vous reconnaissez avoir lu cette clause de non-responsabilité, la comprendre et accepter d'être lié par ses termes.
> **Avis de marque déposée :** PhantomFS™ est une marque déposée d'Alloy Secure. Tous droits réservés.
---
## Remerciements
Construit sur l'[API du système de fichiers projeté Windows](https://docs.microsoft.com/en-us/windows/win32/projfs/projected-file-system) — la même technologie qui alimente WSL2 et OneDrive Fichiers à la demande.
Inspiré par mon travail en tant que chercheur chez Thinkst 💚 `https://citation.thinkst.com/talk/94782`