为什么计算机中可能存在漏洞和缺乏安全性?

信息安全 恶意软件 已知漏洞
2021-08-20 11:55:12

我听说过计算机漏洞、病毒、恶意软件等。

  • 为什么这些威胁是可能的?
  • 为什么计算机不做它应该做的事情?
  • 为什么有些人编写恶意软件,而不是具有建设性目的的程序,而不是造成损害和违反法律?
  • 由于计算机的性质而存在计算机不安全性吗?
4个回答

计算机无法猜测它“应该”做什么。相反,它究竟是什么被告知这样做-这就是编程左右。作为推论,计算机没有任何主动性,所以如果他们被要求做一些愚蠢或荒谬的事情,他们就会去做

错误是当程序员编写的指令序列使计算机在呈现特定数据集时做一些愚蠢的事情时发生的事情 - 也就是说,对于程序员希望计算机在他的高度抽象图片中做什么来说是愚蠢系统的。但是计算机不知道程序员想要什么,即使知道,也没有“理解”的能力。计算机只是按照信中的说明进行操作。

安全问题是一种可以被恶意第三方利用的漏洞,恶意第三方将触发漏洞发生的情况,以便从计算机的无意义行为中受益。

因此,总而言之,计算机中出现安全问题是因为存在错误和存在邪恶

错误的存在是因为制作无错误的软件(或者,就此而言,无错误的硬件)似乎非常困难。这是一个活跃的研究领域,还没有准备好提供任何可行的东西。作为一个轶事示例,考虑在阿波罗 11 号登月期间使用的程序有两个错误,导致尼尔阿姆斯特朗不得不进入美国人男子气概溢出模式并使用手动控制。如果他们不能为一个价值 250 亿美元的程序的主计算机制作一个没有错误的程序,你如何期望普通程序员做得更好?

同样在形式验证的问题上,思考一下Donald Knuth的名言:“当心上述代码中的错误;我只是证明它是正确的,没有尝试过。”

邪恶的存在也是一个悬而未决的问题,已经研究了至少 4000 年,而且似乎不会很快得到解决。

由于计算机的性质,是否存在计算机不安全性?

实际上是的,是的。每个人和他们的狗都会告诉你,这是因为人们很愚蠢,从我们都不完美的意义上说,这几乎是真的,但这并不是故事的全部。

基本上,一个本质上是匈牙利出生的费曼版本的人发明了现代计算机架构,称为冯诺依曼架构其基本本质是程序和数据都存储在内存中的同一位置,一个可以操作另一个。

因此,使用通常的人类是计算机的比喻,想象你有一个朋友,他只能阅读一张纸上的指令并完全按照他们所说的去做,抛弃了人类有不同解释的复杂性以及所有破坏我比喻的社会因素。在这种情况下,您的朋友在图书馆中。你递给他一张纸。他盲目地听从你的指示,当他完成时(顺便说一句,这非常快),他已经按字母顺序对你的专辑集进行了排序,并有时间告诉你他需要更新。

现在,Mr Malicious 是一部令人讨厌的作品。他拿出一张纸,写下“买一把枪,抢劫一家银行,然后在你刚刚分类的收藏中的披头士专辑上盖章”,然后把它塞进 Chesney Hawkes 专辑中。然后他给你的朋友一些指示,令人惊讶的是他打开切斯尼霍克斯的专辑并阅读这些指示。哦,一张有说明的纸!他在披头士乐队的专辑中跳来跳去,冲刺出去买枪并抢劫银行。

请参阅 - 程序是数据。它们存储在同一个地方。这是一个非常有用的功能,是现代计算机的明确设计功能。它允许我们拥有可以获取数据并生成代码的编译器,拥有动态语言和各种其他美妙的东西。但它也带来了不安全性,即意外执行本应是数据即代码的东西,从而使计算机众所周知地把自己推下悬崖。

有一个替代方案,它被称为哈佛架构在这种情况下,代码和数据是分开的东西,不能将恶意代码放在数据应该放在的地方,因为哈佛架构处理器只会看着并说“是的,没错!”。这并不意味着这样的 PC 不会崩溃——恰恰相反,逻辑指令仍然可能包含错误——只是我们无法如此轻易地利用它们。

HA 也有一些严重的限制。您可以为其中一个编写编译器,但如果不先将程序从数据存储转移到代码存储,您将无法测试您编写的内容。动态语言变得更加困难。程序更新自己变得困难。等等。

