
PhantomFS v1.2.12
Honeypot do Windows que utiliza ProjFS para projetar arquivos isca que acionam alertas no Log de Eventos e na área de trabalho quando acessados, com registro de sessão remota SMB para detecção de movimento lateral.
Arquivos Falsos. Segurança Real.
Sistema de arquivos honeypot virtual para Windows — atraia invasores para um diretório que parece real, e então os pegue em flagrante.
O que é o PhantomFS?
O PhantomFS utiliza o Windows Projected File System (ProjFS) para exibir um diretório virtual repleto de arquivos isca convincentes — relatórios financeiros, chaves SSH, credenciais de API, planilhas de RH, NDAs — que existem apenas na memória. Nenhum dado é gravado em disco até que um invasor (ou ameaça interna) abra um deles.
No momento em que um arquivo é tocado, o PhantomFS:
- Escreve uma entrada no Log de Eventos do Windows (log de Aplicativo, fonte
PhantomFS) - Dispara uma notificação Toast na sessão ativa da área de trabalho
- Registra o nome exato do arquivo, timestamp e contexto do processo
- Quando acessado via compartilhamento de rede — captura o nome de usuário SMB e endereço de origem
Como usuários legítimos não têm motivo para abrir arquivos que não colocaram lá, cada alerta é de alta confiança. Sem ajustes, sem aprendizado de máquina, sem dependências na nuvem — apenas um driver nativo do Windows e um único executável.
Funcionalidades
| Funcionalidade | Detalhes |
|---|---|
| Iscas com pegada zero | Arquivos são projetados sob demanda — nada é gravado em disco a menos que um invasor leia um arquivo |
| Log de Eventos do Windows | Event ID 1001 (leitura de arquivo), 1002 (placeholder criado), 1003 (iniciado), 1004 (parado) |
| Alertas Toast | Notificação imediata na área de trabalho via Windows PowerShell — funciona até mesmo via RDP |
| Registro de sessão remota | Nome de usuário SMB e endereço de origem capturados via NetSessionEnum quando o PID 4 dispara o acesso |
| Limpeza automática | Arquivos sintéticos hidratados são excluídos após um atraso configurável; revertem para virtuais no próximo acesso |
| Modelos configuráveis | PDF, XLSX, DOCX, JSON, CSV, PEM, texto simples — todos servidos a partir de modelos XML na configuração |
| Cooldown por arquivo | Limitação configurável (padrão 15 s) evita enxurrada de alertas quando uma ferramenta lê múltiplos fragmentos |
| Lista de arquivos sintéticos | Lista XML pronta para uso com nomes de arquivo convincentes e tamanhos realistas em bytes |
| Executável único | PhantomFS.exe + PhantomFS.exe.config — sem necessidade de instalador |
Requisitos
- Windows 10 versão 1809 (Build 17763) ou posterior — Windows 11 recomendado
- .NET Framework 4.8
- Windows Projected File System recurso opcional ativado (
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart) - Privilégios de administrador para iniciar a raiz virtual
Início Rápido
Comandos Simples (recomendado)
- Baixe
PhantomFS-v1.1.0-x64.zipda página de Releases e extraia - Execute como Administrador — ative o ProjFS:
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart - Execute
.\PhantomFS.exe --virtroot C:\PhantomFS\Virtual\Documents --syntheticonly - Navegue até
C:\PhantomFS\Virtual\Documentsno Explorer — você verá os arquivos isca - Abra um — veja o Toast disparar e verifique Visualizador de Eventos → Logs do Windows → Aplicativo
Configuração
Todas as configurações ficam em PhantomFS.exe.config. Todas as chaves são opcionais — omitir uma chave usa o padrão mostrado na tabela.
Use o PhantomFS Profile Builder para gerar diferentes perfis de configuração para seus cenários de implantação:
Seção <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 — limpeza automática -->
<autoCleanupEnabled>true</autoCleanupEnabled>
<autoCleanupDelaySeconds>300</autoCleanupDelaySeconds>
<!-- v1.1.0 — registro de sessão remota -->
<resolveRemoteIPs>true</resolveRemoteIPs>
</settings>
| Chave | Padrão | Desde | Descrição |
|---|---|---|---|
enableEventLog | true | 1.0.0 | Escrever no log de eventos do Aplicativo do Windows |
enableToast | true | 1.0.0 | Enviar notificação Toast na área de trabalho |
alertOnOpen | true | 1.0.0 | Alertar quando um placeholder é criado pela primeira vez (navegação no diretório) |
alertOnRead | true | 1.0.0 | Alertar quando os dados do arquivo são realmente lidos |
toastCooldownSeconds | 15 | 1.0.0 | Segundos mínimos entre Toasts para o mesmo caminho de arquivo |
verbose | false | 1.0.0 | Saída extra no console para diagnósticos |
virtRoot | (arg 1) | 1.0.0 | Sobrescrever o caminho da raiz virtual a partir da configuração em vez da linha de comando |
sourceRoot | (vazio) | 1.0.0 | Diretório real opcional de suporte — deixe vazio para modo somente sintético |
syntheticOnly | true | 1.0.0 | Servir apenas os arquivos listados em <syntheticFileList> |
autoCleanupEnabled | true | 1.1.0 | Excluir arquivos sintéticos materializados após o atraso e reverter para virtuais |
autoCleanupDelaySeconds | 300 | 1.1.0 | Segundos após a hidratação antes do arquivo ser excluído (timer de limpeza roda a cada 30 s) |
resolveRemoteIPs | true | 1.1.0 | Resolver DNS do nome do host do cliente SMB para um endereço IP; defina como false se a latência da consulta for inaceitável |
Registro de Sessão Remota
Quando um arquivo é acessado através de um compartilhamento SMB, o PhantomFS detecta o PID 4 (o processo System do Windows / driver SMB do kernel) como o chamador e automaticamente chama NetSessionEnum para identificar o usuário remoto. A entrada no Log de Eventos e a notificação Toast incluirão:
PhantomFS — Leitura de Conteúdo de Arquivo Isca
Arquivo : Documents\Q4_Financial_Report_2024.pdf
Processo: System (PID 4)
Remoto : CORP\jsmith @ DESKTOP-A1B2C3D [192.168.1.45]
Requisitos para registro remoto:
- O serviço Server deve estar em execução (inicia automaticamente sempre que um compartilhamento está ativo)
- O PhantomFS deve estar em execução na máquina que hospeda o compartilhamento
resolveRemoteIPsrequer que a máquina cliente seja resolvível via DNS
Comportamento da Limpeza Automática
Após um arquivo sintético ser aberto e hidratado (conteúdo gravado em disco), um timer em segundo plano verifica a cada 30 segundos e exclui arquivos cujo tempo de hidratação exceda autoCleanupDelaySeconds. O arquivo excluído reverte para um placeholder virtual do ProjFS — o próximo acesso re-dispara o callback do ProjFS como se o arquivo nunca tivesse sido aberto.
Arquivos que ainda estão abertos quando o timer de limpeza dispara são ignorados sem erro e tentados novamente no próximo ciclo de 30 segundos.
Adicionando Arquivos Isca
Adicione entradas em <syntheticFileList> na configuração:
\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
Adicionando Modelos de Conteúdo
<syntheticTemplates>
<template name="my_custom_file.txt"><![CDATA[
... conteúdo do seu arquivo aqui ...
]]></template>
</syntheticTemplates>
Referência do Log de Eventos
Abra Visualizador de Eventos → Logs do Windows → Aplicativo e filtre pela fonte PhantomFS.
| Event ID | Nível | Significado |
|---|---|---|
| 1001 | Aviso | Os dados de um arquivo isca foram lidos (inclui usuário/IP remoto quando aplicável) |
| 1002 | Aviso | Um placeholder de arquivo isca foi criado (arquivo foi navegado/stat'ado) |
| 1003 | Informação | PhantomFS iniciado — caminho da raiz virtual e configurações registrados |
| 1004 | Informação | PhantomFS parou de forma limpa |
CI/CD — GitHub Actions
O PhantomFS inclui um workflow em .github/workflows/build.yml que compila para x64 e ARM64 em paralelo, e publica uma Release no GitHub a cada tag de versão.
Compilando a partir do Código Fonte
# Requer .NET Framework 4.8 SDK ou Visual Studio Build Tools
csc.exe /platform:x64 /r:System.Xml.dll /out:PhantomFS.exe src\PhantomFS.cs
O csc.exe normalmente está em:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
Ideias de Implantação
- Armadilha de estação de trabalho — execute como uma tarefa agendada no logon; qualquer movimento lateral para
\\hostname\PhantomFS\Virtualdispara um alerta imediato com o nome de usuário e IP de origem do invasor - Canário de servidor de arquivos — coloque um compartilhamento
\Financeapontando para a raiz virtual junto com o compartilhamento real de finanças; o registro de sessão remota identifica exatamente qual conta navegou pela isca - Máquina de desenvolvedor — exiba chaves AWS e SSH falsas em
~\Documents; ataques internos ou de supply chain disparam alertas antes da exfiltração - Segmento isolado (air-gapped) — defina
resolveRemoteIPs=falsepara pular DNS em ambientes onde consultas externas são bloqueadas; o nome NetBIOS da máquina ainda é capturado
Patrocínio
PhantomFS é gratuito, open-source e licenciado sob MIT. Se ele economizou seu tempo — ou pegou um invasor real — considere patrocinar o desenvolvimento contínuo.
Patrocinadores recebem:
- Respostas prioritárias a issues
- Acesso antecipado a novos modelos e funcionalidades
- Menção nas notas de release
Patrocinadores corporativos ($500+/mês) recebem um canal privado no Slack para suporte direto e solicitações de funcionalidades.
Licença
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 Registrada: PhantomFS™ é uma marca registrada da Alloy Secure. Todos os direitos reservados.
Aviso Legal — Uso Aceitável
O PhantomFS é fornecido apenas para fins defensivos legais de segurança — incluindo detecção de intrusão, pesquisa de ameaças e testes de penetração autorizados em sistemas que você possui ou para os quais possui permissão explícita por escrito para monitorar.
Você é o único responsável por garantir que seu uso do PhantomFS esteja em conformidade com todas as leis locais, nacionais e internacionais aplicáveis, incluindo, mas não se limitando a, leis de fraude computacional, interceptação telefônica, privacidade e trabalho. Implantar o PhantomFS em sistemas ou redes sem a devida autorização pode ser ilegal.
Os autores e colaboradores do PhantomFS:
- Não oferecem garantias, explícitas ou implícitas, quanto à adequação para qualquer propósito específico
- Não aceitam responsabilidade por quaisquer danos diretos, indiretos, incidentais ou consequentes decorrentes do uso ou uso indevido deste software
- Não são responsáveis por qualquer perda de dados, danos ao sistema, responsabilidade legal ou danos a terceiros resultantes da implantação do PhantomFS em qualquer ambiente
Use por sua conta e risco. Ao usar o PhantomFS, você reconhece que leu este aviso legal, o entendeu e concorda em se vincular a seus termos.
Aviso de Marca Registrada: PhantomFS™ é uma marca registrada da Alloy Secure. Todos os direitos reservados.
Agradecimentos
Construído sobre a API Windows Projected File System — a mesma tecnologia que alimenta o WSL2 e o OneDrive Files On-Demand.
Inspirado pelo meu trabalho como pesquisador na Thinkst 💚 https://citation.thinkst.com/talk/94782