盘古刘涛:如何牵一发动恶意家族之全身

刘涛:大家下午好!

这个报告本来应该是由我的同事赵帅来跟大家分享这个话题,但是由于他临时有事,所以由我来代替他跟大家进行一个分享。首先做一个自我介绍,我叫刘涛,是2015年加入了盘古团队,到现在差不多两年多的时间。今天跟大家讲的是《如何牵一发动恶意家族之全身》。

刘涛

首先我们先从一个线索开始。我们设计了这样一个例子,就是快要下班了,突然发现手机上面接到这样一个短信,说你的车牌在路口的时候被摄像头拍到了,你看了一下车牌号是自己的,再看了一下这个电话号码,也似乎是有点像是公共服务号,后面有一个链接,你可能点了,然后恭喜你,中招了。相信在座都是安全从业人员,可能这种比较小白的事情不会发生,可能会怀疑这个东西有可能会是一个木马,把这个链接扒下来,发现是这样一个应用。如果确定怀疑是一个木马的话,就紧接着进行一个分析活动。分析就是一个很正常的常规分析流程,我们先对这个应用进行反编译,看一下申请了哪些权限。之后再看看执行入口是哪些,可能会对一些关键代码比较感兴趣,进行一个扫描。对这个东西可能会进一步深入的代码分析,当有了一些头绪之后,可能会对它进行一些动态运行的调试,这些都是一些常规的分析方式。

我们把这个木马投入到分析平台里面,就可以发现在左侧我们检测出了很多如图所示的这样一些恶意行为,每个恶意行为我们也可以看到,比如像在右侧,这是我们反编译出来,看到在代码里面动态注册了一个短信接收器,是有一个短信拦截的行为。还有一个我们感到很高兴的,就是我们在应用的代码里面发现,因为他用了SMTP的协议,要往邮箱上面发一些木马爬到的数据,因为用了SMTP,用客户端这种方式往上传东西的话,需要提供邮箱和密码,他把这个密码硬编码在木马当中,我们就可以拿到如图右侧所显示的邮箱信息。把这个邮箱登录上去看一下,可以看到这些应该是恶意攻击者还没有来得及把这些所收集到的信息删除。这里面我们可以看到,应该是受攻击者整个的通讯录,还有农业银行的短信日志,都是在这里面的。这里就会看到,这样一个木马其实对于受害者的影响还是很大的。到这里我们是偶然发现一个木马,分析大概到这里就结束了,我们可以看到它的一些行为,然后就是结束。但是我们拿到这个App这样一个木马之后,只对它进行分析就结束了吗?实际上我们觉得是不足够的。其实拿到每一个恶意样本,其实对于一个安全分析人员来说是很珍贵的。我们拿到这个木马之后可以做一些什么事情呢?首先在这里我们可以看到,我们是抓到了它的这样一个恶意行为的包。

我们拿到包之后可以做一些什么事情呢?我们可以看一看是否还有一些其他的恶意内容里面会包含这样一个东西。我们就把这个类放到了大数据平台上面进行了一次搜索,总共我们找到了有13个应用,都包含了刚才注册动态短信接收器的这样一个类。我们对这13个应用可以做什么?我们对它里面的一个数据进行聚合。在这里选取了4个维度,包括这个应用里面包含了哪些域名,用的是什么证书签发的,包含了哪些电话号码,包含了哪些电子邮件这四个东西。我们拿到这四个数据之后就可以写一个检测规则了。构建一个检测规则。当然这不是最终的,因为这里面可能会有一些无用的数据。但是我们把它作为一个规整之后,再放到我们的数据平台里面再进行一次搜索。我们就可以在如图的右下角可以看到,我们又找到了59个新的应用。不断进行迭代的话,这59个新的应用,我们又可以拿到一批新的聚合的数据。

这些数据之后我们可以看到,每一个数据跟它所对应的App其中有一个关联关系。这里面会有一些特征值,它会跟所有的聚合到的敏感,认为有关联的App有一个关联度。这样的话,我们都可以得到一个这些恶意应用之间的关联关系,最终我们经过多次迭代,以后有可能能够找到一批恶意应用家族的族谱。

上面就是我所讲的故事。这个故事里面提到三个东西,首先是特征的演化,我们最初得到一个恶意应用,只找到了里面的一个特征点,就是我们所说的类名。从这个类名出发,在大数据平台里面进行一个关联分析,就会逐步的扩大、扩大、再扩大,最终就能得到整个恶意应用的群体,很有可能就是一个家族,当然也有可能是多个家族在一起。经过我们后面的分析,也验证了我们在这个特征关联到整个所得到的恶意应用群体,最终命中的东西基本上都是处于一个家族的恶意行为或者是某几个家族。我们用这个方法所得到的这样一个结果是比较有效的,而且它的速度也是比较快,比起来我们在大量的App里面去找会有效得多。

