【逆向】FakeNet-NG 下一代动态网络分析工具
前言
FakeNet-NG是一款开源的动态网络分析工具,它可以对所有或特定的网络流量进行拦截和重定向。使用该工具,恶意软件分析人员可以快速识别恶意软件的功能并捕获网络签名。而渗透测试人员和漏洞研究员在使用它的可配置拦截引擎和模块化框架在测试应用程序的特定功能和原型Poc时也非常有用。
安装
Windows:
//下载Release版到本地,运行“fakenet.exe”即可。 https://github.com/fireeye/flare-fakenet-ng/releases
Linux:
//使用pip将FakeNet-NG作为Python模块安装: pip install https://github.com/fireeye/flare-fakenet-ng/zipball/master //或者通过获取最新的源代码然后手动安装: git clone https://github.com/fireeye/flare-fakenet-ng/ python setup.py install
使用
运行“fakenet.exe”,使用“-h”参数获取帮助信息。
-h //显示帮助信息 -c //指定配置文件 -v //显示详细信息 -l //保存日志到文件
默认情况下该工具使用 configs\default.ini作为配置文件, 但你也可以使用“-c”参数进行更改。FakeNet-NG主要依靠配置文件来控制其功能。
配置文件
为了充分利用FakeNet-NG的功能,我们必须了解其配置文件的结构和设置。
配置文件示例:
/************************************************** Fakenet Configuration **************************************************/ [FakeNet] DivertTraffic: Yes /************************************************** Diverter Configuration **************************************************/ [Diverter] NetworkMode: Auto DebugLevel: Off LinuxRestrictInterface:Off LinuxFlushIptables: Yes LinuxFlushDNSCommand: service dns-clean restart DumpPackets: No DumpPacketsFilePrefix: packets FixGateway: Yes FixDNS: Yes ModifyLocalDNS: Yes StopDNSService: Yes RedirectAllTraffic: Yes DefaultTCPListener: RawTCPListener DefaultUDPListener: RawUDPListener BlackListPortsTCP: 139 BlackListPortsUDP: 67, 68, 137, 138, 443, 1900, 5355 /************************************************** Listener Configuration **************************************************/ [RawTCPListener] Enabled: True Port: 1337 Protocol: TCP Listener: RawListener UseSSL: No Timeout: 10 Hidden: False [RawUDPListener] Enabled: True Port: 1337 Protocol: UDP Listener: RawListener UseSSL: No Timeout: 10 Hidden: False
配置文件主要由以下几个部分组成:
[FakeNet] //用于控制程序自身行为。 [Diverter] //用于设置流量重定向配置。(分流器) [Listener Name] //用于定义多个监听器配置。(监听器)
[FakeNet] 部分:
//启用:指示NG启动相应的分流器插件并拦截流量。 //禁用:NG仍然会启动监听器,但是需要依靠其它方式来拦截流量(例如手动更改DNS服务器等) DivertTraffic: Yes
[Diverter] 部分:
/********************************************************************************************************************** 假如你在[FakeNet]部分启用了"DivertTraffic"选项,NG将启用其流量重定向引擎,该引擎将检查所有发送的数据包, 并将它们与已启用的监听器[Listener]的协议与端口进行匹配,如果匹配到有一个监听器正在监听该数据包的协议与端口, 则将该数据包的目标地址更改为监听器监听的本地IP地址,此时该数据包将接收到来自NG的响应数据,而不是原目标IP地址的响应数据。 **********************************************************************************************************************/ //指定网络模式 NetworkMode: Auto //调试级别 DebugLevel: Off //Linux相关 LinuxRestrictInterface: Off LinuxFlushIptables: Yes LinuxFlushDNSCommand: service dns-clean restart //指定是否保存捕获的流量,设置PCAP数据包前缀 DumpPackets: Yes DumpPacketsFilePrefix: packets //修复网关/DNS(VMWare相关) FixGateway: Yes FixDNS: Yes //修改本地DNS(将本机DNS服务指向NG的DNS监听器) ModifyLocalDNS: Yes //停止NDS服务(停止Windows DNS客户端服务,NG将可以看到解析域名的进程,而不是通用的“svchost.exe”) StopDNSService: Yes //重定向所有流量,并设置默认的TCP/UDP监听器 RedirectAllTraffic: Yes DefaultTCPListener: ProxyTCPListener DefaultUDPListener: ProxyUDPListener //端口黑名单(开启重定向所有流量时,可以忽略这些端口,不对这些端口的数据进行重定向) BlackListPortsTCP: 139 BlackListPortsUDP: 67, 68, 137, 138, 443, 1900, 5355 //进程黑名单(开启重定向所有流量时,可以忽略这些进程,不对这些进程的数据进行重定向) ProcessBlackList: java.exe //进程白名单(开启重定向所有流量时,只对这些进程的数据进行重定向) ProcessWhiteList: wget, nc //主机黑名单(开启重定向所有流量时,可以忽略这些主机,不对这些地址的数据进行重定向) HostBlackList: 6.6.6.6
[Listener] 部分:
/********************************************************************************************************************** 监听器配置由分流器[Diverter]使用的通用设置组成,这些设置对于所有监听器和特定监听器的设置都是相同的。 注意: 1、监听器[]中的名称将用于日志记录。 2、设置标签不区分大小写。 **********************************************************************************************************************/ /****************************** 以下设置可用于所有监听器: ******************************/ //指定是否启用监听器 Enabled: True //监听的TCP或UDP端口 Port: 80 //监听的协议TCP或UDP Protocol: TCP //用于处理流量的监听器名称 Listener: RawListener //进程白名单(参考分流器[Diverter]中的说明) ProcessWhiteList: //进程黑名单(参考分流器[Diverter]中的说明) ProcessBlackList: //主机白名单(参考分流器[Diverter]中的说明) HostWhiteList: //主机黑名单(参考分流器[Diverter]中的说明) HostBlackList: //在不通过代理的情况下,请勿将流量定向到此侦听器,该代理将根据数据包内容确定协议 Hidden: //命令执行(在第一个连接数据包上执行命令) ExecuteCmd: /* 可以使用如下参数: {pid} - 进程PID {procname} - 进程名称 {src_addr} - 源地址 {src_port} - 源端口 {dst_addr} - 目的地址 {dst_port} - 目的端口 */ /****************************** 以下设置可用于特定监听器: *******************************/ //为所有支持的监听器设置连接超时 Timeout: 10 //在监听器上启用SSL支持(RawListener, HTTPListener) UseSSL: No //设置webroot路径(HTTPListener) Webroot: defaultFiles/ //保存HTTP Post请求数据(HTTPListener) DumpHTTPPosts: Yes //保存HTTP Post请求数据的文件前缀(HTTPListener) DumpHTTPPostsFilePrefix: http //保存上传的文件前缀(BITSListener) BITSFilePrefix: bits //存储tftp上传的文件前缀(TFTPListener) TFTPFilePrefix: tftp //对一个DNS查询作出响应的IP地址(DNSListener) DNSResponse: 192.0.2.123 //一些DNS请求忽略,可以让恶意软件暴露所有的备份C2服务器(DNSListener) NXDomains: 0 //显示FTP或IRC旗帜(FTPListener, IRCListener) Banner: //用于指定FTP或IRC服务器名称(FTPListener, IRCListener) ServerName: /****************************** 监听器示例: *******************************/ //用于监听DNS服务,并返回自定义A记录等信息 [DNS Server] Enabled: True Port: 53 Protocol: UDP Listener: DNSListener ResponseA: 192.0.2.123 ResponseMX: mail.evil2.com ResponseTXT: FAKENET NXDomains: 0 Hidden: False //用于监听TCP:1337端口,并根据设置返回自定义数据 [RawTCPListener] Enabled: True Port: 1337 Protocol: TCP Listener: RawListener UseSSL: No Timeout: 10 Hidden: False Custom: sample_custom_response.ini //用于监听TCP:80端口(http协议),并根据设置返回自定义数据 [HTTPListener80] Enabled: True Port: 80 Protocol: TCP Listener: HTTPListener UseSSL: No Webroot: defaultFiles/ Timeout: 10 DumpHTTPPosts: Yes DumpHTTPPostsFilePrefix: http Hidden: False Custom: sample_custom_response.ini //其它更多示例可以查看NG默认配置文件
默认监听器
在配置文件的[Listener]部分,如果我们要对一个协议和端口进行监听器配置,就需要对“Listener”选项进行设置,以指定具体的监听器来处理重定向流量,而在当前版本(1.4.11)的NG中,带有以下几个默认的监听器可供使用:
DNSListener: //该监听器支持DNS协议,你可以在设置中指定本机IP地址作为DNS的A记录回复。 RawListener: //该监听器支持TCP和UDP协议,默认行为是简单地将收到的数据包回显到客户端,且支持SSL连接。 HTTPListener: //该监听器支持HTTP和HTTPS协议,“Webroot”选项可以根据请求时的文件扩展名,响应可配置目录(defaultFiles)中的不同文件。 SMTPListener: //该监听器支持SMTP协议。 ProxyListener: //该监听器支持根据数据包的内容自动检测协议,并相应地重定向数据包。
使用示例
待完善...
参考
https://github.com/fireeye/flare-fakenet-ng