FakeNet-NG是一款专为恶意软件分析人员以及渗透测试专家设计的下一代动态网络分析工具。FakeNet-NG是一款开源工具,并且支持最新版本的Windows以及Linux平台。该工具可以在模拟合法网络服务的过程中拦截/重定向所有的或特定的网络流量。在FakeNet-NG的帮助下,恶意软件分析专家可以迅速识别恶意软件的功能并捕捉到网络签名。而FakeNet-NG可配置的拦截引擎将允许渗透测试人员以及Bug Hunter非常方便地测试应用程序的特定功能并设计出PoC原型。
不过作为网络仿真工具FakeNet-NG的开发人员,FireEye FLARE团队的逆向工程师以及恶意软件分析讲师,我们可以看到不同的分析师如何使用FakeNet-NG以及他们所面临的挑战。虽然FakeNet-NG提供了许多有用的功能和解决方案,而我们的用户通常并不知道这些功能和解决方案。在本文中,我们将展示一些作弊代码,以使用FakeNet-NG升级你的网络分析。我们将介绍自定义响应并演示强大的功能,例如在连接事件上执行命令和解密SSL流量。
自2016年首次发布以来,我们通过添加新功能,例如Linux支持和基于内容的协议检测改进了FakeNet-NG。我们最近更新了FakeNet-NG,其中包括我们最需要的功能之一:HTTP和二进制协议的自定义响应。
这篇博客文章提供了七个“阶段”来帮助你掌握不同的FakeNet-NG策略。我们会根据分析恶意软件时遇到的常见情况来介绍它们。
1. 自定义文件响应;
2. 自定义二进制协议;
3. 自定义HTTP响应;
4. 手动自定义响应;
5. 黑名单处理;
6. 在连接事件上执行命令;
7. 解密SSL流量。
配置FakeNet-NG
以下是关于FakeNet-NG配置和日志数据位置的快速参考步骤:
1. 配置文件位于fakenet \ configs中,你可以修改default.ini或将其复制到新文件,然后使用-c将FakeNet-NG指向备用配置,例如:fakenet.py -c custom.ini。
2. 默认文件位于fakenet \ defaultFiles,监听器实现位于fakenet \ listeners。
3. fakenet \ configs \ default.ini的默认配置包括全局配置设置和单个监听器配置。
4. 自定义响应配置示例包含在文件CustomProviderExample.py,sample_custom_response.ini和sample_raw_response.txt中的目录fakenet \ configs中。
5. FLARE VM中FakeNet-NG的安装位置为C:\Python27\lib\site-packages\fakenet,你将在此目录中找到包含defaultFiles,configs和listeners的子目录。
6. 在FLARE VM中,可以在桌面上的fakenet_logs目录中找到FakeNet-NG数据包捕获文件和HTTP请求。
自定义文件响应
你可能已经注意到,FakeNet-NG不仅限于提供HTML页面。根据请求的文件类型,FakeNet-NG可以提供PE文件,ELF文件,JPG,GIF等。FakeNet-NG配置有几种常见类型的默认文件,也可以配置为提供自定义文件。 defaultFiles目录包含几种类型的标准响应文件。例如,如果恶意软件发送了对evil.exe的FTP GET请求,则FakeNet-NG将以文件defaultFiles \ FakeNetMini.exe进行响应(.exe请求的默认响应)。此文件是有效的可移植可执行文件,显示一个消息框。通过提供实际的PE文件,我们可以在恶意软件尝试下载并执行恶意有效载荷时对其进行观察。图1显示了下载的默认文件的FTP会话和后续执行示例。
使用FTP下载FakeNet-NG的默认可执行文件响应
这个系统可以充分处理大多数请求,然而,恶意软件有时期望文件具有特定的格式,例如带有嵌入式PowerShell脚本的映像,或者附加了散列的可执行文件,以便进行完整性检查。在本文的示例中,你可以将一个默认文件替换为符合恶意软件期望的文件。在每个相关的监听器(实现网络协议的模块)配置中都有一个修改defaultFiles路径的选项,这允许FakeNet-NG在不覆盖或修改默认数据的情况下提供不同的文件。自定义的FakeNet.html文件如图2所示。
修改默认的FakeNet.html文件以自定义响应
自定义二进制协议
许多恶意软件样本都实现了需要特定字节序列的自定义二进制协议,例如,GH0ST家族中的恶意软件可能要求每条消息都以诸如“ GH0ST”之类的签名开头。默认的FakeNet-NG RawListener用echo响应未知请求,也就是说,它发送的数据与接收到的相同。这种行为通常就足够了。但是,在需要自定义响应的情况下,你仍然可以发送恶意软件期望的数据。
FakeNet-NG现在可以自定义TCP和UDP响应,假设有一个恶意软件样本,它将字符串“Hello”发送到它的命令与控制(C2)服务器,并等待一个以“FLARE”开头,然后是一个数字命令(0-9)的响应包。现在,我们将演示FakeNet-NG处理此场景的几种有趣方法。
静态自定义响应
你可以配置TCP或UDP原始监听器如何响应流量,在本文的示例中,我们告诉FakeNet-NG如何响应任何TCP原始请求(在未检测到协议的情况下)。首先在fakenet/configs/default.ini的RawTCPListener部分取消注释自定义配置选项,如下图所示。
激活自定义TCP响应
接下来,如下图所示,在fakenet \ configs \ sample_custom_response.ini中配置TcpRawFile自定义响应,以确保提交或替换默认的RawTCPListener实例。
TCP静态自定义响应规范
创建内容为FLARE0的文件fakenet\configs\ flare_order .txt,现在将根据文件的内容生成TCP响应。
动态自定义响应
也许你想动态发出命令,而不是提交flare_command.txt中的特定命令。这可以通过编程实现。如图5所示,在fakenet \ configs \ sample_custom_response.ini中配置TcpDynamic定制响应。请确保注释掉或替换现有的RawTCPListener实例。
动态自定义响应规范
可以将文件fakenet\configs\CustomProviderExample.py用作我们的动态响应文件flare_command.py的模板。我们修改HandleTcp()函数并生成新的文件fakenet\configs\flare_command.py。如下图1所示,现在你可以选择每个命令作为恶意软件执行,下图2演示了使用此配置动态发布命令的过程。
TCP动态响应脚本
发出TCP动态命令
自定义HTTP响应
恶意软件经常在流行的HTTP协议之上实施自己的加密方案,例如,你的示例可能会向/comm.php?nonce=< random >并期望C2服务器响应是用Nonce值加密的RC4。这个过程如图8所示,我们如何轻易地强制恶意软件执行其关键代码路径来观察或调试其行为?
恶意软件示例期望基于信标数据的特定密钥
对于本文的示例,我们最近引入了对HTTP自定义响应的支持。与TCP自定义响应一样,HTTPListener也具有名为Custom的新设置,它支持动态HTTP响应。此设置还允许FakeNet-NG选择与特定主机或URI匹配的适当响应。使用此功能,我们现在可以根据我们的恶意软件样本快速编写一个小的Python脚本来动态处理HTTP流量。
首先取消HTTPListener80部分的自定义配置选项的注释,如图9所示。
HTTP监听器配置
接下来,如图10所示,在fakenet \ configs \ sample_custom_response.ini中配置HttpDynamic定制响应。确保注释掉或替换默认的HttpDynamic实例。
HttpDynamic配置
可以将文件fakenet\configs\CustomProviderExample.py用作我们的动态响应文件http_example.py的模板。我们修改HandleRequest()函数,如图11所示。FakeNet-NG现在将使用nonce动态加密响应。
动态HTTP请求处理程序
手动自定义响应
为了获得更大的灵活性,可以使用功能强大的网络实用程序netcat代替FakeNet-NG监听器。例如,你可能希望使用netcat作为C2服务器,并在端口80上执行期间动态地发出命令。在启动FakeNet-NG之前启动一个netcat监听器,发送到相应端口的流量将被转移到netcat监听器。然后可以使用netcat接口动态地发出命令,如下图所示。
使用ncat.exe手动处理流量
FakeNet-NG的自定义响应功能多种多样,你可以阅读该文档以了解如何自定义响应。
将清单列入黑名单
一些分析人员更喜欢从独立的系统中调试恶意软件,这样做的理由有很多,当恶意软件不可避免地破坏执行环境时,最常见的方法是保存IDA数据库和其他保存的数据。这个过程通常涉及到在一个只包含主机的网络上配置两个虚拟机。在这个设置中,FakeNet-NG拦截两台计算机之间的网络通信,这使得远程调试变得不可能。为了克服这一障碍,我们可以通过指示FakeNet-NG忽略调试服务器进程中的流量,将调试服务器列入黑名单。
使用IDA Pro进行远程调试时,32位可移植可执行文件的标准调试服务器进程是win32_remote.exe或WinDbg的dbgsrv.exe。你需要做的就是将进程名称添加到ProcessBlackList配置中,如下图所示。然后,当FakeNet-NG捕获和重定向所有其他网络流量时,调试服务器仍然可以自由地与IDA Pro通信。
修改后的configs / default.ini,允许使用IDA Pro进行远程调试
黑名单还有助于从污染Fakenet-NG捕获的网络流量中过滤出有噪声的进程,本文的示例就包括试图更新Windows系统或其他恶意软件分析工具的过程。
其他设置可用于将端口和主机列入黑名单,有关黑名单和白名单的更多详细信息,请参阅这篇文章。
在连接事件上执行命令
可以将Fakenet-NG配置为在与监听器建立连接时执行命令,例如,此选项可用于在尝试进行连接时将调试器附加到正在运行的样本。想象一个场景,我们分析了来自实用恶意软件分析实验室的名为Lab18-01.exe的打包样本。使用动态分析,我们可以看到恶意软件使用HTTP协议通过TCP端口80将信标发送到C2服务器,如下图所示。
恶意软件通过TCP端口80向其C2服务器发送信标
建立连接后,如果我们可以将调试器神奇地附加到Lab18-01.exe上,这不是很好吗?我们可以加快样本运行速度,并绕过整个拆包存根和样例可能使用的任何潜在的反调试技巧。
要将Fakenet-NG配置为启动调试器并将其附加到任何进程,请修改fakenet\configs\default.ini中的[HTTPListener80]部分,使其包含ExecuteCmd选项,下图显示了完整的[HTTPListener80]部分的示例。
运行并附加x32dbg的Execute命令选项
在此示例中,我们在端口80上配置HTTPListener以执行调试器x32dbg.exe,该调试器将附加到正在运行的进程,该进程的进程ID在运行时确定。当连接到HTTPListener时,FakeNet-NG将自动用建立连接进程的进程ID替换字符串{pid}。有关受支持变量的完整列表,请参阅此文档。
重新启动Fakenet-NG并再次运行示例后,我们看到x32dbg启动并自动附加到Lab18-01.exe。现在,我们可以使用内存转储工具(例如Scylla或OllyDumpEx插件)转储可执行文件并进行静态分析。如图16和图17所示。
使用FakeNet-NG将x32dbg附加到示例
Fakenet-NG在连接到practicalmalwareanalysis.com时执行x32dbg
解密SSL流量
恶意软件通常使用SSL进行网络通信,由于对数据包数据进行了加密,因此极大地阻碍了流量分析。使用Fakenet-NG的ProxyListener,你可以创建具有解密流量的数据包捕获,这可以使用协议检测功能来完成。
代理可以使用Python的OpenSSL库检测SSL和SSL中的“中间人”套接字,然后它与恶意软件和HTTP监听器保持全双工连接,此时双方都不互相了解。因此,在代理和HTTP监听器之间有一个明文HTTP通信流,如下图所示。
Fakenet-NG组件之间的明文流
为了使FakeNet-NG尽可能简单,FakeNet-NG的当前默认设置没有代理拦截端口443上的HTTPS流量并创建解密流。要代理数据,你需要将HTTPListener443隐藏属性设置为True,如下图所示。这是在告诉代理拦截信息包并基于信息包内容检测协议。在此,请阅读关于代理和协议检测的博客文章,以了解更多关于这个高级功能的信息。
隐藏监听器,以便代理流量
现在,我们可以检查Fakenet-NG产生的数据包捕获,可以在本地主机(ProxyListener)上的临时端口和本地主机(HTTPListener)上的端口80之间的TCP流中找到该明文。 如下图所示:
HTTPListener和代理监听器之间的明文流量
总结
Fakenet-NG实际上是用于恶意软件分析的标准网络仿真工具,它无需安装即可运行,并且包含在FLARE VM中。除了经过验证和测试的默认设置之外,Fakenet还提供了无数的功能和配置选项。在此文中,我们提出了一些技巧来处理常见的分析场景。要下载最新版本,请查看所有配置选项的完整列表,或请查看我们的Github存储库。
本文翻译自:https://www.fireeye.com/blog/threat-research/2020/04/improving-dynamic-malware-analysis-with-cheat-codes-for-fakenet-ng.html如若转载,请注明原文地址: