史上导致数百万美元损失的10大计算机漏洞

编译|
在IT时代,计算机漏洞或编程错误(Bug)是一种常见现象,以至于所有的开发软件都有可能存在缺陷或漏洞 。你信或不信 , 反正漏洞就在那里 , 只是要么根本没人发现,或者有些人对它进行了测试并公开 , 而有些人对其测试但未公开(0-day漏洞) 。任何软件在其生命周期内都会存在漏洞或缺陷,而那些未被发现的漏洞、缺陷、错误或0-day漏洞将会对软件本身和其应用系统产生严重的信息安全威胁,或造成巨大的经济损失,软件开发的安全性设计和测试工作应该得到更多重视 。
在此 , 我们一起来看看——史上造成数百万美元损失的10大著名安全漏洞 。
1 阿丽亚娜5型火箭升空爆炸事件
阿丽亚娜5型火箭,为欧洲空间局研发的民用卫星一次性运载火箭,名称来源于神话人物阿丽雅杜妮()的法语拼写 。1996年6月4日,在风和日丽的法属圭亚那太空发射场,阿丽亚娜5型运载火箭首航 , 计划运送4颗太阳风观察卫星到预定轨道 。但在点火升空之后的40秒后,在4000米高空,这个价值5亿美元的运载系统就发生了爆炸,瞬间灰飞烟灭化为乌有 。
爆炸原因由于火箭某段控制程序直接移植自阿丽亚娜4型火箭,其中一个需要接收64位数据的变量为了节省存储空间而使用了16位字节,从而在控制过程中产生了整数溢出,导致导航系统对火箭控制失效,程序进入异常处理模块,引爆自毁 。

史上导致数百万美元损失的10大计算机漏洞

文章插图
2 爱国者反导系统软件失灵事故
1991年2月25日,部署沙特宰赫兰基地的美军“爱国者”防空导弹居然没有发现伊拉克来袭的“飞毛腿”导弹,导致美军兵营被炸,28人死亡98人受伤,而事故原因则由于“爱国者”防空导弹系统的一个致命软件错误 。该错误导致其雷达探测系统不能有效识别、跟踪和拦截敌方导弹 。
在后来的调查中发现,由于一个简单的计算机bug , 使基地的爱国者反导弹系统失效,未能在空中拦截飞毛腿导弹 。当时,负责防卫该基地的爱国者反导弹系统已经连续工作了100个小时,每工作一个小时,系统内的时钟会有一个微小的毫秒级延迟 , 这就是这个失效悲剧的根源 。爱国者反导弹系统的时钟寄存器设计为24位,因而时间的精度也只限于24位的精度 。在长时间的工作后,这个微小的精度误差被渐渐放大 。在工作了100小时后,系统时间的延迟是三分之一秒 。伊拉克战争开始前,美军专业人士就对“爱国者”导弹的可靠性持怀疑态度 。但雷神公司却辩解称,公司在试射“爱国者”导弹过程中的确发现存在难以分辨敌我的问题 , 但已经进行了技术改进 。因此,“爱国者”防空导弹仓促投入了实战 。
史上导致数百万美元损失的10大计算机漏洞

文章插图
3 千年虫问题
计算机2000年问题,又叫做“千年虫”、“电脑千禧年千年虫问题”或“千年危机” 。缩写为“Y2K” 。在90年代末,千年虫问题是许多专家广泛讨论的话题,它可能引发飞机碰撞、轮船偏离航向、证券交易所崩盘等问题 。
史上导致数百万美元损失的10大计算机漏洞

文章插图
问题原因在于某些使用了计算机程序的智能系统(包括计算机系统、自动控制芯片等)中,由于其中的年份只使用两位十进制数来表示 , 因此当系统进行(或涉及到)跨世纪的日期处理运算时(如多个日期之间的计算或比较等),就会出现错误的结果,进而引发各种各样的系统功能紊乱甚至崩溃 。如1970年用70表示,1999年用99表示,所以当到了2000年1月1日时 , 很多采用这种计时方法的系统都错误地把日期识别为1900年1月1日 。从根本上说千年虫是一种程序处理日期上的bug(计算机程序故障),而非病毒 。
史上导致数百万美元损失的10大计算机漏洞

文章插图
4 系统错误导致的92万亿客户存款
2013年6月闷热的一天,56岁的美国男子Chris 吃惊地发现,在发给他的对账单中 , 他的账户余额竟然高达$92,233,720,368,547,800,接近92万亿美元!这个数字富可敌国,是当时世界首富墨西哥电信大亨 Slim的一百万倍 。不过 , 经及时核实后,发现这是个严重的系统Bug 。当他再次登陆自己的账户时,发现里面只剩下自己原本的100美元 。
史上导致数百万美元损失的10大计算机漏洞

