
Ханипот Windows, использующий ProjFS для создания файлов-приманок, которые при обращении к ним вызывают события в Event Log и уведомления на рабочем столе, с журналированием удаленных сессий SMB для обнаружения бокового перемещения.
Фальшивые файлы. Настоящая безопасность.
Виртуальная файловая система-приманка для Windows — заманите атакующих в каталог, который выглядит настоящим, а затем поймайте их с поличным.
PhantomFS использует Windows Projected File System (ProjFS) для отображения виртуального каталога, заполненного правдоподобными файлами-приманками — финансовые отчёты, SSH-ключи, учётные данные API, таблицы HR, NDA, — которые существуют только в памяти. Никакие данные никогда не записываются на диск, пока атакующий (или инсайдер) не откроет один из них.
В момент касания файла PhantomFS:
PhantomFS)Поскольку у легитимных пользователей нет причин открывать файлы, которые они туда не помещали, каждое предупреждение является высокодостоверным. Никакой настройки, никакого машинного обучения, никаких облачных зависимостей — только родной драйвер Windows и один исполняемый файл.
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart)PhantomFS-v1.1.0-x64.zip из Releases и распакуйте егоEnable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart.\PhantomFS.exe --virtroot C:\PhantomFS\Virtual\Documents --syntheticonlyC:\PhantomFS\Virtual\Documents в Проводнике — вы увидите файлы-приманкиВсе настройки находятся в PhantomFS.exe.config. Все ключи необязательны — пропуск ключа приводит к использованию значения по умолчанию, указанного в таблице.
Используйте PhantomFS Profile Builder для генерации различных профилей конфигурации под ваши сценарии развёртывания:
<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 — автоматическая очистка -->
<autoCleanupEnabled>true</autoCleanupEnabled>
<autoCleanupDelaySeconds>300</autoCleanupDelaySeconds>
<!-- v1.1.0 — логирование удалённых сессий -->
<resolveRemoteIPs>true</resolveRemoteIPs>
</settings>
Когда к файлу обращаются через общую папку SMB, PhantomFS обнаруживает PID 4 (системный процесс Windows / драйвер SMB ядра) как вызывающий и автоматически вызывает NetSessionEnum для идентификации удалённого пользователя. Запись в журнале событий и Toast-уведомление будут содержать:
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]
Требования для удалённого логирования:
resolveRemoteIPs необходимо, чтобы клиентская машина была разрешима через DNSПосле того как синтетический файл открыт и гидратирован (содержимое записано на диск), фоновый таймер проверяет каждые 30 секунд и удаляет файлы, время гидратации которых превышает autoCleanupDelaySeconds. Удалённый файл возвращается к виртуальному заполнителю ProjFS — при следующем доступе снова срабатывает обратный вызов ProjFS, как если бы файл никогда не был открыт.
Файлы, которые всё ещё открыты в момент срабатывания таймера очистки, пропускаются без ошибки и повторно проверяются в следующем 30-секундном цикле.
Добавьте записи в раздел <syntheticFileList> в конфигурации:
\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[
... ваше содержимое файла здесь ...
]]></template>
</syntheticTemplates>
Откройте Просмотр событий → Журналы Windows → Приложение и отфильтруйте по источнику PhantomFS.
PhantomFS поставляется с рабочим процессом по пути .github/workflows/build.yml, который одновременно компилирует для x64 и ARM64 и публикует GitHub Release для каждого тега версии.
# Требуется .NET Framework 4.8 SDK или инструменты сборки Visual Studio
csc.exe /platform:x64 /r:System.Xml.dll /out:PhantomFS.exe src\PhantomFS.cs
csc.exe обычно находится в:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
\\hostname\PhantomFS\Virtual немедленно отправляет предупреждение с именем пользователя и исходным IP атакующего\Finance, указывающую на виртуальный корень рядом с реальной общей папкой финансов; удалённое логирование сессии идентифицирует, какая именно учётная запись просматривала приманку~\Documents; атаки инсайдеров или цепочки поставок вызывают предупреждения до эксфильтрацииresolveRemoteIPs=false, чтобы пропустить DNS в средах, где внешние запросы заблокированы; имя машины NetBIOS всё равно захватываетсяPhantomFS является бесплатным, открытым и лицензированным по MIT. Если он сэкономил вам время — или поймал реального злоумышленника — пожалуйста, рассмотрите возможность спонсирования дальнейшей разработки.
Спонсоры получают:
Корпоративные спонсоры ($500+/мес) получают приватный канал Slack для прямой поддержки и запросов функций.
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.
Уведомление о товарном знаке: PhantomFS™ является товарным знаком Alloy Secure. Все права защищены.
PhantomFS предоставляется только для законных целей оборонной безопасности — включая обнаружение вторжений, исследование угроз и авторизованное тестирование на проникновение в системах, которые вам принадлежат или на мониторинг которых у вас есть явное письменное разрешение.
Вы несёте единоличную ответственность за то, чтобы ваше использование PhantomFS соответствовало всем применимым местным, национальным и международным законам, включая, помимо прочего, законы о компьютерном мошенничестве, прослушивании телефонных разговоров, конфиденциальности и трудовом праве. Развёртывание PhantomFS в системах или сетях без надлежащего разрешения может быть незаконным.
Авторы и участники PhantomFS:
Используйте на свой страх и риск. Используя PhantomFS, вы подтверждаете, что прочитали этот отказ от ответственности, поняли его и согласны соблюдать его условия.
Уведомление о товарном знаке: PhantomFS™ является товарным знаком Alloy Secure. Все права защищены.
Создан на основе Windows Projected File System API — той же технологии, которая лежит в основе WSL2 и OneDrive Files On-Demand.
Вдохновлён моей работой в качестве исследователя в Thinkst 💚 https://citation.thinkst.com/talk/94782
| Функция | Описание |
|---|
| Приманки с нулевым следом | Файлы проецируются по требованию — ничего не записывается на диск, пока атакующий не прочитает файл |
| Журнал событий Windows | Идентификаторы событий: 1001 (чтение файла), 1002 (создан заполнитель), 1003 (запуск), 1004 (остановка) |
| Toast-уведомления | Мгновенное уведомление на рабочем столе через Windows PowerShell — работает даже через RDP |
| Логирование удалённых сессий | Имя пользователя SMB и исходный адрес захватываются через NetSessionEnum, когда PID 4 инициирует доступ |
| Автоматическая очистка | Гидрированные синтетические файлы удаляются после настраиваемой задержки; при следующем доступе снова становятся виртуальными |
| Настраиваемые шаблоны | PDF, XLSX, DOCX, JSON, CSV, PEM, обычный текст — все предоставляются из XML-шаблонов в конфигурации |
| Интервал кулдауна на файл | Настраиваемая задержка (по умолчанию 15 с) предотвращает лавину оповещений, когда инструмент читает несколько блоков |
| Список синтетических файлов | Встраиваемый XML-список правдоподобных имён файлов с реалистичными размерами в байтах |
| Один исполняемый файл | PhantomFS.exe + PhantomFS.exe.config — не требует установки |
| Ключ | По умолчанию | С версии | Описание |
|---|
enableEventLog | true | 1.0.0 | Запись в журнал событий приложений Windows |
enableToast | true | 1.0.0 | Отправка Toast-уведомления на рабочий стол |
alertOnOpen | true | 1.0.0 | Предупреждение при первом создании заполнителя (просмотр каталога) |
alertOnRead | true | 1.0.0 | Предупреждение при фактическом чтении данных файла |
toastCooldownSeconds | 15 | 1.0.0 | Минимальное количество секунд между Toast для одного и того же пути файла |
verbose | false | 1.0.0 | Дополнительный вывод в консоль для диагностики |
virtRoot | (арг. 1) | 1.0.0 | Переопределение пути виртуального корня из конфигурации, а не из командной строки |
sourceRoot | (пусто) | 1.0.0 | Необязательный реальный резервный каталог — оставьте пустым для режима только синтетики |
syntheticOnly | true | 1.0.0 | Обслуживать только файлы, перечисленные в <syntheticFileList> |
autoCleanupEnabled | true | 1.1.0 | Удалять материализованные синтетические файлы после задержки и возвращать к виртуальным |
autoCleanupDelaySeconds | 300 | 1.1.0 | Секунды после гидратации до удаления файла (таймер очистки запускается каждые 30 с) |
resolveRemoteIPs | true | 1.1.0 | Разрешать DNS-имя клиента SMB в IP-адрес; установите false, если задержка разрешения недопустима |
| ID события | Уровень | Значение |
|---|
| 1001 | Предупреждение | Прочитаны данные файла-приманки (включает удалённого пользователя/IP, если применимо) |
| 1002 | Предупреждение | Создан заполнитель файла-приманки (файл просмотрен/получен stat) |
| 1003 | Сведения | PhantomFS запущен — записаны путь виртуального корня и настройки |
| 1004 | Сведения | PhantomFS чисто остановлен |