使用FakeNet-NG改进动态恶意软件分析

栏目: IT技术 · 发布时间: 5年前

内容简介:实际上 FakeNet-NG 有许多有用的功能,但通常很多人都不知道。本文将会展示一些使用 FakeNet-NG 的案例,使得 FakeNet-NG 成为网络分析的好帮手。自从 2016 年在开始之前提供关于配置 FakeNet-NG 的概览:

实际上 FakeNet-NG 有许多有用的功能,但通常很多人都不知道。本文将会展示一些使用 FakeNet-NG 的案例,使得 FakeNet-NG 成为网络分析的好帮手。

自从 2016 年 发布 以来, FakeNet-NG 进行了数次改进,新增包括支持 Linux 平台与 基于内容的协议检测 等新功能。最近我们又更新了 FakeNet-NG,包括 HTTP 和二进制协议的自定义响应。

在开始之前提供关于配置 FakeNet-NG 的概览:

配置文件位于 fakenet\configs 中。可以修改 default.ini 或将其复制到新文件,然后 FakeNet-NG 使用 -c 参数加载配置文件。如 fakenet.py -c custom.ini

默认文件位于 fakenet\defaultFiles,而 Listener 的实现位于 fakenet\listeners

文件 fakenet\configs\default.ini 中默认配置包含全局配置与自定义 Listener 配置

自定义响应配置文件包括在目录 fakenet\configs 中的 CustomProviderExample.py、sample_custom_response.ini 和 sample_raw_response.txt

FLARE VM 中的 FARENet-NG 安装在 C:\Python27\lib\site-packages\fakenet。该目录下还有名为 defaultFiles、configs 和 listeners 的子目录

在 FLARE VM 中,桌面的 fakenet_logs 文件夹可以找到 FakeNet-NG 的数据包捕获原文件与 HTTP 请求

自定义文件响应

FakeNet-NG 不仅限于提供 HTML 页面。根据请求文件类型的不同,FakeNet-NG 可以提供 PE 文件、ELF 文件、JPG 文件、GIF 文件等。FakeNet-NG 默认提供几种常见类型的文件,也可以配置自定义文件。在 defaultFiles 目录下有多种类型的标准响应文件。如恶意软件发送 FTP GET 请求拉取 evil.exe,FakeNet-NG 则会将 defaultFiles\FakeNetMini.exe 作为响应返回。该文件是有效的可执行文件,会显示一个提示框。通过提供响应的 PE 文件,可以在恶意软件尝试下载并执行恶意软件时进行观察。下图显示了一个 FTP 会话以及下载默认文件的后续执行:

使用FakeNet-NG改进动态恶意软件分析

系统可以处理大多数的请求,但是恶意软件有时会请求特定格式的文件,例如嵌入 PowerShell 代码的图像、带有哈希值的可执行文件可用于完整性检查。在这种情况下,可以使用符合恶意软件要求的文件替换默认文件即可。每个相关的 Listener 配置里都有一个选项可以修改 defaultFiles 的路径。这使得 FakeNet-NG 可以在不修改默认文件的情况下提供不同的文件。自定义的 FakeNet.html 文件如下所示:

使用FakeNet-NG改进动态恶意软件分析

自定义二进制协议

许多恶意软件都实现了需要满足特定字节序列的自定义二进制协议。例如 GHOST 家族的恶意软件可能要求每个消息内容都以诸如 GHOST 之类的特定值开头。默认情况下,FakeNet-NG 的 RawLister 使用接收的数据作为响应回显未知请求。通常来说,这样就足够了。但是在需要自定义响应的情况下,仍然可以通过 FakeNet-NG 定制恶意软件想要的数据内容。

FakeNet-NG 现在可以自定义 TCP 和 UDP 响应。假设一个恶意软件样本将字符串 Hello 发送到 C&C 服务器,并且等待以 FLARE 开头随后是数字指令(0-9)的响应包。现在,我们可以介绍如何利用 FakeNet-NG 处理这种情况。

静态自定义响应

可以自行配置原生 TCP/UDP Listener 的响应内容。在本例中,我们配置 FakeNet-NG 如何响应任何原生 TCP 请求(未检测到协议)。如下所示,取消注释 fakenet/configs/default.ini 文件中 RawTCPListener 部分的 Custom 配置选项。

[RawTCPListener]
Enabled:     True
Port:        1337
Protocol:    TCP
Listener:    RawListener
UseSSL:      No
Timeout:     10
Hidden:      False
# To read about customizing responses, see docs/CustomResponse.md
Custom:    sample_custom_response.ini

接着在 fakenet\configs\sample_custom_response.ini 中 TcpRawFile 部分配置自定义响应。请确保注释掉或替换默认的 RawTCPListener 实例。

