查看原文
其他

全球Windows蓝屏:甲乙双方都是草台班子

冯若航 非法加冯
2024-08-20
最近,因为网络安全公司 CrowdStrike 发布的一个配置更新,全球范围内无数 Windows 电脑都陷入蓝屏死机状态,无数的混乱 —— 航司停飞,医院取消手术,超市、游乐园、各行各业歇业。

表:受到影响的行业领域、国家地区与相关机构

(来源:CrowdStrike导致大规模系统崩溃事件的技术分析[1]

在这次事件中,有许多程序员在津津乐道哪个 sys 文件或者配置文件搞崩了系统 (CrowdStrike官方故障复盘[2])—— 做安全的乙方和甲方工程师撕成一片。但在我看来,这根本不是一个技术问题,而是一个工程管理问题。重要的也不是指责谁是草台班子,而是我们能从中吸取什么教训?

在我看来,这场事故是甲乙方两侧的共同责任 —— 乙方的问题在于:崩溃率如此之高的变更,为什么在没有灰度的情况下迅速发布到了全球?有没有做过灰度测试与验证?甲方的问题在于:盲目将自己的终端安全完全寄托在供应链的可靠性之上 —— 为什么能允许这样的变更联网实时推送到自己的电脑上而不加以控制?


控制爆炸半径是软件发布中的一条基本原则,而灰度发布则是软件发布中的基本操作。互联网行业中的许多应用会采用精细的灰度发布策略,比如从 1% 的流量开始滚动上量,一旦发现问题也能立刻回滚,避免一勺烩大翻车的出现。

数据库与操作系统变更同理,作为一个管理过大规模生产环境数据库集群的 DBA,我们在对数据库或者底层操作系统进行变更时,都会极为小心地采取灰度策略:首先在 Devbox 开发环境中测试变更,然后应用到预发/UAT/Staging环境中。跑几天没事后,开始针对生产环境发布:从一两套边缘业务开始,然后按照业务重要性划分的 A、B、C 三级,以及从库/主库的顺序与批次进行灰度变更。

某头部券商运维主管也在群里分享了金融行业的最佳实践 —— 直接网络隔离,禁止从互联网更新,买微软 ELA,在内网搭建补丁服务器,然后几万台终端/服务器从补丁服务器统一更新补丁和病毒库。灰度的方式是每个网点和分支机构/每个业务部门都选择一到两台组成灰度环境,跑一两天没事,进入大灰度环境跑满一周,最后的生产环境分成三波每天更新一次,完成整个发布。如果遇到紧急安全事件 —— 也会使用同样的灰度流程,只是把时间周期从一两周压缩到几个小时而已。


当然,有些乙方安全公司,安全出身的工程师会提出不同的看法:“安全行业不一样,我们要与病毒赶时间“,”病毒研究员发现最新的病毒,然后判断如何最快的全网防御”,“病毒来的时候,我的安全专家判断需要启用,跟你们打招呼来不及”,“蓝屏总好过数字资产丢失或者被人随意控制”。但对甲方来说,安全是一整个体系,配置灰度发布晚一点不是什么大不了的事情,然而集中批量崩溃这种惊吓则是让人难以接受的。

至少对于企业客户来说,更不更新,什么时候更新,这个利弊权衡应该是由甲方来做的,而不是乙方去拍脑袋决定。而放弃这一职责,无条件信任乙方供应商给你空中升级的甲方,也是草台班子。安全软件是合法的大规模肉鸡软件,即使用户以最大的善意信任供应商没有主观恶意,但在实践中也难以避免因为无心之失与愚蠢傲慢导致的灾难(比如这次蓝屏星期五)。

(美剧《太空部队》名梗:紧急任务遇到Microsoft强制更新

如果你的系统真的重要,那么你应该假设任何单一供应商与组件都是不完全可靠的,并在此假设之上进行架构设计。如果你要给出信任,也应当在接受任何变更与更新前切记 —— Trust,But Verify。如果供应商不提供 Verify 这个选项,你应该在权力范围内果断 Say No。


我认为这次事件会极大利好 “本地优先软件” 的理念 —— 本地优先不是不更新,不变更,一个版本用到地老天荒,而是能够在无需联网的情况下,在你自己的电脑与服务器上持续运行。用户与供应商依然可以通过补丁服务器,与定期推送的方式升级功能,更新配置,但更新的时间点、方法、规模、策略都应当允许由用户自行指定,而不是由供应商越俎代庖替你决策。我认为这一点才是 “自主可控” 概念的真正实质。

在我们自己的开源 PostgreSQL RDS,数据库管控软件 Pigsty 中,也一直践行着本地优先的原则。每当我们发布一个新版本时,我们会对所有需要安装的软件及其依赖取一个快照,制作成离线软件安装包,让用户在没有互联网访问的环境下,无需容器也可以轻松完成高度确定性的安装。如果用户希望部署更多套数据库集群,他可以期待环境中的版本总是一致的 —— 这意味着,你可以随意移除或添加节点进行新陈代谢,让数据库服务跑到地老天荒。

如果您需要升级软件版本打补丁,将新版本软件包加入本地软件源,使用 Ansible 剧本批量更新即可。您可以选择用老旧 EOL 版本跑到地老天荒,也可以选择在第一时间发布就更新并尝鲜最新特性,您可以按照软件工程最佳实践依次灰度发布,但真想要糙猛快一把梭全量上也随意,我们提供默认的行为与实践的工具,但说到底,更不更新,这是用户的自由与选择。


物极必反,在 SaaS 与云服务盛行的当下,关键基础设施故障的单点风险与脆弱性愈加凸显。相信在本次事故后,本地优先软件的理念将会在未来得到更多的关注与实践。

References

[1] CrowdStrike导致大规模系统崩溃事件的技术分析: https://www.secrss.com/articles/68310
[2] CrowdStrike官方故障复盘: https://www.crowdstrike.com/blog/falcon-update-for-windows-hosts-technical-details/




云计算泥石流
曾几何时,“上云“近乎成为技术圈的政治正确,整整一代应用开发者的视野被云遮蔽。就让我们用实打实的数据分析与亲身经历,讲清楚公有云租赁模式的价值与陷阱 —— 在这个降本增效的时代中,供您借鉴与参考。
点一个关注 ⭐️,精彩不迷路
Ahrefs不上云,省下四亿美元
赛博菩萨Cloudflare圆桌访谈与问答录
吊打公有云的赛博佛祖 Cloudflare
云盘是不是杀猪盘?

云数据库是不是智商税

云计算:菜就是一种原罪
为什么这两年的舆论战,云厂商总是节节败退
我们能从阿里云史诗级故障中学到什么
阿里云周爆:云数据库管控又挂了
【阿里】云计算史诗级大翻车来了

牙膏云?您可别吹捧云厂商了

从降本增笑到真的降本增效

罗永浩救不了牙膏云

互联网故障背后的草台班子们 
迷失在阿里云的年轻人
腾讯云/阿里云故障背后:投入不足
转载:从头到尾复盘腾讯云故障
故障不是腾讯云草台的原因,傲慢才是
腾讯云:颜面尽失的草台班子
云上黑暗森林:打爆云账单,只需要S3桶名
删库:Google云爆破了大基金的整个云账户
为什么我们的云老是故障
你用的公有云都没做过测试
包年包月的云还能叫云原生吗?
腾讯真的走通云原生之路了吗?

云SLA是安慰剂还是厕纸合同?

云计算为啥还没挖沙子赚钱?
FinOps终点是下云
卡在政企客户门口的阿里云
云厂商眼中的客户:又穷又闲又缺爱 
阿里云降价背后折射出的绝望
门内的国企如何看门外的云厂商
剖析云算力成本,阿里云真的降价了吗?
Redis不开源是“开源”之耻,更是公有云之耻
公有云厂商卖的云计算到底是什么玩意?
重新拿回计算机硬件的红利
扒皮云对象存储:从降本到杀猪
垃圾腾讯云CDN:从入门到放弃
云SLA是不是安慰剂?
杀猪盘真的降价了吗?
范式转移:从云到本地优先
云计算反叛军
下云高可用的秘诀:拒绝智力自慰
半年下云省千万:DHH下云FAQ答疑
是时候放弃云计算了吗?
下云奥德赛
RDS阉掉了PostgreSQL的灵魂
DBA会被云淘汰吗?


继续滑动看下一个
非法加冯
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存