acm-header
登录

ACM通信

的观点

托尼的法律


蚂蚁和蜂蜜罐

图片来源:Andrij Borys Associates / Shutterstock

有人没有拧紧盖子,蚂蚁又钻到蜂蜜里去了。这可以通过把蜂蜜罐放在一碟水里来防止,但这是一个麻烦,占用更多的柜台空间,而且必须记得补充水。所以我们至少要记得拧紧盖子。

在安全的背景下,软件行业并不总是关闭盖子。在某些情况下,它根本没有盖上盖子,让蜂蜜暴露在外,诱人。也许近年来最臭名昭著的例子是WINvote投票机,它被称为美国最糟糕的投票机。弗吉尼亚信息技术署2015年的一项安全分析发现,除了其他问题外,这些机器使用了废弃的WEP加密协议,WEP密码被硬连接到“abcde”,基础的Windows XP(自2004年以来就没有打过补丁)管理员密码被设置为“admin”,没有可以替换它的界面,投票数据库不安全,可以修改。7这些机器已经在实际选举中使用了10多年。

这种情况构成渎职行为,需要加以规范。监管是必要的,因为并非所有事情都可以相信市场力量。在不同的行业中有很多这样的例子。禁止向未成年人出售酒精饮料。出于公共健康考虑,建筑和住房不能使用石棉和含铅涂料。汽车行业被要求安装安全带并报告污染水平。航空业受到严格监管,包括空域利用率(飞机之间的距离)、机组人员工作安排、飞机噪音水平等。广告主被要求在香烟和其他烟草制品的广告中添加警告标签。

计算机是根据电学特性进行管理的,例如FCC对辐射和通信的规定。但在电脑上运行的软件不受监管。大约40年前,在他的ACM在图灵奖获奖感言中,Tony Hoare谈到了指导Algol 60子集实现的原则:2“首要原则是安全。[…此原则的结果是,每个下标变量的每个下标的每次出现都在运行时根据数组声明的上界和下界进行检查。许多年后,我们询问客户,他们是否希望我们提供一个选项,关闭这些检查,以提高生产运行的效率。他们一致敦促我们不要这样做。他们已经知道下标错误在生产运行中发生的频率有多高,如果检测不到,后果可能是灾难性的。我惊恐地注意到,即使在1980年,语言设计者和使用者还没有学到这一课。在任何有名望的工程学科中,不遵守这种基本的预防措施早就是违法的。”重点补充道。

Hoare说这句话的时候,个人电脑和互联网还处于初级阶段,远早于Web、DDoS攻击和数据泄露。的确,这段时间发生了很多变化表1).但有一件事没有改变,那就是对软件行业缺乏任何有意义的监管。

t1.jpg
表1。过去30年软件和计算机的变化。

回想起来,霍尔的声明显示出了极大的远见。时至今日,缓冲区错误代表着最常见的单一漏洞,一个在高严重程度的漏洞中更是如此图1而且图2).想象一下,如果要求边界检查的法律在40多年前就颁布了,那么今天就不会出现缓冲区溢出的情况。就目前情况而言,微软在2004年将其安全开发生命周期作为一项强制性政策。这包括许多其他特性——要求使用插入边界检查的标志进行编译的选项,以及禁止不安全的库函数的选项。一方面,这表明这些实践只是决定使用它们的问题。另一方面,它们仍然不是普遍需要的,甚至微软的产品偶尔也会遇到缓冲区问题。b

f1.jpg
图1。2017年,NIST国家漏洞数据库编录的软件漏洞数量激增,涉及缓冲区(被归类为“缓冲区错误”或包含关键字“缓冲区”)的漏洞比例保持不变。

f2.jpg
图2。根据国家漏洞数据库,自本世纪初以来,大约15%的漏洞与缓冲区错误有关,如果只考虑那些严重性得分高的漏洞,这一比例将上升到四分之一到三分之一之间。

自从霍尔发表演讲以来,类似的观点已经重复了好几次。12年前,ACM主席大卫·帕特森提出了“SPUR宣言”,3.建议21的发展世纪计算机(软件)系统应该关注安全性、隐私性、可用性和可靠性。目标应该是安全到20岁th20世纪的银行业务,维护成本低至20年th和20世纪一样可靠th世纪电话。但十多年过去了,对低成本、多功能以及最重要的上市时间的关注似乎依然强大。家用电器制造商的竞争方式之一,是为其产品提供优质的保修期。相比之下,软件行业一直在利用“没有任何形式的明示或暗示的保证,包括但不限于对适销性和适合特定用途的隐含保证”的软件来逃避责任。

