FakeNet-NG:新一代的动态网络分析工具

FakeNet-NG是一款专为恶意软件分析人员以及渗透测试专家设计的下一代动态网络分析工具。FakeNet-NG是一款开源工具,并且支持最新版本的Windows以及Linux平台。

该工具可以在模拟合法网络服务的过程中拦截/重定向所有的或特定的网络流量。在FakeNet-NG的帮助下,恶意软件分析专家可以迅速识别恶意软件的功能并捕捉到网络签名。而FakeNet-NG可配置的拦截引擎将允许渗透测试人员以及Bug Hunter非常方便地测试应用程序的特定功能并设计出PoC原型。
工具安装
你可以采用以下几种不同的方法来安装FakeNet-NG。
单独的可执行文件
最简单的安装方法就是从release页面下载并安装已编译版本:
https://github.com/fireeye/flare-fakenet-ng/releases
然后通过双击’fakenet.exe’来运行FakeNet-NG。
这种方法适用于Windows平台,而且整个过程不需要你安装额外模块,对于一台恶意软件分析设备来说这就非常方便了。
安装模块
当然了,你也可以使用pip将FakeNet-NG当作一个Python模块来进行安装:
pip install https://github.com/fireeye/flare-fakenet-ng/zipball/master
或者你也可以获取FakeNet-NG的最新源码并进行手动安装:
git clone https://github.com/fireeye/flare-fakenet-ng/
项目克隆完成后切换到flare-fakenet-ng/目录,然后运行下列命令:
python setup.py install
在Windows上使用FakeNet-NG需要下列组件:
-MicrosoftVisual C++ Compiler for Python 2.7
在Linux上使用FakeNet-NG需要下列组件:
-Python pip包管理器(例如Ubuntu:python-pip)
-Python开发文件(例如Ubuntu:python-dev)
-OpenSSL开发文件(例如Ubuntu:libssl-dev )
-libffi开发文件(例如Ubuntu:libffi-dev)
-libnetfilterqueue开发文件(例如Ubuntu:libnetfilter-queue-dev)
绿色版
如果你想使用FakeNet-NG,但又不想进行安装的话,你可以选择这种方式。你需要获取FakeNet-NG的源码,并安装以下依赖组件:
1.      安装64位或32位的Python 2.7.x(根据Windows版本选择);
2.      安装Python依赖:
pip install pydivert dnslib dpkt pyopensslpyftpdlib netifaces
2b)可选项,你可以安装下列模块作测试用:
pip install requests
3.      下载FakeNety-NG源码:
git clone https://github.com/fireeye/flare-fakenet-ng
在特权Shell窗口中使用Python解释器运行FakeNet-NG:
python fakenet.py
工具使用
使用FakeNet-NG最简单的方法就是以管理员权限执行它,你可以使用–help获取所有可用的命令行参数:

简单运行
我们可以使用下列命令运行默认配置的FakeNet-NG:
C:toolsfakenet-ng>fakenet.exe
下面给出的是拦截DNS请求和HTTP连接的输出样例:

请注意上面的每一行日志都标有FakeNet-NG当前所运行的模块。比如说,如果程序在对流量进行分流的话,日志前缀将被标记为“Diverter”:

与此同时,每当监听器处理分流流量时,日志记录都会用配置文件中定义的名字进行标记:

用户可以通过按下组合键CTRL+C来终止FakeNet-NG的运行,结束运行后将会自动生成PCAP文件:

工具配置
为了充分发挥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
[RawTCPListener]
Enabled:    True
Port:       1337
Protocol:   TCP
Listener:   RawListener
UseSSL:     No
Timeout:    10
工具模块开发
FakeNet-NG采用Python语言开发,这也就意味着你可以开发新的模块以及插件来扩展其现有的功能。
开发监听器
所有的监听器必须实现两个方法:start()和stop()。下面给出的是监听器的实现模板:
import logging
import sys
import threading
import socket
class MyListener():
   def __init__(self, config, name = 'MyListener', logging_level =logging.INFO):
       self.logger = logging.getLogger(name)
       self.logger.setLevel(logging_level)
          
       self.config = config
       self.name = name
       self.logger.info('Starting...')
       self.logger.debug('Initialized with config:')
       for key, value in config.iteritems():
           self.logger.debug('  %10s: %s',key, value)
   def start(self):
       # Start listener
       # ...
   def stop(self):
       # Stop listener
       # ...
主要的监听器类MyListener()需要提供一个包含监听端口和协议的配置字典,主监听类还需要接收当前的监听器实例名以及用户设置的日志信息。
FakeNet-NG监听器需要self.logger对象来处理输出,并以此来保证应用程序能够输出格式一致的日志记录。比如说,你可以通过下列方式显示一条报错或警告信息:
self.logger.error("This is anerror")
self.logger.warning("This is awarning")
当你完成了监听器的开发之后将其拷贝到listeners目录,然后将你的模块名添加到listeners__init__定义的__all__变量中:
__all__ = ['RawListener', 'HTTPListener','DNSListener', 'SMTPListener', 'MyListener']
接下来将你的监听器添加到配置文件中,这样你就可以让应用程序使用这个你自己定义的监听器了:
[MyAwesomeListener]
Enabled:    True
Port:       1337
Protocol:   TCP
Listener:   MyListener
开发分流器
FakeNet-NG使用了开源的WinDivert库在Windows Vista+操作系统中执行流量重定向,Windows分流器的实现位于fakenetdiverterswindows.py。
FakeNet-NG使用了开源的python-netfilterqueueCython模块在Linux平台上实现流量重定向,Linux分流器的实现位于fakenetdiverterslinux.py。
Windows平台下的绝大多数功能实现都位于fakenetdiverterswinutil.py中,并可使用ctype直接调用Windows API函数。类似的,Windows平台下的绝大多数功能实现都位于fakenetdiverterslinutil.py中。
更多关于在Linux下实现分流器的信息,请参考这篇文档【传送门】。
构建单独的可执行程序
如果你想生成单独的可执行程序,你则需要安装PyInstaller模块:
pip install pyinstaller
运行下列命令使用pyinstaller生成exe文件:
pyinstaller fakenet-ng.spec
生成的exe文件将保存在dist/目录下。
后话
FakeNet-NG目前仍处于开发阶段,希望有能力的用户能够为我们贡献代码,并帮助我们继续完善FakeNet-NG。如果使用过程中遇到了任何的问题,可以在本项目的GitHub主页中留言。