
FakeNet-NG - 次世代動的ネットワーク解析ツール
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
D O C U M E N T A T I O N
FakeNet-NG 3.5 は、マルウェアアナリストやペネトレーションテスター向けの次世代動的ネットワーク解析ツールです。オープンソースであり、最新バージョンのWindows(および一部の動作モードではLinux)向けに設計されています。FakeNet-NG は、Andrew Honig と Michael Sikorski によって開発された優れた Fakenet ツールをベースにしています。
このツールを使用すると、正当なネットワークサービスをシミュレートしながら、すべてまたは特定のネットワークトラフィックをインターセプトおよびリダイレクトできます。FakeNet-NG を使用することで、マルウェアアナリストはマルウェアの機能を迅速に特定し、ネットワークシグネチャをキャプチャできます。ペネトレーションテスターやバグハンターは、アプリケーションの特定の機能をテストしたり、PoC をプロトタイピングする際に、FakeNet-NG の設定可能なインターセプションエンジンとモジュラーフレームワークが非常に有用であると感じるでしょう。
FakeNet-NG はいくつかの方法でインストールできます。以下のインストール手順では、FakeNet-NG が使用するサードパーティのオープンソースライブラリがシステムに取得されることに注意してください。これらのライブラリは実行時に動的にロードされ、一部のライブラリは LGPL ライセンスである場合があります。
最も簡単な方法は、リリースページからコンパイル済みバージョンをダウンロードすることです:
https://github.com/mandiant/flare-fakenet-ng/releases
'fakenet.exe' を実行して FakeNet-NG を起動します。
これは Windows で FakeNet-NG を使用するための推奨方法であり、追加のモジュールをインストールする必要がなく、マルウェア解析マシンに最適です。
注記: FakeNet-NG は、アンチウイルス (AV) やエンドポイント検出および応答 (EDR) ソリューション (例: Windows Defender、Chrome のセーフブラウジング) によって悪意のあるものとしてフラグが立てられる可能性があります。これは、ネットワークトラフィックを変更し、ネットワークサービスをシミュレートする能力に加えて、リリース実行可能ファイルのビルドに PyInstaller を使用していることが原因である可能性があります。公式のリリースバイナリは安全であり、これらの検出は誤検知と見なされるべきです。注意点として、FakeNet-NG は仮想マシン (VM) などの制御された隔離環境での使用を想定して設計されており、システムのネットワーク設定を安全に変更できます。
Python 3.10.11 と最新の pip を Windows/Linux OS にインストールします。
Windows では、Visual C++ ビルドツール をダウンロードしてインストールします。
Linux でのインストールには以下の依存関係が必要です:
以下のコマンドを使用してこれらの依存関係をインストールします:
sudo apt-get install build-essential python3.10-dev libnetfilter-queue-dev
pip を使用して FakeNet-NG を Python モジュールとしてインストールします:
python -m pip install https://github.com/mandiant/flare-fakenet-ng/zipball/master
または、最新のソースコードを取得して手動でインストールします:
git clone https://github.com/mandiant/flare-fakenet-ng/
管理者権限で以下のコマンドを実行して Python の依存関係をインストールします:
Linux (Ubuntu 24.04.2 LTS でテスト済み) では、setup.py を実行する前に以下のコマンドを実行します:
python -m pip install --upgrade setuptools
# build wheel for python 3.10
python -m pip install --force-reinstall netifaces
# Observed "ModuleNotFoundError: No module named '_cffi_backend'" error while testing
# This will get the required version of cffi packages for cryptography
python -m pip install --upgrade cryptography
手動でインストールする場合は、ダウンロードした flare-fakenet-ng ディレクトリに移動し、管理者権限で以下を実行します:
python setup.py install
最後に、FakeNet-NG をインストールせずにそのまま実行したい場合 (例: 開発目的) は、ソースコードを取得して以下のように依存関係をインストールする必要があります:
64ビットまたは32ビットの Windows/Linux それぞれに対応する Python 3.10.11 をインストールします。
Windows では、管理者権限で以下のコマンドを実行して Python の依存関係をインストールします:
python -m pip install pydivert dnslib dpkt pyopenssl pyftpdlib netifaces jinja2
注記: pydivert は WinDivert ライブラリとドライバを %PYTHONHOME%\DLLs ディレクトリにダウンロードしてインストールします。FakeNet-NG にはこれらのファイルがバンドルされているため、通常の使用には必要ありません。
Linux では、管理者権限で以下のコマンドを実行して Python の依存関係をインストールします:
python -m pip install --upgrade setuptools
# build wheel for python 3.10
python -m pip install --force-reinstall netifaces
# Observed "ModuleNotFoundError: No module named '_cffi_backend'" error while testing
# This will get the required version of cffi packages for cryptography
python -m pip install --upgrade cryptography
python -m pip install netfilterqueue dnslib dpkt pyopenssl pyftpdlib netifaces jinja2
オプションで、テストに使用する次のモジュールをインストールできます:
python -m pip install requests
FakeNet-NG のソースコードをダウンロードします:
git clone https://github.com/mandiant/flare-fakenet-ng
Linux では、DNS リスナー用にポート 53 を解放します:
sudo systemctl stop systemd-resolved
特権シェルで Python インタプリタを使用して FakeNet-NG を実行します:
FakeNet-NG を実行する最も簡単な方法は、提供された実行可能ファイルを管理者として実行することです。--help コマンドラインパラメータを指定すると、簡単なヘルプを表示できます:
C:\tools\fakenet-ng>fakenet.exe --help
______ _ ________ _ _ ______ _______ _ _ _____
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
Version 3.5
_____________________________________________________________
Developed by FLARE Team
Copyright (C) 2016-2026 Mandiant, Inc. All rights reserved.
_____________________________________________________________
Usage: python -m fakenet.fakenet [options]:
Options:
-h, --help show this help message and exit
-c FILE, --config-file=FILE
configuration filename
-v, --verbose print more verbose messages (default: False)
-l LOG_FILE, --log-file=LOG_FILE
-s, --log-syslog Log to syslog via /dev/log (default: False)
-f STOP_FLAG, --stop-flag=STOP_FLAG
terminate if stop flag file is created
-p, --no-pause disable pause for confirmation before closing the console
(default: pause)
-n, --no-console-output
Suppress console output (for testing on Linux)
上記の簡単なヘルプからわかるように、FakeNet-NG の起動に使用する設定ファイルを構成できます。デフォルトではツールは configs\default.ini を使用しますが、-c パラメータで変更できます。configs ディレクトリにはいくつかのサンプル設定ファイルがあります。設定項目が多いため、FakeNet-NG は設定ファイルを使用して機能を制御します。
注: FakeNet-NG は、指定された設定ファイルを最初に指定された絶対パスまたは相対パスで探します (すべての設定を保存したい場合)。指定された設定ファイルが見つからない場合は、configs ディレクトリ内を探します。
残りのコマンドラインオプションを使用すると、表示されるログ出力の量を制御したり、画面に表示する代わりにファイルにリダイレクトしたりできます。
実際に FakeNet-NG を実行する前に、いくつかの基本概念を確認しましょう。このツールは、連携して動作する複数のモジュールで構成されています。そのような重要なモジュールの1つが Diverter で、トラフィックを一連のリスナーにリダイレクトする役割を担います。Diverter はアプリケーションに実際のサーバーではなく FakeNet-NG と対話させるように強制します。リスナーは個別のサービスで、着信接続を処理し、アプリケーションのトラフィック (例: マルウェアシグネチャ) を調査できるようにします。
以下のコマンドを実行して、デフォルト設定で FakeNet-NG を起動しましょう:
C:\tools\fakenet-ng>fakenet.exe
各ログ行には、現在実行中の FakeNet-NG モジュールの名前が表示されています。たとえば、トラフィックをリダイレクトしている場合、ログの先頭には Diverter ラベルが付きます:
07/06/16 10:21:03 PM [ Diverter] Modifying outbound external UDP request packet:
07/06/16 10:21:03 PM [ Diverter] from: 192.168.250.140:49383 -> 4.2.2.1:53
07/06/16 10:21:03 PM [ Diverter] to: 192.168.250.140:49383 -> 192.168.250.140:53
07/06/16 10:21:03 PM [ Diverter] pid: 456 name: malware.exe
同時に、個々のリスナーがリダイレクトされたトラフィックを処理するとき、ログには設定ファイルで指定された名前がラベルとして表示されます:
07/06/16 10:21:03 PM [ DNS Server] Received A request for domain 'evil.com'.
FakeNet-NG を停止し、生成された PCAP ファイルと HTML レポートをディスクに保存するには、CTRL-C を押します:
07/06/16 10:21:41 PM [ FakeNet] Stopping...
07/06/16 10:21:42 PM [ HTTPListener80] Stopping...
07/06/16 10:21:42 PM [ HTTPListener443] Stopping...
07/06/16 10:21:42 PM [ SMTPListener] Stopping...
07/06/16 10:21:43 PM [ Diverter] Stopping...
07/06/16 10:21:43 PM [ Diverter] Generated new HTML report: report_20160607_102143.html
[Press Enter to exit]
PCAP とレポートが生成されるのを待ってから、Enter を押して終了します。コンソールウィンドウは Enter を押すまで開いたままになります。これは (スクリプトなどで) --no-pause フラグを使用して無効にできます。
FakeNet-NG の各セッションでは、セッション中にキャプチャされたネットワークベースのインジケーター (NBI) を含む HTML レポートが生成されます。CTRL-C を押して FakeNet を終了すると、この HTML ファイルは FakeNet のルートディレクトリに保存されます。ユーザーは Chrome や Firefox などのブラウザでこの HTML ファイルを表示して NBI を確認できます。
HTML レポートは、ユーザーフレンドリーな方法で NBI サマリーを表示するインタラクティブなグラフィカルユーザーインターフェース (GUI) として機能します。NBI を選択、フィルタリング、コピーするためのさまざまな機能が含まれており、ネットワーク分析を容易にします。UI はすべての NBI をプロセス情報に基づいて整理し、さらに使用するアプリケーション層またはトランスポート層プロトコルによって分類します。
NBI サマリーテーブルの情報は表形式で表示され、以下の詳細が含まれます:
選択: チェックボックスをクリックすると、対応する NBI が選択されます。異なるプロトコルまたは同じプロトコルにわたって複数の NBI を選択できます。行内の任意の場所をクリックして行全体を選択することもできます。選択した NBI は「選択した NBI をコピー」ボタンでコピーできます。
NBI: このセルは実際にキャプチャされた NBI を表します。クライアントがリスナーに対して生成したコマンド、パラメータ、URI、およびその他の重要なアクティビティが含まれます。このセルはマルウェアの動作を要約して理解を深めます。
追加情報: このセルは、使用されたトランスポート層プロトコル、宛先 IP、ポート、SSL 暗号化など、各 NBI リクエストに関する追加情報を提供します。
アクション: このセルでは、個々の NBI に対してアクションを実行できます。現在、コピーのみがサポートされています。コピーボタンをクリックすると、レポート作成に適したマークダウン形式で特定の NBI セルデータがコピーされます。
UI には以下のさまざまなインタラクティブ機能も含まれています:
チェックボックス選択: 各プロセスおよびプロトコルブロックの前にチェックボックスが用意されています。チェックボックスをオンにすると、そのプロセスまたはプロトコルに属するすべての NBI が選択されます。特定のプロセスまたはプロトコルからすべての NBI を選択する場合に便利です。その後、「選択した NBI をコピー」ボタンを使用して選択したデータをコピーできます。
検索バー: 検索バーにキーワードを入力すると、プロセス名、NBI、または追加情報にこれらのキーワードが含まれる行のみが HTML ページに表示されます。その後、「フィルタリングされたデータをコピー」ボタンを使用して、表示されたデータをマークダウン形式でコピーできます。検索クエリをクリアすると、元のテーブルビューに戻ります。
コピーボタン:
選択したデータをコピー: 選択したすべての NBI をマークダウン形式でコピーします。チェックボックスをオンにして個々の NBI またはプロセス下のすべての NBI を選択できます。フィルタリングされたデータをコピー: フィルタリングされた NBI のデータをマークダウン形式でコピーします。検索クエリが使用されていない場合、このボタンはすべてのデータをコピーします。すべての NBI をコピー: HTML ページに存在するすべての NBI をマークダウン形式でコピーします。フィルターが適用されていても、このボタンをクリックするとすべての NBI がコピーされます。免責事項ボタン: 免責事項を表示します。免責事項には、表示された NBI サマリーについて前提を置く前にユーザーが考慮すべき重要な事実が記載されています。
トップへ移動ボタン: ページのコンテンツが表示可能領域を超えると表示されます。このボタンをクリックするとページの先頭に移動し、選択した NBI をコピー、すべての NBI をコピー、フィルタリングされた NBI をコピー、および検索バーなどの重要なボタンにアクセスできます。
FakeNet-NG の機能を最大限に活用するには、その設定ファイルの構造と設定を理解する必要があります。以下は設定ファイルのサンプルです:
###############################################################################
# Fakenet Configuration
[FakeNet]
DivertTraffic: Yes
###############################################################################
# Diverter Configuration
[Diverter]
NetworkMode: Auto
LinuxRedirectNonlocal: *
LinuxFlushIptables: Yes
LinuxFlushDNSCommand: service dns-clean restart
DumpPackets: Yes
DumpPacketsFilePrefix: packets
ModifyLocalDNS: No
StopDNSService: Yes
RedirectAllTraffic: Yes
DefaultTCPListener: RawTCPListener
DefaultUDPListener: RawUDPListener
###############################################################################
# Listener Configuration
[DNS Server]
Enabled: True
Port: 53
Protocol: UDP
Listener: DNSListener
DNSResponse: 192.0.2.123
NXDomains: 0
Hidden: False
[RawTCPListener]
Enabled: True
Port: 1337
Protocol: TCP
Listener: RawListener
UseSSL: No
Timeout: 10
Hidden: False
設定ファイルはいくつかのセクションに分かれています。* [FakeNet] - アプリケーション自体の動作を制御します。現時点で有効なオプションは DivertTraffic のみです。有効にすると、ツールは適切なDiverterプラグインを起動し、トラフィックをインターセプトします。このオプションが無効の場合、FakeNet-NGはリスナーを起動しますが、トラフィックをリスナーに転送する別の方法(例:手動でDNSサーバーを変更)に依存します。
[Diverter] - トラフィックをリダイレクトするための設定。詳細は後述。
[Listener Name] - リスナー設定のコレクション。各リスナーにはデフォルト設定(ポート、プロトコルなど)と、リスナー固有の設定(HTTPListenerのDumpHTTPPostsなど)があります。
[FakeNet]設定ブロックで DivertTraffic 設定を有効にした場合、ツールはトラフィックリダイレクトエンジンを有効にします。このエンジンを以降Diverterと呼びます。これは、Windowsプラットフォームで舞台裏の処理を行うために使用される優れたWinDivertライブラリ(Linux実装のDiverterはpython-netfilterqueueを使用)にちなんだ名称です。
Diverterは全ての送信パケットを検査し、有効なリスナーのプロトコルおよびポートのリストと照合します。パケットのポートとプロトコルに一致するリスナーが存在する場合、宛先アドレスがローカルマシンのIPアドレスに変更され、リスナーがリクエストを処理します。同時に、リスナーからの応答は、元の要求ホストからパケットが送信されているかのように送信元IPアドレスが変更されます。
DumpPackets設定を有効にすると、FakeNet-NGで観測された全てのトラフィック(リダイレクトまたは転送)をPCAPファイルに保存できます。SSL対応のリスナーとインターセプトされたアプリケーション間のSSLトラフィックを復号化することも可能です。以下のページの指示に従ってください。
https://wiki.wireshark.org/TLS
FakeNet-NGのサーバーが使用するキー privkey.pem と server.pem は、アプリケーションのルートディレクトリにあります。
SingleHost: ローカルプロセスからのトラフィックを操作。MultiHost: 他のシステムからのトラフィックを操作。Auto: 現在のプラットフォームで最も機能する NetworkMode を使用。NetworkMode 設定をサポートしているわけではありません。現在のサポート状況は以下の通りです。
SingleHost のみサポート。MultiHost をサポートし、SingleHost モードを実験的にサポート(プロセス、ポート、ホストのブラックリスト/ホワイトリストを除き動作)。Auto のままにしておくと、Windowsでは SingleHost モード、Linuxでは MultiHost モードになります。Diverterは一般的に以下のDNS関連設定をサポートしています。
DiverterのWindows実装は以下のDNS関連設定をサポートしています。
DiverterのLinux実装は以下の設定をサポートしています。
LinuxRedirectNonlocal - FakeNet-NGを使用して別のホストのインターネット接続をシミュレートする場合、外部ネットワークインターフェースのうち、FakeNet-NGに再ルーティングするものを指定します。
LinuxFlushIptables - FakeNet-NGのルールを追加する前に、すべての iptables ルールをフラッシュします。Linux Diverterは、終了シーケンスが中断されなければ、古いルールを復元します。
LinuxFlushDnsCommand - 該当する場合、DNSリゾルバキャッシュをフラッシュするための、お使いのLinuxディストリビューションに適したコマンドを指定します。
DebugLevel - 表示する詳細なデバッグイベントを指定します。有効なラベルについては、fakenet/diverters/linutil.pyを参照してください。
デフォルトでは、Diverterは専用のリスナーが作成されたトラフィックのみをインターセプトします。ただし、RedirectAllTraffic 設定を有効にし、DefaultTCPListener および DefaultUDPListener 設定でデフォルトのTCPおよびUDPハンドラーを設定することで、リスナーで明示的に定義されていないポートへのトラフィックを動的に処理できます。例えば、すべてのトラフィックをローカルのTCPおよびUDPリスナー(ポート1234)にリダイレクトするサンプル設定を見てみましょう。
RedirectAllTraffic: Yes
DefaultTCPListener: TCPListener1234
DefaultUDPListener: UDPListener1234
注: リスナー定義については先走りしていますが、TCPListener1234 と UDPListener1234 は以下のセクションで定義されると考えてください。
RedirectAllTraffic 設定を使用すると、FakeNet-NGは宛先アドレスだけでなく、宛先ポートも変更して、デフォルトリスナーのいずれかで処理できるようにします。以下は、外部ホストIPアドレス1.1.1.1のポート4444宛てのトラフィックが、代わりにポート1234のデフォルトリスナーにリダイレクトされたサンプルログです。
07/06/16 01:13:47 AM [ Diverter] Modifying outbound external TCP request packet:
07/06/16 01:13:47 AM [ Diverter] from: 192.168.66.129:1650 -> 1.1.1.1:4444
07/06/16 01:13:47 AM [ Diverter] to: 192.168.66.129:1650 -> 192.168.66.129:1234
07/06/16 01:13:47 AM [ Diverter] pid: 3716 name: malware.exe
重要な点は、明示的に定義されたリスナーのポート宛てのトラフィックは、引き続きそのリスナーによって処理され、デフォルトリスナーには処理されないということです。例えば、別のUDPポート53のDNSリスナーが定義されている場合、デフォルトのUDPリスナーはDNSトラフィックを処理しません。
RedirectAllTraffic オプションを有効にする際の問題点の1つは、マシンの通常の動作を確保するために、一部のトラフィックを通す必要があるかもしれないことです。分析しようとしているアプリケーションが外部DNSサーバーへの接続を必要としているシナリオを考えてみてください。BlackListPortsTCP および BlackListPortsUDP 設定を使用して、トラフィックが無視され変更されずに転送されるポートのリストを定義したり、BlackListIDsICMP(Windowsのみ)を使用してフィルタリングおよび無視するICMP IDのリストを定義したりできます。
BlackListPortsUDP: 53
その他のDiverter設定として、ProcessBlackList と HostBlackList があり、特定のプロセス名からのトラフィック、または特定のホスト宛てのトラフィックをそれぞれ無視して転送できます。
リスナー設定は、個々のリスナーの動作を定義します。サンプルのリスナー設定を見てみましょう。
[TCPListener1234]
Enabled: True
Port: 1234
Protocol: TCP
Listener: RawListener
UseSSL: Yes
Timeout: 10
Hidden: False
上記の設定は、リスナー名 TCPListener1234 で構成されています。これはログ記録のために使用され、同じプロトコルを処理している場合でも、異なるリスナーを区別できるようにします。
以下の設定はすべてのリスナーに共通です。
Port および Protocol 設定は、リスナーがバインドするポートと、複数のプロトコルをサポートする場合(例:RawListener)に使用するプロトコルを決定するために必要です。また、Diverterがどのポートとプロトコルをリダイレクトするかを把握するためにも使用されます。
Listener 設定は、リダイレクトされたトラフィックを処理するための利用可能なリスナープラグインの1つを定義します。現在のバージョンのFakeNet-NGには、以下のリスナーが付属しています。
DNSResponse 設定で設定可能なアドレスで応答します。また、NXDomains 属性を設定すると、リスナーが無視するリクエスト数を指定できます。これにより、マルウェアにすべてのバックアップC2コントローラー名を要求させることができる場合があります。このリスナーはTCPとUDPの両方のプロトコルをサポートします。Webroot ディレクトリ内の、要求されたファイル拡張子に基づいて異なるファイルで応答します。必要に応じて、DumpHTTPPosts および DumpHTTPPostsFilePrefix 設定を使用して、POSTリクエストを設定可能なファイルにダンプします。注意: FakeNet-NGは、最初に指定された絶対パスまたは相対パスを使用してwebrootディレクトリを検索しようとします。指定されたwebrootパスが見つからない場合は、defaultFiles ディレクトリ内を検索します。
特別なケースとして、WindowsのDiverter実装は、実行中にすべてのICMP要求に自動的に応答します。そのため、マルウェアが接続性をテストするためにホストにpingを試みた場合、有効な応答が返されます。LinuxのDiverterは、すべてのICMPパケットをログに記録し、localhostに転送します。
注意: 一部のリスナーはファイルアップロードを処理できます(例:TFTPListener と BITSListener)。アップロードされたすべてのファイルは、設定可能なプレフィックス(例:TFTPアップロードの場合は "tftp_")が付けられ、現在の作業ディレクトリに保存されます。
FakeNet-NGは、プロセスとホストのブラックリストおよびホワイトリストからなるいくつかのフィルタリングルールをサポートしています。ホワイトリストはリスナーへの接続を許可するルールとして扱われ、ブラックリストは着信接続を無視して単に転送するために使用されます。
例えば、以下のプロセスとホストフィルターが設定された構成を考えてみます。
[FilteredListener]
Enabled: True
Port: 31337
Protocol: TCP
Listener: RawListener
UseSSL: No
Timeout: 10
ProcessWhiteList: malware.exe, ncat.exe
HostBlackList: 5.5.5.5
上記の FilteredListener は、malware.exe と ncat.exe プロセスからの接続のみを処理しますが、ホスト 5.5.5.5 宛ての接続は無視します。つまり、test.exe というプロセスがポート31337に接続しようとした場合、リスナーにリダイレクトされず、ルートが利用可能であれば元の宛先に転送されます。
同時に、malware.exe プロセスが 5.5.5.5 以外のホストのポート31337に接続しようとした場合、FilteredListener に転送されます。malware.exe プロセスから 5.5.5.5 宛ての接続は通過が許可されます。
もう1つの強力な設定オプションは ExecuteCmd です。これは、接続の最初に検出されたパケットで任意のコマンドを実行できるようにします。ExecuteCmd の値では、いくつかの書式文字列変数を使用できます。
{pid} - プロセスID{procname} - プロセス実行可能ファイル名{src_addr} - 送信元アドレス{src_port} - 送信元ポート{dst_addr} - 宛先アドレス{dst_port} - 宛先ポートパックされたマルウェアサンプルが、設定されたC2サーバー(ポート8443)に接続するシナリオを考えてみます(ポートが不明な場合は RedirectAllTraffic を使用します)。多くの場合、マルウェアは接続を行う時点で自己展開されており、その実行ポイントはデバッガをプロセスにアタッチして、解析用にアンパックされたバージョンをダンプするのに理想的です。
この機能を使用して、最初の接続時に自動的にデバッガを起動する方法を見てみましょう。
[C2Listener]
Enabled: True
Port: 8443
Protocol: TCP
Listener: RawListener
UseSSL: Yes
Timeout: 300
ProcessWhiteList: malware.exe
ExecuteCmd: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\windbg.exe -p {pid}
FakeNet-NGがホワイトリストに登録されたプロセス malware.exe(この設定はオプション)からの新しい接続を検出すると、自動的に windbg を起動し、接続元のプロセスにアタッチします。
注意: マルウェアがリスナーとさらにやり取りする必要がある場合は、通常の Timeout 設定を延長する必要があるかもしれません。
実際のリスナーを定義せずに新しいリスナー設定を作成できる特別なユースケースがあります。
[Forwarder]
Enabled: True
Port: 8080
Protocol: TCP
ProcessWhiteList: chrome.exe
リスナーが定義されていない場合でも、FakeNet-NGはトラフィックをローカルマシンに転送しますが、別のリスナーをユーザーが起動する必要があります。例えば、HTTPプロキシがポート8080で接続をリッスンし、システムのプロキシサーバー設定を使用しない、またはハードコードされたIPアドレスを使用するアプリケーションからのすべてのトラフィックをFakeNet-NGにインターセプトさせることができます。匿名リスナーを使用すると、FakeNet-NGの高度なトラフィックおよびプロセスフィルタリング機能をサードパーティ製ツールに適用できます。
また、Diverterの ProcessBlackList 設定を有効にして、外部ツールがインターネットと通信できるようにすることもできます。例えば、HTTPプロキシがプロキシされたトラフィックを転送できるようにするには、そのプロセス名をプロセスのブラックリストに追加します。例えば、Burp Proxyがインターネットと通信できるようにするには、以下のプロセスを追加します。
ProcessBlackList: java.exe
アプリケーションが未知のポートで通信するが、ポート8080の匿名リスナーにリダイレクトしたい場合、デフォルトリスナーを次のように定義できます。
RedirectAllTraffic: Yes
DefaultTCPListener: ForwarderTCP
DefaultUDPListener: RawUDPListener
最後に、DNSトラフィックは引き続きインターネット上のデフォルトのDNSサーバーに送信し、他のすべてのトラフィックをリダイレクトするには、DiverterのUDPポートブラックリストにポート53を次のように追加します。
BlackListPortsUDP:
FakeNet-NGの最新リリースでは、通信プロトコル(SSLトラフィックを含む)を動的に検出し、適切なリスナーに接続をリダイレクトできる新しいプロキシリスナーが実装されています。
以下の設定例のように、プロキシリスナーを特定のポートで動作するように設定できます。
[ProxyTCPListener]
Enabled: True
Protocol: TCP
Listener: ProxyListener
Port: 38926
Listeners: HTTPListener, RawListener, FTPListener, DNSListener, POPListener, SMTPListener, TFTPListener, IRCListener, BITSListener
Hidden: False
新しい Listeners パラメータに注目してください。これは、すべての着信接続に対して試行する可能性のあるプロトコルハンドラのリストを定義します。
また、以下のDiverter設定を更新して、プロキシリスナーをデフォルトハンドラーとして定義することをお勧めします。
RedirectAllTraffic: Yes
DefaultTCPListener: ProxyTCPListener
DefaultUDPListener: ProxyUDPListener
デフォルトリスナーをプロキシリスナーに指定すると、すべての不明な接続が適切に処理されます。特定のプロトコルを強制するために、特定のリスナーをポートに割り当てることもできます(例:ポート80には常にHTTPリスナーを使用する)。
プロキシは、利用可能なすべてのリスナーに対して taste() 関数を呼び出すことで、パケットのプロトコルを判別します。taste() を実装する各リスナーは、そのリスナーが処理するプロトコルがパケット内容と一致する可能性を示すスコアを返します。プロキシは、最も高いスコアを返したリスナーにパケットを転送します。RawListenerは常にスコア1を返すため、他のすべてのリスナーが0を返した場合に選択され、デフォルトとして機能します。
ユーザーは各リスナーの設定パラメータ 'Hidden' を変更できます。'Hidden' が 'False' の場合、リスナーは特定のポートにバインドされ、そのポートのすべてのトラフィックを自動的に受信します。'Hidden' が 'True' に設定されている場合、リスナーはプロキシを介してリダイレクトされたトラフィックのみを受信できます。
FakeNet-NGはPythonで開発されており、新しいプラグインを迅速に開発し、既存の機能を拡張できます。詳細については、Developing for FakeNet-NGを参照してください。
この記事の執筆時点では、pydivertのデフォルトバッファサイズは1500です。FakeNet-NGがデフォルトのバッファサイズより大きいパケットに遭遇した場合、このエラーが発生する可能性があります。回避策として、fakenet/diverters/windows の self.handle.recv(bufsize=<your_bufsize>) で目的のバッファサイズを指定します。 こちらを参照してください。
下記の「トラフィックをインターセプトしない」を参照してください。
FakeNet-NGがパケットをインターセプトして変更するには、パケットが宛先に到達するための有効なネットワークルートが存在する必要があります。
ルートが正しく設定されているかどうかを確認する簡単な方法があります。ツールを実行せずに、宛先ホストにpingを試みてください。有効な応答またはタイムアウトメッセージのいずれかが表示されるはずです。代わりに「宛先に到達できません」というエラーが表示された場合、有効なルートがありません。
これは通常、ゲートウェイが設定されていないか、到達不能であることが原因です。例えば、VMWareマシンでホストオンリーモードを使用している場合、マシンにゲートウェイが設定されていないため、FakeNet-NGがトラフィックを認識できません。
この問題を修正するには、プライマリインターフェースを同じサブネットのゲートウェイに手動で設定します。まずインターフェース名を確認します。
C:\>netsh interface show interface
Admin State State Type Interface Name
-------------------------------------------------------------------------
Enabled Connected Dedicated Local Area Connection
この場合、インターフェース名は "Local Area Connection" なので、残りのコマンドでこれを使用します。手動でインターフェースのIPアドレスとゲートウェイを以下のように設定します。
C:\>netsh interface ip set address name="Local Area Connection" static 192.168.249.123 255.255.255.0 192.168.249.254
DNSサーバーのIPアドレスを手動で設定します。
C:\>netsh interface ip set dns name="Local Area Connection" static 4.2.2.2
それでも問題が解決しない場合は、ゲートウェイのIPアドレス自体がルーティング可能であることを確認してください。
DNSリスナーがポートに正常にバインドされていることを確認してください。次のようなエラーは、DNSリスナーが正常にバインドされなかったことを示します。``` 05/01/17 11:11:16 AM [ FakeNet] Error starting DNSListener listener: 05/01/17 11:11:16 AM [ FakeNet] [Errno 98] Address already in use
`netstat`、`tcpview`、またはその他のツールを使用して、どのアプリケーションがバインド
されているかを発見し、対応するオペレーティングシステムまたはアプリケーションの
ドキュメントを参照してサービスを無効にします。
再構成を行う前に、VM スナップショットを取得することをお勧めします。
例えば、Ubuntu では、`dnsmasq` サービスが有効になっているのは、
`/etc/NetworkManager/NetworkManager.conf` 内の `dns=dnsmasq` という行です。
これを無効にする(例えばコメントアウトする)と、`network-manager` サービスを再起動する(例:
`service network-manager restart`)ことで、
FakeNet-NG を再起動する前にポートを解放できます。
新しいバージョンの Ubuntu や他のディストリビューションでは、`lsof -i` を使用すると、
代わりに `systemd-resolved` が使用されていることがわかる場合があります。そのような場合、以下の手順を試すことができます(
以下のURLより引用):
<https://askubuntu.com/questions/907246/how-to-disable-systemd-resolved-in-ubuntu>:```
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
次に、/etc/NetworkManager/NetworkManager.conf の [main] セクションの下に、次の行を追加します:```
dns=default
シンボリックリンク `/etc/resolv.conf` を削除、すなわち `rm /etc/resolv.conf` を実行します。
最後に、`NetworkManager` を再起動します:```
sudo systemctl restart NetworkManager
FakeNet-NG はローカルの C: ドライブに展開されていることを確認してください。そうすることで、WinDivert ドライバが正しく読み込まれます。
このエラーは、Fakenet のスタンドアロン実行可能バージョンを実行している場合に発生する可能性があります。Visual C++ 2008 ランタイム実行可能ファイルをダウンロードしてインストールしてください。
SingleHost モードでサポートされているのは Windows Vista 以降のみです。Windows XP/2003 オペレーティングシステムでは、オリジナルの Fakenet を使用してください。
MultiHost モードでサポートされているのは Linux のみです。
古いバージョンの python-netfilterqueue は python でセグメンテーションフォールトを引き起こす可能性があります。この問題が発生した場合は、最新バージョンの python-netfilterqueue を使用していることを確認してください。
python-netfilterqueue で使用されるハードコードされたバッファサイズのため、Linux Diverter は 4,016 バイトを超えるパケットを正しく処理できません。実際には、従来の 1,500 バイトの最大転送単位 (MTU) で設定されたインターフェースでは、Linux MultiHost モードに影響はありません。FakeNet-NG で使用している Linux インターフェースが 4016 を超える MTU をサポートしている場合は、<your_mtu> + 80 のバッファサイズをサポートするように python-netfilterqueue を再コンパイルする必要があります(python-netfilterqueue はオーバーヘッドに 80 バイトのバッファを使用します)。
Windows ではローカルマシンのみのトラフィックはインターセプトされません(例:リスナーに直接接続しようとした場合)。
TCP、UDP、ICMP プロトコルを使用するトラフィックのみがインターセプトされます。
バグ、クラッシュ、その他のコメントについては、[email protected] までご連絡ください。
コミュニティのお知らせについては、FLARE メーリングリストに登録してください!件名に "subscribe" と入力して [email protected] にメールを送信してください。
Linux では、DNS リスナー用にポート 53 を解放します:
sudo systemctl stop systemd-resolved
特権シェルで任意のディレクトリから 'fakenet' を実行して FakeNet-NG を起動します。
python -m fakenet.fakenet