加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 安全 > 正文

深度 | 无法找到“黑点”的代码,连顶级黑客也束手无策

发布时间:2016-10-16 17:18:13 所属栏目:安全 来源:雷锋网
导读:副标题#e# 编者按:一直以来,我们都理所当然地认为程序就像高墙,无法不透风,自然也无法躲过黑客无孔不入的攻击。而这篇首发于quantamagazine 的文章却要颠覆我们的认知了:采用形式验证(formal verification)编写的软件,代码就像“数学证明一样可靠”。

换言之,要把你想要让程序做的事,用排除了所有可能不正确解释的形式规范表示出来很难。上面的例子还只是一个简单的排序程序,想象一个更抽象的例子,比如保护密码。Bryan Parno 说道:“这在数学上是什么意思?定义它也许要写出保护密码的数学描述。安全的加密算法又是什么意思呢?这也是我们一直在研究中一直在思考并取得进展的问题,但要正确应用必须非常小心。”

基于代码块的安全

编写这种程序需要同时编写形式规范以及帮助编程软件推导代码所必须的额外注释, 因此其长度达到了传统程序的五倍。

用合适的工具可以在一定程度上减轻这一负担,比如专门的编程语言和辅助证明程序。但这些东西在上世纪 70 年代时还不存在。同时担任形式验证计算机系统开发团体 DeepSpec 首席研究员的 Andrew Appel 表示:“当时的很多技术都不成熟,因此到 80 年代,很多人就对它失去了兴趣。”

即便工具得到了改进,形式验证计算机程序还有另一个问题要解决:没人确定是否有必要用它。虽然形式方法爱好者们总是在说小的程序错误最后会变成灾难性漏洞,但大家看到的却是计算机程序工作得相当好。

的确,这些计算机程序有时候会崩溃,但和巨细无遗地一条条用形式逻辑系统的语言来编写程序相比,丢失未保存的数据或时不时重启机器貌似也可以接受。有时候,连形式规范最早期的领导者也会怀疑其是否有用。在上世纪 90 年代,霍尔逻辑(Hoare logic,首批推导计算机程序正确性的形式系统之一)的发明者 Hoare 就承认,也许形式规范是一个不存在的问题的劳动密集性解决方案。他在 1995 年写道:

十年前,形式方法的研究者们(我是其中错得最厉害的一个)预测,计算机世界会拥抱并感激形式化带来的每一点协助……结果是,全世界并没有碰到我们一开始打算解决的那种问题。

后来出现了互联网。互联网之于编程错误就像是飞机之于传染病:当所有电脑都连接在一起时,不方便但可以忍受的软件漏洞会导致一系列安全问题。

Andrew Appel 说道:“有一点我们当时没有特别明白,那就是互联网上有一些软件面向所有黑客开放,如果这种软件里有一个漏洞,它就会成为安全威胁。”

深度 | 无法找到“黑点”的代码,连顶级黑客也束手无策

在微软研究院开发形式验证版 HTTPS 协议的计算机科学家 Jeannette Wing

在研究人员们开始明白互联网给计算机安全带来的致命威胁后,程序验证就开始焕发第二春了。研究人员们这一次在加强形式方法的技术上取得了很大进展:改进了支持形式方法的辅助证明程序 Coq 和 Isabelle;开发了新的逻辑系统,为计算机提供推导代码的框架;发展改进了运算语义学(operational semantics),即可以用正确的词语来表达程序应该做什么事了。

微软研究院企业副总裁 Jeannette Wing 表示道:“所有自然语言都具有歧义性。而在形式规范中,你会写出基于数学的精确规范,以解释你想要程序做什么。”

另外,形式方法的研究人员们也修改了自己的目标。在上世纪七、八十年代,他们想要打造完整的经过形式验证的计算机系统,从芯片到计算机程序。现在,大多数形式方法研究人员都专注于验证更小但更脆弱或系统关键的组成部分,比如操作系统或加密协议。

Jeannette Wing 说道:“我们不再宣称要证明整个系统都正确,每一个比特都百分百可靠,连芯片层面也如此。做出这样的宣言很可笑。对于我们能以及不能做什么,我们现在有了更清楚的认识。”

高可靠性军事网络系统项目证明,通过明确定义计算机系统中的一小部分,就能极大地提高安全性。这个项目的最初目标是打造一架无法被黑的娱乐四旋翼无人机。但无人机运行的软件非常庞大,黑客攻破一部分,就能获得整个系统的控制权。于是在接下来的两年里,高可靠性军事网络系统团队将无人机的任务控制计算机程序代码分成了很多块。

他们还用“高可靠性构建模块”重写了软件架构,这些模块可以让程序员们证明自己代码的可靠性。其中一个经过了形式验证的模块可以确保,即便用户取得了一个代码块的控制权,他也不能提升自己的权限来进入其他代码块。

随后,高可靠性军事网络系统团队将这一区块化的软件安装到了“小鸟”无人军事直升机上。在和红方黑客团队的较量中,他们先让黑客们可以访问某一次要功能如摄像头的代码,但黑客们肯定会被困住,因为这经过了数学证明。Kathleen Fisher 说道:“我们用机器从数学上证明了红方肯定无法突破这一代码块,因此他们无法突破也就很顺理成章了。结果与定理一致,也很好确认。”

在“小鸟”无人军事直升机上测试后,美国国防部高级研究计划局就开始将这些工具和技术应用到其他军事技术上,比如卫星和无人驾驶载重卡车。新的项目和过去十年中形式验证传播的方式保持一致:每一个成功的项目都能加强下一个项目。Kathleen Fisher 表示道:“人们再也没有借口说这么做太难了。”

验证互联网

安全和可靠性是驱动形式方法的两大目标。每过一天,提高这两大目标的需要就会变得越发明显。在 2014 年,一个本可以被形式规范捕捉到的小编程错误导致了“心脏失血”漏洞,甚至可能让互联网瘫痪。一年以后,两个白帽子黑客证明了我们对联网汽车的最大恐惧:他们成功地控制了别人的大切诺基。

随着安全风险的日益增加,形式方法研究人员们正推动更具野心的计划。Andrew Appel 领导的 DeepSpec 正试图建立一个经过完全验证的端到端系统(就像网络服务器一样)。如果这一计划成功,就能将过去十年中许多更小规模的验证成果组合到一起,比如经过完全验证的操作系统内核。Andrew Appel 说道:“DeepSpec 现在专注在做但还没有做到的事情是,如何将这些组件用规范接口连接起来。”

在微软研究院中,软件工程师们已经在进行两个雄心勃勃的形式验证项目。第一个项目名为 Everest,旨在打造经过形式验证的 HTTPS 协议。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读