5年前的今天,一个小小的部署错误,让美股最大交易商坠入深渊

郑昀(订阅号:老兵笔记) 创建于2017/7/29 最后更新于2017/7/31

提纲:

  1. 骑士资本集团的大麻烦

  2. 毁于冲马桶设计的潜艇

  3. 域名轻易被劫持

  4. 不可能被攻破的金库被盗

 

0x01 骑士资本集团的大麻烦

5年前的今天,因为一个小小的部署错误,

仅仅 45 分钟,

一家美国股市最大的交易商、纽交所以及纳斯达克的大庄家变得一钱不值。

 

2012年的时候,骑士资本是美国股票市场最大的经纪商,分别占有纽交所和纳斯达克 17% 的市场份额。

骑士资本的电子贸易部门管理的平均日交易量超过 33 亿股,交易额高达 210 亿美元。

截止到 2012 年 7 月 31 日,骑士资本拥有高达 3 亿 6500 万美元的现金及现金等价物。

 

在8月1日之前,骑士资本按照纽交所的项目计划,更新了算法程序 SMARS,它从交易平台接收大订单,然后根据买家或卖家的股票交易数量把大订单拆分成合适的小订单。

这次更新去掉了一些过时的代码,如 Power Peg,它已经 8 年没有用过了。

okay, take easy, 大公司里经常存在远古时代的代码,十年以上的代码仍抱残守缺继续运转,很正常。淘宝在长期使用 java 构建 web 项目后,也得出一个相同的结论:积重难返。

不用担心,测试完全通过,虽然更新后的代码改变了以前用来激活 Power Peg 功能的标识符,但代码非常可靠。

 

7月27日到7月31日,骑士资本把 SMARS 软件手动部署到公司为数不多的服务器上。

一共才 8 台。

不幸的是,漏了一台服务器。

因为没有其他技术人员对部署过程做复查,所以没有人发觉第 8 台服务器上的 Power Peg 代码并没有被移除。

灾难正在一分一秒地迫近。

 

2012年8月1日早上9点30分开盘后,很多交易员感觉到异乎寻常的事情发生了,某些个股涌现出大量不符合常理的订单,而且没有停止的迹象。

苍天啊,这个系统竟然没有断开的开关。

于是乎,在 45 分钟之内,骑士资本执行了超过日均交易额 50% 的订单,导致部分股票市值上升超过 10%,带来的连锁反应是其他股票价格暴跌。

由于没办法断开系统,也没有相关情况的预案说明,魂飞魄散的开发者只能在每分钟交易 800 万股的生产环境里调试。

因为没有能在线上发现问题,所以回滚了代码。

情况反而恶化了。

原本只是第 8 台上的 Power Seg 在疯狂地工作。

现在另外 7 台服务器上的 Power Seg 也加入了进来。

最后,骑士资本的技术人员终于想办法终止了交易系统,然而已经过去了 45 分钟。

 

灾难现场,狼藉一片。

 

在这 45 分钟里,

对于内行人来说,骑士资本建立了 80 支个股 35 亿美元的净多头仓位和 74 支个股 31 亿 5000 万美元的净空头仓位。

对外行人来说,骑士资本在 45 分钟内亏损了 4 亿 6000 万美元,而上文提到,骑士资本仅有 3亿6500万美元的资产,这意味着骑士资本破产了。

 

RCA类型:部署问题。

经验教训:

是人都会犯错。如果你常年靠手动发布,出错是大概率事件,灾难随时会到来。

部署应该是自动化且可重复的,这个过程应该尽量排除人为因素的干扰。

假如骑士资本采用的是自动部署系统——配置、部署和测试完全自动化,这场悲剧可能就不会发生了。

当然这是老生常谈了。

陈皓在《从Gitlab误删除数据库想到的》中说道:

一个公司的运维能力的强弱和你上线上环境敲命令是有关的,你越是喜欢上线敲命令,你的运维能力就越弱,越是通过自动化来处理问题,你的运维能力就越强。

