指针“爆雷”导致公司损失上亿资金


1990 年 1 月 15 日,AT&T 的新泽西运营中心检测到大范围的系统故障,网络显示屏上出现了大量红色警告。

尽管试图排除故障,但网络故障仍持续了 9 个小时,导致呼叫连接故障率达到 50%。

AT&T 因此损失了 6000 多万美元,6 万多名美国人的电话完全无法接通

此外,500 个航班延误,8.5 万人受到影响。

按理说,AT&T 的长途网络是高效率的典范,它利用先进的电子交换机和信号系统处理了全国大部分的电话。该系统通常能在几秒钟内完成电话路由选择。

然而,就在这一天,从纽约的一个交换机开始,整个网络出现了故障。这是由于最近一次更新中的一个软件错误造成的,该错误影响了网络中的 114 个交换机。当纽约的交换机复位并发出信号时,这个错误引发了多米诺骨牌效应,导致大范围的网络中断。

有趣的是,这个软件并没有经过测试。由于代码改动较小,因此按照管理层的要求绕过了测试

问题所在

追根溯源,原因在于网络交换机实施的软件更新中出现了编码错误。

该错误发生在一个 C 语言程序中,涉及嵌套条件语句中一个错位的中断语句,导致数据覆盖和系统重置。

伪代码

1while (ring receive buffer not empty 
and side buffer not empty):

2Initialize pointer to first message in side buffer
 or ring receive buffer

3get copy of buffer

4switch (message):

5 case (incoming_message):

6 if (sending switch is out of service):

7 if (ring write buffer is empty):

8 send "in service" to status map

9 else:

10break // The error was here!

END IF

11 process incoming message, set up pointers to
 optional parameters

12 break
 END SWITCH


13 do optional parameter work

问题分析

  • 如果环写入缓冲区不是空的,那么第 7 行的 `if` 语句就会被跳过,取而代之的是第 10 行的中断语句。
  • 然而,为了使程序正常运行,本应执行第 11 行。
  • 当中断语句被执行,而不是处理传入的信息并为可选参数设置指针时,数据(本应保留的指针)就会被覆盖
  • 纠错软件识别出数据被覆盖,并启动关闭开关进行重置。由于网络中的所有交换机都使用了这种有缺陷的软件,导致了连锁重置反应,最终瘫痪了整个网络系统,使问题变得更加复杂。

尽管进行了严格的测试,网络的设计也非常灵活,但一行代码还是导致了半个国家的主要通信线路瘫痪。

修复

工程师们花了 9 个小时才使 AT&T 的系统完全恢复正常。他们主要是通过将交换机回滚到之前的代码工作版本来实现的。

实际上,软件工程师花了两周时间进行严格的代码阅读、测试和复制,才真正弄清了错误所在。

结论

对于 AT&T 来说,不幸的是,这还不是他们 90 年代最大的系统崩溃。在这十年的后期,他们还遇到了更多的问题。

今天的公司拥有更好的流程,但即便如此,还是会有漏洞漏网。谷歌撰写了一篇关于网站可靠性工程 20 年的精彩回顾文章,其中对 2016 年 YouTube 的首次全球故障进行了反思。

对于公司来说,故障的规模是巨大的,每次故障都会给我们带来教训。然而,对于大多数公司来说,故障归根结底是人为错误和流程漏洞造成的。

原文:https://engineercodex.substack.com/p/how-one-line-of-code-caused-a-60
转自:https://www.jdon.com/69737.htm


相關推薦

2021-12-24

,因此远程攻击者可发送恶意构造的HTTP请求,可导致空指针引用和服务端请求伪造风险,利用该漏洞访问服务端内部网络。 CVE-2021-44790: Apache HTTP Server缓冲区溢出漏洞 CVE: CVE-2021-44790组件: Apache HTTP Server漏洞类型: 缓冲区溢出

2024-07-30

