原文地址:http://drops.wooyun.org/%e8%bf%90%e7%bb%b4%e5%ae%89%e5%85%a8/12313

0x00 前言


从事互联网安全研究有些年了,研究杀毒软件,安全套装,防火墙,IPS之类的监控设备也有一段时间了,开始对现有和下一代安全防护有一点自己的想法,并且开始琢磨更为安全的架构,致力于让互联网更安全。

0x01 现状


先说一下现有安全设备或者服务。

第一个肯定是说杀毒软件或者相应杀毒安防套装。杀毒软件或者安防套装应该为现如今最主流的安防手段。国内,不管从事什么职业的人,安装完系统,第一件事就想着安装什么杀毒软件更能保护我不受恶意软件的入侵。大众已经开始比较杀毒软件优劣了,安全意识能到达如此高的地步,甚是欣慰。但是这也从侧面印证了一个问题,传统杀毒软件已经过时了,不具有在当今互联网社会中提供高安全防护的能力,无法对高水平渗透行为进行防御。不论是通过多年研究经验,还是通过分析各大安全公司的追踪报告,都能得出印证,现有杀毒软件不足以对尖端渗透行为(APT)提供足够的安全防护 。甚至按照某些报告中的叙述,渗透人员只需要相应的免杀一下,就能完全忽略杀毒软件所带来的威胁。

纵观FireEye在2013年,2014年的APT报告中,就可以看出,APT行为针对的目标前三位为政府,服务类机构,高科技企业,再说下排第七位的,航空国防类工业。这四类企业是现有安全水平最高的几类企业。Symantec,Mcafee这类最主流的病毒防护软件,都不一定被他们认为是可靠的。更不用说国内的一些防护类的软件。

咨询了一些专门做渗透测试的朋友,他们直言,从来没有出现过被这类病毒防护软件发现,赶出内网的情况。

所以照此看,如果一个企业相信售前,指望这类杀毒软件保护自身不被入侵,只能说很天真。

再说说硬件设备,各类防火墙,IPS。Cisco ASA系列,Juniper SSG系列,Fortinet FortiGate系列,再或者像Palo Alto一样的硬件的应用层防火墙,见识的实在是太多了,就算在白皮书中说的再怎么智能,动态识别行为,只能说规则还是太死,不足以阻拦APT的行为。更何况国内的某些厂商还挣扎在性能数据上,一加上防火墙,网络延迟增加了太多。线速转发,吞吐量什么都上不去,智能化只能沦落为笑谈。

在校期间,有幸见识了国内某银行支行的建设,使用国产设备,由于处于私有网络中,防火墙只是用来启动,耗电,都没插网线,只是因为他们的员工说有他网速太卡。

接触防火墙这么多年,不考虑性能问题,觉得它最有用处的就两个功能,在三层隔离网络,依照规则进行过滤。其他的特性基本没有阻拦渗透行为。

最后说说IDS与各类监控设备。这是公司网络最后一道防线了,但是这道防线的作用却是受到了极大的限制。各类日志与监测服务,包含所有内网的行为,如果能精确判断各类行为,将会直接导致渗透行为的暴露。但是渗透行为触发的报警经常不是emerg或者alert,经常是notice甚至为info级别。所以这类行为往往被忽略,只能进行仔细的分析才能发现。

0x02 下一代安全防护


如果仔细分析日志,是能发现现有渗透行为的,所以大家都在说下一代网络安全防御方式。国外已经给我们做出了一个例子,那就是FireEye与旗下的mandiant,应该是我们所谓的下一代防护。在经过分析FireEye的报告和各种讨论,提出了如下可能实现的方案:

打造一个“管理员”,能在日志海中耐心,快速地识别所有的流量,将每一个流量识别成一个行为或者一个行为的一部分,再将这个行为对应到发起人,可能是一个IP或者是一个域账户,判断是不是这个人可能的或是合法的行为。

