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