在这里面,首先一个最根本的就是我们要对所拿到的这个样本进行一个分析和检测。现有的分析检测技术大致我们分类了一下,也就可以分为这四类:第一个是特征匹配,现在传统的大部分的安全工具,我们在拿到一个恶意样本之后,我们会对这个恶意样本进行一个分析,最后拿到一个特征值。比如某一段代码片段,某一个字符串,某一个IP或者是某一个特征去匹配;第二是静态检测技术,我们的应用可以对二进制,或者是对一个中间代码进行一次扫描,然后通过一些过程间或者是一些上下文的动态分析技术,能够快速的得到一些运用的行为,从而判断是否可能存在安全问题;第三是动态检测,我们可以把它放到一个沙箱里面去扫一下,抓取一下;第四是动静结合,这也是现在大部分安全分析人员所采用的方式。就是我们动态工具和静态工具分析看,最后通过结合的方式,最终得到一个承认的东西。

这四种方式检测成本可以按照这个图,是呈线性关系的,就是成本和准确度是呈线性关系。其中特征匹配是最快的,扫一下,然后对一下,有的话就是成功,没有的话就认为是一个非黑即白的东西。速度非常快,但是精确度低一些,在没有特征覆盖范围内的应用可能就直接被放过了。静态分析比特征稍微好一点,但是如果有一些误报,或者规则写得不全面的话,也有可能会放过一些东西。随之后面的动态会稍微更多一些,但是会涉及到要去运行,所以说又会进一步提高成本。最后,肯定动静结合,再加上人工,这个可能是最高的。

从另外一个角度,我们通过单位时间内检测应用的角度和个数这样一个维度,与上面这张图就变成了一个反比的形式。我们有这样一个问题,就是我们的安全分析人员资源有限,每天就只能用动静结合人工分析,就只能分析那么几个或者是几个,甚至是要花几天时间才能够分析完一个应用,这个是有限的,但是我们这些攻击者不会等你的安全人员分析好以后再去写下一个。所以说怎样能够有效,我们的分析当中会发现,安全分析存在这样一些问题,现在有很多恶意应用是通过非公开分发流量的方式进行传播的。所谓非公开分发流量,传统的一些应用都会正常开发后之后放到这个市场上供大家下载。但是恶意应用的话,有可能放到市场上面,但是随着现在市场的审核力度越来越大,恶意攻击者就会通过一些其他方式,比如说通过之前我们在前面的例子里面提到的,通过短信,或者是通过邮件,专门的针对性的去发送这个东西给用户,去诱导他安装,或者是把它放到一个论坛上面去,这个论坛是一个非公开的,我相信有些人,如果说你们玩网游的话,有些时候会下一些破解版的游戏,有些恶意的应用也会在玩家论坛上面,发一些带有恶意行为的破解版的应用,再破解到游戏应用,放到论坛上面,诱使玩家下载。

对于这些恶意应用就存在这样一个生命周期短的问题,而且因为它的传播范围不是特别大,是针对性的传播,很有可能这些恶意查杀软件没有捕捉到这些恶意应用,如果没有人去报的话,他可能就没有捕获到。他在这个恶意应用里面,再对这些特征扫描,因为很多杀毒软件大部分有些还是采用特征的,对于这些特征进行绕过,他就躲避了这样一个杀毒软件的查杀。而且这样一个针对性的东西,感染的回报率就特别高。

这是其中一个例子,图没有完全放上来。这个应用是一个国防软件,是乌克兰的一个炮兵软件,本来是小范围,在军事网络里面传播的,由一个军官写的,炮兵能够通过这个应用,方便炮兵对炮弹进行发射的行为。这个本来是军事安全里面的,但是一个恶意人,一个黑帽子抓到这样一个应用,他再把这个应用里面嵌入了一些木马的行为在里面。比如说去获取士兵的地理位置信息,一些操作的操作在里面,再放到论坛上面。导致一些士兵可能通过这个论坛上面下载这个App,导致这个攻击。攻击者对很多特征进行了一个绕过,再把这个恶意应用放到上面进行一个扫描,发现全部都通过的,基本上都标志成一个安全应用。这样的话,如果说这个东西是一个涉密的,威胁程度是非常高的。

另外一个方面是仿冒应用,这个仿冒应用有点像刚才我说的破解版的游戏。这里面举的例子是右侧工商手机银行,我们看它写的描述信息比较有诱惑性,一边玩游戏,一边领红包。如果有人爱贪小便宜的话,他就看到论坛上面在分享这个,他就下载下来,安装到手机上面,那么他就中招了。

