
Honeypot de Windows que utiliza ProjFS para proyectar archivos señuelo que generan alertas en el Registro de Eventos y en el escritorio cuando se accede a ellos, con registro de sesiones SMB remotas para la detección de movimientos laterales.
Archivos Falsos. Seguridad Real.
Sistema de archivos honeypot virtual para Windows: atraiga a los atacantes a un directorio que parece real y luego atrápelos en el acto.
PhantomFS utiliza el Sistema de Archivos Proyectado de Windows (ProjFS) para mostrar un directorio virtual lleno de archivos señuelo convincentes: informes financieros, claves SSH, credenciales de API, hojas de cálculo de RR.HH., acuerdos de confidencialidad (NDA), que existen solo en la memoria. Nunca se escribe ningún dato en el disco hasta que un atacante (o amenaza interna) abre uno.
En el momento en que se toca un archivo, PhantomFS:
PhantomFS)Debido a que los usuarios legítimos no tienen motivo para abrir archivos que ellos no colocaron allí, cada alerta es de alta confianza. Sin ajustes, sin aprendizaje automático, sin dependencias en la nube: solo un controlador nativo de Windows y un único ejecutable.
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart)PhantomFS-v1.1.0-x64.zip desde Releases y extráigaloEnable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart.\PhantomFS.exe --virtroot C:\PhantomFS\Virtual\Documents --syntheticonlyC:\PhantomFS\Virtual\Documents en el Explorador; verá los archivos señueloToda la configuración reside en PhantomFS.exe.config. Todas las claves son opcionales: omitir una clave usa el valor predeterminado que se muestra en la tabla.
Use el PhantomFS Profile Builder para generar diferentes perfiles de configuración según sus escenarios de implementación:
<settings><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 — auto-cleanup -->
<autoCleanupEnabled>true</autoCleanupEnabled>
<autoCleanupDelaySeconds>300</autoCleanupDelaySeconds>
<!-- v1.1.0 — remote session logging -->
<resolveRemoteIPs>true</resolveRemoteIPs>
</settings>
Cuando se accede a un archivo a través de un recurso compartido SMB, PhantomFS detecta el PID 4 (el proceso Sistema de Windows / controlador SMB del kernel) como el llamador y llama automáticamente a NetSessionEnum para identificar al usuario remoto. La entrada del Registro de Eventos y la notificación Toast incluirán:
PhantomFS — Honeypot File Content Read
File : Documents\Q4_Financial_Report_2024.pdf
Process : System (PID 4)
Remote : CORP\jsmith @ DESKTOP-A1B2C3D [192.168.1.45]
Requisitos para el registro remoto:
resolveRemoteIPs requiere que la máquina cliente sea resoluble a través de DNSDespués de que un archivo sintético se abre y se hidrata (el contenido se escribe en el disco), un temporizador en segundo plano verifica cada 30 segundos y elimina los archivos cuyo tiempo de hidratación excede autoCleanupDelaySeconds. El archivo eliminado vuelve a ser un marcador de posición virtual de ProjFS: el próximo acceso vuelve a desencadenar la devolución de llamada de ProjFS como si el archivo nunca hubiera sido abierto.
Los archivos que aún están abiertos cuando se dispara el temporizador de limpieza se omiten sin error y se reintentan en el siguiente ciclo de 30 segundos.
Agregue entradas debajo de <syntheticFileList> en la configuración:
\Documents,true,0,1744586986
\Documents\Q4_Financial_Report_2024.pdf,false,8192,1744586986
\Documents\Employee_Salaries_2024.xlsx,false,4096,1743942586
\IT\Keys,true,0,1744586986
\IT\Keys\deploy_key.pem,false,3247,1742354986
<syntheticTemplates>
<template name="my_custom_file.txt"><![CDATA[
... su contenido de archivo aquí ...
]]></template>
</syntheticTemplates>
Abra Visor de Eventos → Registros de Windows → Aplicación y filtre por origen PhantomFS.
PhantomFS incluye un flujo de trabajo en .github/workflows/build.yml que compila para x64 y ARM64 en paralelo, y publica una versión de GitHub Release en cada etiqueta de versión.
# Requiere .NET Framework 4.8 SDK o Visual Studio Build Tools
csc.exe /platform:x64 /r:System.Xml.dll /out:PhantomFS.exe src\PhantomFS.cs
csc.exe suele estar en:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
\\nombrehost\PhantomFS\Virtual dispara una alerta inmediata con el nombre de usuario y la IP de origen del atacante\Finance que apunte a la raíz virtual junto al recurso compartido real de finanzas; el registro de sesión remota identifica exactamente qué cuenta examinó el cebo~\Documents; los ataques internos o de la cadena de suministro activan alertas antes de la exfiltraciónresolveRemoteIPs=false para omitir DNS en entornos donde las consultas externas están bloqueadas; el nombre de máquina NetBIOS aún se capturaPhantomFS es gratuito, de código abierto y con licencia MIT. Si le ha ahorrado tiempo (o ha detectado un atacante real), considere patrocinar el desarrollo continuo.
Los patrocinadores reciben:
Los patrocinadores corporativos (a partir de $500/mes) reciben un canal privado de Slack para soporte directo y solicitudes de funciones.
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.
Aviso de Marca Comercial: PhantomFS™ es una marca comercial de Alloy Secure. Todos los derechos reservados.
PhantomFS se proporciona únicamente para fines de seguridad defensiva lícitos, incluida la detección de intrusiones, la investigación de amenazas y las pruebas de penetración autorizadas en sistemas que posea o para los que tenga permiso explícito por escrito para monitorear.
Usted es el único responsable de garantizar que su uso de PhantomFS cumpla con todas las leyes locales, nacionales e internacionales aplicables, incluidas, entre otras, las leyes sobre fraude informático, interceptación de comunicaciones, privacidad y laborales. Implementar PhantomFS en sistemas o redes sin la autorización adecuada puede ser ilegal.
Los autores y colaboradores de PhantomFS:
Úselo bajo su propio riesgo. Al usar PhantomFS, reconoce que ha leído este descargo, lo comprende y acepta regirse por sus términos.
Aviso de Marca Comercial: PhantomFS™ es una marca comercial de Alloy Secure. Todos los derechos reservados.
Construido sobre la API del Sistema de Archivos Proyectado de Windows, la misma tecnología que impulsa WSL2 y OneDrive Files On-Demand.
Inspirado por mi trabajo como investigador en Thinkst 💚 https://citation.thinkst.com/talk/94782
| Característica | Detalles |
|---|
| Señuelos de huella cero | Los archivos se proyectan bajo demanda; nada se escribe en el disco a menos que un atacante lea un archivo |
| Registro de Eventos de Windows | ID de evento 1001 (lectura de archivo), 1002 (creación de marcador de posición), 1003 (iniciado), 1004 (detenido) |
| Alertas Toast | Notificación inmediata en el escritorio mediante Windows PowerShell; funciona incluso a través de RDP |
| Registro de sesiones remotas | Nombre de usuario SMB y dirección de origen capturados mediante NetSessionEnum cuando el PID 4 desencadena el acceso |
| Limpieza automática | Los archivos sintéticos hidratados se eliminan después de un retardo configurable; se revierten a virtuales en el próximo acceso |
| Plantillas configurables | PDF, XLSX, DOCX, JSON, CSV, PEM, texto plano; todos servidos desde plantillas XML en la configuración |
| Enfriamiento por archivo | Limitación configurable (predeterminado 15 s) evita inundaciones de alertas cuando una herramienta lee múltiples fragmentos |
| Lista de archivos sintéticos | Lista XML que se puede incorporar con nombres de archivo convincentes y tamaños en bytes realistas |
| Ejecutable único | PhantomFS.exe + PhantomFS.exe.config; no requiere instalador |
| Clave | Valor predeterminado | Desde | Descripción |
|---|
enableEventLog | true | 1.0.0 | Escribir en el registro de eventos de Aplicaciones de Windows |
enableToast | true | 1.0.0 | Enviar notificación Toast de escritorio |
alertOnOpen | true | 1.0.0 | Alertar cuando se crea un marcador de posición por primera vez (exploración de directorio) |
alertOnRead | true | 1.0.0 | Alertar cuando realmente se leen los datos del archivo |
toastCooldownSeconds | 15 | 1.0.0 | Segundos mínimos entre notificaciones Toast para la misma ruta de archivo |
verbose | false | 1.0.0 | Salida adicional en la consola para diagnósticos |
virtRoot | (arg 1) | 1.0.0 | Sobrescribir la ruta raíz virtual desde la configuración en lugar de la línea de comandos |
sourceRoot | (vacío) | 1.0.0 | Directorio de respaldo real opcional; dejar vacío para modo solo sintético |
syntheticOnly | true | 1.0.0 | Servir solo los archivos listados en <syntheticFileList> |
autoCleanupEnabled | true | 1.1.0 | Eliminar archivos sintéticos materializados después del retardo y revertir a virtuales |
autoCleanupDelaySeconds | 300 | 1.1.0 | Segundos después de la hidratación antes de que el archivo sea eliminado (el temporizador de limpieza se ejecuta cada 30 s) |
resolveRemoteIPs | true | 1.1.0 | Resolver DNS el nombre de host del cliente SMB a una dirección IP; establecer en false si la latencia de búsqueda es inaceptable |
| ID de Evento | Nivel | Significado |
|---|
| 1001 | Advertencia | Se leyó el contenido de un archivo señuelo (incluye usuario/IP remoto cuando corresponda) |
| 1002 | Advertencia | Se creó un marcador de posición de archivo señuelo (se exploró/stat el archivo) |
| 1003 | Información | PhantomFS iniciado: ruta raíz virtual y configuración registradas |
| 1004 | Información | PhantomFS se detuvo correctamente |