BASS-自动合成防病毒签名的框架

大家好 距离“逆向工程”课程的开始还有不到十天的时间,在这方面,我们希望分享有关该主题的另一个有趣的翻译。 走吧



简短评论




威胁的态势正在迅速变化-新的网络攻击不断出现,而旧的网络攻击却越来越复杂。 在这种情况下,安全专业人员面临越来越复杂的挑战。 他们每天必须处理和分析数百万个以前未知且全新的恶意软件的样本,开发有效的防病毒签名来描述整个恶意程序家族,并确保随着分析样本数量的增加工具的可扩展性。 同时,有必要考虑到恶意软件分析自动化工具的有限资源。 为了帮助IT专业人员应对这些挑战,Talos提供了一个称为BASS的新开源平台。

BASS(称为“ bass”)是一个框架,用于根据先前形成的恶意代码群集中的样本自动生成防病毒签名。 它旨在通过增加基于模板的签名相对于哈希签名的比例来减少ClamAV内核的资源消耗,并简化分析人员开发基于模板的签名的工作。 有了Docker容器的支持,该框架可以很好地扩展。

值得注意的是,到目前为止,只有BASS的alpha版本可用,还有很多地方需要改进。 该项目具有开源代码,我们正在积极地进行开发,因此,我们很高兴收到社区提供的任何反馈意见并提出改进建议。 BASS的源代码可在此处获得

BASS项目于2017年在加拿大蒙特利尔的REcon会议上宣布。

相关性


Talos专家每天收到超过150万个独特样本。 在大多数情况下,它们与已知威胁有关,并立即被恶意软件扫描程序(ClamAV)消除。 但是,扫描后,仍有许多文件需要进一步分析。 我们在沙盒中运行它们,并进行动态分析,这使我们可以将它们分为恶意和安全程序。 我们处理在此阶段选择的恶意软件样本,以便基于它们创建ClamAV签名,这将有助于在扫描期间的早期阶段进一步过滤这些威胁。



从2017年2月到2017年4月的三个月中,向ClamAV数据库添加了560,000个新签名,即每天增加9,500个签名。 其中很大一部分是我们以散列签名的形式自动收到的。 与模板或字节码签名(ClamAV内核支持的其他两种类型)相比,此类签名具有一个明显的缺点:一个哈希签名仅对应一个文件。 此外,哈希签名数量的增加导致ClamAV数据库占用更多内存。 这就是为什么我们更喜欢基于模式的签名。 它们比字节码更容易管理,并且速度更快,同时,它们还允许您描述整个文件簇。

低音


BASS框架旨在促进基于ClamAV签名的模板的创建。 它会自动生成它们,并处理二进制可执行代码段。



BASS以恶意代码簇为基础,但不包括创建它们的方法。 因此,该技术保持了方便和灵活。 我们有意使输入接口具有通用性,因此很容易适应新的集群源。 现在,我们使用了多种此类来源,包括基于沙箱中危害指标(IoC)的群集,结构化哈希(当我们拥有一个已知的恶意可执行文件并且正在寻找结构类似的其他示例)以及收到的恶意软件来自垃圾邮件活动。

在第一阶段,恶意实例通过ClamAV内核拆包程序传递。 它可以解压缩各种格式的档案和压缩的可执行文件(例如UPX),还可以提取嵌入式对象(例如Word文档中的EXE文件)。 仔细分析接收到的工件,并收集信息。 现在进行下一步过滤了,我们使用它们的大小和UNIX魔术字符串。

然后,对恶意代码集群进行过滤。 如果文件不符合BASS要求(虽然平台仅适用于PE可执行文件,但添加对ELF和MACH-O二进制文件的支持并不困难),则将它们从群集中删除,或者如果剩余的对象太少,则群集将被完全拒绝。

过滤后的群集进入签名生成阶段。 首先,将二进制文件反汇编。 为此,我们使用了IDA Pro,但是可以很容易地用另一个具有类似功能的反汇编程序替换它,例如radare2。



拆卸后,有必要在样本中标识一个通用代码,以便在其基础上生成签名。 此步骤很重要,原因有两个。 首先,签名生成算法需要大量的计算资源,并且在短代码段中效果更好。 其次,最好从不仅在语法上而且在语义上相似的代码样本中获取签名。 为了比较代码,我们使用BinDiff实用程序。 同样,它也很容易替换,将来我们可能会将其他实用程序集成到框架中进行比较。

如果群集较小,则BinDiff会将每个可执行文件与所有其他可执行文件进行比较。 否则,将缩小比较范围,否则过程可能会太长。 根据获得的结果,构造一个图,其中顶点表示功能,而边缘表示其相似性。 要找到良好的常规功能,只需找到整体相似度较高的关联子图就足够了。



具有高顶点相似性指示符的子图ƒ1,ƒ2,ƒ4,ƒ6(请参见上图)对于共同函数的作用而言是极好的候选者。

一旦招募了几名此类候选人,我们便将其与白名单进行比较,以避免基于与样本静态关联的库的普通功能创建签名。 为此,将函数发送到Kam1n0实例,我们先前在该数据库中填充了来自显然纯样本的函数。 如果检测到任何功能的克隆,则重复子图选择过程,以选择最合适的其余功能。 如果验证没有发现任何内容,则将功能集传递到下一个阶段。

然后,签名的生成直接开始。 基于模板的ClamAV签名旨在检测二进制数据中的子序列。 因此,我们将所有最大子序列(LCS,最长子序列)的搜索算法应用于所有提取的函数。

从计算的角度来看,即使对于两个样本,该算法也相当昂贵,而对于多个样本而言,该算法显然要困难得多,因此我们使用了克里斯蒂安·布莱奇曼Christian Blichmann)描述的启发式算法。 结果可能如下所示:



最后,必须在发布签名之前对其进行测试。 我们会使用测试套件自动检查签名是否存在误报。 为了提高可靠性,我们使用Sigalyzer,它是CASC IDA Pro ClamAV插件的新功能, 用于生成和分析签名 (稍后将进行更新)。 Sigalyzer标记二进制文件中与之匹配的ClamAV签名的部分。 因此,形成了签名的视觉视觉表示。

建筑学


BASS被实现为Docker容器的集群。 该框架是用Python编写的,并通过Web服务与所有必需的工具进行交互。 该架构是通过类似于VxClass项目创建的,该项目也使用IDA Pro和BinDiff生成了ClamAV签名,但后来被关闭,与BASS不同,它是公众无法访问的。



局限性


BASS仅与二进制可执行文件配合使用,因为签名是从示例代码生成的。 此外,它仅分析x86和x86_64可执行文件。 将来可能会出现对其他体系结构的支持。

到目前为止,BASS不能很好地应对文件病毒,后者将很小而又完全不同的代码片段嵌入受感染的对象中,而后门程序主要由无害的二进制代码(通常被盗)组成,后门程序又带有恶意功能。 通过努力优化聚类阶段,我们正在与这些缺点作斗争。

再次提醒您,BASS处于alpha测试阶段,到目前为止,并非所有功能都能顺利进行。 但是,我们希望通过将这个框架开发为一个开源项目来使社区受益,并且我们将对任何想法和批评感到高兴。

应用程式


最大公共子串与最大公共子串之间的差异

下图显示了最大的公共子字符串和最大的公共子序列之间的差异。 在我们的出版物中,最大的常见子序列用英文缩写LCS表示。



仅此而已。 并且已经可以在6月20日在开放研讨会上详细了解课程计划, 课程将以网络研讨会模式进行。

Source: https://habr.com/ru/post/zh-CN456426/


All Articles