本文讲的是基于 Viper 的二进制软件自动分析框架,
概述
过去的很长一段时间里,我了解并使用了一些非常酷的、私有的、模块化以及非常高级的二进制分析框架。包括Mandiant的静态分类框架和ReversingLabs等商业产品,以及许多昂贵的商业沙箱解决方案,如FireEye,Cyphort和JoeSandbox。我认为托管这样一组静态和动态分析工具对于加快我的CTF团队和私人研究来说可能是非常有益的。所以我决定去收集一系列自动化的静态和动态二进制分析工具去编写一个开源分析平台,今天我们主要讨论的就是它。我所选择的这些工具可用于恶意软件分析,CTF二进制分析或去帮助你在逆向工程中逆向二进制文件。我们将在其中设置多个工具,来进行自动化分析任务和实施逆向工程。这些工具包括大量的静态分析,动态分析和报告工具,我们将在下面的文章中深入讨论。我的最终目标是提供一套有用的内部工具,并通过该框架去对逆向工程和构建微型服务架构进行自动化分析这两个方面去获得良好的学习经验。
我将选择三个主要框架,每一个都被托管在不同的实体上。为了保证我在这个二进制分析集群的第一次可以顺利通过,我选择了:Viper, Cuckoo, 以及MISP。 Viper是用于存储二进制文件的主要接口和数据库。它允许我们在导入时自动运行其他python模块,从而驱动我们所有的自动化分析的核心。这不仅是我们集成的主要原则,而且还驱动了大量的模块化静态分析操作,因为这些工具和库可以方便地位于同一台机器上。我使用了Cuckoo来推动我的动态沙箱分析,让我们可以运行二进制文件,并且丰富的虚拟机内省,网络流量,甚至清除内存。最后,我们将MISP作为用户界面,并以编程方式集成威胁情报数据。 MISP可以订阅Feed并丰富我们的其他工具,如Viper和Duck,从而使我们能够以可管理的方式整合威胁情报。
服务器设置
我为每个机器都装上了一个新的Ubuntu 16映像,并将它们构建在AWS的EC2上。我还为他们设置了各种配置文件中的域名,允许我们打开和关闭它们,只需要更新DNS条目即可。对于开发人员的使用体验,tmux和zsh已经添加了一些自定义配置。人们可以在tmux会话中协同使用这些服务器,以便一个人可以使用像radare2这样的工具进行逆向工程,另一个人可以通过观看tmux会话来学习。
除此之外,我还安装了一些额外的工具和配置:tmux,zsh + oh-my-zsh,vim + vim-plug和fzf等。
Viper
Viper是一个非常惊人的二进制分析平台和框架,它是用python编写的。由于其可扩展,所以就使得集成和编写新模块变得非常简单。
此外,我们可以自动化的将Python工作人员对我们导入的新文件启动操作进行抽象处理,Viper将保存分析并进行审查。 stock w/ Viper包括:通用散列,模糊散列(pydeep),元数据(exiftool),提取特殊字符串和地址(IPv4 / v6,域名),检测已知的shellcode模式,发送样品到 Cuckoo沙盒,启动反汇编程序(IDA Pro或radare2),在Malwr / Anubis / VirusTotal,XOR搜索,YARA扫描,检测普通打包程序(PEiD),imphashing,数字签名分析以及对几个名字有趣的进行多次编译。
它还包括大量不可执行文件格式的分析选项,例如HTML操作,提取嵌入式脚本,Java小程序分析,Flash对象分析,图像分析,pdf分析,多个OLE分析和更多的二进制格式功能。它还包括解析许多Java格式,邮件MIMES和一些防病毒文件的功能。我还添加了ClamAV服务集成,VirusTotal和Malwr集成,用于一些额外的威胁intel,但是在撰写本文时,Malwrs API似乎是错误的,这意味着我必须建立自己的私有沙箱解决方案。
我最兴奋的部分之一是使用Viper框架来进行YARA扫描,并根据我一直在使用的自定义YARA规则自动标记我的文件。 这些YARA规则检测二进制文件的特殊属性,例如:类型,语言,加密原语,易受攻击的功能等。 我已经扩展了在这里使用YARA规则进行二进制分析的想法。
我认为Viper的真正实力在于自动化了许多这些模块,因为它们已经被内置并且可以配置为在导入时运行。在上图中,您可以看到许多这些模块正在导入,以及YARA扫描,将标签和分析笔记自动添加到二进制文件。此外,我在社区中发现了很多自定义脚本,我甚至可以编写一些我自己的简单模块作为POC。我未来的计划是将更多的下列工具集成到viper模块中,这利用任意的python库是非常容易的。我还设置了许多intel集成的威胁分析,例如VirusTotal,Malwr(虽然这似乎是atm),ShadowServer,XForce和MISP集成,我们将在下面的自己的帖子中讨论这些威胁。这些与在conf文件中配置一样简单,并确保Viper具有对其他服务的直接防火墙访问权限。下面你可以看到我的示例模块在行动,但一定要查看代码,看看这些真的会变得很容易。
我主要使用它的API功能来运行Viper服务器,这样我可以使用本地脚本将二进制文件提交到平台,并最终将工具(如chatbot或collectors)集成到Viper平台,以驱动其自动化。我们甚至可以使用自定义脚本与API来远程驱动我们的任何自动化。然后我们有一个二进制文件的私人收藏,这些二进制文件被自动分类,标记,可搜索,我们可以用远程和可管理的方式与他们进行交互。
最后,我在这个框上安装了一些其他工具来进行协同倒置,最着名的是Radare2(用于反汇编)和Manticore(用于符号执行)。我的想法是使用Manticore API或r2pipe编写脚本,以便将这些更深入的静态分析功能整合到Viper中。我还添加了Kaitai-struct,以引用我们可能遇到的各种二进制文件的语法和协议。原因在于这样可以检验我们二进制结构的语法或协议,所以我们可以看到我们的样本是否正常。除此之外,我还为 awesome, modular,pythonic数据转换库添加了Pure Funky Magic脚本。
Cuckoo
这是我们的动态沙盒二进制文件的主要集群。我对Cuckoo的灵活性和可定制印象非常深刻。我发现它比过去使用的任何专有工具更可自定义。个人分析vm设置特别重要,因为您必须确保安装了相应的易受攻击的软件,代理将在其启动时进行启动,虚拟机具有正确的网络配置。一旦我的vms都配置完美,我将它们作为一个OVA导出并将其发送到云端。在将来,我想使用vmcloak测试设置Cuckoo图像。我们目前的设置是一个嵌套的基于AWS的Cuckoo,它限制了我们的32bit图像。这个设置涉及许多经验教训,我计划在不久的将来在ESXI上重新构建这个基础设施,使用类似于Cuckoo修改的东西。也就是说,如果您发现自己在使用Cuckoo与VirtualBox,以下命令是非常有用的:
vboxmanage import “your_ova_name” vboxmanage list vms vboxmanage list runningvms vboxheadless --startvm “your_vm_name” vboxmanage snapshot "your_vm_name" take "vm_snapshot_name" --pause vboxmanage controlvm "your_vm_name" poweroff vboxmanage snapshot "your_vm_name" restorecurrent vboxmanage snapshot "your_vm_name" list vboxmanage snapshot “your_vm_name” restore “vm_snapshot_name” vboxmanage unregistervm “your_vm_name” --delete vboxmanage guestproperty enumerate “your_vm_name” vboxmanage modifyvm “your_vm_name” --hostonlyadapter1 “vm_network” vboxmanage modifyvm “your_vm_name” --nic1 hostonly
我使用API功能来运行Cuckoo,将其与Viper集成。重要的一点是要注意,默认情况下,API没有auth,所以我们使用专用网络和适当的防火墙规则来实现简单而安全的安装。您还可以编写自己的Cuckoo分析脚本,并将其集成到MISP实例中,以进行 threat Intel enrichment。
MISP
我们将使用MISP进行信息共享和数据规范化。通过它可以制作,配置和集成到Viper,以便我们可以轻松找到新的样品或分享我们的结果。当然,有了它之后真正的好处是订阅其他资讯,以获得相互合作的威胁情报,并将其应用于我们的工具。 有关如何使用MISP和Viper的更多信息,我就不在这里详述了。 这是一种以便宜的方式管理私人threat intel,获取公开资讯以及对我们自己的报告进行分析的好方法。
当然,也会有一些其他的二进制分析框架看起来很有趣,并且我在寻找构建这个开源分析平台时也遇到过不少状况。但我最终选择了上面的解决方案,因为它们都是通过Python编写的并且易于彼此集成。也就是说这其实是比较适合我个人的解决方案,因此为了让您有更多收获,我在下面也列出了可能适用于您的解决方案:
Mastiff是一个比较旧的二进制分析框架,它在功能方面看起来很有前途,但现在其开发者方面看起来像是有些放弃了。
FAME是一个很酷的恶意软件分析框架,但它看起来纯粹是为了恶意软件分析,因此也就缺乏了我对CTF或逆向工程所需求的重要的分析功能。
StoQ看起来非常有希望作为企业规模的二进制分析框架,它具有分布式工作队列和收集器。 StoQ与Viper有很多重叠,它包含许多付费服务模块,看起来很好维护,并且很容易具有很高的品质。
LaikaBOSS是一个递归和模块化的文件分析框架。 LaikaBOSS看起来非常有希望,但是其文档上看起来很复杂并且内容相当少。
CRITS是一个类似于MISP的威胁共享信息平台,但是我选择了MISP,因为它与我正在使用的其他框架有现有的集成。
原文发布时间为:2017年6月29日
本文作者:鲁班七号
本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。