这也就是我们常年致力于全流程自动化的原因,dont make me think!

这么思考问题的原因也很简单,我们笃信工程师文化,靠技术而不是管理解决问题。

 

(注:doug seven在2014年描述过这个悲伤的故事:https://dougseven.com/2014/04/17/knightmare-a-devops-cautionary-tale/)

 

 

0x02 毁于冲马桶设计的潜艇

二战期间,德国潜艇一度设计为将厕所的排泄物直接冲入大海,但这种设计的代价是只有在潜艇位于海面或海面附近的时候,才可以供人使用。随着潜艇下潜,潜艇外部的压力越来越大,就没办法冲厕所了。

随着战事的演进,美英发展出了能有效克制德国远洋潜艇的雷达、反潜机和护航战术。

因此,为了能让德国潜艇在水下潜行得更久,U-1206潜艇配备了新式的“深海高压厕所”,这种先进的清洁技术能够在深海高水压环境下直接将粪便排出潜艇。

 

这是一套相当复杂的程序,潜艇中的粪便被通过一系列管道运输至一个高压舱,然后被高压空气顶入海水。由于这套程序非常繁琐,以至于潜艇上必须有一名艇员接受专门培训,学习如何以正确的顺序控制阀门的开启和关闭。

 

1944年4月2日,施利特艇长率领 U-1206 潜艇首次执行战斗任务。

4月14日,施利特舰长去上厕所,他认为他会操纵这套程序,然而事情好像不太妙。

于是他寻求了厕所专家的帮助,错误并没有能被挽救。

事后看来,冲水程序反了,本来粪便要先送入高压舱,然后关闭厕所输送管道,再打开高压舱进行排便,没想到舰长操作成了先打开高压舱,粪便输送管道也没有关,于是海水直接从高压舱通过排便管道涌入潜艇,在巨大的水底高压下,这个管道也关不住了。

在水的重压下,潜艇像块石头一样迅速下沉。

 

更不幸的是,潜艇下潜时依赖于一组电池供电的电马达,这组电池组正好位于出故障的厕所下方。

海水与电池酸结合,产生了大量的氯气。

 

施利特艇长别无选择,只好命令潜艇抛掉所有鱼雷和配重水箱,迅速上浮。

上浮的位置正好位于苏格兰海岸线的视野范围内,所以艇长意识到这艘没有自卫能力、无处可逃的潜艇被击沉只是时间问题,于是炸沉了潜艇。

 

RCA类型:设计问题。

经验教训

dont make me think!

 

 

0x03 域名轻易被劫持

2013年5月11日,一个叫 mibboy 的人找到了域名服务商新网互联的一个漏洞,他在乌云网上提交了这个漏洞。

时间滴答滴答。

厂商没有第一时间回应。

5月12日晚间,mibboy 等不及厂商的确认了,可能混杂着青春、梦想、荣耀的情绪,他打算改一下土豆网的域名指向。

 

mibboy 在以前入侵过的一台韩国服务器上上传了 html 文件,总共花了两个小时,把 www.tudou.com 的 A 记录改为 116.126.142.182(韩国IP),可能还把负责解析土豆网域名的土豆网自建 DNS 改为由新网互联 DNS 解析。

 

劫持一个多小时后,mibboy 主动恢复了域名指向,并发邮件向土豆网运维部门致歉。

在这段时间内,国内网友甚至以为是韩国黑客联盟向中国互联网宣战……

5月13日,mibboy 的乌云网帐号被封。

 

仅仅一个月后,空袭警报再度来袭。

2013年6月12日17点,Finger 在乌云网上提交了域名服务商新网的漏洞。注意,新网互联是从新网分离出去的一家公司。

新网在5月12日兄弟公司新网互联爆出那么大漏洞、土豆网域名被劫持之后,仍忽略乌云网上自己的漏洞,确实难辞其咎,有洞不补大洞受苦。

Finger 本来想以新浪网的域名做示范,但发现新浪网域名有保护措施,所以选择了大众点评网。

 

由于新网未受理此漏洞,所以6月17日17点,该漏洞向公众公开。

6月17日22点,大众点评网的 Name Server 记录被改,而且大众点评网在新网的帐号密码被改。

22点24分,大众点评网运维工程师发现问题后,由于无法登陆新网的后台系统,联系新网客服又未果……

无奈之下,利用乌云网上公布的漏洞细节,采用同样的方法 hack 入新网后台,恢复了自家的 NS 记录。

但攻击者仍可以随时改回来。

大众点评网通过关系当晚找到新网高层,将域名设置为禁止更新,即与新浪网一样有了保护措施。

6月18日早上,新网修复漏洞,中午上线。

由于全国各地 DNS 更新较慢且不受控制,所以悲观估计,直至6月18日中午,大众点评网仍有部分服务受到此事件影响,如点评开放平台。

 

RCA类型:代码问题。

经验教训

有洞不补大洞受苦。

(注:以上案件详情可查看我的文章《5·12和6·17两知名网站域名被劫持事件实施过程回放》。)

 

 

0x04 不可能被攻破的金库被盗

比利时的安特卫普是世界上最大的钻石交易中心,平均每年都有价值超过百亿美元的钻石在这里被加工和出售。

2003年2月17日大清早,位于 Diamond Center 地下二层的金库报警,金库的保险柜被暴力破拆,大量钻石珠宝丢弃在地上,显然盗贼们无法带走所有的珠宝,经过测算,被盗的珠宝价值约一亿美金。

这个金库可不是一般的金库,它被丧心病狂地设计了十道安全措施:

1)一扇一英尺厚、三吨重的铁门。铁门上的转盘刻着0到99共100个数字,转盘被先后四次转动到正确的数字才能打开铁门。转盘上的数字只有转动轮盘的人通过一个小窗口看到,避免密码被偷窥。

