在繁杂的业务和网络环境下,在公司百万级服务器面前,要做到入侵发生时的及时检测,那么反入侵系统的有效性,即系统质量,是至关重要的。

洋葱系统是腾讯公司级的主机反入侵安全检测系统,它是实现了前端主机agent及后端分布式数据接入分析系统的一整套服务,覆盖的系统模块众多,部署的服务节点超百万,面临的业务网络环境区域复杂——洋葱就是在这样的环境下进行实时监测数据的采集、上报和分析。

然而我们发现,在实际的运营过程中总会出现组件异常、未部署、入侵漏水等一系列质量上的挑战。

基于此,我们在对洋葱系统进行实时质量建设和优化的同时,提出了引入混沌工程的解决思路,并介绍混沌工程在其中的初步实践应用。即,建设整个系统实时质量的一个模型标准和稳态描述,结合实际入侵场景和服务异常的模拟进行混沌实验,对系统的稳定性、可用性进行验证,同时发现未知的质量问题,以此形成负反馈闭环,进一步推进反入侵质量建设和优化。

本文围绕洋葱系统的实时质量建设和优化,介绍混沌工程在其中的初步实践应用。0x1 腾讯反入侵面临的极大挑战

要说明反入侵具体的工作内容,则要先对“入侵”进行定义。

这里的入侵主要指“未经授权”的行为。一般来说入侵者实施入侵行为,主要目的有以下几点:

  1. 获取敏感数据,如关系链,用户信息等;
  2. 篡改数据,如恶意删除,给自己账户充钱,篡改主页(just for fun)等;
  3. 控制个人资产,如将个人机器当肉鸡,对外发起DDoS攻击,或者当做渗透其他目标的跳板;
  4. 挖矿行为。

从路径上看,黑客可以通过网站漏洞、对外高危第三方应用漏洞、供应链攻击、网络劫持、邮件钓鱼、物理攻击、零日漏洞攻击等进入到公司服务器,从而到达内网,然后通过内外扫描爆破等形式进一步渗透,设置种马反连,最终达到完全控制服务器的目的。

一般来说,从入侵动作基本能追溯到一条完整的行为链路。那么说到反入侵,能够在链路中的关键路劲层层设防,就是反入侵的基本。

反入侵系统,目标是及时发现入侵行为,对入侵行为进行回溯,然后加固系统的薄弱点。这里我们提到腾讯公司级的反入侵系统——洋葱。目前反入侵团队在所有腾讯的服务器上均有部署,客户端agent会实时采集机器上的痕迹信息(如命令执行,进程,网络连接,扫描,系统日志,web文件,高危app漏洞等),然后后端是分布式的集群,对数据进行清洗和多维度数据聚合分析,最终输出风险事件。

然而,目前腾讯反入侵工作也面临着极大的困难。

首先,公司盘子越来越大,服务器已经突破百万级别了;其次,公司业务众多,现网各种应用/第三方软件的使用,及员工安全意识薄弱等,都给反入侵工作带来挑战。另外,网络环境复杂,基本上对外的每一个端口、每一个服务、每一个cgi、GitHub上托管的每一个密码,都可以是黑客“入侵”的入口。

面对如此繁杂的业务和网络环境、如此大量的服务器,要求系统及时感知、检测到入侵,则反入侵系统的有效性,即系统质量则变得至关重要。0x2 复杂规模下的反入侵系统质量建设

反入侵系统质量的好坏,已成反入侵体系是否有效的关键因素。然而,如何进行系统质量的有效建设,又是一个极大的工程。

指标化描述,是对质量建设和优化的基础需求。对此我们提到了实时质量大盘的概念,用来实时表述整个系统有效覆盖的健康度情况,以及异常分类的统计占比和详情输出,这样更有助于进行系统迭代优化,进而了一个完整正向质量建设的闭环。

针对所有场景的开发,梳理出各个可能发生异常的点,形成指标,然后迭代开发,将指标埋点上报,后端建立一个指标综合分析的模型,最后输出一个完整实时质量大盘,开发、运维和策略同学根据实时质量大盘中反馈出来的异常场景再进行分析优化开发,形成一个正向闭环。

但是现网的各个模块体系下,实际运营过程中还是出现了埋点指标外的相关异常情况,导致入侵漏水。那么,是否有办法能够将这些可能存在的异常,尽可能快地暴露出来,以便更好把控系统的质量,发现入侵?我们的回答是肯定的。

混沌工程就是一种应用于此类场景的技术方案。

首先说明的是,目前洋葱反入侵系统已经在架构上实现了分布式,自动容灾,路由负载均衡,客户端也是agent加插件的形式存在,且实现了组件管理和心跳检活逻辑——具备进行有意义的混沌实验基础。

关于混沌工程在反入侵场景下的结合和使用,我们的关注点集中在两个层面,即系统有效覆盖和入侵有效发现。