事实上,像帕特森这样的讲座通常要么被忽视,要么激起了一群唱反调的人。典型的理由是,预期的资金成本、实施的困难甚至不可能,以及对创新和技术进步减少的担忧。施耐德,在最近通信该观点还指出,需要进行详细的成本/效益分析,以确定社会愿意为改进的安全支付多少费用,其中成本还包括便利性(由于需要身份验证)和功能性(由于隔离)的降低。4事实上,从定义上看,所有的监管都是限制性的。但我们真的需要等到大规模的安全灾难——可能包括大量生命的损失——才采取行动吗?正如微软的例子所显示的,大量的技术解决方案和最佳实践实际上已经存在。这只是一个让它们的使用普及的问题。

那么,为什么可以容忍软件安全故障呢?一个可能的解释是,到目前为止,软件的缺陷比传统行业的缺陷更不明显。许多人在门上安装了多个锁,还会考虑用枪指着入侵者,但却没有采取足够的安全措施来保护家里的电脑不受黑客攻击。身份盗窃造成的问题更常见,但与皮卡燃气罐爆炸等更戏剧化的问题相比,也更官僚、更无聊、更不直观。

但最重要的是,似乎在激励行业采取必要行动方面存在市场失灵。16买家不会为他们无法衡量的价值(安全)支付溢价,这在很多情况下不会直接影响到他们个人。经济学家建议的衡量保护价值的方法没有帮助,因为安全灾难的成本取决于任何人的想象。这阻碍了为软件生产商提供保险的行业的出现,正如安德森和摩尔所写的,“如果这是法律,微软不太可能买到保险。”1在实践中,在披露一个漏洞后,股票价值的减少不到1%。5大规模袭击造成经济损失甚至人命损失的抽象危险不足以改变这一点。

与此同时,我们被越来越多的数据泄露和黑客渗透各种系统的报告所淹没表2最近的突出例子)。其中一些事件表明,在全球范围内,包括医院、发电厂、自来水厂、交通系统甚至核设施在内的大量实体民用基础设施正处于危险之中。至少在某些情况下,根本原因是软件没有采取适当的预防措施。

t2.jpg
表2。2007年至2017年发生的重大安全事件。

现代卡上的软件系统,更不用说客机或喷气式战斗机了,其范围和复杂性都可与传统软件业生产的任何操作系统或数据库相媲美。事实上,现在每个行业都是软件行业。每个行业的产品都因为软件缺陷而容易受到攻击。在这种情况下,所需的软件管理包括:

  • 透明度:调查和报告所有利用的义务,包括其技术细节。
  • 禁止危险的做法,例如不使用类型安全的语言和适当的加密。
  • 让公司为其不安全的做法负责。

这些要求需要法律法规的支持,因为市场力量迫使行业不要在安全方面投入太多。市场促进了竞相降价;除了在小众应用程序之外,谁能更快、更便宜地进入市场,谁就会赢,而谁因为在安全性方面的过度投资而拖拖不决,谁就会输。监管是创造公平竞争环境的唯一途径,它迫使每个人投资于他们知道需要、但认为在竞争不需要时他们无法承担的领域。

当然,实施这些想法并就需要解决的无数细节达成一致并不容易。谁来决定什么是“危险的做法”?我们如何处理已安装的系统和遗留代码?谁负责执行合规?此外,目前还不清楚如何在政治层面实现这一点。此外,没有一个国家对所有软件生产具有管辖权。因此,需要一个认证系统,以使软件开发人员能够识别可靠的软件,并在选择使用其他软件时进行尽职调查。

已经存在的国际框架表明这些问题是可以解决的。欧盟《通用数据保护条例》(GDPR)就是一个令人鼓舞的例子,该条例涉及个人有权控制个人信息的收集和处理方式。另一个例子是《信息技术安全评估共同标准》,这是一个国际框架,用于相互承认安全的信息技术产品。但这只涵盖了对安全的高层次需求,而不是对低级技术细节的监管。汽车工业软件可靠性协会(MISRA)在一定程度上填补了这一空白,该协会为汽车工业定义了一套建议的安全编码实践。然而,这些并不是任何正式法规所要求的。


监管有利于软件产业的长期繁荣。


关于该做什么以及我们愿意为什么买单的冗长讨论只会适得其反。这样的事情是无法提前计划的。相反,我们应该从构建软件的迭代方法中学习:尝试确定那些承诺以最低成本获得最高回报的规则,努力实施它们,从过程和结果中学习,然后重复。

