【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

披荆斩棘:论百万级服务器反入侵场景的混沌工程实践

  • 2019-05-24
  • 本文字数:3872 字

    阅读完需:约 13 分钟

披荆斩棘:论百万级服务器反入侵场景的混沌工程实践

洋葱系统是腾讯公司级的主机反入侵安全检测系统,它是实现了前端主机 agent 及后端分布式数据接入分析系统的一整套服务,但在实际的运营过程中总会出现组件异常、未部署、入侵漏水等一系列质量上的挑战。基于此,腾讯在对洋葱系统进行实时质量建设和优化的同时,引入了混沌工程的解决思路。本文整理自腾讯 TEG 安全平台部高级工程师黄兆楠在 QCon 全球软件开发大会(北京站)2019 上的演讲,其围绕洋葱系统的实时质量建设和优化,介绍了混沌工程在其中的初步实践应用。点此下载完整版PPT。


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


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


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


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


本文围绕洋葱系统的实时质量建设和优化,介绍混沌工程在其中的初步实践应用。

0x1 腾讯反入侵面临的极大挑战

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


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


获取敏感数据,如关系链,用户信息等;


篡改数据,如恶意删除,给自己账户充钱,篡改主页(just for fun)等;


控制个人资产,如将个人机器当肉鸡,对外发起 DDoS 攻击,或者当做渗透其他目标的跳板;


挖矿行为。



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


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


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



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


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


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

0x 复杂规模下的反入侵系统质量建设

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


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



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



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


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


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



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


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


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

0x3 腾讯反入侵场景下的混沌实践

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


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


1)故障测试

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


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


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


2)模拟入侵拨测

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


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


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



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

3)入侵对抗

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


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


其一,内部建立蓝军机制。通过研究内外部情报,新的入侵工具技术和方法,随时进行踩点渗透,以及控制服务器等入侵行为,进行内部攻防演习;其二,将白帽子在 TSRC 平台提交的漏洞,和实际黑客入侵的案例都当作实验的变量。通过上述两方面建立起完整的入侵对抗闭环机制。



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


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


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

0x4 后记

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


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


QCon 全球软件开发大会(北京站)2019 已经圆满结束,QCon 上海 2019 即将起航,点击此处了解详情。


2019-05-24 08:005181

评论

发布
暂无评论
发现更多内容

模块二 -- 朋友圈高性能复杂度分析

陈实

「架构实战营」

多名网络主播因恶意炒作被列入警示名单,如何打击这种违规行为

石头IT视角

ZBC陆续在主要CEX开启Staking,锁定市场大部分流通量成大利好

股市老人

数据库原理及MySQL应用 | 数据库安全加固

TiAmo

安全 数据库· 12月月更

性能优化-内存泄漏、内存溢出、cpu占用高、死锁、栈溢出、FullGC频繁检测手段-总结与分享

C++后台开发

性能优化 后端开发 内存泄漏 linux开发 C++开发

ZBC陆续在主要CEX开启Staking,锁定市场大部分流通量成大利好

BlockChain先知

专利进阶(一):软件专利工程师浅谈如何针对计算机软件类专利申请进行技术挖掘

No Silver Bullet

专利 12月月更 软件专利工程师 技术挖掘

一文了解 Dubbo 的代码架构

Apache Dubbo

Java 开源 源码 微服务 云原生

相见恨晚!Git这些功能太好用了!

Jackpop

Chrome浏览器竟然可以用ChatGPT了!

Jackpop

Vue进阶(贰零柒):Webpack 性能优化措施汇总

No Silver Bullet

性能优化 Vue webpack 12月月更

选取数据的原则

穿过生命散发芬芳

数据分析 12月月更

C++开发,这些GUI库一定不要错过!

Jackpop

ZBC陆续在主要CEX开启Staking,锁定市场大部分流通量成大利好

EOSdreamer111

chatGPT的49种应用场景介绍,各开发语言接入chatGPT参考指南

非喵鱼

Java Python 前端 编程语言 ChatGPT

AngularJS进阶(四十二)ng-options渲染的第一项为空问题分析及解决方案

No Silver Bullet

12月月更 ng-options 页面渲染 上拉加载

架构实战营模块8作业

冷夫冲

架构 构架 「架构实战营」

SpringBoot整合Swagger2,再也不用维护接口文档了!

@下一站

12月日更 12月月更 springboot整合 swagger2

Python开发游戏?也太好用了吧!

Jackpop

2022中国产业数字化发展成熟度区域指数分析——充分利用特长,形成区域比较优势,夯实中国式现代化建设基础

易观分析

数字化 产业

实战整了一个后台服务,真香!

风铃架构日知录

多线程 线程池 网络 HTTP CGI

ZBC陆续在主要CEX开启Staking成近期利好,锁定市场大部分流通量

西柚子

数据权限就该这么设计!!!

风铃架构日知录

数据 优化 数据权限 rbac 数据库权限

SQL查找是否"存在",别再count了!

风铃架构日知录

MySQL 后端 Java、 java程序员 sql

数据权限就该这么设计!!!

小小怪下士

Java 程序员 数据权限

架构训练营-第10期-模块2作业

Geek_4db2d5

模块2

KING

2022 Gartner全球云数据库管理系统魔力象限发布 腾讯云数据库入选

科技热闻

Atlassian FaaS 云开发平台Forge解析

填空时光

敏捷 Faas Atlassian Jira

2022-12-16:给你一个长度为n的数组,并询问q次 每次询问区间[l,r]之间是否存在小于等于k个数的和大于等于x 每条查询返回true或者false。 1 <= n, q <= 10^5 k

福大大架构师每日一题

golang 算法 福大大

精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的事务性消息的底层原理并在分析其实际开发场景

洛神灬殇

分布式事务 RocketMQ 可靠消息最终一致 12 月 PK 榜

披荆斩棘:论百万级服务器反入侵场景的混沌工程实践_安全_腾讯黄兆楠_InfoQ精选文章