通过这个方案,不合法的行为将会串联起来,变得异常明显。当然这个方案在之前,需要极大的成本,其中的重点就是在打造这个机器学习,或者叫做人工智能。但是在最近,Google公开了他的神经网络算法,并且遵循Apache协议,给每个程序员打造人工智能伙伴并且产品化的可能。

阿里,360等也全部在研发下一代防护服务。绝对逃不出识别流量行为,分析行为的这个模式,相信也是在学FireEye的做法,或者说是本土化。机器学习的开源,只能说每个安全人员都有可能适用自身的下一代防护系统。

那么下一代防护系统是否能满足现有最高安全级别的防护要求呢,我们来做个小小的举例:假设我们的监测系统已经学习了一周或者更长时间网络流量日志。

危险系数应该是累加,到达一个阈值,就会总结行为,提取日志,上报分析人员。遇到warning就会更加关注该源产生的流量。两个alert就应该是阈值。

我们按照同样的思路测试我们自己的远控,也不能很好的逃避监测。目前的设计思路还只是根据流量日志进行的分析,流量日志包括源与目的地址,时间,协议,大小这些数据流量的基本数据。如果能更深入的对数据包的内容进行检测,将会极大的增强识别能力。我们的学习数据是流量日志,所以我们存在于旁路,甚至不存在于公司网络,对用户完全透明。

如果我们继续扩展,像Mandiant一样,将信息收集点放入客户机器,标识所有进入内网的流量,把所有的PC机器当成自己的蜜罐,精确的标记每一个流量,然后深度收集每一个流量最后的行为,再利用神经网络学习并且识别出来哪些流量的行为是异常的。例如,一个被标记的流量来了,由浏览器接收,然后浏览器创建了一个新的进程,下载了一个EXE,在新的进程下执行。这个行为明显不是一个正常网页应该产生的效果,将该行为,加上所有的流量数据,内存执行数据提交分析人员,之后应该就能出现0day与远控的分析报告。这种监测机制能高效的捕获EXP,木马及渗透行为。

目前提出的网络防御手段,即使名字叫做下一代防护,也都只能对当前渗透手段进行防御,不可能做到一劳永逸。因为下一代攻击手段就是为了应对下一代防护,之后下下一代防护才能防御这种攻击。

举个例子,bit9,白名单防护软件,非白名单的可执行文件不允许被执行,如果尝试执行,将会被阻止并且引发报警。当时应该可以号称EXP+木马组合的克星,就算你拥有0day,并且执行成功了,将远控下回本地,但是你的远控不能被执行,并且还会引发报警。结果就是0day与远控都爆了。

这种防御方式基本是不可逾越的,但那只是在poweshell+wmi出现之前,这种方式能完美的绕过文件白名单机制,完爆了bit9。而暴露这种攻击手法的,就是行为检测,因为就算渗透软件发生了巨大的变化,但是你的渗透行为仍然不会有本质的改变。相信就是这样,该攻击方式已被FireEye曝出。

0x03 探讨


那么,如果阿里360什么开发完善了这种检测服务,那是不是网络就安全了,那是不可能的。我们就来小小地讨论下在这种环境下,究竟如何能长期生存下去。

这种检测的核心就是行为,如果我们的行为不能被发现,或者被识别成用户行为,再或者是一个被信任的流量,那么是不是我们就能在这个网络中生存下去了。我在这里有三个没有经过实际验证的想法,跟大家讨论下。

方案一、我们的行为被识别成用户的行为

我们的远控在系统中寄存,但是主程序只是一个守护进程,不论是劫持系统进程还是什么的,只是存在,进行守护,但是不完成任何通信。然后通过注入劫持用户正常通信进程,例如浏览器,劫持Chrome进程,当用户启动浏览器的时候,我们的通信进程随即启动或者略有延迟,进行绝对正常的通信,dns,http转https,或者直接进行https通信,客户端取回指令,执行进程执行,然后在传回指令结果。整个过程类似聊天,你一句,我一句。如果用户关闭浏览器,所有连接随即关闭,但是服务器的最后一句话仍然会在服务器上,直到下一次开启浏览器,在继续整个过程。

