快速分析的小窍门
2022-11-30 17:56:25 Author: OnionSec(查看原文) 阅读量:15 收藏

写文的目的也是想着梳理自己的知识框架,这块也是自己以往结合经验整理的一些思路。可能由于个人的知识背景以及经验无法避免会出现一些不足或错误的地方,本文如有不足或错误的地方可多多指正。主要是工作中时不时会遇到一些场景,例如参与一线应急的小伙伴会投递回来一份取证的样本,或者私下里朋友也会询问下这个恶意文件是什么?比如一个勒索样本需要知道关联的家族或者是新家族,可疑的文件是否为已知的APT样本或者是新组织的攻击样本等等诸如此类的场景,分工合作可以提高效率,然后需要快速判断影响(这里的判定影响指的如何快速分析得到样本背后的关联家族以及黑客团伙,目前大家倾向于比较直观的是获取到C2地址),于是在这个过程中就引发了本文的产生,快速分析无可避免的会导致细节的缺失,不过对于时间优先级较高的场景也能容忍,等当前事件处理完毕后,后续可以深入分析获取的样本增加相关经验。最后经过总结下来能够快速分析的方法很多,主要还是需要自己不断地在实践中摸索然后完善就能掌握一套分析流程。然而写文与实际把想法做成一个东西其实差距蛮大的,目前本文是经过实践的一些简单记录而对于自己未能实践的一些想法暂时没有记录下来。

自动化或半自动化分析

自动化分析指的是可以利用内外部沙箱环境进行辅助分析,提交文件至沙箱分析这个过程比较简单,也是快速分析过程中优先会采用的方法,减少人工投入。但是事物总是相对的,一些场景下会由于样本所携带的反沙箱反虚拟机机制而失效,无法得到分析结果,举例一个流行的开源沙箱环境:https://www.cuckoo.ee/dashboard/。

如果恶意文件是定制化文件,例如需要解密、需要命令行参数或者特定环境才能执行核心逻辑等就会分析失败。此时需要人工介入,人工介入后进入了半自动化分析过程,半自动化分析过程可以借助本地的工具,例如利用API Monitor、Process Monitor、Process Explorer以及火绒剑与ARK等行为分析工具来综合分析得到结论,不过最好本地提前部署好反反虚拟机反反调试的环境,避免反分析机制导致分析过程失败。举例某个驱动模块对Nsiproxy驱动模块进行hook,那么很可能是存在隐藏网络行为的机制。

搜索哈希获取特定样本

首先对于有兴趣研究恶意代码逆向分析的小伙伴,无法避免的情况是都需要获取到特定的样本文件。有时候提供的文档材料里只包含哈希值,如果是已经工作了且有条件使用VirusTotal企业版功能那么对于大部分情况下下载公开的样本是比较简单的,只需将提供的哈希输入VirusTotal进行搜索即可下载。目前VirusTotal的数据库非常庞大,基本上能搜到,结合提供的历史情报关联功能在一些快速分析场景中提供了很大的助力。但是并不是都有这种条件,因此需要积累一些搜索样本的技巧。2020年写过如何下载样本,不过比较粗浅,也是当时积累的一些做法。https://mp.weixin.qq.com/s/SBa2WOGgyNzqz4Lup-HNpg

经过亲身实践与感受,大部分国内用户倾向于优先提交至国内云沙箱环境分析,符合本地化趋势,因此国内的沙箱环境对于发现针对国内攻击活动的痕迹,比较有优势。当然这里肯定涉及到ThreatHunting思想,Hunting是一种实践性很强的方法,内容很多,本文就无法展开了。举个例子,有些APT32的样本VirusTotal其实并没有,但是微步云沙箱可以搜索得到,有点小激动。因为国内外在线沙箱很多,这里就列举下能方便下载样本的沙箱地址,除了微步云沙箱与app.any.run外,https://hybrid-analysis.com/ 也可以自行搜索下载得到样本,不过其中的数据库并不多,有时候无法搜索到特定的文件,可以作为一种最后的补充。

2021年浏览推特的时候,发现互联网出现过一个镜像下载站点,内心有点小惊喜,如下可输入哈希来下载VirusTotal保存的文件。不过目前已经无法访问了,毕竟是商业服务,也能理解为啥会失效。

https://zerodaylab.us/virustotal/

多阶段恶意代码获取

如果在逆向分析恶意代码的过程中发现恶意文件访问并后续要下载的文件的服务端已经响应404,可以尝试通过app.any.run搜索该域名或者ip,或许就有可能在历史记录里找到有人分析过该样本,沙箱可以通过提供一个地址让其访问下载,然后至沙箱内分析就可能存在下一阶段的恶意文件。除了沙箱外,VirusTotal企业版也提供了类似功能,如果提供的恶意url存在下一阶段payload,那么被人提交进行分析的过程中会主动下载至系统中再次分析保存结果。这块在判黑判白场景中对于判断域名或IP的所属挺有效果,威胁情报的一个核心是得具有上下文关联性,我们不仅需要知道当前的状态还需要知道历史的状态如何,大部分情况下单一的信息仍不足于给出比较理性的结论。如果下载的payload是一个流行勒索家族或者其余类型恶意文件家族,那么关联的域名或者IP极有可能是黑客的恶意托管地址,这也是快速分析判定的一种方法。

