C和C++安全编码(原书第2版)
上QQ阅读APP看书,第一时间看更新

1.2 安全概念

计算机安全(computer security)指的是阻止攻击者通过未授权访问或未授权使用计算机和网络达到目的[Howard 1997]。安全包含开发和配置两方面的元素。开发安全要求具有安全的设计和无瑕疵的实现;配置安全则要求系统和网络被安全地予以部署以免遭攻击。两种安全不分主次,属于鸡和蛋的问题,不过有一点是确定无疑的:二者缺一不可。原因在于,就算能够开发出极其安全的软件,最后仍然需要对其进行安全的部署和配置。如果部署阶段的工作没有做好,即便设计为最安全的代码也会给攻击者以可乘之机。这种情形与最终用户要求软件易使用、易配置、易维护同时价格低廉的目标是矛盾的。

图1.4展示了这些安全概念之间的关系。

程序是由软件组件(software component)和定制开发的源代码(source code)构建而成的。软件组件是组成大型软件程序的元素[Wallnau 2002]。软件组件包括各种共享库,例如,动态连接库(DLL)和ActiveX控件、EJB(Enterprise JavaBeans)以及其他一些组合单元。软件组件在运行时可静态或动态链接到程序中。然而,软件组件并不是由最终用户直接执行的,它只不过是一个大程序中的一个组成部分而已。因此,软件组件是不可以有漏洞的,因为它不可能脱离程序的上下文而独立运行。源代码指的是程序指令集的原始形式。“源”这个词将代码与它可能具有的其他任何形式(例如,目标代码和可执行代码)区分开。虽然有时也需要对代码的“非源”形式(例如,当集成某些不包含源代码的第三方组件时)进行分析,但我们在这里只关注“源”形式的代码,因为本书的目标读者主要是软件开发人员(他们通常都可以访问源代码)。

图1.4 安全概念、角色和关系

图1.4还展示了人和物之间的关系。这些角色在不同的组织中有所不同,在本书中使用如下定义。

·程序员(programmer):对源代码的正确性、性能和安全等特性负责。

·系统集成人员(system integrator):负责集成新的和现有的软件组件,以创建满足特定顾客要求的软件或系统。

·系统管理员(system administrator):负责管理系统并维护其安全性,包括安装和卸载软件、给系统打补丁以及管理系统权限等。

·网络管理员(network administrator):负责管理网络安全事务。

·安全分析员(security analyst):关注安全缺陷并提供识别方法。

·漏洞分析员(vulnerability analyst):负责分析现有的和已部署的程序中的漏洞。

·安全研究员(security researcher):负责开发缓解措施和解决方案,可能从业于业界、学术界或政府。

·攻击者(attacker):利用软件漏洞达到其不可告人目的的坏家伙。他们的动机视威胁而定。攻击者通常也称为敌手、恶意用户、黑客或其他别名。