在这个过程中,我们的所有行为会被理解成用户浏览器的某些行为。因为网页不可能只存在于一台服务器上,一定会有图片服务器,js服务器,广告之类的。所以只要我么你的流量保持在一个很小的水平,将不会引发任何警觉。就算进行行为的横向对比甚至,检测服务很智能,自己也向我们的服务器进行通信进行内容判断,我们判断不是我们的客户端,就直接返回一大堆js或者图片广告或者正常网页什么的,因为就算你是用相同的url,cookies等信息,你也不能保证你和用户收到的数据一定是一样的,并且数据经过加密,https数据包不能由第三方拆解,不能进行对比。这样就完整的伪装成一台不被信任但是完全不敏感的服务器。

我们的连接就算在一个分析人员来看,也会是一个用户访问一个正常的网页,产生了一些你不明白的流量,但是丝毫不敏感。但是在机器上,我们的通信进程如何跟主进程进行通信,并且能不被mandiant这类分析软件认为敏感,是写本地文件,还是什么的,肯定会有方式。大流量的数据,通过邮件啊之类的合法的大流量行为进行传输。

这样理论上就能绕过行为检测,稳定地驻留在这个内部网络中。

方案二、我们是被信任的

内网用户也是需要正常使用PC,完成某些目的。这样他就会需要各种软件或者平台什么的支持。这些软件基本都会向自己公司的服务器进行交互,可能是回执报告,可能是检查更新,可能是任何行为。如果我们使用这种流量进行通信,那是不是能被所有的检测机制信任,即使我们的流量很大。

我们的核心就是大范围的网络劫持。下面举个例子。

在一个工作内网中,我们的木马使用正常的https协议上线,在系统中驻留的方式很传统,没有任何特别的地方,最特别是是用的域名,我们使用windowsupdate.microsoft.com,或者support.microsoft.com,抑或是chrome.google.com进行上线。进行大流量的数据传输,上线时间什么的行为不做任何特别的设定,唯一限制的就是使用标准的https协议或者之类的安全加密协议。那么检测系统抑或是分析人员会如何理解这个流量行为?

我们在设计实现FireEye这类产品方案的初期,第一个就提出的,*.microsoft.com,*.cisco.com,*.google.com(个别域名除外,像code.google.com)这样的域名的流量日志直接扔掉,检测这类流量行为的是没有任何意义的。我相信很多设计者也是这样的想法,就算不是,该类流量过大,被系统识别出来,提交分析人员,分析人员也基本就会看一眼扔掉,应为分析这样的流量没有什么卵用。这个行为如何定义呢,好点的人在说microsoft收集系统使用报告呢吧,有点恶意的人肯定说微软在收集用户个人信息。基本不会认为有人利用该域名进行渗透。

说说实现方案,其实难度不是特别大,绝对不是不可能。劫持或者控制区域DNS,至于是投毒,渗透还是什么随意。如果域名不够绝对,我就直接劫持IP地址,全部使用微软的IP地址进行通信。只要控制一个路由器就可以实现不论是劫持域名还是劫持IP。之前的文章已经实现过类似的劫持,完成了想要的目的。

方案三、无法分析我们的行为

第三条方案比较直接,直接让我们的行为无法被识别到,做法就是我们直接攻击分析服务器或者说的人工智能的核心,去寻找这些组件的漏洞。如果能执行命令更好,是删光所有的日志,还是直接删除服务器所有数据都是后话了。

然后我们在短期内就可以直接无视这种行为方面的检测。

0x04 结语


任何系统,软件都会有漏洞,坚信。

群策群力,共同迈向下一代。