当前位置:首页 > 新闻中心 > 网络安全资讯 感谢一直陪伴的你们!

为何安全问题永远存在

作者:lslx      时间:2021-06-28 16:41:01

程序行为包括预期的正常行为,和非预期行为,非预期行为中包含了漏洞。

在一个系统设计时,几乎必然是开放的系统,也就是与外界有交互。系统包含了它的状态,以及它的交互,其状态随着交互而改变。

于是可以把系统看做是有限状态机。但实际上又不可能是严格的有限状态机。因为系统的存在是因需求而存在的,人不能预测未来的需求,也不能精准和正确的,实现现有需求。所以系统的升级和维护需求存在。升级和维护意味着改变系统。升级和维护的内在机制,使得系统的行为具有不确定性。这个内在机制会改变程序自身,使得自身扩展为图灵机,图灵机可以模拟任意系统,也就是与任意机器等价,而任意机器的行为显然包括你设计系统时的预期的行为,也当然会包括不希望发生的坏的行为,认证和签名的机制会被非预期行为颠覆。人必然是系统的一部分,谁有权执行输入,本身就是安全的核心,秘钥和令牌,可能被社工方式盗取。

如果希望最大程度的限制系统,希望它只有预期的状态和行为,那么这要求去除升级维护性,同时去除权限限制。这就使得系统成为严格的有限状态机。系统状态是由系统的程序逻辑和输入共同决定的。程序接受的输入只影响状态,而不影响程序自身。作为物理的系统,是受物理影响的,有潜在的电磁输入,这种输入同时影响状态和程序,形成拒绝服务攻击。

升级和维护的内在机制,本质上是程序加载数据然后执行,是数据变成了程序。那么为什么不可执行栈,这种机制为何不能阻止ROP链的攻击呢,因为栈作为数据并不执行,但它能影响程序的执行。更抽象的框架下,数据对程序的影响是什么呢,分三个层次:

  1. 数据作为程序的输入,改变数据,更一般的说是影响,甚至间接影响。
  2. 受改变的数据,改变程序行为,更一般的说是影响程序,甚至间接影响。
  3. 受改变程序的行为,替换程序,更一般的说是影响程序,甚至间接影响。

经常的,数据作为某种输入,在递归,迭代的从微弱的影响累计成巨大影响,从先影响数据,到替换数据,再影响程序,到最终替换程序。这就最终完成了从数据到程序的转变,这种模式就是漏洞利用。数据和程序是一个事物的不同形态。就如同圆周率可以表达为一个无限的序列,也可以表达为一个长度有限的计算圆周率的程序。

作为图灵机,著名的停机问题,说的是判断任意一个程序的行为的通用程序是不存在的。任意问题等价于描述这个问题的机器,一个程序在有限步骤内判定出一个问题,也就是停机了,则称为此问题可判定。图灵机停机的不可判定性是固有的。

系统是否会产生非预期行为,是一个形式系统内的判定问题,如上所述,这个系统是图灵完全的,所以任意给定一个坏行为,不存在一个有限步骤的程序来判定系统能否产生它,也就是不能保证无漏洞。然而漏洞利用的存在不恰是证明了这个程序的存在了吗。区别在于任意给定还是特定,任意给定代表所有,特定仅是确定的一个。那么也就是设计者和攻击者,都不能通过一个万能程序确定一个系统所有的缺陷,这看起来是公平的。关键是设计者需要防护所有漏洞,而攻击者只需找到一个漏洞,就可以开始庆祝了。

===================

我们希望程序严格执行预期行为,通过设计形式系统来在数学上限制它。

然而因为形式系统只要是包含皮亚诺算数,那么它便是不完备的。不可判定性仅是不完备性的一种表现形式。

哥德尔不完备定理:一个足够复杂的公理体系(至少蕴含了皮亚诺算术公理),如果它是一致的(相容的,无矛盾的),那么它就是不完备的。

