好的。我相信没有人考虑过这个观点,所以就这样做了。
我真的不明白为什么当程序员一开始就做一个好的和完整的工作时,为什么软件需要不断地进行安全补丁。计算机是直接编程的,不会做为什么他们的创造者没有编程他们去做。传统的计算机没有足够的智能,无法在没有输入的情况下做出决策。即使在软件中存在漏洞,在软件代码行有限的情况下,应该只有一个上限,是否有无限利用软件的可能方式?如果没有,是否有一个数学公式来计算相对于代码数量的可能的近似利用量?
我的例子是Windows及其前身。我相信前者在市场上已经有20多年了,它的代码经过制造商和外部安全供应商的全面分析。然而,我们被告知,它可能仍然存在安全漏洞,因此停止使用它,因为软件创建者不愿意继续支持它。
还是修补本身会产生更多的安全漏洞?
发布于 2017-07-26 07:30:08
发布于 2017-07-26 06:47:28
这个问题包括两个部分:为什么我们一开始就有这么多bug,为什么没有足够的时间检测和解决所有的bug。
编写软件需要资源,即时间、开发人员的知识和金钱。开发人员的数量和经验总是短缺(进入市场的时间)。而且,更多的开发人员并不意味着产品完成得更快,因为更多的开发人员意味着更多的通信开销,这就增加了复杂性。而且资金短缺,因为产品需要有一个正的投资回报。
因此,为了首先编写更安全的软件,您应该以尽可能少的开发人员来管理最小的复杂性为目标。但不幸的是,客户的复杂需求往往与这一目标相矛盾。最重要的是,随着时间的推移,需求也会发生变化,因为使用软件的环境会发生变化。
这样,即使是由经验丰富的开发人员开发的具有良好初始设计的软件,随着时间的推移也会变得更加复杂。而且,大多数软件甚至都不是由经验丰富的开发人员通过良好的初始设计来开发的,但许多软件只是作为一个原型开始开发,它最初工作得非常好,然后随着时间的推移而得到扩展和扩展,通常是由不同的开发人员(对初始设计的理解有限)进行的。
这只是你有臭虫的原因之一。其他的原因是,软件是在一个从来没有设计过的环境中使用的,就像为封闭和受保护的环境而设计的软件现在连接到开放的internet上一样。
软件公司内外的安全研究人员和开发人员面临着同样的限制:只有有限的时间和有限的研究人员,而有很多软件存在潜在的问题。因此,安全研究人员关注的是保证投资回报最大的软件,即利用研究者的特定知识和经验,在最短的时间内发现影响最大的缺陷。
当然,这会留下许多未被发现的bug,因为有些可能需要特定的经验,有些似乎不值得检测,或者仅仅是因为没有时间研究软件的特定领域。而且,即使发现了一个bug,投入资源来修复它可能也不够关键(在设计中,它的某些部分或仅仅是太昂贵),或者软件供应商可能不再存在,或者该软件被宣布寿命终结,因此无论如何都不应该使用它(尽管许多人出于各种原因使用它)。
发现和开发bug类似于自然资源的开采:仍然有许多未被发现的资源存在,而且在一些发现的地方,开发这些资源的成本太高。但是,新的知识、新的技术或仅仅是特定资源的显著价值的增加,使得开发这些资源或寻找更多隐藏的资源具有吸引力。如果出现bug,这可能是一些新的技术或工具,可以很容易地找到新的bug类。或者用例的改变使以前不可能的攻击矢量工作起来,比如将一些软件连接到互联网上。或者可能有一个有价值的目标使用特定的软件,这使得寻找该软件中的漏洞并利用这些漏洞很有吸引力。
发布于 2017-07-26 10:17:29
我只想重温爱因斯坦的这句名言:
有两件事是无限的:宇宙和人类的愚蠢;我不确定这个宇宙!
由于程序员仅仅是人,他们有时会因为上面的引语而犯错误。由于程序现在越来越复杂,它们代表了大量的代码行。因此,在任何大型代码库中都存在bug。
当然,其中许多是在初始测试期间发现的(在代码发布之前),还有一些是在代码发布后发现和修补的。坏消息是,即使是补丁也可以包含bug,或者破坏代码的其他部分,更糟糕的是,新特性总是随着它们的大代码和新bug而增加。
我在这里提到了bug,因为漏洞并没有太大的不同,IMHO只是bug的一个特例:应该更好地编码。
TL/DR:小而稳定的程序可以通过一些工作来清除任何错误或漏洞,但是像OS这样庞大和不断发展的软件是无法做到的。
https://security.stackexchange.com/questions/166037
复制相似问题