
Windowsハニーポット:ProjFSを使用してデコイファイルを投影し、アクセスされるとイベントログとデスクトップアラートをトリガー。さらに、SMBリモートセッションのログを記録して横移動検出を実現。
偽のファイル。本当のセキュリティ。
Windows向け仮想ハニーポットファイルシステム — 攻撃者を本物に見えるディレクトリにおびき寄せ、現行犯で捕まえます。
PhantomFSは**Windows Projected File System (ProjFS)**を利用して、記憶域にのみ存在する説得力のあるおとりファイル(財務報告書、SSHキー、API認証情報、人事スプレッドシート、NDAなど)で満たされた仮想ディレクトリを表面化します。攻撃者(または内部脅威)がファイルを開くまで、データがディスクに書き込まれることはありません。
ファイルが触れられた瞬間、PhantomFSは:
PhantomFS)正当なユーザーが自分で置いていないファイルを開く理由はないため、すべてのアラートは高信頼性です。チューニング不要、ML不要、クラウド依存なし — ネイティブWindowsドライバと単一の実行可能ファイルのみです。
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart)PhantomFS-v1.1.0-x64.zip をダウンロードして展開するEnable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart.\PhantomFS.exe --virtroot C:\PhantomFS\Virtual\Documents --syntheticonly を実行するC:\PhantomFS\Virtual\Documents を参照 — おとりファイルが表示されますすべての設定は PhantomFS.exe.config にあります。すべてのキーはオプションです — キーを省略すると、表に示されているデフォルトが使用されます。
PhantomFSプロファイルビルダーを使用して、展開シナリオに応じたさまざまな設定プロファイルを生成してください。
<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>
ファイルがSMB共有を介してアクセスされると、PhantomFSは呼び出し元としてPID 4(Windows Systemプロセス / カーネル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[
... your file content here ...
]]></template>
</syntheticTemplates>
イベントビューアー → Windowsログ → アプリケーション を開き、ソース PhantomFS でフィルタリングします。
PhantomFSには .github/workflows/build.yml にワークフローが含まれており、x64 と ARM64 向けに並行してコンパイルし、バージョンタグごとにGitHub Releaseを公開します。
# Requires .NET Framework 4.8 SDK or Visual Studio Build Tools
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 に偽のAWSキーとSSHキーを表示。内部者またはサプライチェーン攻撃がデータ流出前にアラートを発火resolveRemoteIPs=false を設定。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のファイルオンデマンドを支える同じテクノロジーです。
Inspired by my work as a researcher at Thinkst 💚 https://citation.thinkst.com/talk/94782
| 機能 | 詳細 |
|---|
| フットプリントゼロのおとり | ファイルはオンデマンドで投影される — 攻撃者が読み取らない限りディスクに書き込まれない |
| Windows Event Log | イベントID 1001(ファイル読み取り)、1002(プレースホルダ作成)、1003(開始)、1004(停止) |
| Toastアラート | Windows PowerShellを介した即時デスクトップ通知 — RDP経由でも動作 |
| リモートセッションログ | PID 4がアクセスをトリガーしたときにNetSessionEnumを介してSMBユーザー名と送信元アドレスをキャプチャ |
| 自動クリーンアップ | 設定可能な遅延後に具体化された合成ファイルを削除し、次回アクセス時に仮想に戻す |
| 設定可能なテンプレート | 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 | SMBクライアントのホスト名をDNS解決してIPアドレスに変換します。ルックアップのレイテンシが許容できない場合は false に設定 |
| イベントID | レベル | 意味 |
|---|
| 1001 | 警告 | おとりファイルのデータが読み取られました(該当する場合はリモートユーザー/IPを含む) |
| 1002 | 警告 | おとりファイルのプレースホルダが作成されました(ファイルが参照/statされました) |
| 1003 | 情報 | PhantomFSが起動しました — 仮想ルートパスと設定が記録されました |
| 1004 | 情報 | PhantomFSが正常に停止しました |