遇到加壳样本怎么办?

简单的壳可以尝试去脱壳,强壳或者虚拟壳当缺乏相关经验时无法脱壳可先dump进程内存,提取相关字符串或者十六进制序列后可以通过yara搜索内外部数据库得到相似的样本,极有可能是黑客先前未加壳的样本。

如何找到相似样本?

相似样本的发现过程其实与ThreatHunting过程类似,也是基于一定的方法论逐步扩展的,yara搜索是一种很笼统的方法,再细节下去便可以利用imphash、pe header hash以及ssdeep和tlsh等方法来找到相似的样本,相似算法其实很多是公开的,但是最核心的还是搜索的数据库是否较全。巧妇难为无米之炊,因此如果没有比较优质的数据库,再优秀的算法依然无法发挥作用,这块根据每个人面临的场景的不同而不同。

快速判定家族的方式

二进制代码相似度判定是判断恶意文件是否能聚类的一种核心方法,聚类将单一攻击事件进行归纳总结的过程有利于对整体事件的深入分析把握发展趋势,与人以类聚物以群分的思想一样,自己比较喜欢以色列安全公司Intezer推出的Intezer Analyze站点,二进制代码相似度有点类似于生物学上的基因相似度,可以通过直接搜索哈希,运气好的情况下它会直接导入数据库里的样本然后自行分析,可以分析代码注入手法中的傀儡进程替换的样本,然后找到真实的核心样本进行代码相似度判定,得到所属的家族,Intezer会使用恶意文件提取的字符串以及二进制代码块进行相似度判定,核心也利用黑白名单的思想,如果不在库内的特征则会标注为unique。当然任何工具都不可能百分百正确,它只能作为一种快速分析判定的辅助手段,最终仍然需要人工介入进行最终的结论确认,如果对结论存在迷惑可以利用Related Samples找到相关的样本进行本地自行比对。

在本地自行比对分析中,自己会比较喜欢使用bindiff来进行二进制代码相似度分析,当然也可以使用diaphora,这两个都是比较强大的工具,一些简单的漏洞研究分析中自己也使用bindiff来进行补丁比对,在比较理想的场景下会使用它来进行两个文件的相似度比较,如果相似度非常高且排除掉利用相关开源代码或者库的情况下可以认定这是同一个家族的样本,对于聚类也是一种比较好的方法。如果在此之前分析人员已有对相关文件的人工分析经验,如果碰巧遇到一份需要快速分析的取证样本,那么经过bindiff二进制代码相似度分析可以利用已有的经验快速分析得出是否是相似文件的结论,最终得出本次取证文件的背后关联所属,得到关联所属就可以利用已有的结论进行扩展。

简单案例举例

针对.NET平台编写的恶意文件,通过在搜索引擎或者github等托管平台搜索特定字符串来查找是否存在开源代码。

对于勒索样本的家族判定过程,自己比较喜欢去pcrisk站点(https://www.pcrisk.com/)进行搜索,可以搜索勒索信中的联系邮箱或者加密文件的后缀名等信息,然后如果是已知的家族会比较容易发现痕迹,在一些不敏感的场景下可以利用Intezer搜索哈希的相似度结果,很可能会关联到一些比较流行的勒索家族。

如果勒索信中没有联系邮箱,而且提供的Tor链接地址也无法访问时就需要多想些办法来快速分析得出背后的所属勒索家族了。举个例子,发现某个勒索样本,勒索信中没有联系邮箱,而且提供的Tor链接地址也无法访问,但是出现了加密后缀encrypt3d。

勒索信中没有联系邮箱

提供的Tor链接地址也无法访问

通过搜索引擎搜索加密后缀encrypt3d,可以关联到一篇报告,但是经过比对并不是该勒索家族,此时需要人工介入进行简单分析。

https://blog.talosintelligence.com/2022/01/ukraine-campaign-delivers-defacement.html

初步静态分析时,文件解压后火绒告警GlobeImposter勒索(反病毒引擎特征比较通用,因此对于非流行恶意文件家族判断并不是很有效果),一开始直接利用本文提及到的intezer站点关联分析得到属于Balaclava勒索,后续本地二进制相似度比对intezer提供的相关样本发现并不准确。最后在VirusTotal上利用上述勒索样本的TLSH值通过相似性搜索找到3个关联样本,之后在关联样本中发现了黑客留下的勒索信内容,勒索信内容包含具体的联系邮箱,通过联系邮箱在www.pcrisk.com站点搜索找到了历史关联家族为MedusaLocker,互联网关联的文章里提及的样本经过intezer分析比对也与MedusaLocker家族存在较大相似,之后还经过外部文章里提及的tria.ge沙箱分析结论认定样本为MedusaLocker家族。由于这一系列关联链条属于强关联,因此认定该家族关联到MedusaLocker勒索病毒家族。

通过上述的不断尝试最终解决了样本背后所属勒索病毒家族的问题。


文章来源: http://mp.weixin.qq.com/s?__biz=MzUyMTUwMzI3Ng==&mid=2247484861&idx=1&sn=526854dc1d5bb637728f6a4d1c38f8f5&chksm=f9db52feceacdbe8aba3092a881cc5f35ccb3af0a4cce093ab59fadb77ca6c7c183cfd12547b#rd
如有侵权请联系:admin#unsafe.sh