文章插图
【史上导致数百万美元损失的10大计算机漏洞】5 江南Style点击量超出播放上限
2014年,鸟叔的《江南Style》视频在的播放次数超过了计数上限 , 导致谷歌不得不对进行技术调整 。之前的播放计数上限为32位,即最多为2,147,483,647次观看量 , 当《江南Style》出现后,点击量远远超过该数 , 谷歌及时调整播放上限为64位,即9,223,372,036,854,775,808次播放数 。对此,谷歌在其+上发表声明称:“我们从未想过一段视频的观看量会超过32比特的整数(=2,147,483,647次观看量),直到我们遇到了鸟叔
” 。
史上导致数百万美元损失的10大计算机漏洞

文章插图
6 美F-22软件错误导致系统瘫痪
2008年,美国空军声称12架“猛禽”执行从夏威夷飞往日本的任务中,当途经国际日期变更线的时候,飞机上的全球定位系统都失灵了 , 多个电脑系统发生崩溃,多次重启也均告失败 。飞行员们再也没有办法正确辨识战机的位置、飞行的高度和速度 。他们不得不掉头返航,但是幸运的是,当时天气很好,能见度也非常高,这给“猛禽”加油的KC-135型加油机可以引导它们安全降落,顺利地返回位于夏威夷的希卡姆空军基地 。
“猛禽”一到希卡姆机场,不出几个小时,问题就真相大白:软件开发工程师在电脑系统编码中犯了一个错误,引发了一系列的问题 。当时美国空军退役少将史皮尔德称:“对于那些“猛禽”战斗机飞行员来说,他们很幸运,因为如果在实战中发生这个问题 , 他们可能会被击落 。并且这个小小的软件错误 , 将可能成为扭转整个战局的关键点,使美国陷入短时不利的战争局面” 。
史上导致数百万美元损失的10大计算机漏洞

文章插图
7 32位UNIX系统时间编码机制的2038年问题
当工程师在上个世纪七十年代开发出世界上的第一款UNIX操作系统时,他们做出了一个很随意的决定 , 即使用32位签名整数(或数字)来代表时间 , 整个计时系统的起始时间是1970年1月1日 。但这个时间编码机制存在一个严重的问题,因为32位软件能够检测到的最大秒值为,对应时间为2038年1月19日 。也就是说,如果无法解决这个问题,地球上的所有计算机将在那个时刻点将时间计数“归零”,重新从1970年1月1日起算起 。与千年虫问题类似 。
也就是说所有使用UNIX时间编码的系统将在2038年发生溢出错误 , 计时器可能会停止工作 , 跟时间有关的所有系统都会乱套 。值得庆幸的是,要解决这个问题,从技术上来说并不困难 。我们只要将时钟系统换成更高位数的值比如64位就行了 , 那样就会得到一个更大的最大值 。64位系统只是将这个问题发生的时间向后推了而已 , 虽然看似治标不治本,但是其时钟系统的最大计数值对应的时间是2920亿年之后!因此这也等于很好地解决了这个难题 。
史上导致数百万美元损失的10大计算机漏洞

文章插图
8 软件竞争条件错误引发的美国大面积停电事故
2003年8月14日,酷暑中的美国东北部和加拿大部分地区发生大面积停电事故,给当地交通、通信和居民生活造成严重影响 。直到16日上午, 纽约市才全部恢复正常供电 。据电脑专家分析认为,停电的直接原因在于电控系统的竞争条件错误 , 其中一个操作的两个独立线程在调用一段相同代码时,导致输电系统突然发生故障 。由于没有适当的同步和容错机制,线程陷入崩溃,致使输电系统出现连锁反应 。
史上导致数百万美元损失的10大计算机漏洞

文章插图
9 软件错误导致的火星气候探测者号解体失联
火星气候探测者号(Mars )是美国国家航空航天局的火星探测卫星 , 也是火星探测98计划的一部份 , 于1999年发射进入预定轨道 。不幸的是,在运行286天之后,这个价值3亿2760万美元的飞行器失联了 。失联原因在于,探测器的地面控制团队使用英制单位来发送导航指令,而探测器的软件系统使用公制来读取指令 。这一错误大大改变了导航控制的路径 。最后探测器进入过低的火星轨道,在过大的火星大气压力和摩擦下解体 。
史上导致数百万美元损失的10大计算机漏洞

文章插图
10 AT&T9小时长途电话网瘫痪事件
90年代 , AT&T公司在美国占据70%的长途通讯量 , 电话呼叫转发超过11.5亿次,是美国最大的电信通讯公司 。然而就在1990年1月15日下午,该公司所有客户都不能正常拨打长途电话,全国各地的长途电话交换机接连发生故障 , 陷入瘫痪 。大量技术团队参与了事故应急与分析,原因令所有人瞠目结舌 。这个Bug是由一个非常简单的语法错误引起:大型交换机软件中一个C关键字break用法错误 。最终AT&T工程师重装了电话交换机以前的软件版本才得以解决这个问题 。但在电话网络瘫痪的九个小时里,AT&T公司至少损失6000万美元 , 该Bug可以算得上一个昂贵的Bug了 。
史上导致数百万美元损失的10大计算机漏洞

文章插图