基于 Viper 的二进制软件自动分析框架

本文讲的是基于 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日

本文作者:鲁班七号

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-10-30 08:39:55

基于 Viper 的二进制软件自动分析框架的相关文章

McAfee云安全亮点:基于芯片的安全软件及服务

相信几乎所 有的IT 经理都期望实时了解企业的各种服务器,以及包括台式机.笔记本电脑.移动设备在内的终端,是否遭受恶意软件入侵,是否能够确保它们远离数据丢失及盗窃.这是所有企业安全防护的期望,面对数据保护.数据防泄露.网络的入侵检测以及合规性等一系列的需求,企业需要的是完整的.切实可行的.有效的解决方案.目前在企业信息安全防护思路中,基于云的安全SaaS 解决方案得到了业内广泛的认可,它不仅提供了终端.电子邮件和 Web 保护能力以及强大的漏洞管理,同时也可以提高运营效率.也降低了企业安全运营成

基于组件的.NET软件开发(1)

基于组件的.NET软件开发 前言 随着软件技术的飞速进步,现代的大型软件都广泛采用了基于软件组件的开发方式.以成熟的CBD(Component Based Design:基于组件的系统设计)理论为指导,在对系统的分析与设计完成之后,系统开发体现为复用已有组件.开发新组件以及将所有组件装配起来的过程.J2EE大规模地使用各种组件构照复杂的企业信息系统,获得了巨大的成功. 作为后来者,.NET framework汲取了J2EE的成功经验,在组件化开发方面有着自己独到的设计,在本文中,我们将介绍.NE

基于Swing的图书馆系统XML框架

简介 现在,市场是紧缩的.框架可以节省设计和开发阶段的时间.IDE可以使得我们更容易的开发用户接口.标准的GUI应用程序用不同的面板布局来定义GUI,已成为一种根本的模式而存在.基于这个模式,考虑使用框架来提高执行速度,达到更高的并行处理程度,协调更宽松的开发方式.我们在这里就要用JAVA SWING应用程序来描叙这么一个框架. 简单的应用程序-图书馆管理系统 我们下面来讨论一个简单的图书馆管理系统,用来理解基于XML的GUI框架. 上面的流程图定义了图书馆用户接口的设计.主目录,会员登录,用户

snmp-《Visual C++开发基于SNMP的网络管理软件》 调试不通请大神帮忙

问题描述 <Visual C++开发基于SNMP的网络管理软件> 调试不通请大神帮忙 3C snmp_pp.h:no such file or directory从网上也下载了snmp_pp 的头文件,但是还是不能运行,知道怎么调试的,能不能讲的详细一些 解决方案 缺少snmp_pp.h头文件? 解决方案二: 缺少snmp_pp.h头文件.把它添加到你的工程中,然后Rebuild All一下看看还有没有其他错误 解决方案三: 搜索下这个头文件有没有,如果没有,先下载它,拷贝进去.如果有,那么看

关于二进制Web服务框架Hessian最简单代码实例

关于二进制Web服务框架Hessian最简单代码实例 在resin3.1 下测试通过 hessian版本: hessian-3.1.6.jar 官方地址: http://hessian.caucho.com/#Java http://hessian.caucho.com/ 步骤如下: 1. 接口定义 package com.yanek.study.hessian; public interface Hello {    public String hello(String name); }  

连载-基于插件技术的GIS应用框架(C# + ArcEngine9.3)(五)

问题描述 [align=center]基于插件技术的GIS应用框架(C#+ArcEngine9.3)(五)--------------------------插件初始化(1)[/align]在第四节中,我们论及了插件的XML保存格式,对于各个XML节点的属性也有了一个大概的了解,下面,我们就如何利用DevExpress套件就这些插件的加载进行详细的剖析.首先,我们必须从已经编译好的DLL中获取插件的类型信息,这就需要利用C#所提供的反射机制.一.插件的反射///根据反射机制产生插件对象并将其放入

Panic自己开发出一款基于iBeacon的签到软件PunchClock

摘要: 对于一家需要考勤的互联网公司来说,如果不搞点有技术含量的打卡方式出来,估计都不好意思向人承认公司还需要考勤吧. 最近一家国外的软件开发公司Panic就自己开发出了一款基于 对于一家需要考勤的互联网公司来说,如果不搞点有技术含量的"打卡"方式出来,估计都不好意思向人承认公司还需要考勤吧. 最近一家国外的软件开发公司Panic就自己开发出了一款基于iBeacon的签到软件PunchClock(英文的意思就是考勤记录器).Panic是个小团队,还不需要开发一款打卡软件,不过出于工程师

基于Spark 的抄袭检测云计算框架研究

基于Spark 的抄袭检测云计算框架研究 于海浩 抄袭检测从根本上说是一个文本相似度的计算问题,需要迅速准确的在海量文集中对文本的原创性进行检测,耗费大量时间和资源,是计算密集和数据密集的复杂过程.采用分布式计算是是提高检测效率的有有效手段之一.本文提出了一套基于Spark的分布式抄袭检测云计算框架该框架使用由集群资源管理器Apache Mesos,支持内存驻留的 MapReduce计算框架,分布式 Hadooop 文件系统构成的分布式计算集群.测试结果表明,此框架比Hadooop传统分布式计算

基于python脚本实现软件的注册功能(机器码+注册码机制)_python

一.前言: 目的:完成已有python图像处理工具的注册功能 功能:用户运行程序后,通过文件自动检测认证状态,如果未经认证,就需要注册.注册过程是用户将程序运行后显示的机器码(C盘的卷序号)发回给管理员,管理员对机器码加密后生成加密文件或字符串返回给用户.每次启动程序,在有注册文件的情况下,程序就会通过DES和base64解码,并与此刻获取到的C盘卷序列号比对,如果一致则运行主程序.如果注册文件解码后与卷序号不一致,就要提醒用户输入注册码,如果对新输入的解码后和重新获取的机器码一致,则通过认证,