不相容和矛盾,在程序上的体现是修改自身,这种自指性,造成了无限递归,使得系统脱离了行为,构成了复杂性。在现实的语言中,无论asm,c/c++,还是java,甚至脚本语言,都是图灵等价的,都可模拟任意机器,任何程序语言都可在自身之上构造自身或者其他语言,这种自我指向性,简称自指性。

除了修改自身,构造自身也是一种形式的自指性。另一种认识观点是,数据和程序的等同性,一个语言的实现(runtime),需要先把程序当数据加载进来,然后执行它,而程序又可产生数据,让运行时来加载,这也是自指性。自指性造成了不完备性,也就是不存在算法预料其所有行为。

除了哥德尔不完备定理,还有哥德尔完备定理,那是一阶谓词演算系统。

在一阶谓词演算中所有逻辑上有效的公式都是可以证明的,这称是完备的,这种系统的所有行为在理论上,都可通过有限的程序推演出来,然而这也不能判断出系统不会包含坏的行为,这种可判断的性质,称为可判定性。一阶谓词演算不是可判定的,最多是半可判定的。

完备与不完备本质区别,是有限与无限区别。人类需要以有限的脑力和资源应对无限的现实世界。程序的要素设计是有限的,但程序需要表达无限的事物,这要求程序语言的设计,必然包含皮亚诺算术,不完备是必然存在的,不可判定也随之而来。

在语言设计层面,我们不得不包含自指性,因为丢弃它,会使得形式系统退化为状态机,只能表达固定有限的事物,但是人类社会和需求是发展变化的,与有限的形式系统模型并不匹配。

在包含自指性的语言中,设计有限行为的系统是可能的,这要求需求是固定不变的,它永不更新升级,因为一旦有升级功能,就必然包含自指性,因为升级的本质就是自指,它要求替换自身。现实中,网站需要升级维护,android可升级版本,linux,windows滚动更新,都引入了自指性,当然认证和签名系统保证了更新的执行者是限定的,但也不是绝对限定的,秘钥的泄漏,暴力枚举,撞库攻击都扩大了系统边界,这种边界延伸到人类社会,是不能通过技术问题解决的。

一旦包含了自指性,系统将是图灵完全的,同时其可能行为将是无限的,且是不可预料的。极限情形下,windows系统可能由于一个bit的翻转,从而被侵入,然后被完全替换成linux系统。

除了升级方面,完备的系统要求具有封闭性,即不与外界交互信息,信息的交互扩大了系统的范围,可能引入自指性。一方面来自人的交互性和第三方程序的交互性,

另一方面作为物理的系统,是受磁场的影响的,可能造成bit的翻转,一个bit的翻转就可能颠覆整个系统,这种攻击是永恒的。

Rowhammer比特翻转攻击是指利用临近内存单元之间电子的互相影响,在足够多的访问次数后让某个单元的值从1变成0,反之亦然。电磁泄漏造成信息泄漏,

通过统计特性可以获取你的键盘输入密码,除了电磁传递信息,计算机的音频设备也可以发出次声波以从物理隔离的计算机中发送机密数据,没有网线照样有信息传输途径。

这些都是物理系统固有的属性,当被利用时,也就成了漏洞。



免费客户服务热线:4006-618-418   027-87315200  87315211  业务咨询:15527777548    13260607300(微信同号)
业务咨询QQ:   欢迎光临老兵IDC 27325619   欢迎光临老兵IDC 81455950  欢迎光临老兵IDC 13640069   
技术支持QQ: 欢迎光临网盾科技 908624     技术支持电话:15307140247(微信同号)

公司地址:湖北省武汉市江夏区五里界街五园路16号

网盾运营中心:湖北省武汉市东湖高新技术开发区华师园北路18号光谷科技港1B栋4楼

《中华人民共和国增值电信业务经营许可证》: 鄂B1-20170032   
Copyright © 2007-  武汉极风云科技有限公司 All rights reserved. 鄂ICP备2020016614号-3

请所有客户积极遵守《中华人民共和国网络安全法》要求,合理合规的使用极风云数据的各类IDC云服务产品,网盾科技会遵照安全策略管理和安全制度的执行!