
PhantomFS v1.2.20
Windowsハニーポット:ProjFSを使用してデコイファイルを投影し、アクセスされるとイベントログとデスクトップアラートをトリガー。さらに、SMBリモートセッションのログを記録して横移動検出を実現。
偽のファイル。本当のセキュリティ。
Windows向け仮想ハニーポットファイルシステム — 攻撃者を本物に見えるディレクトリにおびき寄せ、現行犯で捕まえます。
PhantomFSとは?
PhantomFSは**Windows Projected File System (ProjFS)**を利用して、記憶域にのみ存在する説得力のあるおとりファイル(財務報告書、SSHキー、API認証情報、人事スプレッドシート、NDAなど)で満たされた仮想ディレクトリを表面化します。攻撃者(または内部脅威)がファイルを開くまで、データがディスクに書き込まれることはありません。
ファイルが触れられた瞬間、PhantomFSは:
- Windows Event Logエントリを書き込む(アプリケーションログ、ソース
PhantomFS) - アクティブなデスクトップセッションにToast通知を送信する
- 正確なファイル名、タイムスタンプ、プロセスコンテキストを記録する
- ネットワーク共有経由でアクセスされた場合 — SMBユーザー名と送信元アドレスをキャプチャする
正当なユーザーが自分で置いていないファイルを開く理由はないため、すべてのアラートは高信頼性です。チューニング不要、ML不要、クラウド依存なし — ネイティブWindowsドライバと単一の実行可能ファイルのみです。
機能
| 機能 | 詳細 |
|---|---|
| フットプリントゼロのおとり | ファイルはオンデマンドで投影される — 攻撃者が読み取らない限りディスクに書き込まれない |
| 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 — インストーラー不要 |
要件
- Windows 10 バージョン1809(ビルド17763)以降 — Windows 11推奨
- .NET Framework 4.8
- Windows Projected File Systemオプション機能が有効であること(
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart) - 仮想ルートを開始するための管理者権限
クイックスタート
シンプルなコマンド(推奨)
- Releases から
PhantomFS-v1.1.0-x64.zipをダウンロードして展開する - 管理者として実行 — ProjFSを有効にする、
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart .\PhantomFS.exe --virtroot C:\PhantomFS\Virtual\Documents --syntheticonlyを実行する- エクスプローラーで
C:\PhantomFS\Virtual\Documentsを参照 — おとりファイルが表示されます - ファイルを開く — Toastが発火するのを確認し、イベントビューアー → Windowsログ → アプリケーション を確認する
設定
すべての設定は 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>
| キー | デフォルト | 導入バージョン | 説明 |
|---|---|---|---|
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 に設定 |
リモートセッションログ
ファイルが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]
リモートログの要件:
- Serverサービスが実行中である必要があります(共有がアクティブなときは自動的に開始されます)
- PhantomFSは共有をホストしているマシンで実行中である必要があります
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 でフィルタリングします。
| イベントID | レベル | 意味 |
|---|---|---|
| 1001 | 警告 | おとりファイルのデータが読み取られました(該当する場合はリモートユーザー/IPを含む) |
| 1002 | 警告 | おとりファイルのプレースホルダが作成されました(ファイルが参照/statされました) |
| 1003 | 情報 | PhantomFSが起動しました — 仮想ルートパスと設定が記録されました |
| 1004 | 情報 | PhantomFSが正常に停止しました |
CI/CD — GitHub Actions
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キーを表示。内部者またはサプライチェーン攻撃がデータ流出前にアラートを発火 - エアギャップセグメント — 外部ルックアップがブロックされている環境でDNSをスキップするために
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: