# 关于下一代安全防护的讨论

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-01-26T07:20:00Z
Canonical: https://wepostx.com/topics/49

> 乌云历史资料归档
>
> **原始作者：** vodu
> **原始编号：** superkieran-wooyundrops:1016
> **原始发布时间：** 2016-01-26 15:20
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 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上线，本地管理员权限运行。
有以下几点较为敏感：

- 时时刻刻在活跃的非信任连接 alert

- 一个TCP未知协议的连接，非信任地址（可能防火墙就不会放过）warning

- 可能立即就会有扫描内网行为 emerg

- ...

- pi与ghost变种型，工作时间定时上线，使用标准https协议通信，使用system权限运行
经过检测，将可能会有以下几点引发注意

- 在工作时间时时刻刻活跃的非信任连接 alert

- 员工参加某个集中活动，像午餐什么的，网络较为沉寂的时候仍然一直保持活跃 waining

- 在用户账户在非登录状态的非信任流量 alert

- 上行大于下行的非信任流量 总流量小叫notice 总流量较大 alert 5mb

- 可能会有内网扫描流量 emerg

- 关于上线时间，异常精确的一个时间点 alert

- 过多的与域控的通信 alert

- 尝试访问非公共与自己部门的服务器 alert

- 非管理员尝试访问网络设备 alert

- 机器只有非信任连接的https访问 alert 浏览器都没开，就有https流量 warning

- 用户行为异常，非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 结语

任何系统，软件都会有漏洞，坚信。
群策群力，共同迈向下一代。

## Replies