公司陷入财务困境。 根据 Appfigures 的报告,GPT-4o 的推出导致了 OpenA    I 在 ChatGPT 收入和移动端下载量上的“有史以来最大激增”。该初创公司每年从 ChatGPT 中产生高达 20 亿美元的收入,并从大语言模型访问费中

2023-11-02

融资由用友、顺义产业基金领投,广州同创基金跟投。该公司表示,此次募集资金将会主要用于研发核心技术,建设商业生态链等方面。 四维纵横是一家成立于 2020 年的数据库公司,以超融合数据库 YMatrix 为企业提供集“分

2024-10-17

尤其如此,它们没有为新手提供“简单”的问题来磨练,导致贡献者减少并导致维护者倦怠。 HeroDevs 首席开源架构师、数百个 JavaScript 项目的维护者 Jordan Harband 表示,全球范围内时间和资源获取不均衡进一步加剧了这种不平等

2021-12-17

Apache Log4j 2.15.0 发布,安全漏洞已得到解决 不过安全公司 Praetorian 的研究人员昨日表示,2.15.0 存在一个更严重的漏洞——信息泄露漏洞,可用于从受影响的服务器下载数据。 与此同时,Praetorian 已将该漏​​洞的所有

2023-01-10

无法访问。于是ITFunz论坛改名魔趣论坛。由于域名变更,导致网站损失大量用户,魔趣论坛被迫转型。马丁龙猪于2011年6月30日成立魔趣科技(上海)有限公司,并担任董事长兼CEO,开始开发魔趣OS。论坛仍保持非商业化民间运作

2023-09-29

就是问题所在,只有极少数用户的选择了付费计划,从而导致开发者严重的入不敷出。 面对这种情况,Steve 也与其他一些开发了 Chrome 扩展的开发者进行了沟通交流,结果发现大差不差:大家都有一个正在被使用的产品,但却

2024-10-21

用HF(huggingface)的漏洞,通过共享模型注入破坏代码,导致团队模型训练成果受损。消息称此次遭到入侵的代码已注入8000多张卡,损失或达千万美元。 字节跳动知情人士向记者透露称,近期公司确实发生过破坏模型训练一事

2023-07-14

数问题 偶尔可能出现的模组开仓时找不到合约导致的空指针问题 修复 #I7JHVQ #I7JL3S #I7KF0N #I7KZWL #I7KP8T 详情查看:https://gitee.com/dromara/northstar/releases/v6.1.0.RC2

2023-07-23

数问题 偶尔可能出现的模组开仓时找不到合约导致的空指针问题 修复 #I7JHVQ #I7JL3S #I7KF0N #I7KZWL #I7KP8T 详情查看:https://gitee.com/dromara/northstar/releases/v6.1.0.RC3

2023-07-27

数问题 偶尔可能出现的模组开仓时找不到合约导致的空指针问题 修复 #I7JHVQ #I7JL3S #I7KF0N #I7KZWL #I7KP8T 详情查看:https://gitee.com/dromara/northstar/releases/v6.1.0.Final

2023-11-25

张女士报案称,其公司发现计算机系统被他人篡改数据,导致公司账户钱款损失。 民警对公司后台电子数据出现的异常账户进行提取,搜证中发现,操作者很有可能是管理网站后台系统的员工,监守自盗的可能性较大。 民警

2022-11-14

个长期存在的符号解析问题,该问题涉及 GNU UNIQUE 符号,导致一些程序的链接失败。(730e970) 以前,如果版本脚本包含“C++”指令,并且符号匹配 non-C++ 版本模式和 C++ 版本模式,则可能会为该符号分配错误的版本。已修复

2023-11-04

进行行为改变。 “jQuery 使网页开发变得简单易用,但也导致数亿个网站仍然使用旧的、不受支持的版本。即使 jQuery 团队发布安全修复,这些网站通常也不会进行更新,从而导致容易受到攻击。” 主要发现包括: 89%的随