[ExampleTCP]
InstanceName:     RawTCPListener
ListenerType:     TCP
TcpRawFile:       flare_command.txt

在 fakenet\configs\flare_command.txt 文件内容中添加 FLARE0 即可根据文件内容生成 TCP 响应。

动态自定义响应

如果命令也想要动态进行响应,而不是只能响应 fakenet\configs\flare_command.txt 中的特定命令也可以实现。如下所示,在 fakenet\configs\flare_command.txt 中配置 TcpDynamic 部分自定义响应。请确保注释掉或替换默认的 RawTCPListener 实例。

[ExampleTCP]
InstanceName:     RawTCPListener
TcpDynamic:       flare_command.py

可将文件 fakenet\configs\CustomProviderExample.py 当作动态响应文件 flare_command.py 的模板。修改 HandleTcp() 函数并生成新文件 fakenet\configs\flare_command.py 如下所示。

import socket
def HandleTcp(sock):
    while True:
        try:
            data = None
            data = sock.recv(1024)
        except socket.timeout:
            pass
        if not data:
            break
        resp = raw_input('\nEnter a numeric command: ')
        command = bytes('FLARE' + resp + '\n')
        sock.sendall(command)

现在,可以在恶意软件执行时选择不同的命令:

使用FakeNet-NG改进动态恶意软件分析

自定义 HTTP 响应

恶意软件经常在 HTTP 协议上使用自定义的加密方案。例如,恶意软件可能会向 /comm.php?nonce=<random> 发送 HTTP 的 GET 请求,希望 C&C 服务器响应 R** 加密的随机值。过程如下所示:

使用FakeNet-NG改进动态恶意软件分析

与 TCP 自定义响应类似,HTTPListener 也提供名为 Custom 的配置,该设置可以启用动态 HTTP 响应。此设置还允许 FakeNet-NG 选择与特定主机或 URI 匹配的响应。使用此功能,可以根据恶意软件样本快速编写 Python 脚本来动态处理 HTTP 流量。

取消注释 HTTPListener80 部分中的 Custom 选项,如下所示:

[HTTPListener80]
Enabled:     True
Port:        80
Protocol:    TCP
Listener:    HTTPListener
UseSSL:      No
Webroot:     defaultFiles/
Timeout:     10
#ProcessBlackList: dmclient.exe, OneDrive.exe, svchost.exe, backgroundTaskHost.exe, GoogleUpdate.exe, chrome.exe
DumpHTTPPosts: Yes
DumpHTTPPostsFilePrefix: http
Hidden:      False
# To read about customizing responses, see docs/CustomResponse.md
Custom:    sample_custom_response.ini

如下所示,在

fakenet\configs\sample_custom_response.ini 文件中配置 HttpDynamic 响应。请确保注释掉或替换默认的 HttpDynamic 实例。

[Example2]
ListenerType:     HTTP
HttpURIs:         comm.php
HttpDynamic:      http_example.py

可以将文件 fakenet\configs\CustomProviderExample.py 作为动态响应文件 http_example.py 的模板。如下所示,修改 HandleRequest() 函数,FakeNet-NG 将使用随机数动态加密响应。

import socket
from arc4 import AR**
# To read about customizing HTTP responses, see docs/CustomResponse.md
def HandleRequest(req, method, post_data=None):
    """Sample dynamic HTTP response handler.
    Parameters
    ----------
    req : BaseHTTPServer.BaseHTTPRequestHandler
        The BaseHTTPRequestHandler that recevied the request
    method: str
        The HTTP method, either 'HEAD', 'GET', 'POST' as of this writing
    post_data: str
        The HTTP post data received by calling `rfile.read()` against the
        BaseHTTPRequestHandler that received the request.
    """
    response = 'Ahoy\r\n'
    nonce = req.path.split('=')[1]
    arc4 = AR**(nonce)
    response = arc4.encrypt(response)
    req.send_response(200)
    req.send_header('Content-Length', len(response))
    req.end_headers()
    req.wfile.write(response)

手动自定义响应

使用 netcat 代替 FakeNet-NG 的 Listener 会更加灵活。比如,使用 netcat 充当 C&C 服务器,并在 80 端口响应命令。在启动 FakeNet-NG 之前启动 netcat,将响应端口的流量转移到 netcat。如下所示,这样可以使用 netcat 处理响应:

使用FakeNet-NG改进动态恶意软件分析

更多自定义响应的内容可以阅读相关 文档

进程黑名单

