MyException - 我的异常网
当前位置:我的异常网» 综合 » 爆炸,解体,侵入,你想得到的你想不到的大BUG们

爆炸,解体,侵入,你想得到的你想不到的大BUG们

www.MyException.Cn  网友分享于:2013-10-27  浏览:0次
爆炸,解体,入侵,你想得到的你想不到的大BUG们

郑昀 创建于2017/9/29 最后更新于2017/10/6

提纲:

  1. 阿丽亚娜火箭的解体

  2. 阿波罗飞船的P01模式

  3. 德勤的Google+

  4. 麻省理工的500英里邮件

又到了扶额兴叹的节气。(前文回顾:5年前的今天,一个小小的部署错误,让美股最大交易商坠入深渊

 

0x00 阿丽亚娜火箭的解体

1996年6月4日,阿里亚娜五号火箭首次测试发射。

37秒后,火箭水平翻滚,解体爆炸。

WHY?

Ariane 的开发语言是 Ada,美国军方软件开发强制语言,。

设计 Ariane4 火箭的时候,设计师们坚信水平速率是不会超过一个16-bit signed integer 的。

但 Ariane5 火箭的水平速率比 Ariane4 高出了5倍,code review 时,大家都没有注意到这一点。

16位整型的范围是 -32768 到 32767。

出错的代码是:

horizontal_veloc_bias := integer(horizontal_veloc_sensor);

昀哥查了查事故报告,引发问题的是 BH, Horizontal Bias。

这个值与时间有关,还不是纯水平速度。

因为 Ariane5 的早期轨道与 Ariane4 不同,所以这个 BH 比预想的高了很多。

结果导致数据转换时溢出。

控制惯性导航系统的计算机向控制引擎喷嘴的计算机发送了一个无效数据。

于是火箭偏离它的飞行路径,解体并爆炸。

嗯哼,所以有一个段子说,如果阿丽亚娜火箭的开发语是 JavaScript,就不会发生这个惨案。

 

0x01 阿波罗飞船的P01模式

话说史上最牛的女程序员玛格丽特·希菲尔德·汉密尔顿(Margaret Heafield Hamilton)在1965年担任 NASA 软件编程部的部长。

软件工程(Software Engineering)这个词就是玛格丽特·汉密尔顿发明的,不过那已经是阿波罗11号飞船期间的事情了。

下面我们要讲的是阿波罗8号飞船的故事。

那个时候她没日没夜地工作,女儿劳伦就在她的实验室玩耍,累了就在地板上睡觉。

这一天,劳伦在指令舱模拟器里按来按去,居然启动了一个叫 P01 的预处理程序。

顿时模拟器就崩溃了。

玛格丽特发现后,就建议加段代码防止此情况出现。

但是大家都觉得航天员不可能这么操作,这个异常处理完全没必要。

主要是因为当年的计算机存储空间和运算能力十分有限,螺蛳壳里做道场,斤斤计较的领导不愿意浪费这个空间。

所以玛格丽特只好加了一个备注:不要在飞行中选择P01模式。

 

但是,想啥就来啥。

1968年12月26日,人类首次绕月飞行的阿波罗8号飞船上,航天员还是成功地进入了 P01 模式。

这个模式启动的直接结果就是:所有导航数据都会被清空。

航天员再也别想回家了。

玛格丽特带着人奋战了9个小时,终于上传了新的导航数据,一切又回到正常的轨道,阿波罗8号也顺利载着宇航员返航。

这事儿没完,在阿波罗11号飞船即将登陆月球前的几分钟,又一个更大的危机发生了。

 

欲知详情,请在搜索引擎搜索关键词“程序员永恒的女神”。

 

0x02 德勤的Goolge+

昀哥以前在《安全基础教育第一季》里说过,当公司做得越来越大的时候,总会出现那么几个安全意识薄弱的人员(俗称猪一样的队友),他们往往会做出一些让人无法理解的事情,比如:他会毫不犹豫地双击运行邮件内的 EXE 附件,或者使用跟用户名一样的密码,或者用户名+当前年份的密码。

而且每家知名公司都有这么几个没心没肺的人,在开源社区泄露源码或敏感信息,在乌云网里随便一划拉就能找到好多:

盛大某开发人员意识不足泄漏内部邮箱帐号密码(github)

迅雷某开发人员意识不足泄漏内部邮箱帐号密码(github)

一次成功的漫游京东内部网络的过程(由一个开发人员失误导致)(github)

新浪开发人员安全意识不足导致部分源码泄漏(googlecode)

腾讯多组内部邮箱账号密码泄漏(github)

……

为什么要刻意强调这一点?

因为 github 支持强大的搜索语法,可以很方便地搜索到一些常规搜索引擎无法搜索到的内容,如搜索内部项目、密码、密钥等。

你可以通过 github 来查找代码安全问题,如输入规则:extension:php mysql_query $_GET,可以搜索到大量包含 mysql_query $_GET 的请求,可以有针对性地进行代码审计。

当你把自己的项目代码上传到 github 时,看看配置文件里是不是有不能说的秘密,思量一下后果。

 

这不,一位德勤员工据信在2016年Q4或更早将公司代理登录凭证上传至他的 Google+ 上,从而引发了2016年年底到2017年年初的德勤全球电子邮件服务器及其他内部系统被入侵。

有时候你很难理解人们的想法。

在中国,有位官员甚至把微博当成是私密日记本,发布了不少他的私下里的勾当,还配了图……

这位德勤员工可能也以为别人看不到他的 Google+ 信息吧。有图为证:

以及

Google+ 页面上的信息是 public 的,所以有心人已经收集到了德勤内部遍及全球的大量服务器信息,这些信息足以让有心人对德勤发起一次攻击。

这也就是为什么新员工报到之后,我先做一次安全基础教育培训的缘故。

 

0x03 麻省理工的500英里邮件

这个故事不知道发生于何年何月,发帖人是一位拥有丰富 Unix/Linux/Perl 经验的系统工程师 Trey Harris,据信是上世纪90年代的事情了。

麻省理工的一位统计系主任打电话给 Trey:“我们的邮件系统存在一个问题,我相信我们不能发送超过500英里距离的邮件。”

 

WTF?!

Email?不能超过500英里?!

 

“真的,哪怕再远一点点,只能到520英里了,不能再远了。”

Trey 几乎不敢相信自己的耳朵。

这是麻省理工的系主任该说的话吗?

“是什么让你这么认为?”

“实际上已经好几天了。你看,直到刚才,我们才收集到足够多的证据。我让一名地理统计人员去调查了这件事情。”

这回听上去像是一名统计系系主任该说的话了。

“还有。她制作了一张地图,地图上显示我们能发送邮件的区域半径比500英里多那么一点点。即便如此,这个区域内,有些地方也不能发送,或者偶发性地能发送,但是在区域之外从来没有发送成功过。”

是的,作为一名丰富经验的系统工程师,Trey 不假思索地问:“这段时间内系统发生了什么改变吗?”(因为下一句话就一定是请你重启系统吧,XD)

“没错,一位技术支持来过,给系统打过补丁并且重启,之后就发生了这一切。”

Trey 决定自己试一试,今天并不是愚人节。

千真万确,纽约(420英里)就可以发送,但是普罗维登斯(580英里)就失败了。

Trey 证实了这个问题现象跟收件人的位置有关系,与收件人的 ISP 关系不大。

Trey 看了一下 sendmail 的配置文件,毫无意外地,它们正常得不能再正常了。

见鬼了。

于是 Trey 远程登录到 SMTP 端口,握了握手。

对端用一个 SunOS sendmail 标识愉快地做出了响应。

SunOS sendmail 标识?!

突然之间,水落石出。

这个水落石出有点出人意料,下面这段话估计只有系统工程师才能理解:

技术支持工程师打补丁的时候,还连带升级了 SunOS 的版本。

因为在那个年代,Sun 仍然随同操作系统捆绑发布 Sendmail 5 版本,尽管 Sendmail 8 已经相当成熟了。

这样一来,他等于把原来的 sendmail 8 “降级”为 sendmail 5 了。

但升级程序将 sendmail.cf 配置文件单独保留了下来。

注意这可是 sendmail 8 的配置文件喔。

一般来说,较低版本的程序看到不认识的配置项,通常都会选择忽略。

而 sendmail 的二进制安装包对大多数选项没有提供默认值,因此,如果在 sendmail.cf 中找不到相应的设置,它们就会被默认设置为0!

就这样,有那么一个重要的参数:连接远程 SMTP 服务器的超时时间,也被默认设置为零

经过实验证明,在一个具有典型负载的特定机器上,零超时意味着如果连接时间稍微超过3毫秒,服务器就会终止 socket 连接。

在当年,麻省理工的校园网络它是百分之百交换型网络(it was 100%

switched)。

这意味着,它没有那么多的 router,也就没那么多网络延迟。

发送出去的数据包,在遇到 POP 服务器和远端路由器之前,就不会出现路由器延迟。

所以连接一个远端主机的时间,很大程度上就是光所需的时间。

那么,3毫秒,光能跑多远呢

=299792458米/秒×0.003秒×0.001×0.6213712(注:公里折合英里)

=558英里。

 

XDD……

 

-EOF-附赠福利:5年前的今天,一个小小的部署错误,让美股最大交易商坠入深渊-

赠图两枚:

 

语录若干:

互联网公司以后还是别随随便便高调宣布几千万与网红、奇女子、奇男子签约了,前有某酱,今有某闯。也许是有些flag,平凡人消受不起。也许是怀璧其罪吧。

 

为什么搞力学的擅长经络和针灸呢?我猜想是因为有一个方向叫“生物力学”吧?生物力学是采用力学理论来研究生物体内物质运动的学科,人体力学是其中的一个分支。

 

“团购”->“共享”->“无人”,人越来越少,人越来越贵,下一步只能是“AI”了………… 

-END-

 

欢迎订阅我的微信订阅号『老兵笔记』

 

 

文章评论

程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
那些争议最大的编程观点
那些争议最大的编程观点
漫画:程序员的工作
漫画:程序员的工作
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
如何成为一名黑客
如何成为一名黑客
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
老程序员的下场
老程序员的下场
为什么程序员都是夜猫子
为什么程序员都是夜猫子
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
每天工作4小时的程序员
每天工作4小时的程序员
总结2014中国互联网十大段子
总结2014中国互联网十大段子
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
编程语言是女人
编程语言是女人
程序员都该阅读的书
程序员都该阅读的书
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
10个调试和排错的小建议
10个调试和排错的小建议
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
一个程序员的时间管理
一个程序员的时间管理
旅行,写作,编程
旅行,写作,编程
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
我的丈夫是个程序员
我的丈夫是个程序员
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
Java程序员必看电影
Java程序员必看电影
程序员和编码员之间的区别
程序员和编码员之间的区别
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
 程序员的样子
程序员的样子
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
代码女神横空出世
代码女神横空出世
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有