这是一个统计,我们每天抓取到那么多应用,其中只有28%的应用是所涵盖的,有72%是未知的应用。在这72%里面,其实每天有大量的未知的恶意应用。我们就要想一个问题,怎样能够降低安全分析人员的工作量,让他们把有限的精力放在最应该去分析的应用上面,这是我们说的分级处理。首先我们应该在恶意代码生命周期的第一个环节,分发环节就把这个恶意应用抓到,这是一个最基本的东西。我们可以把这些应用进行一个大数据关联,然后进行排查和溯源,然后进行分析。之后就是业务模式的精细化,基于一个平台,构建一个平台,使得我们的分析人员都能参与到这里面来进行分析,这是我们最初的一个动机。

解决方案,我们可以看到,这是写了一个五级的,最下面的是全网目标,就是我们每天所抓取到的东西。但是我们觉得,我们的分析人员所分析的东西应该只是最上面这一层高价值的目标,剩下的一些东西我们希望能够通过我们的一些方法,能够把它过滤掉,来降低分析人员的工作量。基于这样一个想法,我们提出了这样一个金字塔的模型。可以看到,在中间的三级,对应着刚才讲的金字塔模型当中的关注目标、重点关注目标和风险目标。这五层是怎么一层层过滤的呢?首先最下面对于全网目标,我们肯定还是选用最传统的方式,就是我们用黑名单特征,跟大部分的安全友商一样,用黑名单把已知的东西筛掉,白名单也会筛掉。之后是我们的关注目标,我们可以对应用进行一个简单的扫描,可以很容易的提示到一些关键特征,包括一些签名、类名、方法调用和证书都是可以提取到的,对于一些广谱特征我们写一些检测的规则,把它作为第二步的一个筛选的东西。我们通过这样一个筛选,就可以很容易得到第三层绿色的重点关注目标。对于这些关注目标之后,我们就可以使用一些成本更高一点,更亲切一点的静态分析的方式,也就是反编译源码分析和汇编指令流启发分析等等,再进行捕获,就可以得到第四个风险目标。最后我们用成本更高、更精确的动态分析,最后我们就可以得到交给我们的安全分析人员的这样一个高价值的目标,构成了这样一个金字塔的阶段。这里面其实我们每一层都是存在一个迭代的关系,就是说我们最后分析团队所分析出来的结果,以及上面的每一层,其实都可以作为下一层的一个条件。之后这个分析模型就会有一个沉淀的情况,最终我们分析人员的工作量,最终我们认为可能会存在一个边际扩散的效应。

这是目前我们所得到的一个大数据场景。因为要搭建这样一个目标会用到大数据。首先就是我们所做的现在的一个源数据集,包括第一个应用的基本特征,包括应用云、证书这些,这是第一层的阶段。通过静态分析技术,我们可以得到一些加固特征、调用序列和一些内嵌和SDK。之后还有一些已知信息,就是通过分析沉淀,可以得到白名单库、黑名单库,通过安全人员的分析,可以得到一个规则库。在第三层和第四层所要用到的静态分析系统和动态分析系统,就构成了这样一个金字塔模型里面所要涵盖到的所有元素。

这里面提到一个特征聚合的方法,我们这里面列了那么多的特征,并不可能直接把所有这些维度一股脑的全部塞到分析引擎里面去然后进行聚合。当然你也可以这么去做,但是你这样做的话,很有可能最后只能匹配到你的这样一个应用,这是一个选择的问题。之后还有一个,当你把多个应用放在里面的时候,其实有很多重叠的东西。我们如何把它筛选出一些最重要的呈现给安全的,我们觉得最重要、最应该呈现给安全分析人员去看的这些东西,我们是使用了一个白名单聚合的方式进行一个过滤。所谓的白名单的方式,事先有一批应用,通过分析可以确认它是安全的,包括一些合法的开发者的应用,我们可以作为一个白名单。把白名单里面的东西进行聚合,可以看到在合法的应用里面哪些东西应该是安全的,之后进行聚合,最终得到一个集合,最后对位置信息进行聚合的时候,把这些合法的聚合数据先去除掉,再把剩下的这些东西要交给分析人员进行观测和筛选选择,最终作为下一步聚合的依据。再有一个就是特征的标记,就是你在那么多聚合得到的条件里面,并不是说所有聚合得到的数据就是你下一步聚合所输入的数据源,还是应该要对它进行一个筛选。

再讲两个例子,第一个就是仿冒应用。首先这是一个支付宝的情况,我们输入源是在平台上去搜支付宝这样一个应用名。我们可以看到,我们的分发渠道里面总共监控到700多个应用,在右下角的证书里面可以看到,其中490多个,将近500个应用都是用了一个证书,剩下还有其他100多个应用,他说它叫支付宝,但是是用其他证书签发的。这些证书签发,一般作为一个这样的合法的大型应用开发,其实都是会用相同的证书去签发整个应用链。当然也会存在一种情况,就是在应用发布的阶段上,可能会在不同的阶段使用不同的证书,但是它的证书基本上应该是集中在这个里面的。如果我们在聚合里面发现用的不同的证书,用的证书比较少的话,很有可能就是这种恶意的,有可能就是一个仿冒应用。比如我们选取了第三个证书一扫,这个证书如果大家分析的多,就可以发现这是一个Google的测试开发证书,默认导出的时候,是用这个证书签名的。

