《游戏设计师修炼之道:数据驱动的游戏设计》一2.2 漏洞产生过程

简介: 本节书摘来华章计算机《漏 洞 管 理》一书中的第2章 ,第2.2节,(美)Park Foreman 著 吴世忠 郭涛 董国伟 张普含 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.2 漏洞产生过程

对外行人来说,可能会觉得漏洞管理中涉及的诸多细节过于烦琐。但如果你记得计算机科学基础入门(Computer Science 101)中的内容的话,也就是输入、输出、处理,所有的程序都不过如此。例如,一个电子邮件程序,发件人发送的消息即是输入,然后该程序对消息进行处理,将其按照语义分解为各个部分,最后,程序将邮件消息按照应有的格式显示给收件方。
这些流程看起来似乎很简单,下面来详细看看这些程序是如何开发出来的:
1)概念和方案:企业或政府运作的某种功能需求。
2)需求收集:开发者分析需求并向用户阐明需求。
3)设计:针对需求进行开发。
4)编码:程序员编写代码并进行测试。
5)测试:如果是一次全面的程序开发,测试团队将确保代码符合需求。
6)部署:企业宣布在生产系统中安装软件。或者,封装为软件套装销往海外。
这些流程听起来很耳熟,其实这就是所谓的系统开发生命周期(System Development Life Cycle,SDLC)。上面的每一环节中,用户都有可能会因为漏掉一些东西而导致问题的出现。因此还需要下面几步:
7)漏洞检测:攻击者、研发者或最终用户都可能在输入、输出或在与其他系统功能的交互过程中发现安全漏洞。这些漏洞也可以被认为是需要完善的潜在功能。
8)漏洞利用:测试者从各种不同的角度尝试利用该漏洞来突破软件原有的各种使用限制。
9)漏洞修复:软件补丁被开发和安装部署,重新运行程序,于是新功能被自动启用。
这几步也是我们这些年在生活中经常遇到和熟知的。复杂性、连通性和互操作性,这三个因素使得步骤7)到步骤9)比以往更普遍、也更困难。

2.2.1 复杂性

程序运行的环境和系统都极为复杂。任何应用程序都是建立在一层又一层的软件组件之上的。即使最基础的计算机软件构件也异常复杂:由无数的模块和各种更加复杂的硬件选项执行重要的交互功能。以传统的“hello world”为例,这是所有计算机科学专业的学生入门时都会学到的程序。任务很简单,就是要写一个能输出文本字符串的程序。但在图形界面下,这种类型的程序可以变得相当大。首先,必须要运行解释器,以加载程序、读取指令及执行任务。此外,该程序还必须通过库与操作环境交互。库是一些简单的代码段,能读取简单的程序指令指令并将它们放在操作环境中执行。本例中的库为输入/输出库(即通用I/O库),能够在屏幕上创建一个窗口并将文本映射到其中。为了支持该库,操作系统还必须加载一些额外功能,以便与显卡及显示器的硬件驱动程序通信。从上述例子可以看到,这是一个非常复杂的关系链,每个环节都是安全世界中潜在的攻击的对象。
我们创建了一个假设程序来说明这种复杂性如何迅速地被系统中的另一个组件所利用。该程序的功能很简单:将文件作为输入,并将文件内容显示到屏幕上。当用户通过邮件接收到一个文件时,它会将该附件保存到本地文件系统中,然后运行我们创建的这个程序。选择该文件作为输入,程序的确如预期的那样执行。但这正是问题的开始。
这个文件中包含了一段不可显示、无法被该程序中使用的通用I/O库处理的字节序列,这使得库函数跳转到指向该文件剩余部分的内存地址处。该文件的剩余部分将遗留在库函数运行过的内存空间中。该文件的这部分代码其实是一段恶意获取计算机控制权的程序,但看上去好像是库函数成功完成了其自身的任务。
在本例中,我们写的程序完成了预期的工作。但在代码中并未顾及到底层组件的复杂性。于是,当考虑谁应该修复这个问题时,争议出现了。在处理数据之前,是否应该验证输入数据能正常显示?库的编写者是否也该这么做?这些争议虽然有趣,但已经超出了本章的讨论范围。然而在某些案例中则必须考虑这点,尤其是评估内部开发的软件和外部供应商提供的软件时。

2.2.2 连通性

网际协议是使程序能远程运行的基本协议。它允许复杂的软件以模块化的方式工作,在层次化结构的不同层面处理信息。这些层面通常通过网络连接进行区分由填充着基于IP消息的网络连接来区分。
但是IP最初是美国国防部为了在核攻击情况下也能有效进行通信而设计的。其思路是:如果网络中的一个结点被摧毁,那么信息流可以绕开它,由其他路线到达目的地。该功能的设计初衷是要应用于封闭的军事通信网络中的。然而,IP现在已广泛应用于人人都能够访问的开放式网络中。这是一个技术误用的典型例子。IP的使用远远超越了当初的设计初衷。
如果一个系统能够与另一个系统进行通信,那么就可以通过网络控制某个结点的输入和内部处理过程。这种能力跨越了物理屏障,并容易被滥用。远程访问是提高生产力的关键因素之一。但像其他所有为改善工作环境而做的事情一样,远程访问是一把双刃剑。网络的复杂性和工具软件的易得性进一步加重了该问题。
DNS就是一个很好的例证。一个应用程序的组件可能遍布全球,记住成千上百万的IP地址一度是一件不可能的事情。有人发明了DNS,使得大家能够方便地记住网络名称。但DNS系统的设计从未考虑过安全性,只考虑了效率。于是它被黑客广泛利用。甚至是DNS服务器上运行的底层软件也不断遭到攻击,并且,这种趋势很可能持续下去。

