在IT时代,计算机漏洞或编程错误(Bug)是一种常见现象,以至于所有的开发软件都有可能存在缺陷或漏洞。你信或不信,反正漏洞就在那里,只是要么根本没人发现,或者有些人对它进行了测试并公开,而有些人对其测试但未公开(0-day漏洞)。任何软件在其生命周期内都会存在漏洞或缺陷,而那些未被发现的漏洞、缺陷、错误或0-day漏洞将会对软件本身和其应用系统产生严重的信息安全威胁,或造成巨大的经济损失,软件开发的安全性设计和测试工作应该得到更多重视。
在此,我们一起来看看——史上造成数百万美元损失的10大著名安全漏洞。
阿丽亚娜5型火箭,为欧洲空间局研发的民用卫星一次性运载火箭,名称来源于神话人物阿丽雅杜妮(Ariadne)的法语拼写。1996年6月4日,在风和日丽的法属圭亚那太空发射场,阿丽亚娜5型运载火箭首航,计划运送4颗太阳风观察卫星到预定轨道。但在点火升空之后的40秒后,在4000米高空,这个价值5亿美元的运载系统就发生了爆炸,瞬间灰飞烟灭化为乌有。
爆炸原因由于火箭某段控制程序直接移植自阿丽亚娜4型火箭,其中一个需要接收64位数据的变量为了节省存储空间而使用了16位字节,从而在控制过程中产生了整数溢出,导致导航系统对火箭控制失效,程序进入异常处理模块,引爆自毁。
1991年2月25日,部署沙特宰赫兰基地的美军“爱国者”防空导弹居然没有发现伊拉克来袭的“飞毛腿”导弹,导致美军兵营被炸,28人死亡98人受伤,而事故原因则由于“爱国者”防空导弹系统的一个致命软件错误。该错误导致其雷达探测系统不能有效识别、跟踪和拦截敌方导弹。
在后来的调查中发现,由于一个简单的计算机bug,使基地的爱国者反导弹系统失效,未能在空中拦截飞毛腿导弹。当时,负责防卫该基地的爱国者反导弹系统已经连续工作了100个小时,每工作一个小时,系统内的时钟会有一个微小的毫秒级延迟,这就是这个失效悲剧的根源。爱国者反导弹系统的时钟寄存器设计为24位,因而时间的精度也只限于24位的精度。在长时间的工作后,这个微小的精度误差被渐渐放大。在工作了100小时后,系统时间的延迟是三分之一秒。伊拉克战争开始前,美军专业人士就对“爱国者”导弹的可靠性持怀疑态度。但雷神公司却辩解称,公司在试射“爱国者”导弹过程中的确发现存在难以分辨敌我的问题,但已经进行了技术改进。因此,“爱国者”防空导弹仓促投入了实战。
计算机2000年问题,又叫做“千年虫”、“电脑千禧年千年虫问题”或“千年危机”。缩写为“Y2K”。在90年代末,千年虫问题是许多专家广泛讨论的话题,它可能引发飞机碰撞、轮船偏离航向、证券交易所崩盘等问题。
问题原因在于某些使用了计算机程序的智能系统(包括计算机系统、自动控制芯片等)中,由于其中的年份只使用两位十进制数来表示,因此当系统进行(或涉及到)跨世纪的日期处理运算时(如多个日期之间的计算或比较等),就会出现错误的结果,进而引发各种各样的系统功能紊乱甚至崩溃。如1970年用70表示,1999年用99表示,所以当到了2000年1月1日时,很多采用这种计时方法的系统都错误地把日期识别为1900年1月1日。从根本上说千年虫是一种程序处理日期上的bug(计算机程序故障),而非病毒。
2013年6月闷热的一天,56岁的美国男子Chris Reynolds吃惊地发现,在PayPal发给他的对账单中,他的账户余额竟然高达$92,233,720,368,547,800,接近92万亿美元!这个数字富可敌国,是当时世界首富墨西哥电信大亨Carlos Slim的一百万倍。不过,经PayPal及时核实后,发现这是个严重的系统Bug。当他再次登陆自己的账户时,发现里面只剩下自己原本的100美元。
2014年,鸟叔的《江南Style》视频在Youtube的播放次数超过了计数上限,导致谷歌不得不对Youtube进行技术调整。Youtube之前的播放计数上限为32位,即最多为2,147,483,647次观看量,当《江南Style》出现后,点击量远远超过该数,谷歌及时调整播放上限为64位,即9,223,372,036,854,775,808次播放数。对此,谷歌在其Google+上发表声明称:“我们从未想过一段视频的观看量会超过32比特的整数(=2,147,483,647次观看量),直到我们遇到了鸟叔”。
2008年,美国空军声称12架“猛禽”执行从夏威夷飞往日本的任务中,当途经国际日期变更线的时候,飞机上的全球定位系统都失灵了,多个电脑系统发生崩溃,多次重启也均告失败。飞行员们再也没有办法正确辨识战机的位置、飞行的高度和速度。他们不得不掉头返航,但是幸运的是,当时天气很好,能见度也非常高,这给“猛禽”加油的KC-135型加油机可以引导它们安全降落,顺利地返回位于夏威夷的希卡姆空军基地。
“猛禽”一到希卡姆机场,不出几个小时,问题就真相大白:软件开发工程师在电脑系统编码中犯了一个错误,引发了一系列的问题。当时美国空军退役少将史皮尔德称:“对于那些“猛禽”战斗机飞行员来说,他们很幸运,因为如果在实战中发生这个问题,他们可能会被击落。并且这个小小的软件错误,将可能成为扭转整个战局的关键点,使美国陷入短时不利的战争局面”。
当工程师在上个世纪七十年代开发出世界上的第一款UNIX操作系统时,他们做出了一个很随意的决定,即使用32位签名整数(或数字)来代表时间,整个计时系统的起始时间是1970年1月1日。但这个时间编码机制存在一个严重的问题,因为32位软件能够检测到的最大秒值为2147483647,对应时间为2038年1月19日。也就是说,如果无法解决这个问题,地球上的所有计算机将在那个时刻点将时间计数“归零”,重新从1970年1月1日起算起。与千年虫问题类似。
也就是说所有使用UNIX时间编码的系统将在2038年发生溢出错误,计时器可能会停止工作,跟时间有关的所有系统都会乱套。值得庆幸的是,要解决这个问题,从技术上来说并不困难。我们只要将时钟系统换成更高位数的值比如64位就行了,那样就会得到一个更大的最大值。64位系统只是将这个问题发生的时间向后推了而已,虽然看似治标不治本,但是其时钟系统的最大计数值对应的时间是2920亿年之后!因此这也等于很好地解决了这个难题。
2003年8月14日,酷暑中的美国东北部和加拿大部分地区发生大面积停电事故,给当地交通、通信和居民生活造成严重影响。直到16日上午, 纽约市才全部恢复正常供电。据电脑专家分析认为,停电的直接原因在于电控系统的竞争条件错误,其中一个操作的两个独立线程在调用一段相同代码时,导致输电系统突然发生故障。由于没有适当的同步和容错机制,线程陷入崩溃,致使输电系统出现连锁反应。
火星气候探测者号(Mars ClimateOrbiter)是美国国家航空航天局的火星探测卫星,也是火星探测98计划的一部份,于1999年发射进入预定轨道。不幸的是,在运行286天之后,这个价值3亿2760万美元的飞行器失联了。失联原因在于,探测器的地面控制团队使用英制单位来发送导航指令,而探测器的软件系统使用公制来读取指令。这一错误大大改变了导航控制的路径。最后探测器进入过低的火星轨道,在过大的火星大气压力和摩擦下解体。
90年代,AT&T;公司在美国占据70%的长途通讯量,电话呼叫转发超过11.5亿次,是美国最大的电信通讯公司。然而就在1990年1月15日下午,该公司所有客户都不能正常拨打长途电话,全国各地的长途电话交换机接连发生故障,陷入瘫痪。大量技术团队参与了事故应急与分析,原因令所有人瞠目结舌。这个Bug是由一个非常简单的语法错误引起:大型交换机软件中一个C关键字break用法错误。最终AT&T;工程师重装了电话交换机以前的软件版本才得以解决这个问题。但在电话网络瘫痪的九个小时里,AT&T;公司至少损失6000万美元,该Bug可以算得上一个昂贵的Bug了。
原文发布时间为:2017-01-19
本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号