这些应用经过我们的分析可以看出是一个仿冒应用,上面是用一个证书来进行分析的。还有另外一个,比如我们对它进行一个聚合,可以看到,在这700多个应用当中,有495个跟刚才这个证书是一致的,它使用的是支付宝的名册,剩下还有4个是对应Pad、Android平板版本的,剩下的是一些很怪的,包括最后一个,连图标都不是支付宝的图标。我们再换一个,QQ也是有同样的问题,我们对它的证书进行一个聚合,也是同样把这个证书,把其中量比较少的这样的证书进行一个联合的搜索,就可以发现这样一个应用。比如看开头这两个,很明显连图标都没有改过来。

另外一个例子,我们经常会在网上看到一些安全报告,这是一个APT报告。这些安全报告虽然说会对这个应用的恶意行为进行一个分析,也讲跟这样一个攻击是怎么样发生的,应该怎么样去防范这样一些东西。但是往往只会给一些片段上面的东西,而且很多这样的一个报告是不会把样本分享出来的。看到这样一个报告,可能你会想去跟踪这个报告,看看是怎么做的,它的里面除了报告所涉及的问题之外,是否还有其他的问题,没有样本怎么办?其实也像我们刚才所说的,像类型的刚才那种牵一发而动全身的方式,在报告里面我们可以看到,在给出一些片段的时候,我们可以把这些片段作为一个恶意程序的特征,把它放到我们的数据平台里面进行搜索。比如像这个里面,有一个特征字符串,我们把这个作为一个特征来进行搜索,搜索到了25个。我们再对其中一个进行分析,进去一看,的确是在对应的这个类里面,有这么一个字符串调用。我们就可以高度怀疑,虽然说我可能找的这个应用并不是这个APT报告里面所提到的应用,但是它们很有可能是一个关联样本,可能是属于一个家族体系。我们对它进行一个定位样本,去分析它的行为,之后我们又可以回到最初例子里面所讲到的,可以拿到它的一些特征。我们再把这个字符串放进平台里面,再进行一个扫描,又得到了33个新的应用,再把这33个新的应用进行聚合,最终都可以得到这样一个关系图。

之后我们通过这样一个关系图,可以审查这里面所关联出来的特征值,哪些我们可以作为标记这一个群体的特征值,我们通过这样一个可视化的图可以看到,像这样一个域名以及包括右侧的这些IP号,都是可以作为一个特征值,因为它对大多数应用都是存在一个关联关系的,就可以快速的通过这样一个聚合关系得到这样一个规则表。之后我们再把我们这样一些特征值作为一个规则,再放到流量监控上面进行监控,这样的话,很快的就能够过滤出这样一些恶意应用。这样的话,就完成了一次恶意行为规则的建立。

作为总结,虽然我们拿到了很多应用特征,但是很关键的一点。就是对于这些特征的选取,我们并不能把所有抓取到的东西一股脑的扔进去,还是存在一个特征的分析。再就是关联分析,我们通过实践发现,大数据关联是一个很有效的,能够自动化的帮助我们筛选出一批值得关注的东西。特征的演化,我们可以通过目前已知的只有少数的几个特征,我们可以通过数据关联一步步的扩大、再扩大,最终能够得到一批我们以前预先没想到的一些特征,最终把这些东西作为我们的一个分析。

以上就是我今天想跟大家分享的内容,希望对大家能够有所帮助,谢谢!

潘柱廷:刘涛刚才讲的主要是恶意代码的家族问题,就像前面菠萝也谈到过,要去重置用户账户的密码,可以用他旧版本的App去重置。其实对于恶意软件也是一样,像溯源作者,不可能一下子就变成大师这个水准。

刘涛:在这里稍微给大家打一个广告,我们目前盘古所用到的这些工具,我们现在搭建了一个平台,是开放给公众进行分享的,我们也希望在座的这些友商和安全分析伙伴们可以加入进来,去使用我们的平台,大家一起努力,就像我们在PPT当中所说的,大家都在一个平台上面去做事,壮大我们的这样一个特征封锁平台,我们也希望能够一定的用处。大家有兴趣的话可以会跟后我们联系,谢谢!

 

上一篇:ADLAB朱钱杭(大菠萝):其实它们近在咫尺

下一篇:安恒郑国祥:strust2漏洞挖掘经验分享