2.2.3 互操作性

互操作性成为当前所有硬件和软件生产商竞相争取的对象。如果不这么做,市场就会变小。想象一下,如果一个操作系统不使用常用的SMB文件共享协议,或者一台打印机仅支持独有的文字处理软件,这将是用户无法接受的。随着技术在企业和政府的运作中得到普遍应用,计算机制造业逐渐认识到了这个问题。例如,EBCDIC和ASCII,这两个数据编码方案都是为了使系统和程序之间的信息交换保持一致,以及编码信息的处理可重复(只存在很小的差异)而提出的。
我不认为这些编码方法本身有任何内在漏洞,但正是系统中所有组件的兼容性,使得该编码方法具有可攻击性。某个处理ASCII字符集的程序可能存在一个漏洞,如果其他几个程序都用到了这个ASCII码处理程序,那么该漏洞就会造成更为严重的影响。一个程序可以被用来利用另一个程序,一个程序的缓冲区溢出将使得整个系统被随意访问。如果计算机系统中一个被各种程序广泛使用的标准组件存在漏洞,那么所有使用该组件的程序都可能被攻击。
关于互操作性能够导致严重且广泛传播的漏洞的一个更为具体的例子是微软Windows的“GDI+”缓冲区溢出漏洞(buffer overflow)(源自MITRE Corporation,CVE-2004-0200)。GDI+应用编程接口提供给程序开发者一套显示和打印信息的函数库。在这个例子中,处理JPEG图像的组件未能以安全模式对输入进行解析。当JPEG图像格式畸形时,程序失效并允许图像的剩余部分留在计算机内存中,这部分可能被当做程序执行。这是一个显而易见的问题。
由于GDI+产品是一个API。这意味世界上的许多程序开发者都在调用某个版本的API执行功能。这些程序的安装者,在一些情况下,希望确保他们拥有正确可用的GDI+ API。于是,他们安装自己的副本。结果,一些计算机系统的目标文件系统的几个不同的部位,最终被安装上一些存在漏洞的API版本。为了解决这个问题,每个供应商都必须检测他们的产品并及时打上补丁。

相关文章
|
安全
《游戏设计师修炼之道:数据驱动的游戏设计》一1.7 漏洞管理的重要性
本节书摘来华章计算机《漏 洞 管 理》一书中的第1章 ,第1.7节,(美)Park Foreman 著 吴世忠 郭涛 董国伟 张普含 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1064 0
|
安全
《游戏设计师修炼之道:数据驱动的游戏设计》一1.2 漏洞管理的起源
本节书摘来华章计算机《漏 洞 管 理》一书中的第1章 ,第1.2节,(美)Park Foreman 著 吴世忠 郭涛 董国伟 张普含 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
897 0
|
安全
《游戏设计师修炼之道:数据驱动的游戏设计》一1.1 风险管理的作用
本节书摘来华章计算机《漏 洞 管 理》一书中的第1章 ,第1.1节,(美)Park Foreman 著 吴世忠 郭涛 董国伟 张普含 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1116 0
|
安全
《游戏设计师修炼之道:数据驱动的游戏设计》一1.5 漏洞的来源
本节书摘来华章计算机《漏 洞 管 理》一书中的第1章 ,第1.5节,(美)Park Foreman 著 吴世忠 郭涛 董国伟 张普含 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1076 0
|
安全
《游戏设计师修炼之道:数据驱动的游戏设计》一3.2 漏洞管理计划和技术开发
本节书摘来华章计算机《漏 洞 管 理》一书中的第3章 ,第3.2节,(美)Park Foreman 著 吴世忠 郭涛 董国伟 张普含 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1217 0
|
安全 测试技术
《游戏设计师修炼之道:数据驱动的游戏设计》一2.3 创建漏洞:一个例子
本节书摘来华章计算机《漏 洞 管 理》一书中的第2章 ,第2.3节,(美)Park Foreman 著 吴世忠 郭涛 董国伟 张普含 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1292 0
|
安全 网络安全
《游戏设计师修炼之道:数据驱动的游戏设计》一1.3 安全产业及其缺陷介绍
本节书摘来华章计算机《漏 洞 管 理》一书中的第1章 ,第1.3节,(美)Park Foreman 著 吴世忠 郭涛 董国伟 张普含 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1081 0
|
监控 安全
《游戏设计师修炼之道:数据驱动的游戏设计》一1.6 有缺陷的漏洞管理示例
本节书摘来华章计算机《漏 洞 管 理》一书中的第1章 ,第1.6节,(美)Park Foreman 著 吴世忠 郭涛 董国伟 张普含 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1043 0
|
安全
《游戏设计师修炼之道:数据驱动的游戏设计》一2.4 使用漏洞管理程序的理由
本节书摘来华章计算机《漏 洞 管 理》一书中的第2章 ,第2.4节,(美)Park Foreman 著 吴世忠 郭涛 董国伟 张普含 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1146 0
《游戏设计师修炼之道:数据驱动的游戏设计》一2.6模拟现实
本节书摘来华章计算机《游戏设计师修炼之道:数据驱动的游戏设计》一书中的第2章 ,第2.6节,(美)Michael E Moore著 傅鑫陈征戴锋等译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
978 0