所以,是的,人类的天性并不总是把所有事情都做对,而计算机体系结构的天性就是可以利用这一事实来做坏事。

这并不意味着没有解决方法 - 实际上 W^X 和 NX 位是哈佛架构,类似于冯诺依曼 x86 后端的概念。

笔记:

  • 从技术上讲,x86 CPU 是经过修改的哈佛架构。后端(你编程的位)是冯诺依曼,核心是哈佛。
  • 这个比喻有点陈词滥调,并不完美。我知道。对不起。

计算机中存在不安全感的原因与计算机如此擅长其工作的原因几乎相同:它们精确地遵循给出的指令。正如@JeffFerland 简洁地说,问题的根源在于这些指令是由人类编写的。这是一个问题,原因有两个:有些人有恶意,而其他人,善意的人,很容易犯错。

问题的前半部分很明显。坏人编写做坏事的软件。然后,他们通过社会工程或其他方式让软件在其他人的机器上运行。他们这样做是因为其中有利润,或者他们可能有某种政治或个人议程。

后半部分是我们遇到诸如 Flash 和 Java 之类的问题的地方——这些程序原本是为了好的目的而设计的,它们无意中促进了恶意代码的执行。发生这种情况是因为程序员作为人类是不完美的。因此,有时他们编写的代码是不完美的,以至于运行其程序的计算机(仍然会完美地遵循代码的指令)可能会被恶意行为者利用来运行他们的不良软件。

把电脑想象成Amelia Bedilia当罗杰斯夫人告诉阿米莉亚·比德莉亚“量两杯米”时,她当然是指让阿米莉亚准备两杯米给罗杰斯夫人回家后使用。然而,阿米莉亚只是完全按照他们给出的指示,拿出两杯米饭,量了几下,然后把米饭收起来。有时,程序员会做类似的事情——他们会以某种意图编写指令,但是,当计算机完全按照所写的方式执行它们或被允许将用户输入合并到这些指令中时,计算机可能最终会做程序员或用户所做的事情不打算或期望。

这个问题对于任何工具都是一样的。计算机是一种工具,它只能做一个人(用户或软件开发人员)告诉它做的事情。工具可用于好的或坏的,有时最终会导致意想不到的用途。工具或系统越复杂,就越有可能出现意想不到的用途,而计算机是当今世界上最复杂的系统之一。

归根结底,很多问题都归结为安全性和可用性一直处于战争状态,而良好的安全实践是平衡它们的问题。如果我有一个完全无法穿透并且没有钥匙的盒子,那么没有人可以进入这个盒子,但它也将完全没有用,因为没有人可以拿到盒子里的东西(甚至是应该拥有它的人)。我做了一把钥匙,把它交给了好人,但有人可以偷走钥匙。现在已经做到了让好用户可以使用盒子,也让坏人可以做坏事并进入盒子。

计算机只能做他们被告知的事情,通常,为了可用性,计算机制造商默认假设用户请求的内容就是用户想要做的事情。这意味着如果用户运行了一段糟糕的代码,计算机就会让糟糕的事情发生,因为它不知道这是一件坏事,它只知道用户要求它运行。

同样,由于程序员并不完美,有时有一些方法可以让他们的程序(用户想要运行的)执行用户或开发人员想要发生的事情。这就是许多病毒在没有直接用户交互的情况下传播的方式。用户可能正在使用带有 Java 之类的 Web 浏览器,用户告诉计算机访问一个网站,但出乎意料的是,该网站上有一段 Java 代码,它利用 Java 中的错误做一些 Java 的用户和开发者不希望代码能够做的事情。由于计算机只知道用户希望加载页面并运行代码,因此它就是这样做的。

同样,它无法知道用户要求的是一件坏事。防病毒和反恶意软件试图在这些坏事发生之前识别它们,但这是一个不完美的游戏,因为它是一个非常复杂的系统。

至于为什么人们试图利用它们,有很多原因。最初,它开始是为了“有趣”和挑战,但现在有了互联网,可以赚大钱,要么将受感染的计算机作为可用于进行其他攻击的“机器人”或发送垃圾邮件。盗窃和出售个人和财务信息也可以赚到大钱。这真的和现在的任何其他犯罪企业没有什么不同。