本节介绍ICT及网络安全领域的若干基本概念,作为理解本书后续章节的基础。本书对相关概念的定义尽可能源自公认的技术标准文件,这些文件一般都有专门的词汇释义章节。一些技术标准自身就以概念术语为主题,如国家标准《信息安全技术 术语》(GB/T 25069)、《风险管理 术语》(GB/T 23694,等同于《ISO/IEC第73指南》)、《系统与软件工程 可信计算平台可信性度量 第1部分:概述与词汇》(GB/T 30847.1),国际标准《ISO/IEC 27000信息安全管理系统概述与词汇》《ISO/IEC 2382-8信息技术词汇第8部分:安全》《ISO/IEC/IEEE 24764系统与软件工程词汇》《ISO/IEC 17000合格评定词汇和通用原则》《RFC 4949互联网安全词汇表》。一些权威机构的网站也提供了词汇表功能,如中国计算机学会的网络安全术语库网站(CCF Wiki)、ISO在线浏览平台(OBP)、IEC电工百科网(Electropedia)、美国国家标准与技术研究院(NIST)计算机安全资源中心网站(CSRC)等。Gartner、Forrester等知名咨询公司的IT词汇网站也是业内人员的重要参考资料。
对网络安全的理解需要具备一定的ICT基础知识。这里对若干ICT基础概念进行简要阐述,作为理解后文中网络安全概念的基础。
● 工件(artifact):工件这个词用法很多。在软件开发领域,工件用来指代软件构造过程中的各种成品和半成品。在电子取证领域,工件一般指用户活动的痕迹,可体现为日志、注册表或文件等,其中与当前案件相关的工件可称作证据。在网络安全事件调查活动中,工件是一切可以辅助研判的网络对象,因此可以泛指网络空间中的任何可感知的实体。MITRE公司的D3FEND网络防御知识库将“数字工件”概念作为网络攻防活动所关注的各种数字实体的父类,这些实体未必可观可触,而只需在概念上存在,包括进程、软件、硬件、网络、文件、账户、用户行为等 [8] 。
● 指纹(fingerprint):日常说的指纹是一种用于鉴别自然人身份的生物特征。在网络安全领域,指纹还有其他两个含义,一是版本辨识指纹,即网络报文中能够透露出某一类软件版本信息的数字痕迹,包括操作系统的版本信息和网络服务软件的版本信息;二是身份区分指纹,即根据某一具体网络实体的数字痕迹特性而对其身份建立的区分性标识,这种标识使得在不知道具体身份的情况下仍能实现对该实体的行为关联和追踪。例如,用户浏览器可能会在网络请求报文中的用户代理(User-Agent,UA)等字段中体现出近乎独一无二的用户特征,可借此构建用户的身份区分指纹,应用于用户画像和广告投放等场景;又如,攻击团伙使用的客户端或服务端工具都可能暴露出一些特殊数字痕迹,将该团伙与其他团伙区分开。
● 比特(bit):比特是一个可区分为0和1的信号,也叫位或比特位。一个字节(byte)由8个比特并排构成。在计算信息量时,比特和字节作为计量单位分别俗称小b和大B。比特的物理形态是硬件上的电平位或磁偏转,其语义则代表信息交换、配置设定或状态标识。硬件层的配置寄存器或软件中的配置变量可以同时接收多个比特的信息,各比特位对应不同的配置项,这类比特位又叫标志位(flag)。
● 缓冲区(buffer):缓冲区是程序执行过程中用于存放一组数据的一段连续内存空间。程序的一个执行实例称作进程,进程被分配到的内存空间一般分为代码区、数据区、堆区和栈区等不同区域(segment)。软件程序的二进制代码需要加载到内存中才能运行。数据区存储程序中的全局变量等静态数据,它们在进程生命周期中是稳定不变的。堆和栈在运行过程中是动态的,其间所存数据不断地产生和消亡。进程在堆、栈中不断地为各类临时数据分配和释放零碎的空间。区别在于,栈区的内存管理策略是后入先出,就像餐厅中的一摞盘子,最顶端的盘子是最后放上的,但又最先被再次拿走,这显得井然有序;而堆区则较为复杂,就像从一整块布料中按需裁剪成各种尺寸的小块分发出去,用完回收后重复利用,有时还得把多个小块再拼成更大的块。
● 数据包(packet):数据包也叫包、网络包或分组,由一段连续的字节构成。如果将网络比作物流系统,一次网络会话就相当于一个车队,而数据包就是一辆货车。车队中的货车可能会掉队、损坏、切换路线,导致货物乱序或丢失。
● 流(flow):流是一定时间内具有相同的目的地址、源地址、目的端口地址、源端口地址和传输协议的数据包的序列。从这个定义看,流是两个通信端点间单向的数据流量。流是一个逻辑概念,现实的通信经常是双向的,这两个方向上的流量应分别划分为两个流,但有人也将两个方向统一归为同一个流,因此有了双向流的概念。这种概念上的歧义在工程资料中会产生一些混淆。
● 协议(protocol):协议是指通信双方进行沟通的方式,包含一些细节性内容。在人类交流中,协议所约定的范围包括操持何种语言,用电话还是邮件,如何进行握手,如何中断联络。通信双方必须采用一致的协议。在一段真实的网络会话中,遵循网络协议的消息被序列化为一串字节,称作协议数据单元(PDU),一般分为一段协议头部字节,一段服务数据单元(SDU)字节,有时还包括一段协议尾部字节。如果把SDU比作一页书信,当它被装入信封后就成了PDU。TCP、UDP和IP都是常见的网络协议,它们隶属于TCP/IP协议族。
● 密码(cypher):不同于生活口语中将口令(password)称作密码,在网络学科中密码是指基于密码编码学(cryptography)的保密、校验及鉴别技术体系,有时也指加密后形成的密文(cypher text),与明文(plain text)相对应。
● 网络分层(network layering):开放系统互联(OSI)是一种将网络功能划分为7个层次的概念模型,自下而上依次为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,编号为L1~L7。各个层次上都定义了一些网络协议,并承载了相应的网络能力,供更上层调用。 N 层的P DU相当于 N -1层的SDU。另一个常用的网络分层模型是TCP/IP分层模型,它将L1和L2统称链路层,并大致将L5~L7统称为应用层。
● 物理层(L1):物理层用于定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等,相当于网络世界的路面、铁轨和航道。物理层的数据形态是比特流。
● 数据链路层(L2):数据链路层简称链路层,用于在相邻网络节点之间的链路上传递信息,类似于物流系统中两个相邻站点之间的货物运输。该层的数据传输单位叫“帧”(frame),一般长达几百字节。更高层的数据包在该层被封装为帧,添加一些链路控制信息。
● 网络层(L3):网络层代表主机到主机的通信能力,相当于网络世界的邮政系统或长途货运公司,这种系统需要具有寻址和导航能力。IP协议工作在该层,IP地址就是网络世界的门牌号。网络层的信息交换单位是数据包。
● 传输层(L4):传输层代表通信双方的端到端沟通机制。如果网络层是邮政系统,传输层则是双方的传达室;如果将网络层比作货运公司,则传输层的任务包括对接物流、拒收发错的货物和赶走路过的社会人。如果传输层采用TCP这种具有纠错机制的网络协议,那么双方传达室还可要求对方将中途破损的货物进行重发。TCP和UDP是最常用的两种传输层协议,TCP是保序、可靠的传输协议,而UDP则不对中途的信息破损和丢失负责,将躺平美其名曰“尽力而为”。可以想象一下挂号信和平信的区别。TCP的信息交换单位称作报文段(segment),而UDP的信息交换单位称作数据报(datagram)。报文段和数据报在更底层会被重组、封装为L3数据包。
● 会话层(L5):会话层是通信双方的联络办公室,它管理着与外单位的往来,可以指挥传达室收发货物和信件。在更高层“领导”看来,如果需要跟外单位有邮件往来,就找这个联络办公室,至于具体如何操作可以不必过于费心。
● 表示层(L6):在公路物流的例子里,表示层相当于卖家发货时的打包工作,有些打包员不惜把货物压缩变形也要塞进一个狭小的纸箱子;在信件往来的例子里,可以想象应用层代表一个业务部门的负责领导,那么表示层相当于文秘,他可以将领导的意图转化成规整、紧凑的公文,然后要求联络办公室发送出去,并在收到外单位回馈信息时进行解读转译,组织成领导所熟悉的语言。
● 应用层(L7):计算机网络只是通信设施,最终是为某个在线业务服务的。应用层就代表这种在线业务本身,它同网络设施的对接方式就是应用层协议。如果表示层是负责给快递或外卖配送员打包的人,那么应用层就是负责卖货的店员,或者负责做饭的厨师。
● 会话(session):会话是两个通信方之间单次沟通过程上下文的总和。会话的概念同流(flow)非常相似,经常被混为一谈。严格地讲,流是传输层概念,而会话是会话层(OSI L5)或TCP/IP应用层概念。流被定义为数据包的集合,而会话是一个整体性概念,包含了通信的状态信息。流一般是单向的传递,而会话是双向的交互。一次会话可能会在传输中途被某些网络设备切分成多个流。对于TCP传输,一次通信对应的双向数据交互称为一个连接(connection)。
● DNS:域名系统(DNS)就是负责将上网域名转化成IP地址的网络系统,其形态是互联网上的一些服务器,负责回答用户的域名查询请求。这些服务器之间彼此还有分工,通过多次迭代查询,不断缩小域名检索的范围,最终为用户找到答案。如果DNS服务遭到黑客劫持,用户就会得到假的IP地址,从而被引导到一个假的网站。
● 文件哈希(hash):文件的哈希值(也称散列值)是根据该文件内容生成的一段摘要,通常是固定长度的。在特定的哈希算法下,文件哈希值仅与文件内容有关。即使文件内容发生轻微篡改,文件哈希值也会变化。因此,文件哈希值可用于检测文件的完整性。在互联网下载大文件时,网站有时会提供该文件的哈希值,用户可在完成下载后在本地计算下载结果的哈希值,同网站提供的真正哈希值进行比对,确认下载过程正确无误。文件哈希值的长度通常比文件内容要短得多,无法避免多个不同内容的文件具有相同的文件哈希值,这种情况叫作哈希冲突,但对于安全的哈希算法而言,很难人为制造哈希冲突。常用的哈希算法包括MD5、SHA256、SHA512等。事实上,哈希算法的输入不局限于一个文件,它可以以任意字符串为输入,生成特定长度的摘要。所谓哈希算法“已被破解”,是指已经找到了相对容易的冲突构造办法,意味着该哈希算法已无法可靠地用于某些密码学任务。MD5算法已被我国密码学家王小云破解。
● 终端(terminal):终端起初是指用户连接大型机的控制台(console)外设,主要包括显示器、键盘、鼠标等。在UNIX/Linux系统中,终端还指代一种软件,接收用户的键盘输入,并将系统返回的结果呈现在字符界面上。在网络安全语境下,终端一般是指用户的办公上网设备,包括计算机设备和移动终端。从主流安全防护产品的运行环境看,“用户终端”默认特指运行Windows、macOS的办公设备,而“移动终端”特指运行安卓、iOS等常见移动操作系统的手机、平板计算机,可以不覆盖小众操作系统和广大物联网设备。主机(host)区别于终端,一般特指服务器设备,大多运行UNIX/Linux操作系统,少数运行Windows。服务器设备中可能会运行若干个虚拟机(VM)或容器,这些虚拟设备也可称作主机,一般运行Linux。端点(endpoint)是指通信双方任意一方的用户设备,是终端与主机的总称,但“用户端点”之谓则特指用户终端。
● 南北向(north-south):对于一个数据中心,其边界进出流量被称作南北向流量,而数据中心内部节点之间的流量称作东西向流量。
● 代理(proxy/agent):网络代理(proxy)简称代理,是一种网络服务,代替一个通信方A同另一个通信方B进行沟通,使得A与B并未发生直接连接。网络代理的作用包括安全性、隐私性、性能优化、功能扩展等方面。在客户端/服务端架构下,客户端所使用的代理叫作正向代理,服务端侧的代理叫作反向代理。网络代理可以是一个硬件设备、一个本地软件实例或一个云端服务。网络代理的行为通常与其服务对象高度相似,甚至可以让通信对端无法察觉代理的存在。软件代理(agent)也简称代理,是一个软件体,它配合另一个软件执行特定任务。与网络代理不同,软件代理并不模仿其代理对象的行为,而是同服务对象互相协作。软件代理经常扮演特派员或者卧底之类的外派角色,利用位置便利开展工作。例如,在一个设备中安插的信息采集探针(probe)就是一种软件代理。
● 端口(port):在电子领域,端口可理解为通信设备的一个物理插口。在网络领域,端口是逻辑意义上的网络会话端侧,同一个主机可以使用多个端口,从而同时参与多个网络会话。对于TCP/IP协议族而言,端口号是一个0~65535之间的数字,它通常同传输层协议类型(TCP或UDP)和IP地址配合使用,构成一个三元组,用于标识一个网络会话的单个端侧。一个网络会话可用一个五元组标识,包含传输层协议选项、两个主机IP及相应端口号。对于一个网络服务,会话双方的角色分为客户端和服务端,服务端的端口处于持续的侦听(listen)状态,长期开放,等待某个客户端申请连接,并在连接后建立网络会话;而客户端的端口仅在申请连接时才被按需启用,并在会话结束时恢复关闭状态。
● URI:统一资源标识符(URI)是一个字符串,用于对互联网中的一个资源实体(如网页、文档、主机、应用程序等)进行无歧义的标识。统一资源定位符(URL)和统一资源名称(URN)是URI的两类常用形态。URI的形态可以是URL,可以是URN,可以同时包含URL和URN,也可以采用其他形态。URL俗称网址,用于描述一个资源实体的网络路径,通常类似计算机文件夹那样呈现出层级化结构。URN则描述一个资源实体的名字,主要包括命名空间标识和在该命名空间内部的描述符,这个名字是持久的,与实体是否已经消亡无关,而且独立于网络路径的变化。URN和URL分别可比喻为一个人的姓名和地址。
● 封装(encapsulation):封装是指将软件中的一组紧密关联的数据和代码捆绑为一个单一实体,提供统一的访问和调取接口。封装后的实体可以进一步参与更高级的封装,从而形成上下级联的层次结构。封装的意义在于化繁为简,实现了计算机科学中的关注点分离原则(Separation of Concerns,SoC)。封装对于大中型软件的开发极为重要,因为人类程序员智力所限,只能对软件逻辑分而治之,方可驾驭软件设计的复杂性。在一类号称“面向对象”(Object-Oriented,OO)的编程语言中,封装机制会得到语法层面的支持,封装后的实体称作对象(object),对象的设计模板叫作类(class)。类相当于一个程序“小宇宙”中的物种,对象是类的个体实例。
● 函数(function):数学函数是指从输入到输出的映射。软件语境下的函数则是代码的基本组织方式,是共同完成特定任务的若干条程序语句的封装,封装后形成的代码体通过输入参数和输出值同外界交换信息。在不同的编程语言中,函数还有可能被称作方法(method)、规程(procedure)以及拉姆达表达式(lambda expression)。函数的代码体被当作工具储备在上下文中,以备程序在执行时申请调用(call)。函数的调用语句本身也可参与更高层级函数的封装。调用过程相当于通过函数名称向系统索要函数代码,然后加载执行,这是对函数的常规使用方式。部分编程语言允许函数像普通内存对象(学名“一等公民”)一样被参数化使用,并可被不同的逻辑分支动态传递,例如可用作其他函数的输入参数或输出值,这是一种更灵活的函数调用方式。程序函数根据完成使命的方式不同可分为算子(operator)和副作用(side effect)函数。算子类似数学函数,通过交付给定输入值下的输出值完成使命。例如,算子可对给定参数返回算式结果,或者对给定链接返回网页。副作用则体现为对环境的改变,如操作打印机、发送邮件等。作为不同类型的算子,映射器(mapper)将单值映射为单值,化约器(reducer)将序列映射为单值,聚合器(ag-gregator)将集合映射为单值,生成器(generator)将单值映射为序列,表值函数(Table-Valued Function,TVF)将单值映射为表格。
● 对象(object):程序中的整数、浮点数(小数)、字符、布尔值(二元真假值)、字符串等数据类型为原始(primitive)数据项。内存对象是指内存中多个相邻的数据项进行封装后形成的整体,例如程序可以将一个人的姓名、身份证号、手机号三个数据项进行封装,创建一个代表个人身份的内存对象。多个相邻的内存对象可以进一步封装为更大的内存对象。广义的对象亦称实体(entity),不限于内存空间,可以代表信息系统中的任何组件,如磁盘文件、外设、网页、服务器集群等。在访问控制语境下,访问者和被访问者分别称作主体(subject或principal)和客体(object),主体也属客体。
● 引用(reference):引用是一个位置标识,它指向计算机中特定客体(如内存变量、数据库条目、文件、外设等),可类比为一个人的手机号、邮箱、住址等联络信息。当程序需要对某客体进行访问(包括读、写、执行等动作)时,需要经过指向该客体的某个引用进行间接访问,这一过程称作解引(dereferencing)。在逻辑上,可以想象计算机系统中存在一个将引用映射到客体的表格,解引是查表的过程,但查表动作及后续操作由系统把持,其意义是避免主体直接对客体“动手动脚”,增强客体的安全性。对底层内存区域的直接引用叫作指针(pointer),它暴露出客体的内存地址,防护力较弱。对文件、进程、网络会话、数据库会话等主机资源的引用称作句柄(handle),多为一个整数,由系统实现该整数到客体对象真正位置的转译。URI也可看作对网络资源的一种引用形式。
● 编程范型(programming paradigm):编程范型是特定编程语言下代码的基本形态风格,决定了程序员对程序的看法,也是对编程语言进行分类的依据。编程范型可划分为指令式(imperative)和声明式(declarative)两类,前者告诉机器需要怎么做,后者告诉机器需要得到什么结果。指令式的程序是这样讲话的:你就按我说的步骤做,别管为什么;声明式的程序则会说:你怎么做我不管,我只拿结果。指令式范型又包含了规程式(procedural)和面向对象(object-oriented)等子类型。规程式程序可看作一组规程的定义(指令编排)内容,以及对它们的调用序列。面向对象程序可看作一组对象类型定义,以及它们的实例化和互动过程。SQL是典型的声明式语言,一般用于对数据库执行查询。函数式(functional)是声明式范型的一个子类型,函数式程序可看作一批函数的复杂拼搭结构。
● 数据结构(data structure):数据结构是指多个相关联的内存对象彼此互相链接而形成的拓扑结构,可以表现为并排状(数组)、链条状(链表)、层级分叉状(树)、网状(图)及其他任意复杂的形状。内存对象之间的两种基本链接关系是引用关系和邻居关系。通常而言,数据结构存在于内存中而非硬盘中,存在于单一程序的进程空间中而非跨程序的通信内容中,是进程这一“独立王国”中的“社会组织”,也是程序对执行上下文中的“前台”数据进行组织管理的基本方式,其形态将极大影响程序的工作效率。
● 序列化(serialization):当数据结构需要传递给其他进程、存储于硬盘或传输至网络时,其拓扑形态无法维持,只能被处理成一维的字节序列,但保留足够信息以备还原,这一过程叫作序列化。序列化后的数据被还原为数据结构的过程称为反序列化(deserialization),这就好比游泳圈被放气压扁后带到泳池,再吹气恢复。
● 数据模式(data schema):数据模式是一种元数据(metadata),代表了应用层内容的数据化设计,通常包含实体类型、实体属性、实体间关系类型以及语义约束等信息,这些信息也称本体(ontology)模型。数据模式常用于数据库管理系统,包含了对库表、字段、视图、索引等要素的设计蓝图。数据模式也用于定义XML等序列化格式中的信息项结构。数据模式与数据结构、数据格式的区别在于,数据结构一般用于描述内存对象的形态,数据格式多用于描述序列化文件的解析结构,二者均是OSI L6层的概念;而数据模式则位于L7层,与数据是否处于序列化状态无关。
● 虚拟机(Virtual Machine,VM):虚拟机是对计算机系统的纯软件化模拟,可分为进程虚拟机和系统虚拟机。运行VM的主机称作宿主机。进程虚拟机又叫应用虚拟机或受管运行环境(Managed Runtime Environment,MRE),体现为在宿主机操作系统之上运行的一个程序,该程序将进一步运行其上的应用进程同底层的操作系统解耦,为其提供一个独立于平台的运行环境。Java虚拟机(JVM)是进程虚拟机技术的典型代表。Java开发的应用软件运行于JVM上,开发者通常无须关注宿主机运行何种操作系统;而C/C++的开发结果则直接运行于操作系统中,对平台环境十分敏感。通常说的虚拟机特指系统虚拟机,这类VM基于完全虚拟化(full virtualization)技术,能够仿真出一个完整的计算机硬件环境,在该VM内部运行的操作系统和应用软件可以认为是生存于一个真正的计算机中。系统虚拟机由宿主机上的虚拟机监控器(hypervisor)创建、管理并提供运行环境。系统虚拟机可以实现软件适配和环境隔离等功能,在网络安全领域广泛应用于制造安全隔离环境。但某些虚拟机逃逸攻击能够破坏基于这种虚拟化技术的安全隔离机制。
● 容器(container):容器是基于操作系统虚拟化技术创建的独立运行环境。同一宿主机下的多个容器可共享操作系统内核,但拥有相互隔离的专属系统资源,容器中的应用程序可以认为是独占整个计算机。相比完全的系统虚拟机,容器不需要模拟硬件和内核,具有资源开销低、启动轻便灵活等特点,在云环境中被大量使用。容器能提供一定程度的安全隔离功能,但容器逃逸漏洞的存在,会让攻击者从容器中发起对宿主机的渗透。
网络安全工作强调知己知彼,“己”就是网络资产,而“彼”则包括攻击团伙及其基础设施。根据GB/T 25069的定义,资产(asset)是对组织具有价值的任何东西。与网络安全相关的网络资产包括硬件、软件、域名、IP地址、网页等类型。网络资产是针对微观的组织视角(甲方)而言的,是管理范围内网络组件的集合。在这种组织视角下,其他组织的网络资产及攻击者的基础设施则不被视作网络资产。而有些语境会将整个网络空间中的一切网络组件都称作资产,这是一种宏观视角。在这种宏观视角下,即便是被攻击者控制的设施也算作资产,有人称其为“恶意资产”。中观视角则介于微观的组织视角和宏观视角之间,一般被监管机构及部分安全服务企业(乙方)所采用,只认同本地域的网络资产,不把攻击者的基础设施归为资产。
威胁(threat)一词也有多个用法,有时它是指己方内部的漏洞和风险,但更多情况下则指代来自外部的危险。SANS研究所对威胁采用了一种狭义的定义:有动机、机会和能力造成伤害的对手。而GB/T 25069对威胁的定义则较为宽泛:可能对系统或组织造成危害的不期望事件的潜在因素。自然灾害和人为错误等无意的伤害也属于威胁,它们被称作偶然威胁(accidental threat),区别于故意威胁(intentional threat)。威胁主体(threat agent)是指“故意或意外的人为威胁的原发方和/或发起方”,也叫威胁行为体(threat actor)。网络空间威胁还可按效果划分为主动型和被动型两类:被动型威胁(passive threat)以旁观方式收集系统有意或无意公布或可获取的信息,而不去尝试修改系统资源;而主动型威胁(active threat)则是在被动型的基础上,主动篡改系统控制资源或者影响系统的正常运行。
当威胁一词用于攻击方时,常指代攻击方所控制的资源,包括攻击者的主机、虚拟机、容器、恶意程序、恶意域名、恶意IP、恶意URL等,这些资源也被称作攻击基础设施。攻击基础设施中的一些主机设备是通过攻陷并劫持合法网络设备获取的,这种设备俗称“肉鸡”。如果肉鸡的真正主人有所察觉并出手修复,这个肉鸡就流失了。攻击者在日常运营过程中,必须不断丰富和维持自己的肉鸡,这一过程叫养鸡。养鸡是耗时耗力的工作。攻击者也可以从云平台购买主机来搭建自己的基础设施,或者租用其他黑客团伙的基础设施。不论使用何种方式,攻击基础设施的建设都需要攻击团伙付出人力、财力等成本。如果攻击者长期频繁使用相同的基础设施,则容易形成自己的特色模式,从而被执法机构或研究人员跟踪,甚至会被溯源,暴露自己的身份。因此,攻击者在理想情况下需要不停地变更自己的基础设施。然而,受限于成本,这多半只是他们的理想而已,他们也有降本增效的需求。
有观点认为,网络攻击(cyber attack)和网络窃取(cyber exploitation)是互斥概念,应该在司法、政策、国际关系等领域加以明确区分。前者是针对完整性和可用性的破坏,如对政府网站进行涂鸦、对电力网络进行干扰、对竞争对手的网站发起分布式拒绝服务攻击(DDoS)等;后者是对保密性的侵害,包括窃取国家秘密、商业秘密和个人隐私等,网络基础设施更多体现为媒介而非目标。一些西方国家提出,网络窃取的合法性应高于网络攻击。美国情报界针对两个概念分别发明了CNA(计算机网络攻击,Computer Network Attack)和CNE(计算机网络利用,Computer Network Exploitation)两个名词。美国情报部门主张,只要满足一定条件,他们从事的CNE活动就是合法合规的。一些西方学者也在学术领域对类似观点予以支持。此类观点反映了一种价值导向,背后是西方网络大国试图掌控网络空间行为准则制定权的意图。我国应对此予以警惕,需要结合自身利益和国际公义积极引导对相关国际规则的合理制定,争取规则定义权。本书采用的概念是,网络攻击涵盖了网络窃取,任何在未授权情形下故意侵害网络空间安全保密性、完整性、可用性的行为都属于网络攻击。
当网络事故发生时,资产所体现出的状态改变称作事态(event)。组织对归结到同一成因的所有事态的感知将形成一个事件(incident)。ISO/IEC 27035-1(被采用为GB/T 20985.1)将信息安全事态定义为“表明可能的信息安全违规或某些控制失效的发生”,将信息安全事件定义为“与可能危害组织资产或损害其运行相关的单个或多个被识别的信息安全事态”。上述定义中的“发生”(occurrence)作名词用,意为某种情况的出现。
根据ISO/IEC的定义,事件和事态的微妙差别在于,事态更强调具有指示效果的客观痕迹,而事件更侧重于组织对攻击行为发生的主观认知。多个相关的事态可以归纳为同一事件。例如,某组织发现服务器有非法入侵的痕迹,紧接着又发现重要数据被窃取,这两个事态最终被包含到同一安全事件进行上报。多个细粒度的事件也可汇聚为单个粗粒度的事件,例如多个子公司被同一攻击团伙入侵后分别向总部报告一个安全事件,总部确认其隶属同一大型事件。不过一般而言,事态、事件和事故(accident)这几个术语是可以混用的。
网络攻击不等于网络事件,攻击是客观存在的,而事件存在于主观认知,只有为他方察觉的网络攻击才能形成网络事件。防御能力强大的企业会报告“零事故”,而看不到攻击的企业也会报告“零事故”。在短时间内,选择无视安全的企业可以如愿,甚至可以认为安全事件“不检测就没有”。但从长远看,它们会被无法回避的问题打击:业务系统在上级领导参观时出故障,硬盘被勒索程序锁死,客户发现自己的资料在网上出售。网络事件的来源也未必一定因网络攻击产生,还可能来自没有恶意的故障或过失。
漏洞(vulnerability)也被译作“脆弱性”,源自拉丁语的“伤口”(vulnus),是一种特殊类型的bug。bug是导致系统行为不符合预期的缺陷,其中,安全bug是指能影响到系统CIA三要素的缺陷。在安全bug的范畴里,能够被攻击者恶意利用从而操纵软件故意执行非预期功能的bug就是漏洞。漏洞可能存在于物理环境、组织、过程、人员、管理、配置、硬件、软件和信息等各个方面。漏洞的根源是人类的智力有限,只要信息系统仍由人类负责设计、制造和使用,漏洞就难以避免。
从影响范围的角度,漏洞可以分为通用型和事件型。通用型漏洞(common vulnerability)源自存在设计、实现缺陷的通用ICT产品,如基础模块、APP应用、开发框架、硬件设备等,产品的所有用户均可能受到影响。事件型漏洞来自特定部署环境下信息资产的安全弱点,比如站点独有的实现缺陷、不恰当的系统配置、弱口令等,一般仅影响单个组织或单个系统。CVE(通用漏洞和暴露)是一个开放的漏洞列表,主要收录通用型漏洞,并为之赋予枚举编号。我国的CNVD(国家信息安全漏洞共享平台)等漏洞库也建立了类似的通用型漏洞编号体系。
GB/T 30279基于漏洞产生或触发的技术原因,将漏洞划分为代码问题、配置错误和环境问题等类型。代码问题是指代码开发过程中产生的漏洞,可细分为资源管理错误、输入验证错误、数字错误、竞争条件问题、处理逻辑错误、加密问题、授权问题、数据转换问题和未声明功能。配置错误是指在使用过程中因不当配置产生的漏洞,如采用了默认的不安全配置。环境问题指由运行环境原因导致的安全问题,又分为信息泄露(如通过日志、调试输出或侧信道)和故障注入(通过改变物理环境触发故障)。
对于一个通用型漏洞而言,它的生命周期会经历几个重要时刻——发现时刻、报告时刻、披露时刻,每个时刻的到来都意味着它的“洞生”进入了新的阶段。漏洞可能会被白帽发现,也可能会被黑帽发现,后果迥然不同。黑帽会用其扩充自己的武器库,闷声发大财,某些西方情报机构更是漏洞收藏方面的“名家巨擘”。白帽中的好同志则会报告监管或厂商,但也有人会私藏几年用于打比赛。很难知道谁是最早的发现者,只能假设坏人早在你我之前就得知了漏洞的利用方式,并且已经钻进了我方网络潜伏多时了。报告时刻是白帽将漏洞告知厂商的那一刻,之后厂商多半会积极开展验证、修复,使漏洞在劫难逃。不过也有厂商在收到报告后仍置若罔闻,这会使白帽非常生气。披露时刻就是漏洞细节昭然天下之时,这个漏洞会被称作已知漏洞,而不再是少数人的小秘密。漏洞的披露一般由厂商做出,他们还会同时提醒用户安装补丁;某些白帽会把厂商置之不理的漏洞公之于众,希望利用舆论压力迫使厂商有所行动;也不乏研究者和媒体纯粹为求新闻热度而爆料。官方的漏洞缓解措施一般伴随漏洞本身同步披露,但有时会晚几天问世,或者就没打算问世——这些厂商期待有能耐的用户可以先行自救。漏洞一旦披露,好人和坏人都会知道,一场追跑比赛由此开始。坏人们将抓住“商机”,磨刀霍霍,将魔爪伸向无冤无仇的可怜用户。但对那些早已私藏这个漏洞的团伙来说,公开披露意味着竞争的加剧和机遇的萎缩,他们的“军火”将随着漏洞被逐渐修复而进入贬值通道,这可不是好消息。因此某些情报机构踊跃主导漏洞披露规则的制定,对“好”漏洞的披露加以限制。受到波及的用户和企业们则展现出众生百态,有的争分夺秒,有的亡羊补牢,有的浑然不知,有的手足无措,有的心怀侥幸,有的投鼠忌器,有的庄重地制订了漏洞修复计划并进入了层层审批。漏洞PoC(Proof of Concept)是某些漏洞的附属发布物,表现为一段说明文字或一个验证程序,用于协助用户验证排查漏洞的存在性。PoC是把双刃剑,可以帮助企业应急摸排漏洞感染范围,同样也会助力攻击者快速编写漏洞利用程序。因此,相比不夹带PoC的漏洞,一个伴随PoC披露的漏洞将更加招蜂引蝶,应得到用户的更优先处理。漏洞的生命周期伴随着种种社会乱象,国家开始通过立法手段对漏洞管理加以规范,对厂商欠作为、媒体乱披露等不负责任的行为施加限制。
漏洞的“0day”“1day”“nday”标签反映了它的生命周期阶段,标签内容取决于此刻距漏洞披露时刻之后已经历的天数。如果某漏洞被小明发现,但尚未公开披露,这个漏洞就是小明的“零日漏洞”(0day),风险用户大概率没有对这个漏洞采取预防措施。小明凭借这个漏洞向广大带病系统发起“零日攻击”,极易得手。他感慨地说,0day真乃“神器”也。但“神器”用多了容易暴露、失灵,因此0day常被攻击者当成祖传宝贝一样压箱底。1day一般是指漏洞披露后1~3天的时间窗口,此时仅有少量用户完成了修复,漏洞利用仍然会有较好的成功率,攻击者的数量也骤然升高,因此1day漏洞的风险不可小看。nday是指披露多日早已不热乎的漏洞,这时系统修复率已有较大进步。攻击者仍可以拿nday去捡漏,但经常会碰一鼻子灰。有能力掌握0day的攻击者并不常见,因此对普通用户而言0day不等于高风险。Gartner的研究副总裁Craig Lawson说,“零日漏洞”就像恐怖的鲨鱼,已知漏洞就像渺小的蚊子,蚊子每年杀人数以百万计,鲨鱼的致死数却只相当于雷击。不过,考虑到0day的掌握者绝非善类,多半是目的明确的APT团伙,对于军政机关等敏感用户而言0day的风险反倒很高。
有一个与漏洞相关的概念是攻击载体(attack vector),也可称作攻击媒介,是指对漏洞进行触发的途径。同一漏洞可被多个攻击载体触发,例如,网站界面上的多个输入框都可能会触发同一个内存破坏漏洞。一个给定网络环境中所有攻击载体的总和称作攻击面(attack surface),它是攻击者视角下的作用点集合。由于载体和向量对应同一英文单词,攻击载体也常被译作“攻击向量”,但实际上载体的说法来自流行病学中传播载体的概念,与数学向量无关。
《信息技术 安全技术 信息安全管理体系 概述和词汇》(GB/T 29246,等同于ISO/IEC 27000)将风险定义为“对目标产生不确定性的效应”(effect of uncertainty on objectives)。其中,效应是指对预期的偏离,可以是正偏离或负偏离,体现出上文所述的“风险双刃性”;不确定性被定义为对事态(event)及其后果(consequence)或可能性(likelihood)的相关理解或知识的信息缺乏状态,即使这种缺乏是“局部的”。风险常被表示为事态(包括情形的改变)的后果和其发生的可能性的组合。GB/T 29246指出,信息安全风险与威胁方利用信息资产的脆弱性对组织造成危害的潜力相关。企业为管控风险而采取的措施称作安全控制(security control)。单项安全措施又名安全控制点、应对措施(countermeasure)、CoA(行动措施,Course of Action)、安全措施(safeguard)等。
值得注意的是,当我们谈论信息安全风险时,默认是指负偏离风险,与漏洞利用造成的负面损害有关,而正偏离情形通常被各类文献所忽视。信息安全的正偏离风险是对保密性、完整性、可用性等信息安全目标的过度保障。这类风险在经济意义上是不可取的,甚至具有深远的危害。例如,对信息安全的过度投入容易对其他业务目标产生负面影响,甚至对信息安全目标本身而言也会带来不可持续性。
影响风险高低的因素,除了造成损失的大小外,还有发生的可能性。风险常被简单量化为后果与可能性这两个要素的乘积。一些文献会将后一量化要素称作“暴露”(exposure)。例如,GB/T 25069将“暴露”定义为特定的攻击利用数据处理系统特定的脆弱性的可能性。这一定义起源于国际标准《ISO/IEC 2382-8:1998信息技术词汇第8部分:安全》。然而,“暴露”一词的含义并没有形成广泛共识。《风险管理 术语》(GB/T 23694)将“暴露”定义为“组织和/或利用相关者受事件影响的程度”。这一定义更接近于风险的前一量化要素——后果。CISSP(信息系统安全专业认证)教材对“暴露”的理解与上述两种定义皆不同,它将“暴露”视作资产存在脆弱性的一个实例,等同于风险存在的事实:如果某资产存在风险,则称该资产“暴露”了。显然在这种理解下“暴露”只有定性意义。定性意义上的“暴露”尤其常见于重视保密性的场合,特指信息向非授权主体的公开。例如谍战剧中,一个隐藏的身份被识破了,就叫“暴露”了。一个组织所存在的“暴露”的总和被称作它的暴露面。“暴露因子”(Exposure Factor,EF)则是公认的定量概念,它被定义为攻击发生(风险成为现实)后,损失的价值占资产总价值的比例。
国家标准《信息安全技术 信息安全保障指标体系及评价方法》(GB/T 31495)依据国家对信息安全保障工作的相关要求,提出了信息安全保障评价的概念和模型、指标体系及实施指南。根据这一文件,信息安全保障被定义为对信息和信息系统的安全属性及功能、效率进行保障的一系列适当行为或过程。可见,信息安全保障的外延几乎延伸到了整个信息安全学科领域,尤其是覆盖了防御视角下的各种活动。根据GB/T 31495提出的信息安全保障模型,信息安全保障包含三个环节:建立保障措施、形成保障能力、实现保障效果。其中,信息安全保障措施定义为达到信息安全目的所采用的保障手段的集合;信息安全保障能力定义为被保障实体安全防御、响应和恢复等特性的体现;信息安全保障效果定义为被保障实体的信息安全保障目标和属性的实现程度。
在一个计算机系统中,安全保障机制的总体被称作可信计算基(Trusted Computing Base,TCB),以硬件、固件或软件的形式出现。GB/T 20271中,TCB被称作信息系统安全子系统(Security Subsystem of Information System,SSoIS)。系统的安全性以TCB自身的安全性为前提,当TCB出现漏洞时,整个保护体系或形同虚设,系统面临重大风险;而当TCB以外的组件出错时,风险多是局部、可控的。因此对TCB的安全确保过程至关重要。为了降低这一确保过程的复杂性,现代操作系统努力精简TCB的尺寸,一般只包含系统内核和少数用于安全策略执行的进程。
《信息安全技术 术语》(GB/T 25069)收录了GB/T 31495对“信息安全保障”的定义,但同时还收录了“安全确保”这一词条。虽然保障和确保对应的英文均为assurance,但含义完全不同,造成了许多误解。安全确保定义为“对声称业已或即将达到满足各项安全目的经论证的置信度的基础”。这一定义来自国际标准《ISO/IEC TR 15443:2012安全确保框架》。显然,安全确保不同于安全保障,不涉及保障措施的建立,而只是一个对置信度的证明过程,一般用于系统或产品的安全性认证活动。类似地,《ISO/IEC 15026-1:2013系统与软件工程——系统与软件确保》将确保(assurance)定义为“对一个主张业已或即将满足的合理信心的依据”(Grounds for justified confidence that a claim has been or will be achieved)。这里的主张(claim)是指对安全目标是否得到满足的断言,当通过一定的方法产生支持这些主张的证据时,就实现了“确保”。
GB/T 31495所称的“信息安全保障评价”相当于GB/T 25069所称的“安全确保”。GB/T 31495指出,信息安全保障评价是为了验证信息安全保障过程的有效性而开展的一系列评价活动,其定义是“收集信息安全保障证据,并获得信息安全保障值的过程和途径”。信息安全保障评价的过程可概述为:基于评价目标(即评价的信息需求)设计指标体系,从每项指标中提取该指标的评价对象及其属性,通过一定的测量模型和方法得出单项指标值,再进行综合研判,获得评价结果,用于支持评价目标的实现。为进一步描述对指标进行测量的过程,GB/T 31495还给出了一个“信息安全保障的测量模型”,该模型参考了《ISO/IEC 27004:2009信息技术 安全技术 信息安全管理 测量》(GB/T 31497—2015)中的“信息安全测量模型”,后者又参考了《ISO/IEC 15939:2002软件工程软件测量过程》(GB/T 20917—2007)中的“测量信息模型”。GB/T 31495中的信息安全保障测量模型描述了如何将评价对象的相关属性进行量化并通过一系列测量过程得出测量结果的过程。其中,属性是评价对象的可定量或定性识别特征。这一模型从评价对象获得“基本测度”,通过测量函数转化为“导出测度”,再通过分析模型获得测量值,进而通过判断准则获得指标值,指标值为评价结果提供依据。其中,基本测度是指对测量对象的属性进行基本测量得到的测度(一般为统计所得的原始数据或资料);测量函数是对基本测度进行组合以生成导出测度的计算;导出测度由两个或两个以上基本测度组合运算得出;分析模型是对导出测度进行计算得出测量值的函数。
在信息安全领域,测试(testing)活动主要有两类场景,一是确保安全产品的正确性,二是确保信息系统的整体安全性。验证(verification)和确认(validation)是测试工作的两类形态,合称V&V。如果V&V由独立第三方执行,则称为IV&V(独立验证与确认)。
验证和确认两个概念常被混用,仅有微小差别:前者重在符合规格,也称符合性测试;确认则处于更高层次,偏重满足场景诉求。现实中的甲方和产品经理在“提需求”时往往只是传达场景诉求,而不会直接给出规格,所以他们给程序员的感觉可能是“不愿把话说透”。业界总结称,验证是确保“以正确的方式制造产品”,确认则是确保“制造正确的产品”。GB/T 29246(等同于ISO/IEC 27000)采用ISO 9000的定义,将“验证”定义为“通过提供客观证据,证实满足规定要求的行为”,将“确认”定义为“通过提供客观证据,证实满足特定预期使用或应用要求的行为”。两个定义均使用了“要求”(requirement,ICT行业多称之为“需求”)这一概念,它是指“明示的、默认的或强制性的需要或期望”,区别在于验证所要满足的是“规定要求”(specified requirements),而确认则要满足“特定预期使用或应用要求”(requirements for a specific intended use or application)。例如,某个测试任务要求证明系统实现了需求规格中“对口令进行加密存储”这一功能项,该过程属于验证,但这一需求的目标还是防护攻击者对口令的破解。如果口令加密方案太弱,即使系统通过了针对特定需求规格的验证,可能也无法通过最终的确认。
对软件而言,验证方式可分为静态验证和动态验证,前者一般体现为对设计文档和源代码的分析,后者则主要检查软件运行实例的行为。形式验证是一种高级的静态验证,通过数学化方法对系统的正确性给出证明或否证。大部分验证手段均采用归纳思维,即尽可能全面地构造出能覆盖各类场景的测试用例,证明系统能够在所有测试用例中正确运行,进而不严谨地归纳出任意场景下的正确性。形式验证采用的是演绎思维,是一种逻辑严谨的验证方法,缺点在于难度高、代价大、范围受限,仅用于测评安全性要求很高的系统。
网络防御过程中的各类决策须以网络空间的可视性(visibility)为前提,包括网络资产、网络威胁和现有网络防御能力的可视性。可视性的建立意味着对感兴趣的目标进行信息采集,并对该信息加以理解吸收从而实现尽可能充分的认知和洞察。GB/T 25069收录了《ISO/IEC 27036供应关系信息安全》对可视性的定义:某一系统或过程使各系统元素和过程能被记录并对监控和检查可用的性质(property of a system or process that enables system elements and processes to be documented and available for monitoring and inspection)。可视性是网络实体的属性,具有可视性的实体的状态快照和发展趋势就是态势(situation),而态势是策略制定的依据。《孙子兵法》称:势者,因利而制权也(所谓态势,是凭借有利的情况,制定随机应变的策略)。美国军事学者受战机驾驶实践启发建立了态势感知(Situation Awareness,SA)理论,该理论已被引入网络安全领域。
国防科技大学的贾焰教授将“网络安全态势感知”(Cybersecurity SA,CSA)定义为:基于大规模网络环境中的安全要素和特征,采用数据分析、挖掘和智能推演等方法,准确理解和量化当前网络空间的安全态势,有效检测网络空间中的各种攻击事件,预测未来网络空间安全态势的发展趋势,并对引起态势变化的安全要素进行溯源 [9] 。CSA可概括为感知、理解和预测三个过程。NIST对态势感知的定义是:在一定时空内对企业安全防御形势及其威胁环境的感知、综合性语义理解以及短期状态的预测投射。
CSA活动的信息态产物称作网络态势。网络态势可分解为网络资产情势(cyber hygiene)、网络威胁趋势(threat landscape)和网络防御形势(security posture)三方面信息。网络资产情势主要包括资产清单、脆弱性、网络拓扑以及网络流量分布信息;网络威胁趋势涉及相关威胁团伙活动、身份溯源、攻击资源和攻击技术信息;网络防御形势关注企业在特定网络资产情势和网络威胁趋势下保障网络安全的能力。NIST对网络防御形势的定义是:由致力于管理企业防御、应对态势变化的信息保障资源(如人、硬件、软件、策略)和能力所支撑的企业网络、信息、系统的安全状态。
目前许多企业开始部署以“态势感知”为名称的信息系统,期望以体系化、工程化的方式实现CSA目标。然而,部分CSA系统的建设方向陷入了误区,过度强调可视化(visualization)为参观者带来的感官冲击,而淡忘了为实战者提供可见性效果和决策增强功能的初衷。
数据(data)、信息(information)、情报(intelligence)、知识(knowledge)和智慧(wisdom)这几类概念的关键区别在于决策价值的不同(见图1-2)。数据是信息的载体,未经萃取则不具备价值;信息是对数据进行萃取的结果,可能对今后的决策具有潜在参考价值;情报特指对当前决策过程有用的信息,是深度信息分析的产物;知识是凝练的结构化信息,具有中长期的价值,一般是归纳或演绎的产物;智慧是深刻、普遍的方法论知识,因太过抽象而失去了可证伪性,更擅长事后分析而非事中决策。DIKW金字塔模型 [10] 描述了数据(D)、信息(I)、知识(K)和智慧(W)四者之间的层层萃取关系,被广泛引用和解读。DIKW模型没有单独列出情报这个层级,可认为情报是信息的子集。
● 图1-2 数据、信息、情报、知识与智慧
威胁情报(Threat Intelligence,TI)是情报的子集,仅关注威胁行为体。Gartner对威胁情报的定义侧重于构成成分:威胁情报是基于证据的知识,包括关于现存或潜在祸害(menace or hazard)的上下文(context)、机制(mechanism)、标示(indicator)、含义(implication)和可行动建议(actionable advice),可用于向主体(subject)对该祸害的响应决策过程提供信息。NIST的定义侧重于情报与信息的关系:威胁情报是指已完成聚合、转换、分析、解释或富化(enriched)的威胁信息,以便为决策过程提供必要的上下文。网络安全语境下的网络威胁情报(Cyber Threat Intelligence,CTI)侧重于研究对手如何通过网络空间完成其目标 [11] 。MS-ISAC(美国州际信息分享和分析中心)对CTI做出如下解释 [12] :“当网络威胁信息被采集后,基于其信息源和可靠性接受评价,并被拥有高度专业性和广泛信息源的人员采用严格的结构化行业技术进行分析后,就成为网络威胁情报。如同所有类型的情报,网络威胁情报为网络威胁信息提供了增值,在情报消费者面前降低了不确定性,并且更有利于消费者识别威胁和机会。它要求分析师在海量信息中识别异同,明辨真伪,从而产生准确、及时和相关的情报。”CTI可用于事前防护、事中检测、事后溯源等多种情报消费场景,而事中检测和事后溯源同时又是CTI的生产场景。
CTI在传递时的基本单元是标示(indicator),也称“指示”“指标”,是指客观描述入侵的任何一段信息。单独的标示只能算信息,而不能归为情报或知识。洛克希德-马丁公司(以下简称洛马公司)的网络杀伤链白皮书 [13] 将标示分为三类。
● 原子标示(atomic indicator):原子标示是不能进一步分解为更小粒度的标示,如IP地址、电子邮件地址和漏洞标识符。
● 计算标示(computed indicator):计算标示从事件数据中推导得出,如哈希值和正则表达式。
● 行为标示(behavioral indicator):行为标示体现为一系列计算标示和原子标示的拼搭,通常要经过量化限定,有时也会被组合逻辑加以限定。作为一个例子,如下语句是一个行为标示的模板:“入侵者先使用一个后门,该后门以{某速率值}速率产生连接到{某IP值}的流量,该流量能命中{某正则表达式}特征,一旦连接完成,再将其替换为另一个以{某哈希值}作为MD5哈希值的后门”。大括号内部字段对应待实例化的模板参数。
该白皮书还提到了标示的生命周期循环:揭示(reveal)、制成(mature)和收效(utilize)。“揭示”是分析师通过分析或协作过程对标示进行生产的过程;“制成”是将标示导入检测工具的过程;“收效”是指标示匹配到敌情活动。“收效”后的进一步敌情分析可以“揭示”更多标示。
在信息安全领域,信任(trust)是某主体假定某客体的行为能够符合自己预期的单向关系,是主体的主观选择。根据国际可信计算组织(TCG)的定义,信任是对一个设备将出于某一目的做出特定行为的预期。与日常用语中带有美好意义的“信任”不同,TCG对可信的定义不涉及价值取向。假如我们预期小明做坏事,结果他真的总做坏事,那么小明果真没有辜负我们的“信任”。不过很多人不喜欢这种不讲大是大非的定义,因此狭义的信任只适用于预期好人好事而非坏人坏事,例如对安全策略的遵守而非违背。ISO/IEC 27036便给出了狭义的定义,“在两个实体和/或元素之间,由一组活动和某一安全策略组成的如下关系:元素x信任元素y,当且仅当x确信y会以一种良好界定的方式(关于各项活动)行事时,才不会违反给定的安全策略”。
信任是动态的,随着观察结果对主体认知的影响而演变。信任也是灰度的,不会非黑即白,而是可以进行量化。某些类型的信任还是可传递的,比如对客体正确性(correctness)的信任。对正确性的信任仅仅是信任的一种特例。小红对她祖母人品绝对信任,但当祖母坚持要小红冬天穿棉裤的时候,小红就会发现祖母在某些方面并不可信。假设同时存在如下事实:①我们信任小红的意见绝对正确;②我们见到一张字条,写着“我是小红,我担保小华像我一样绝对正确”;③我们能验证字条确为小红所书。那么,我们就可以通过小红的背书建立起对小华的信任,将信任进行传递。已获得信任的小华可以进一步给小刚背书:写一张“我是小华,我担保小刚像我一样绝对正确”的签名字条。当我们验证了字条确为小华所书,那么小刚也获得了信任。这一背书过程逐级延伸,可以建立信任链(trust chain)。信任链的传递对每根链条的起点提出了两个要求,一是它没有被“腐化”,不会昧着良心给坏人背书;二是它具有辨识真伪的能力。在可信计算平台中,系统组件层层背书,构成信任链。攻击者为了混入信任链,要么会假冒受信人的签名为自己背书,要么在受信人签发的背书中篡入自己的名字,或者干脆找个同伙为自己背书。系统为了对抗这些伎俩对背书有效性加以验证的过程叫作完整性度量,通过密码学机制实现。
可信性(trustworthiness)则是客体的行为表现,是客体确保自己履行预期承诺的论证效果。需要指出的是,trusted和trustworthy分别被译作可信和可信赖,其间差别未被有效表达。trusted作为动词的被动式应理解为受到信任,而无论这份信任有理有据还是流程所需姑且信之,若译作“受信”则更为达意;而trustworthy意为值得(worthy)信赖,对应有充分依据的信任,这一信任源自受信客体所提供的确保证据,是名副其实的“可信”。在“可信计算基”(Trusted Computing Base,TCB)这个概念中,对TCB的信任是情景所需,测评人员必须姑且信任TCB,才能进一步评价由TCB所确保的其他组件的可信性。未经充分确保的TCB依然是TCB。事实上,TCB经常被曝安全漏洞,并不值得信赖(trustworthy)。又如GB/T 25069收录了ISO/IEC 18014对可信第三方的定义:在安全相关活动方面,被其他实体信任的安全机构或其代理。可信第三方之所以受信是因为协议流程的规定,而非来自论证说服过程。NIST对trusted和trustworthy进行过较为明确的定义。《NIST IR 8320基于硬件的安全》将trusted定义为“一个被其他元件所赖以为其履行关键需求的元件”(An element that another element relies upon to fulfill critical requirements on its behalf)。《NIST SP 800-160卷1系统安全工程:构建可信赖安全系统的跨学科方法之思》将trustworthy定义为“一个组件的行为经论证符合其所声称功能的程度”(The degree to which the security behavior of a component is demonstrably compliant with its stated functionality)。
韧性(resilience)也称弹性、弹复力、复原力,是指系统面对干扰的鲁棒性和应对灾变的修复力。其中,鲁棒性又称健壮性,是指系统在扰动或不确定的情况下仍能保持它们原有特征、行为的能力,也就是对干扰和不确定性的吸收能力。由于“弹性”一词还另指云计算的灵活伸缩能力,而弹复力、复原力则没能体现出鲁棒性意味,因此本书优先使用术语“韧性”。在网络安全领域中,网络韧性(Cyber Resilience,CR)是指网络系统能够有效吸收网络攻击,保持业务运行不受攻击的影响,或者在受到影响后可快速恢复的特性。简而言之,CR体现为抗打击和快速恢复两类能力。
小明得罪了小华,被小华揍了一顿。小明说,你是打到我了,但我该吃吃该喝喝,就是皮实。这体现了小明的抗打击能力。小华听罢打得更狠了。小明说,你确实打得我影响吃喝了,不过你等着,过几天我就该吃吃该喝喝。这体现了小明的快速恢复能力。几天后,刚出院的小明遇到了刚从拘留所出来的小华,于是对着他扭动起恢复自如的腰身。小明说,怎么样,看我多有韧性。
书接上回,话说小华见小明被打之后嚣张更甚,真想对那张脸再来一锤。但一想到占不了便宜,只得悻悻道,我今后不揍你便是,你好自为之。这句话标志着小明成功建立起了威慑力,实现了以慑止战的效果。在国际关系领域,网络威慑(cyber deterrence)是指一国通过显示强大的反制能力,使敌方因顾虑后果而对网络行动有所收敛。网络威慑最早由美国布朗大学国际关系学教授詹姆斯·德·代元(James Der Derian)于1994年提出,此后成为美国网络安全战略的核心组成部分。我国的《“十三五”国家信息化规划》也明确提出“增强网络安全防御能力和威慑能力”,但相较而言,“威慑”一词在我国政策文件中的出现频率非常有限。
网络威慑常被偏狭地理解为通过展示网络空间进攻能力,而在网络空间之外对他国进行施压。实际上,网络威慑所展示出的反制能力既可以是网络进攻能力,也可以是网络防御能力;既可以是网络空间中的攻防对抗能力,也可以是传统的军事威慑、政治压力或经济制裁,只因为其目的是慑阻对手的网络空间行动,而被归为网络威慑。网络威慑重在止战而非作战,其基本原理是,让对手相信,其网络行动的代价将超过受益。这本质上是一个认知域目标而非网络域目标,即使威慑方的反制手段极其有限,但只要善于虚张声势,就有望达成以慑止战的目的;反之,如果一个国家总给人一种兔子式印象,那么即使其能力非常强大,从威慑角度而言也是不占优势的。网络空间装备展示和作战演习都是建立威慑力的常用手段。美国前任参谋长联席会议副主席卡特赖特(James Cartwright)称,美国需要对攻击性网络武器的开发和应用更加开放(而非遮遮掩掩)。他说:“你不能指望一个秘密的东西成为威慑,因为如果人们不知道它的存在,就没有害怕它的可能。”
具体而言,网络威慑效果有四类形成机制:惩罚式威胁(threat of punishment)、规范式禁止(normative taboos)、防御式拒止(denial by defense)和纠缠式施损(entanglement) [14] 。
● 惩罚式威胁是指展示己方有能力也有胆量实施报复,包括采用网络攻击手段、经济制裁手段乃至军事打击手段。这类手段存在法律和伦理的限制,在效果上还容易招致局势升级,受到了一定的质疑。惩罚还以精确的网络归因溯源为前提,而后者又存在巨大的技术难度。
● 规范式禁止是指对国际关系行为规范进行塑造,选择性地限制其他国家实施网络行动的能力。这类手段的威慑性在于对破坏规则的行为体实施点名和羞辱,同样依赖于准确的归因溯源。
● 防御式拒止是最为常用的网络威慑手段,是指展示己方的网络保障能力,向对手发出一个消息:你只会劳师无功。这种方式看似缺乏反制性,其实是最符合伦理也最令人信服的威慑形态。假如某地下团伙的成员需要自己选择攻击目标,完成业绩考核。小明选择了一个目标后久攻不下。大头目失去了耐心,只听小明说了句“大哥再给我一次机会吧”就再也不出现了。于是,团队中的每个成员都不敢再轻易选择那些看起来防备森严的目标。
● 纠缠式施损也是一类防御性威慑手段,强调了对攻击者的资源消耗,例如通过网络欺骗战术牵制住对手的精力,让对手为网络行动付出巨大的成本直至难以为继。不过,防御方也将为高对抗性活动的开展付出代价。