最早关注混沌工程是从一则NETFLIX的技术新闻开始,NETFLIX工程师创建了一个叫Chaos Monkey(混沌猴子)的工具,使用这个工具可以在NETFLIX整个业务系统中的随机位置引发故障,让工程师快速了解他们正在构建的服务是否健壮,是否可以弹性扩容,是否可以处理计划外的故障。
混沌工程的历史
混沌工程理论已经有34年的历史,属于一门新兴的技术学科,行业认知和实践积累比较少,最早在IT领域被落地工程化也是因为NETFLIX的实践。
引自谷歌云基础架构工程师Yury Niño Roa的一张ppt
什么是混沌工程
混沌工程是一种可控、可观察、可回溯的破坏性测试,是一种在潜在故障中断之前,识别潜在故障的规范方法。
混沌工程以实验为出发点去发现系统的弱点,这个实验通常遵循四个步骤:
定义并测量系统的“稳定状态”。首先精确定义指标,表明你的系统按照应有的方式运行。
创建假设,与任何实验一样,需要一个假设来进行测试,你要试图破坏系统正常运行时的稳定状态。
模拟现实世界中可能发生的故障,比如模拟数据中心的故障、强制系统时钟不同步、在驱动程序代码中模拟I/O异常、模拟服务之间的延迟、随机引发函数抛出异常。
证明或反驳你的假设。将稳态指标与故障注入系统后收集的指标进行比较。最后,如果您发现测量结果存在差异,那么您的混沌工程实验已经成功 。
混沌工程实验的「Blast Radius」
混沌工程有很多技术关键点,比如如何进行数据指标度量、如何进行状态定义等,然而最关键的还是另外一个概念“Blast Radius(爆炸半径)”。
“Blast Radius(爆炸半径)”这个概念很晦涩,但进一步去思考并不难理解。混沌工程的本质就是一个炸弹实验,爆炸实验本身就是破坏性的,首先就要保证好安全,要科学地计算好炸弹的“爆炸半径”,让这个爆炸实验的一切破坏性处在可控可观测的范围内,最后才能安全的得出最好的实验结果。
Log4j2漏洞与混沌工程
在笔者跟进Log4j2漏洞的这一个月时间内发现里一件非常有意思的事情,那就是Log4j2这个漏洞符合一次混沌工程实验的一切完美标准。我们按照混沌工程实验的四个步骤去理解它,你会发现非常多有意思的事。
定义“稳定状态”,如果你的系统安全基线已经固若金汤,在网络层面、终端层面都已经做了很多纵深防御。
创建“假设”,有那么一个安全漏洞,符合所有黑客攻击的梦想条件,即所有可控的变量和数据都是可以执行的代码。题外话:这是一个多么可怕的炸弹。
模拟“故障”,Log4j2漏洞的特性太容易模拟故障了,所有可以输入数据的入口都可以模拟注入故障。系统的任何业务场景都可以有它,从外网到内网,从传统服务器到边缘计算设备等。
最重要的是它可以很好的控制“爆炸半径”,它可以只是系统打点,不执行恶意命令。它可以有控制的开关,随时通过Java配置把这个实验入口给关闭。它可以用网络流量安全策略控制协议出网。
证明“假设”,如果这个实验在安全层面做好了所有的数据度量,经过这么一颗“炸弹”轰炸过后,分析“爆炸数据”,你可以轻松知道这个固若金汤的系统还有哪些弱点。
目前,混沌工程是一门新兴技术学科,国内安全圈接触这个概念还是在懵懂状态。笔者也仅仅是根据自身的一些安全经验在描述它,它不是一次简单的攻击模拟和渗透测试,除了笔者描叙的这些,还有很多可回溯、可迭代、自动化的技术要求,它需要安全架构层面的大拿去巧妙的设计。笔者认为只有真正懂攻防和业务的超复合型人才,才能设计出如同Log4j2漏洞一样完美的混沌工程实验。
THE END
版权声明:本微信公众号(IATF16949)所推送文章中,部分来源于网络。除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,我们会在24小时内删除处理,谢谢!内容若有误,欢迎批评指正
加群或咨询课程具体内容
扫码添加客服企业微信号咨询
离开前,点个赞并“在看”
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.