| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
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,恶意软件分析人员可以快速识别恶意软件的功能并捕获网络签名。渗透测试人员和漏洞猎手会发现 FakeNet-NG 的可配置拦截引擎和模块化框架在测试应用程序的特定功能和原型设计 PoC 时非常有用。
您可以通过几种不同的方式安装 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 和适用于 Windows/Linux 操作系统的最新 pip。
在 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
# 为 python 3.10 构建 wheel
python -m pip install --force-reinstall netifaces
# 测试时观察到 "ModuleNotFoundError: No module named '_cffi_backend'" 错误
# 这将为 cryptography 获取所需版本的 cffi 包
python -m pip install --upgrade cryptography
如果手动安装,切换到下载的 flare-fakenet-ng 目录并以管理员权限运行以下命令:
python setup.py install
在 Linux 中,释放端口 53 供 DNS 监听器使用:
sudo systemctl stop systemd-resolved
在特权 shell 中从任何目录运行 'fakenet' 来执行 FakeNet-NG。
最后,如果您希望避免安装 FakeNet-NG 并希望按原样运行它(例如用于开发),那么您需要获取源代码并按如下方式安装依赖项:
分别针对 64 位或 32 位版本的 Windows/Linux 安装 64 位或 32 位 Python 3.10.11。
在 Windows 中,以管理员权限运行以下命令来安装 Python 依赖项:
python -m pip install pydivert dnslib dpkt pyopenssl pyftpdlib netifaces jinja2
注意:pydivert 还会在 %PYTHONHOME%\DLLs 目录中下载并安装 WinDivert 库和驱动程序。FakeNet-NG 捆绑了这些文件,因此正常使用时无需安装它们。
在 Linux 中,以管理员权限运行以下命令来安装 Python 依赖项:
python -m pip install --upgrade setuptools
# 为 python 3.10 构建 wheel
python -m pip install --force-reinstall netifaces
# 测试时观察到 "ModuleNotFoundError: No module named '_cffi_backend'" 错误
# 这将为 cryptography 获取所需版本的 cffi 包
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 中,释放端口 53 供 DNS 监听器使用:
sudo systemctl stop systemd-resolved
在特权 shell 中使用 Python 解释器运行 FakeNet-NG:
python -m fakenet.fakenet
运行 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 之前,让我们先了解一些基本概念。该工具由多个协同工作的模块组成。其中一个重要的模块是 Diverter,负责将流量重定向到一组监听器。Diverter 强制应用程序与 FakeNet-NG 交互,而不是与真实服务器交互。监听器是处理传入连接并允许我们检查应用程序流量(例如恶意软件签名)的各个服务。
让我们使用默认设置运行以下命令启动 FakeNet-NG:
C:\tools\fakenet-ng>fakenet.exe
以下是带注释的输出日志,说明了示例截获的 DNS 请求和 HTTP 连接:
______ _ ________ _ _ ______ _______ _ _ _____
| ____/\ | |/ / ____| \ | | ____|__ __| | \ | |/ ____|
| |__ / \ | ' /| |__ | \| | |__ | |______| \| | | __
| __/ /\ \ | < | __| | . ` | __| | |______| . ` | | |_ |
| | / ____ \| . \| |____| |\ | |____ | | | |\ | |__| |
|_|/_/ \_\_|\_\______|_| \_|______| |_| |_| \_|\_____|
Version 3.5
_____________________________________________________________
Developed by FLARE Team
Copyright (C) 2016-2026 Mandiant, Inc. All rights reserved.
_____________________________________________________________
07/06/16 10:20:52 PM [ FakeNet] Loaded configuration file: configs/default.ini
/
default configuration file /
07/06/16 10:20:52 PM [ Diverter] Capturing traffic to packets_20160706_222052.pcap
/
PCAP output file /
07/06/16 10:20:52 PM [ FakeNet] Anonymous Forwarder listener on TCP port 8080...
\
\ Anonymous Listener rule
07/06/16 10:20:52 PM [ RawTCPListener] Starting...
07/06/16 10:20:52 PM [ RawUDPListener] Starting...
07/06/16 10:20:52 PM [ FilteredListener] Starting...
07/06/16 10:20:52 PM [ DNS Server] Starting...
07/06/16 10:20:52 PM [ HTTPListener80] Starting...
07/06/16 10:20:52 PM [ HTTPListener443] Starting...
07/06/16 10:20:52 PM [ SMTPListener] Starting...
07/06/16 10:20:52 PM [ Diverter] Starting...
\
\ Listeners starting up
07/06/16 10:20:52 PM [ Diverter] Diverting ports:
07/06/16 10:20:52 PM [ Diverter] TCP: 1337, 80, 443, 25
07/06/16 10:20:52 PM [ Diverter] UDP: 1337, 53
/
Summary of diverted ports /
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
/
Intercepted traffic to the DNS server from malware.exe /
07/06/16 10:21:03 PM [ DNS Server] Received A request for domain 'evil.com'.
\
\ Fake DNS Listener handling the above request
07/06/16 10:21:04 PM [ Diverter] Modifying outbound external TCP request packet:
07/06/16 10:21:04 PM [ Diverter] from: 192.168.250.140:2179 -> 192.0.2.123:80
07/06/16 10:21:04 PM [ Diverter] to: 192.168.250.140:2179 -> 192.168.250.140:80
07/06/16 10:21:04 PM [ Diverter] pid: 456 name: malware.exe
/
Intercepted traffic to the web server from malware.exe /
07/06/16 10:21:08 PM [ HTTPListener80] Received a GET request.
07/06/16 10:21:08 PM [ HTTPListener80] --------------------------------------------------------------------------------
07/06/16 10:21:08 PM [ HTTPListener80] GET / HTTP/1.0
07/06/16 10:21:08 PM [ HTTPListener80]
07/06/16 10:21:08 PM [ HTTPListener80] --------------------------------------------------------------------------------
\
\ Fake HTTP Listener handling the above request
注意,每个日志行都有当前运行的 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 退出。控制台窗口将保持打开状态直到您这样做;这可以通过 --no-pause 标志禁用(例如在脚本中)。
在每次 FakeNet-NG 会话中,都会生成一个 HTML 报告,其中包含会话期间捕获的基于网络的指标 (NBI)。按下 CTRL-C 终止 FakeNet 后,此 HTML 文件将保存到 FakeNet 的根目录。用户可以通过在 Chrome 或 Firefox 等浏览器中查看此 HTML 文件来审查 NBI。
HTML 报告充当交互式图形用户界面 (GUI),以用户友好的方式呈现 NBI 摘要。它包括各种功能来选择、过滤和复制 NBI,使网络分析更加容易。UI 根据进程信息组织所有 NBI,然后根据它们使用的应用层或传输层协议进一步分类。
NBI 摘要表中的信息以表格格式呈现,包括以下详细信息:
选择:单击复选框选择相应的 NBI。您可以在不同或相同协议中选择多个 NBI。也可以单击行内的任意位置以选择整行。选中的 NBI 可以使用“复制选中的 NBI”按钮复制。
NBI:此单元格代表实际捕获的 NBI。它包括客户端针对监听器生成的命令、参数、URI 和其他重要活动。此单元格总结了恶意软件行为以便更好地理解。
附加信息:此单元格提供每个 NBI 请求的额外信息,例如使用的传输层协议、目标 IP、端口和 SSL 加密。
操作:此单元格允许您对单独的 NBI 执行操作。目前,仅支持复制。单击复制按钮会以适合创建报告的 markdown 格式复制特定 NBI 单元格数据。
UI 还包括各种交互式功能:
复选框选择:每个进程和协议块之前都有复选框。勾选复选框会选中该进程或协议下的所有 NBI。当您想选择特定进程或协议中的所有 NBI 时,这非常有用。然后您可以使用 复制选中的 NBI 按钮复制选中的 data。
搜索栏:搜索栏允许您键入关键字,只有进程名称、NBI 或附加信息中包含这些关键字的行才会显示在 HTML 页面中。然后您可以使用“复制过滤后的数据”按钮以 markdown 格式复制显示的数据。清除搜索查询会恢复原始表格视图。
复制按钮:
复制选中的数据:以 markdown 格式复制所有选中的 NBI。您可以通过勾选复选框选择单独的 NBI 或进程下的所有 NBI。复制过滤后的数据:以 markdown 格式复制过滤后的 NBI 数据。如果没有使用搜索查询,此按钮将复制整个数据。复制所有 NBI:以 markdown 格式复制 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 名称] - 一组监听器配置。每个监听器都有一组默认设置(例如端口、协议)以及特定于监听器的配置(例如 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 设置。以下是当前的支持状态:
SingleHostMultiHost,并实验性地支持 SingleHost 模式(除进程、端口和主机黑名单/白名单外,均能正常工作)。Auto
以在 Windows 上获得 SingleHost 模式,在 Linux 上获得 MultiHost 模式。Diverter 通常支持以下与 DNS 相关的设置:
Windows 上的 Diverter 实现支持以下与 DNS 相关的设置:
Linux 上的 Diverter 实现支持以下设置:
LinuxRedirectNonlocal - 当使用 FakeNet-NG 为另一台主机模拟互联网连接时,指定哪些面向外部的网络接口应重新路由到 FakeNet-NG。
LinuxFlushIptables - 在添加 FakeNet-NG 的规则之前刷新所有 iptables 规则。只要其终止序列未被中断,Linux Diverter 将恢复旧规则。
LinuxFlushDnsCommand - 为您的 Linux 发行版指定正确的命令以刷新 DNS 解析器缓存(如果适用)。
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 选项时的一个问题可能是您可能仍希望让某些流量通过,以确保机器的正常运行。考虑一种场景,您正在尝试分析一个仍然需要连接到外部 DNS 服务器的应用程序。您可以使用 BlackListPortsTCP 和 BlackListPortsUDP 设置来定义一组端口,发往这些端口的流量将被忽略并原样转发,或使用 BlackListIDsICMP(仅限 Windows)来定义一组要过滤和忽略的 ICMP ID:
BlackListPortsUDP: 53
您可能要考虑的其他 Diverter 设置包括 ProcessBlackList 和 HostBlackList,它们允许 Diverter 忽略并转发来自特定进程名称或发往特定主机的流量。
监听器配置定义各个监听器的行为。让我们看一个示例监听器配置:
[TCPListener1234]
Enabled: True
Port: 1234
Protocol: TCP
Listener: RawListener
UseSSL: Yes
Timeout: 10
Hidden: False
上面的配置由监听器名称 TCPListener1234 组成。它将用于日志记录目的,以便您可以区分处理连接的不同监听器,即使它们处理的是相同的协议。
以下设置是所有监听器通用的:
Port 和 Protocol 设置对于监听器了解要绑定到哪些端口以及(如果它们支持多种协议,例如 RawListener)决定使用哪种协议是必需的。Diverter 也使用它们来确定要重定向哪些端口和协议。
Listener 设置定义了用于处理重定向流量的可用监听器插件之一。当前版本的 FakeNet-NG 附带以下监听器:
DNSResponse 设置中的可配置地址回复 A 记录。您还可以将 NXDomains 属性设置为监听器应忽略的请求数量。这样,您可能能够使恶意软件请求其所有备用 C2 控制器名称。该监听器支持 TCP 和 UDP 协议。Webroot 目录中的不同文件进行响应。可选地将 POST 请求转储到可使用 DumpHTTPPosts 和 DumpHTTPPostsFilePrefix 设置指定的可配置文件中。注意: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 的任何连接将被允许通过。
另一个强大的配置设置是 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 上的连接,并让 FakeNet-NG 拦截来自不使用系统代理服务器设置或使用硬编码 IP 地址的应用程序的所有流量。使用匿名监听器,您可以将 FakeNet-NG 的高级流量和进程过滤功能带到第三方工具。
您可能还想启用 Diverter 的 ProcessBlackList 设置,以允许外部工具与互联网通信。例如,要允许 HTTP 代理转发代理流量,请将其进程名称添加到进程黑名单。例如,添加以下进程以允许 Burp Proxy 与互联网通信:
ProcessBlackList: java.exe
在应用程序在未知端口上通信的场景中,但您仍想将其重定向到端口 8080 上的匿名监听器,您可以如下定义默认监听器:
RedirectAllTraffic: Yes
DefaultTCPListener: ForwarderTCP
DefaultUDPListener: RawUDPListener
最后,要允许 DNS 流量仍转到互联网上的默认 DNS 服务器,同时重定向所有其他流量,请将端口 53 添加到 Diverter 的 UDP 端口黑名单,如下所示:
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 参数定义了一个潜在的协议处理程序列表,用于尝试所有传入的连接。
还建议通过更新以下 diversion 配置,将代理监听器定义为默认处理程序:
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` 或其他工具查明哪个应用程序绑定了该端口,然后参考相应的操作系统或应用程序文档来禁用该服务。
在进行重新配置之前,建议先捕获一份虚拟机快照。
例如,Ubuntu 通常在 `/etc/NetworkManager/NetworkManager.conf` 中通过 `dns=dnsmasq` 一行启用 `dnsmasq` 服务。禁用该功能(如将其注释掉)并重启 `network-manager` 服务(例如 `service network-manager restart`)即可释放该端口,随后可重新启动 FakeNet-NG。
在较新版本的 Ubuntu 或其他发行版中,使用 `lsof -i` 可能会发现使用的是 `systemd-resolved`。此时,可尝试根据 <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 模式。如果你使用的 Linux 接口支持大于 4016 的 MTU,则需要重新编译 python-netfilterqueue,以支持缓冲区大小 <your_mtu> + 80(python-netfilterqueue 将 80 字节的缓冲区用于开销)。
在 Windows 上不会拦截仅限本机的流量(例如,如果你尝试直接连接到某个监听器)。
仅拦截使用 TCP、UDP 和 ICMP 协议的流量。
如有错误、崩溃或其他意见,请联系 [email protected]。
订阅 FLARE 邮件列表以获取社区公告!发送“subscribe”至 [email protected]。