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的做法,或者说是本土化。机器学习的开源,只能说每个安全人员都有可能适用自身的下一代防护系统。

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

  • pi与ghost,传统型,立即上线,随时发起连接,使用TCP上线,本地管理员权限运行。

    有以下几点较为敏感:

    1. 时时刻刻在活跃的非信任连接 alert
    2. 一个TCP未知协议的连接,非信任地址(可能防火墙就不会放过)warning
    3. 可能立即就会有扫描内网行为 emerg
  • pi与ghost变种型,工作时间定时上线,使用标准https协议通信,使用system权限运行

    经过检测,将可能会有以下几点引发注意

    1. 在工作时间时时刻刻活跃的非信任连接 alert
    2. 员工参加某个集中活动,像午餐什么的,网络较为沉寂的时候仍然一直保持活跃 waining
    3. 在用户账户在非登录状态的非信任流量 alert
    4. 上行大于下行的非信任流量 总流量小叫notice 总流量较大 alert 5mb
    5. 可能会有内网扫描流量 emerg
    6. 关于上线时间,异常精确的一个时间点 alert
    7. 过多的与域控的通信 alert
    8. 尝试访问非公共与自己部门的服务器 alert
    9. 非管理员尝试访问网络设备 alert
    10. 机器只有非信任连接的https访问 alert 浏览器都没开,就有https流量 warning
    11. 用户行为异常,非hsts网站,直接使用https访问,没有http跳转过程,但用户从来不会去手动输入https warning

危险系数应该是累加,到达一个阈值,就会总结行为,提取日志,上报分析人员。遇到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 结语


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

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