监管不仅符合整个社会的利益,也符合软件产业的长期繁荣的利益。有诚信的软件供应商应该停止抵制监管,而是努力推进监管。所获得的经验对于讨论和制定进一步的法规将是极其重要的,无论是在先发制人的方式下,还是在安全灾难发生后的最坏情况下。

回到顶部

参考文献

1.安德森,R.和摩尔,T.信息安全的经济学。科学314, 5799(2006年10月26日),610613;https://bit.ly/2GctSYd

2.Hoare, C.A.R.皇帝的旧衣服。Commun。ACM 24, 2(1981年2月),7583;DOI: 10.1145/358549.358561。

3.帕特森,D.A. 20th21世纪大战公元前20世纪:SPUR宣言。Commun。ACM 48, 3(2005年3月),1516;DOI: 10.1145/1047671.1047688。

4.施耐德,F.B.政策干预促进网络安全的障碍。Commun。ACM 61, 3(2018年3月),3638;DOI: 10.1145 / 3180493。

5.软件脆弱性公告对公司股价影响的实证分析。IEEE反式。Softw。Eng。33, 8(2007年8月),544557;DOI: 10.1109 / TSE.2007.70712。

6.网络不安全与网络自由主义。Commun。ACM 60, 5(2017年5月),DOI: 10.1145/3073731。

7.弗吉尼亚州信息技术局。选举部门WINvote投票设备的安全性评估。(2015年4月14日);https://bit.ly/2EgvBct

回到顶部

作者

Dror g . Feitelsonfeit@cs.huji.ac.il)是以色列耶路撒冷希伯来大学Rachel and Selim Benin计算机科学与工程学院的计算机科学Berthold Badler教授。

回到顶部

脚注

a. NIST国家漏洞数据库使用《常见弱点枚举》中列出的近1000种类型中的124种对漏洞进行分类。20151017年缓冲区错误CWE-119占每年漏洞总数的15.2% ~ 18.4%。其次是信息泄露/披露CWE-200(9.3%10.9%),权限、特权和访问控制CWE-264(8.2%10.0%),跨站点脚本CWE-79(7.3%11.2%)。

b.一个例子:Microsoft Office Equation Editor堆栈缓冲区溢出;看到https://bit.ly/2zTngss


版权归作者所有。
向所有者/作者请求(重新)发布权限

数字图书馆是由计算机协会出版的。版权所有©2019 ACM, Inc.


评论


劳伦斯·布鲁

虽然作者确实阐述了我们所面临的许多问题,但我发现,我不同意监管作为解决方案,也不同意多次推广的认证“解决方案”。

这是为什么。
监管和认证都是依赖于某个人(好吧,一大群一致同意的人)拥有正确的知识和权威来强迫正确的行为。确实有一些人声称他们拥有这方面的知识。我的观察是,他们做了,也没有做。某些规定性的做法可能适合于一个环境,而对另一些环境则完全相反。我们都见过市政法令横行的可怕结果,因为地方管理机构没有能力制定它们,我们也见过相反的例子(都太少了)。我们不能合理地期望政府监管机构更频繁地做出正确判断。

不相信我吗?把规定看作是需求。我们所有编写软件的人都知道(或者应该),如果我们想把一个需求看作是有意义的,我们应该能够测试它。然而,提取满意的条件,有意义地陈述,以便解决一组测试,通常是开发工作的最大部分。这是在与那些商业利益是获得可靠的软件,产生已知和理想的输出的人打交道的时候。一些为政府工作的监管机构对此没有兴趣,他们可能非常乐意关闭整个公司——这不是他的生计。

但是,假设他的勤奋和诚信,甚至他的能力,他和他的同事将在什么时候以及如何检查软件的主体?我们要仅仅检查那些严重的失败吗?也许我们坚持要有通过测试的记录?什么才是真正有效的?我们不要忘记,正如作者所说,“现在每个行业都是软件行业。”这意味着软件开发的范围是无法测量的。哪个监管机构会有这么大的知识范围?

但是,谁最有可能了解代码体及其漏洞是什么?那就是开发它的人,和它亲密接触的人。我报告说,在许多公司在各种Unix风格上编写c++超过20年之后,我发现最好的防御是那些真正关心他们所生产的工作的人。是的,技术教育是必不可少的。一个良好的测试环境是非常重要的。但是,您需要的是那些会寻找并找到一种方法来确定他们得到了正确的代码的人,无论方法是什么。这是比认证或监管更好的解决方案。它还有一个额外的优点:它今天就可以实现。


显示1评论

Baidu
map