分析人员可能会在单独的系统中调试恶意软件,这样会使用两个主机/系统。这样设置的情况下,FakeNet-NG 会拦截两台主机之间的全部网络流量,这样便不能进行远程调试了。可以通过 FakeNet-NG 忽略调试程序进程的流量,将调试程序进程列入黑名单。

使用 IDA Pro 进行远程调试时,32 位程序名为 win32_remote.exe(或 WinDbg 的 dbgsrv.exe)。如下所示,将进程名添加到 ProcessBlackList 配置中。这样调试进程就能与 IDA Pro 正常通信,而其他流量由 FakeNet-NG 捕获。

# Specify processes to ignore when diverting traffic. Windows example used here.
ProcessBlackList: win32_remote.exe, dbgsrv.exe

将污染 FakeNet-NG 流量的进程列入进程黑名单也十分有用。包括 Windows 系统更新或其他恶意软件分析的进程。也可以将端口与主机列入黑名单中,关于黑名单与白名单可以查看 文档

连接事件触发命令

FakeNet-NG 可以配置在 Listener 建立连接时执行命令。例如,可用于在连接时将调试器挂载到正在运行的样本。如下所示,示例样本使用 HTTP 协议通过 TCP 的 80 端口与 C&C 服务器通信。

使用FakeNet-NG改进动态恶意软件分析

在样本建立连接后,可以将调试器挂载到样本上。这样可以加快样本的分析速度,绕过脱壳和任何可能存在的反调试措施。

使 FakeNet-NG 实现上述功能,要修改 fakenet\configs\default.ini 中 [HTTPListene80] 部分的 ExecuteCmd 配置。如下所示:

[HTTPListener80]
Enabled:     True
Port:        80
Protocol:    TCP
Listener:    HTTPListener
UseSSL:      No
Webroot:     defaultFiles/
Timeout:     10
DumpHTTPPosts: Yes
DumpHTTPPostsFilePrefix: http
Hidden:      False
# Execute x32dbg –p to attach to a debugger. {pid} is filled in automatically by Fakenet-NG
ExecuteCmd: x32dbg.exe -p {pid}

如上所示,在 80 端口上配置 HTTPListener 执行调试器 x32dbg.exe,该调试器挂载到正在运行的进程上。在 HTTPListener 建立连接时,FakeNet-NG 会将 {pid} 替换为建立连接的进程。此处支持使用的变量的完整列表,可以查看 文档

重新启动 FakeNet-NG 并再次运行样本后,可以看到 x32dbg 启动且挂载到样本文件上。

使用FakeNet-NG改进动态恶意软件分析

现在即可使用 Scylla 或 OllyDumpEx 将可执行文件转存进行静态分析。

使用FakeNet-NG改进动态恶意软件分析

解密 SSL 流量

恶意软件使用 SSL 进行网络通信,由于对数据包进行了加密就阻碍的流量分析。使用 FakeNet-NG 的 ProxyListener 可以解密流量。

ProxyListener 检测 SSL 协议,使用 Python 的 OpenSSL 库成为中间人。然后在恶意软件以及 HTTPListener 中间保持全双工状态,从而使得 ProsyListener 与 HTTPListener 之间是明文的 HTTP 通信。

使用FakeNet-NG改进动态恶意软件分析

为了使 FakeNet-NG 不变得过于复杂,FakeNet-NG 当前默认情况下没有在 443 端口上拦截 HTTPS 通信并提供明文解密。如果要实现该功能,如下所示,要将 HTTPListener443 Hidden 属性设置为 True。

[HTTPListener443]
Enabled:     True
Port:        443
Protocol:    TCP
Listener:    HTTPListener
UseSSL:      Yes
Webroot:     defaultFiles/
DumpHTTPPosts: Yes
DumpHTTPPostsFilePrefix: http
Hidden:      True

有关协议检测与代理可以查看其他 博客文章

现在可以查看 FakeNet-NG 捕获的数据包。如下所示,可以看见 localhos 临时端口与 80 端口的明文 TCP 流。

使用FakeNet-NG改进动态恶意软件分析

结论

FakeNet-NG 是用于恶意软件分析中的得力工具,无需安装即可运行。FakeNet-NG 在不断迭代中提供了许多功能和配置。本文中提供了一些针对不同分析场景下的用法供分析人员参考,更为详尽的描述请参考 FakeNet-NG 项目的 GitHub

*参考来源: FireEye ,FB 小编 Avenger 编译,转载请注明来自 FreeBuf.COM


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Text Processing in Python

Text Processing in Python

David Mertz / Addison-Wesley Professional / 2003-6-12 / USD 54.99

Text Processing in Python describes techniques for manipulation of text using the Python programming language. At the broadest level, text processing is simply taking textual information and doing som......一起来看看 《Text Processing in Python》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具