来源:https://github.com/EmersonElectricCo/fsf
一、介绍
1.1 什么是“文件扫描框架”?
网络防御者应该被授权推动他们认为合适的能力向前发展。这就是FSF的设计理念。
FSF是一种模块化的递归文件扫描解决方案。FSF使分析人员能够扩展他们编写的yara签名的实用性,并在文件中定义可操作的情报。这是通过递归地扫描一个文件,并使用yara签名(定义机会)和可编程逻辑(定义机会要做什么)的组合来寻找提取文件对象的机会来实现的。该框架允许您通过授权您应用分析过程中的观察结果来构建您的情报能力…
好吧,这是一个很好的例子——但是想想看——如果你看到一些代表某种概念或行为的模式(可能是字符串或字节序列);通过使用框架,你可以捕捉到这些观察结果,并将其应用到符合你的标准的某些文件类型中。其目标是,帮助扩展恶意软件分析和逆向工程工作的观察实用程序。
一些例子可能是:
(1)解压缩zip文件并扫描其内容。
(2)解码与特定签名匹配的恶意软件配置文件,然后分析元数据。
(3)任何文件类型的常规元数据扩展。
(4)记录任何exe的编译时间
(5)记录Office文档的作者字段
(6)那么多…
您可以通过编写模块来扩展和定义重要的内容,这些模块将公开一些元数据来通知分析并公开文件的新子对象!这些子对象通过相同的挑战进行递归扫描,进一步增强了yara和module实用程序。
完成后,可以使用后处理功能添加JQ过滤器,以从FSF输出捕获某些感兴趣的项目。yara和JQ都可以用来捕捉观察结果,并推动创新的检测!
(1)如果我们告警到一个签名,我们怎么知道呢?
这个决定取决于你,因为有很多方法可以做到这一点。一种建议是使用Splunk或ELK栈之类的工具聚合和索引scan.log数据。然后,您可以将告警构建到该功能中。
(2)是否有一种方法可以对来自FSF中的特定规则进行操作?比如打印特定文件类型的元数据?
这正是模块的用途!由分析人员观察驱动的模块开发是FSF的基石!
(3)如果我想捕获高级观察结果,甚至检测FSF公开的文件之间的关系,该怎么办?
这一切都是通过一个后处理特性完成的,该特性在很大程度上由jq (JSON解释器)驱动。要了解关于如何编写与FSF后处理器一起工作的jq过滤器的更多信息,请查看docs/jq_filters.md。
(4)这是相当酷的-但我真的不知道太多关于Yara或jq?
查看Yara官方文档以获得更多信息和例子。
jq官方网站也包含了大量的教程和文档。
(5)工具的限制是什么?
由于我们递归处理对象,所以强制执行MIN_DEPTH可配置值。
每个模块运行时都有一个超时值,该值不能超过或程序终止。
(6)是否有一个通用的流程流程可以帮助我理解发生了什么?
是的。有关完整的流程,请参阅docs/FSF process .png中的图形。您还可以在[docs/FSF overview.png] (https://github.com/EmersonElectricCo/fsf/blob/master/docs/FSF%20Overview.png)上找到一个描述高层次概述的图形,它也很有帮助。
(7)是否有关于如何编写模块的有用文档?
绝对的。查看docs/modules.md,了解如何开始。
(8)编写了哪些模块,它们做什么?
下表提供了以下资料:
(9)如果我想要“扫描所有的东西”,这个如何放大?
服务器是并行的,支持同时运行多个作业。作为一个例子,我提供了一种可能的方法,您可以通过与Bro集成、提取文件并将它们发送到FSF服务器来实现这一点。您可以在docs/modules.md的底部“自动文件提取”标题下找到它。
(10)Bro集成的一些关键优势是:
能够根据每个传感器将文件定向到给定的FSF扫描节点
使用Bro脚本语言帮助优化输入,一些例子可能包括:
限制我们已经看到的文件的发送时间间隔,以避免冗余(基于MD5等)
如果需要,限制提取文件的大小
控制要传递给FSF的MIME类型
(11)如果我想在多个FSF服务器之间进行负载平衡怎么办?
如果您愿意,您可以轻松地将不同的负载平衡解决方案集成到FSF中。这样做,结合服务器对每个请求的并行处理,可以获得许多性能和可靠性方面的好处。它还为您提供了以您想要的方式进行负载平衡的灵活性,比如使用相等的分布、分组、故障转移、一些组合等等……
例如,您可以使用流行的实用程序balance使用一个简单的命令在FSF节点之间配置简单的负载平衡。
balance -f 5800 10.0.3.5 10.0.3.6
上面的代码告诉balance在前台端口5800上运行,并在指定的两个主机(10.0.3.5和10.0.3.6)之间平均分配请求。默认情况下,请求也将在端口5800上转发,除非另有说明。现在我们可以将FSF客户端指向负载均衡器,让它为我们工作。
当然,您可以使用不同的负载平衡解决方案,这只是一个简单的例子。如果需要,您甚至可以使用客户机配置文件指定多个FSF服务器/平衡器。这样做时,为请求选择的FSF服务器是随机完成的,允许进行一些基本的平衡。
(12)如何访问递归处理的子对象?
啊,那么您是否厌倦了在静态分析期间使用hachor -subfile + dd来分割文件?或者运行unzip或unrar来解压缩文件,运行upx -d来解压缩文件,或者运行OfficeMalScan来一遍又一遍地获取宏,这些都已经过时了吗?
如果你愿意,你当然可以用FSF来做重要任务。它将使上述工具非常有用的组件合并到框架中。对于其他用例,您所需要的只是确保框架(Yara +模块)内置了做您想做的事情的情报报!包中包含的几个开源模块有助于解决这个问题。
为了支持分析人员使用客户机提交文件,—full选项将返回新目录中收集的所有子对象。
不过要注意的是,首先要确保你知道如何艰难地完成它!
fsf_client.py macro_test --full
...normal report information...
Subobjects of macro_test successfully written to: fsf_dump_1446676465_6ba593d8d5defd6fbaa96a1ef2bc601d
如果希望在更大范围的服务器端收集子对象,请查看——archive命令。您有5个内置选项,它们允许您确定捕获提取数据的力度。
好的,我想我明白了,但是我想要一个“报告”的样子的可视化表示?
看一下docs/ example Test.png中的下图。这表示可以在docs/ test.zip中找到的文件test.zip。当使用FSF递归处理该文件时,将输出在docs/Test.json中找到的内容。
该文件中的每个对象都代表了一个收集/丰富情报的机会,以推动更多的知情检测、对手意识、相关性和整体分析技巧。
这里有很多JSON输出…有哪些工具可以帮助我通过命令行有效地与这些数据交互?
Jq是一个帮助处理JSON数据的很好的实用程序。在查看FSF JSON输出以获得intel收益时,您可能希望过滤掉某些模块。请参考docs/jq_examples.md,以获得一些有用的“特定于FSF”的示例,以适应此类查询。我还建议看一下jq Cookbook,以获得更多的好例子。
最后,不要害怕检查一些jq过滤器,我们已经开源作为后处理功能的一部分!
二、安装
FSF已经在CentOS和Ubuntu发行版上测试成功。
请参阅docs/INSTALL.md,了解如何开始使用这两种平台的详细、一步一步的指南。
或者,如果您愿意,您可以查看我们的Dockerfile。
三、设置
检查配置设置
服务器端-在[fsf-server/conf/conf.py] (https://github.com/emersonelectricco/fsf/blob/master/fsf - server/con/config.py)
确保使用完整路径指向主yara签名文件。参见[fsf-server/ya-ra/rules-yara] (https://github.com/EmersonElectricCo/fsf/blob/master/fsf-server/yara/rules.yara)
设置日志目录;确保它存在,并确保您有权限对其进行写入
在fsf-server中,使用./main.py start启动服务器,它将守护进程化