2)输入数字的同时,还需要插入一把特制的钥匙。这把钥匙平时被分为钥匙头和钥匙身两部分,由不同安保人员分别保管。

3)铁门中有震动感应报警。

4)铁门上有磁场报警,夜晚时打开。

5)大门后还有一道铁栅栏,它由地面层警卫室的一个按钮远程控制。

6)金库内部有光感应器,

7)动作感应器,

8)红外线感应器,晚上七点之后,这三组感应器就会打开。

9)金库内外都有摄像头,地面层警卫室可以看到监控。

10)金库内的每一个保险箱都要同时输入密码和插入钥匙才能打开。锁住保险箱的铜质插销有半英尺粗,想把它切断或撬弯是很困难的。

 

如此安全的金库,在被盗贼横扫的时候,居然所有系统一切正常,没有任何报警!

电影剧本都不敢这么写。

盗贼们是怎么做到的?

涉及版权,此处不再张贴,请搜索关键词:

十一点半+安特卫普钻石中心。

 

主犯是一个意大利人,名叫 Leonardo Notarbartolo,他为此花了两年零三个月时间思考和反复做试验,最终得手。

到这里,你相信这几乎是完美犯罪。

然而,案发后的第五天,他就被捕了。

并不是警察们技高一筹,而是他和一位猪队友在逃离过程中犯了一个小小的错误。

 

RCA类型:设计问题。

经验教训

我在《安全基础教育第二季第1集:屡战屡败的找回密码》中讲到:

一,白帽子或黑客都很有耐心,他手里可能捏着你多个漏洞,他一直在等机会,他也有很多工具在扫在寻找机会。

二,一次成功的入侵渗透,并不需要是多么高危的漏洞,几个普普通通的中等漏洞,加上一次社会工程学行动,就可以杀进来。

 

故事就到这里。

灾难可能盘旋在你的头顶,你还懵懂未知。

哈哈。

 

-EOF-

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

posted @ 2017-08-01 12:37 旁观者 阅读(...) 评论(...) 编辑 收藏