第四章 数据加密
1、公钥密码的出现解决了对称加密算法的什么问题?但对称加密至今仍被广泛使用,请至少从一个角度简述对称加密算法未被淘汰的原因?
使用对称加密算法进行传输数据需要使用基于共享密钥的数据传输方式,共享密钥这一过程同样面临着被窃听的问题 —— 对称密码中密钥的分发问题。
从算法速度的角度上来说,对称加密比公钥加密的速度快得多,使用公钥加密传输大规模的信息会拖慢信息传输的速度。
2、请分别简述五种密码分析技术的大致流程。
- 唯密文攻击:密码分析者已知一些用相同密钥加密的多个消息的密文,其任务是尽可能恢复足够多的明文或者推算出加密消息的密钥。
- 已知明文攻击:密码分析者已知部分明文及其对应的密文(这些密文全部用相同的密钥加密得到),其任务是推算出加密消息的密钥或者某种算法,这种算法可以对使用该密钥加密的任意消息进行解密。
- 选择明文攻击:密码分析者不仅已知部分明文及其对应的密文,他们还可以选择一个或多个明文,并得到这些明文被同一密钥加密后的密文。在这种攻击中,分析者的任务是推算出加密消息的密钥或者某种算法,这种算法可以对使用该密钥加密的任意消息进行解密。
- 选择密文攻击:密码分析者可以选择一个或多个密文,并基于相同的密钥,得到与之对应的明文,其任务是推算出加密消息的密钥。
- 选择密钥攻击:该种攻击是选择明文攻击和选择密文攻击的结合。在这种攻击中,基于同一个密钥,密码分析者不仅可以进择一个或多个明文并得到其对应的密文,还可以选择一个或多个密文并得到其对应的明文。
至于具体的操作流程,均是在对应的攻击设定下先收集足够多的输入(比如在选择明文攻击中,先收集部分明文及其对应的密文,以及选择一个或多个明文,并得到这些明文被同一密钥加密后的密文),然后针对这些输入做分析,最终得出结果。
第五章 隐私保护
1、请从基本思想、隐私保护水平等角度分析比较差分隐私与匿名化的不同,并举例说明.
差分隐私在基本思想是通过针对统计输出的随机化方式(比如通过查询函数的返回值中加入噪声来实现)使攻击者无法得到查询结果间的差异,从而达到对数据集中的每个个体的隐私进行保护的效果。比如在查询数据集中 $i$ 行患病的记录数量时,通过先任意采样 $i$ 行,再统计这 $i$ 行的患病人数,而非直接返回前 $i$ 行的患病人数来实现。
匿名化在基本思想上:重点是隐藏用户身份和数据的对应关系。比如删去表中容易关联到患者本人且研究价值不大的属性,即姓名和家庭住址,同时将姓名替换为假名等。
在隐私保护水平上,差分隐私对隐私保护进行了严格的定义并提供了量化评估方法使不同参数处理下的数据集所提供的隐私保护水平具有可比较性;匿名化方式则不能提供严格和科学的方法证明其隐私保护水平,当模型参数改变时,无法对其隐私保护水平进行定量分析。总之,与匿名化相比,差分隐私是一种严格的可证明的隐私保护模型。
2、同态加密中的半同态加密和全同态加密各指什么,各有何优缺点?
半同态加密指的是仅支持加法同态(或乘法同态),但不是两者同时支持的的加密体制。全同态加密指的是同时满足加同态和乘同态性质的加密体制,可以进行任意多次加和乘运算。
全同态加密相比半同态加密加密算法功能更强大,但具有较高的计算复杂度,加密算法设计更复杂。
第六章 硬件安全
1、请简要描述 Meltdown 与 Spectre 的攻击原理,并比较其共同点和区别
Meltdown 利用了指令乱序执行只在提交重排序阶段才检测特权级违例的特点,实现原理如下:在乱序执行的指令中加入一条加载敏感内存区域所在的页的指令,虽然在重排序检测时将该指令清除,但是该页被放在了缓存中,我们就可以通过缓存侧信道攻击,提取敏感信息。
Spectre 的原理是,当 CPU 发现分支预测错误时会丢弃分支执行的结果,恢复 CPU 的状态,但是不会恢复 CPU Cache 的状态,利用这一点可以突破进程间的访问限制,从而获取其他进程的数据。至于训练过程,首先训练 CPU 的分支预测单元使其在运行代码时执行特定的预测,然后使得分支预测越权访问敏感数据并将其映射到 cache 中,进而利用缓存测信道,通过 Cache 使用情况窃取敏感数据。
二者都是利用缓存侧信道攻击来提取敏感数据,都利用了 CPU 在架构设计上的漏洞。而其区别则是具体利用的漏洞不同,Meltdown 是利用的乱序执行中违例检测的滞后性,Spectre 是依赖于分支预测器的训练。
2、请简要描述侧信道分析的原理,并简述其用于硬件木马检测的原理。
侧信道分析是指利用硬件系统的旁路信息实施分析,比如利用系统的时间信息、功率消耗、缓存使用等来获取系统的有关信息。通过对这些侧信道信息的分析,攻击者可以推断出设备中的敏感信息。
侧信道分析法用于硬件木马检测,是基于:在芯片中植入任何恶意电路都会影响某些旁路信道的参数值,如漏电流、静态电源电流、动态功耗轨迹、路径延迟特性和电磁辐射等等。如果存在硬件木马,则会破坏这些旁路信道参数值的出厂时规律,而通过侧信道分析的方式,便可以将其检测出来。
第七章 操作系统安全
1、请描述栈溢出攻击和堆溢出攻击的基本原理。
栈溢出攻击是一种攻击者越界访问并修改栈帧当中的返回地址,以控制进程的攻击方案的总称。具体来说,我们在程序运行栈中写入超过栈帧长的数据,使我们写入的数据可以覆盖掉当前栈的返回地址,进而在函数结束退运行栈时,会跳转到我们覆盖后的返回地址。
堆溢出攻击是一类攻击者越界访问并篡改堆管理数据结构,实现恶意内存读写的攻击。具体来说,我们可以通过构造堆块重叠或利用堆管理其他机制等方式,来实现对堆内存的任意读写。
2、请简述面向返回地址编程 (ROP)和全局偏置表劫持攻击(GOT Hijacking)的原理,并分析他们能否绕过以下三种内存防御机制,并简述原因: a. W^X (Write XOR eXecution) b. ASLR (Address Space Layout Randomization) c. Stack Canary
ROP 攻击利用栈溢出在栈上布置一系列内存地址,每个内存地址对应一个 gadget
,即以 ret/jmp/call
等指令结尾的一小段汇编指令,通过一个接一个的跳转从而达到控制程序执行流程的目的。GOT Hijacking 攻击通过恶意篡改 GOT 表,将其中的函数地址修改为攻击者所指定的函数地址,从而在程序调用该函数时,执行的实际是攻击者所指定的恶意代码。
a. W^X (Write XOR eXecution):本方案指定每一个内存页拥有写权限或者执行权限,不可兼具两者。ROP 和 GOT Hijacking 都能绕过 W^X 保护,因为虽然返回至溢出数据的栈溢出攻击失效,但 ROP 和 GOT Hijacking 也可以不需要注入新代码,而是使用程序中已有的代码片段,因此不受 W^X 保护影响。
b. ASLR (Address Space Layout Randomization):对虚拟空间当中的基地址进行随机初始化,以防止恶意代码定位进程虚拟空间当中的重要地址。因为目前 ASLR 的随机性不强,且依赖模块自身的支持,载入应用时不会随机初始化代码段的地址与 GOT 表的地址,于是 ROP 和 GOT Hijacking 都可以绕过 ASLR 机制。
c. Stack Canary:在保存的栈帧基地址(EBP)之后插入一段信息,当函数返回时验证这段信息是否被修改过。对于 ROP,当发生栈区溢出时,攻击者为了修改返回地址,必须先覆盖 Stack Canary,造成攻击行为暴露。而 GOT Hijacking 则不涉及修改返回地址,而是修改全局偏移表中的函数地址,所以可以绕过 Stack Canary 保护。
第八章 协议栈安全
1、请描述 IP 分片污染攻击的原理与攻击者需要具备的能力。
在原始报文被分片、传输过程中,攻击者伪造一些分片,注入到正常分片流中,篡改原始报文内容,从而形成对合法流量的污染。攻击者需要具备的能力:
- 源地址欺骗
- IPID 的猜测
- 原始报文校验和的欺骗等
2、结合几个针对 DNS 域名服务实施的 DDoS 攻击案例分析提升 DDoS 攻击防御能力的可行措施。
恶意服务器回复伪造攻击:恶意人员发送随机查询请求到 DNS 服务器,抢在权威应答前伪造应答包发送给服务器,修改授权资源记录。其成功的原因在于缺乏端节点身份和发布内容验证、数据未采用加密传输等。
恶意服务器回复伪造攻击:攻击者可依赖目标权威服务器或 DNS 软件漏洞,控制特定权威域名服务器,篡改区域文件中的授权数据,形成恶意服务器回复伪造攻击。原因是域名系统存在复杂的解析依赖;DNS管理方面缺乏验证配置内容能力,存在错误输入的记录。
拒绝服务攻击:攻击者通过控制大量用户发起 DDoS 攻击,耗尽 DNS 域名服务的资源。原因是被攻击服务器没有将这些恶意流量与正常流量区分的能力。
提升防御能力的措施:
- 通过非对称加密验证身份 —— DNSSEC
- DNS-over-TLS(DoT)
- DNS-over-HTTPS (DoH)
- 安全的网络体系架构,如采用真实网络地址保障每一台接入网络计算机的安全性,建立快速 DDoS 溯源机制
- 专用 DNS 请求过滤系统,针对 DNS 数据包进行恶意流量进行过滤
- 分布式部署降低攻击对性能的影响
案例:http://blog.nsfocus.net/dns-ddos-attack-analysis/
Ch9 DNS 安全
1、简述 DNS 缓存策略在性能提升和引入安全威胁上具有的影响。
DNS缓存策略通过缓存域名解析结果,可以提高访问网站的速度和性能。当用户首次访问域名时,DNS解析器会向域名服务器查询并获取域名的IP地址,然后将结果缓存起来。对于后续的请求,如果域名解析结果在缓存中存在,解析器将直接使用缓存的结果,避免了重复的网络查询,从而提高了响应速度和整体性能。
DNS会有引入缓存中毒攻击的风险(包括本地与远程两种),攻击者可以对用户进行DNS欺骗攻击。
2、请描述一下 DNS 基础设施中,stub resolver, public resolver, open resolver,authoritative name server,recursive name server,iterative name server,root name server 之间的关系和区别。
- stub resolver:本地主机上运行的DNS解析工具
- public resolver:ISP 提供的递归解析器,接收用户请求并递归查询全球DNS层次结构
- open resolver:接受来自任何源IP地址的DNS查询请求,通常不对请求进行验证或限制,并可能容易受到滥用
- authoritative nameserver:负责存储特定域名的DNS记录的服务器,当递归解析器发起请求时,权威名称服务器提供域名的实际解析结果
- recursive nameserver:提供递归查询服务的DNS解析器,接收来自Stub Resolver的查询请求,并在DNS层次结构中逐级查询
- iterative nameserver:提供迭代查询服务的DNS服务器,当递归名称服务器发起查询请求时,迭代名称服务器会返回当前已知的最接近所需解析结果的名称服务器,供请求方迭代查询
- root nameserver:存储顶级域名的权威名称
Ch10 真实源地址验证
1、简述真实源地址认证SAVA体系结构的三个设计原则和原因。
- 可扩展性:应具备可扩展性以适应复杂的网络环境以及新的需求,支持在整个互联网不同位置、不同粒度需求的大规模部署
- 可演进:SAVA体系结构建立在当前互联网体系结构基础上,整体的技术依附于现有体系结构实现,因此必须要求技术对应协议与现有体系结构协议兼容;SAVA的部署是一个持续性的过程,所以会出现部分区域已经部署SAVA,而部分区域尚未部署SAVA的情况,需要考虑在发展部署的过渡阶段SAVA自身的兼容性;考虑到网络中不同运营商的存在,SAVA体系结构还应允许运营商可以采用各自不同的实现,SAVA系统各部分相互独立,且功能彼此不依赖
- 安全性:SAVA体系结构的构建是支撑真实可信互联网体系结构实现,通过将安全性赋予现有体系结构,弥补其信任缺失的问题,所以保障SAVA自身的安全性至关重要
2、面向地址域的真实源地址认证SAVA体系结构的三层结构是什么?简述每层结构的作用。
- 接入网:接入层面提供主机粒度的源地址验证能力,以保证地址使用的可追溯性
- 地址域内:在地址域内层面提供前缀级别的保护能力,以保护核心设备不被攻击
- 地址域间:在地址域间层面提供地址域级别的联盟内可验证能力以及保护自身不被伪造的能力
Ch11 公钥基础设施安全
1、一个典型的PKI应用系统由哪几部分组成?
PKI体系通常由终端实体用户、证书认证机构(CA)、证书注册机构(RA)和证书数据库,以及安全服务器组成
2、认证机构CA的职能有哪些?
- 产生自身证书并传输给安全服务器
- 验证用户的身份,产生、分配并管理PKI结构下的所有用户的证书
- 核心功能就是发放和管理数字证书
- 负责用户证书的黑名单登记和发布
Ch12 分布式系统安全
1、请解释分布式系统当中的日蚀攻击和拜占庭节点攻击
日蚀攻击:针对网络节点发现以及邻居节点维护两个过程进行攻击,使得受害节点的所有邻居节点都是由攻击者所控制的恶意节点。攻击者可以选择性的转发对攻击者有利的消息给受害者,从而配合其它网络攻击;攻击者可以完全隔离受害者与网络中其它节点的信息交互。
拜占庭节点攻击:拜占庭节点攻击是指在分布式系统中,存在一些恶意节点(拜占庭节点)的情况下,通过这些节点传播错误或错误信息以破坏系统的一致性和正确性。拜占庭节点可能会发送虚假或冲突的信息,或者完全拒绝发送信息,从而导致系统出现错误的决策或行为。
Ch13 应用安全
1、请解释XSS攻击的原理,简述一种防御方法并简单分析原因
攻击原理:跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,用户浏览该页之时嵌入其中 Web 里面的脚本代码会被执行。
防御方法:对用户输入的直接要在网页中渲染的部分进行检查和处理,转义或替换其中可执行的部分,从而防止其输入以可执行的方式出现在网页中。
2、请解释SQL注入攻击的基本原理和防御的基本原理
攻击原理:SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,导致攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,进而实现在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
防御方法:将数据与代码分离。(1) 后端代码检查输入的数据是否符合预期,严格限制变量的类型。(2) 对进入数据库的特殊字符(',",<,>,&,*,;等)进行转义处理,或编码转换。(3) 所有的查询语句建议使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中,即不要直接拼接 SQL 语句。(4) 严格限制Web应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度的减少注入攻击对数据库的危害。
Ch14 人工智能安全
1、请解释人工智能算法的鲁棒性和可解释性
深度学习领域的鲁棒性可以理解为模型对数据变化的容忍度,鲁棒性越高的模型,其识别噪声和对抗样本的准确率越高。鲁棒性差的模型,在受到对抗攻击时,容易给出高可信度的错误结果。鲁棒性差的模型,在更换数据集时(如训练数据更换为测试数据或投入使用时的实际数据),性能往往表现出巨大的差异。
可解释性就是让人类了解模型做出某一决策的深层原因。在解决现实生活中的数据科学问题时,如果能够更透明地了解模型的决策过程,往往有助于人们对模型建立起一定程度的信任。
2、请简述投毒攻击和对抗攻击的不同点,请利用“自动驾驶”为场景各举一例
数据投毒攻击在训练阶段实行,强调的是通过混入特殊样本的形式,直接对模型进行修改,而不修改测试数据。对抗样本攻击在测试阶段实行,在不改变目标机器学习系统的情况下,通过构造特定输入样本以完成欺骗目标系统的攻击。
在自动驾驶场景下,数据投毒攻击的例子为将红绿灯的标注信息反置等,对抗样本攻击为在现实世界中构造具有某种特殊样式的 pattern 使得 model 在见到这种 pattern 时会输出错误的结果。