针对第一个层面,混沌实验主要是对系统故障类的演习、验证系统容错能力;第二个层面,混沌实验主要聚焦在入侵实验上,从深度上我们分为模拟入侵拨测,和实际入侵对抗两类。整个混沌实验的结果,反馈回到正向系统质量建设中进行优化和监控,形成一个“负反馈”机制。从正反两个面向,在流程上形成质量建设的闭环。

正向的质量建设,可以解决和闭环可预知的异常场景,针对未知场景,我们引入了混沌实验来进行验证,并形成一个负反馈机制,反哺到实时质量大盘的建设。这就是复杂规模下反入侵系统质量建设的整体思路。0x3 腾讯反入侵场景下的混沌实践

那么,反入侵场景下的混沌实验,具体是如何进行的?

上面提到过,腾讯反入侵团队主要关注两个层面的系统能力,包括系统有效覆盖,和入侵有效发现。在思路上,主要是通过“故障测试”验证系统的有效覆盖,通过“模拟入侵拨测”和“入侵对抗”验证系统的有效发现能力。

1)故障测试

故障注入实验,是混沌工程实践中常用的一种工程手段,通过引入可控的异常和故障,观察系统的反应和容错,是针对系统各个功能模块有效覆盖的验证。

通过设定的随机方法,在分布式系统的客户端和后台,引入可能影响入侵发现能力的异常情况,如在客户端agent中主动降版本、删除组件,或者刻意限制iptables强制agent断开连接,在后台侧通过工具让后端随机机器产生cpu高负载,或者流量暴涨,甚者通过主动kill进程,让服务故障下线。

即,将所有引入故障的动作工具化,通过任务通道,根据预先设定的随机选择方法下发到主机上执行,从而达到故障注入的效果。针对后端的故障引入,设计上会随机分散到不同的集群。然后,我们可以在前面建设好的实时质量大盘上,看对应指标是否产生质量波动。

2)模拟入侵拨测

为了发现在入侵场景和系统完整链路上的未知异常场景,腾讯反入侵团队还引入了“模拟入侵拨测”和“入侵对抗”。在具体操作上,反入侵团队根据入侵的路径、手段方法,将入侵分为不同的场景。针对每个场景,通过采集特定的信息,依据该场景行为特征进行建模和检测。

具体的实施闭环流程如下图所示。从中间“拨测系统”发起模拟入侵攻击。在这个过程中,洋葱系统会按照正常的运行逻辑进行数据采集和传输(这个过程中,数据会全链路旁路落地记录),然后进行入侵行为检测。

拨测系统会自动进行行为结果的验证,输出拨测结果。如果出现异常而系统未发现,策略和研发同学会根据拨测结果进行复盘跟进,然后反馈回到实时质量大盘,或者进行策略优化。同时,如果有新的入侵策略场景发布,会在发布后,将对应模拟入侵行为加入到拨测系统中。如此形成一个闭环。

该模拟拨测方案已经在洋葱中稳定应用了2年。历史上通过拨测,发现了现网环境中多起测试和监控未覆盖到的策略和研发质量问题,从而挖出了不少引起“搏斗”的隐患因素。

3)入侵对抗

模拟入侵是针对已知的入侵场景的。但同时黑客技术也在发展,甚至战场也在发生转移。从服务漏洞,到供应链攻击,到服务器底层种马(bios等)。所以引入入侵对抗实验,也是为了反入侵系统能够跟随发展,走在前头。

在实际的执行过程中,腾讯反入侵团队通过两个维度来进行入侵对抗的混沌实验。

其一,内部建立蓝军机制。通过研究内外部情报,新的入侵工具技术和方法,随时进行踩点渗透,以及控制服务器等入侵行为,进行内部攻防演习;

其二,将白帽子在TSRC平台提交的漏洞,和实际黑客入侵的案例都当作实验的变量。通过上述两方面建立起完整的入侵对抗闭环机制。

具体来看,模拟入侵的整个过程是如何闭环的呢?

蓝军一方面进行入侵,一方面自行记录所有入侵过程中的行为;同时洋葱系统在正常地执行检测工作。如果产生了入侵告警,应急同事会紧急开展排查、定性、止损、定损、溯源等工作,并跟蓝军确认是否是蓝军演习;有时会当作真实入侵把蓝军清理出战场。通过这样的方式来持续对抗。

通过蓝军提供的完整入侵记录,与实际入侵告警进行对账,我们可以推演出哪些行为成功预警,哪些行为被绕过漏水了;或者确定部分行为的原始数据是否在当前有支持采集,等等,然后形成新的开发场景需求、策略优化需求,和质量优化点,反馈回到系统质量建设中。0x4 后记

本文介绍了反入侵工作的相关背景,以及反入侵洋葱系统在质量建设方面的思路和推进方法。从反入侵场景下的质量建设出发,看待分布式系统的质量建设,需要从正反两个方向入手,动态互补,才能不停推进系统的稳定和有效。

未来,腾讯反入侵团队将持续细化、自动化故障注入验证引入现网运营环境,演习常规化,同时将聚焦于IOT智能硬件,服务器底层(BIOS等)更高层次对抗能力和质量的建设。

Comments are closed.