OUC中国海洋大学网络空间安全导论2023期末复习笔记
题型
选择(25*2)
文献阅读(8):CFI
填空(12*1)
解答(22):会涉及到实验内容,题目会出现代码
判断(8*1):四个对的,四个错的
第一节 互联网发展漫话
阿帕网的历史
建立前提
NCP
如何将数据信息传遍整个网络且只有接收者才能真正打开这个包
TCP/IP
如何在不同的计算机系统间进行通信,让不同的计算机共享信息
时间线
诞生时间: 1969年(20世纪60年代末,二战后冷战时期)。
诞生地点: 美国(UCLA 等四所高校/研究机构)。
主导机构: 美国国防部高级研究计划局(ARPA,现 DARPA)。
历史地位: 全球第一个运营的分组交换网络,现代互联网的鼻祖。
第二节 网络空间及网络空间安全
安全目标
保密性
保护信息内容不会泄露给未授权的实体
业务数据、网络拓扑、流量特征
防止被动攻击
可用性
保证资源的授权用户能够访问到应得资源或服务
防止对计算机可用性得攻击(拒绝服务攻击)
路由交换设备、服务器、链路带宽
完整性
保证信息不被未授权地修改
或者如果被修改可以检测出来
防止主动攻击,比如篡改、插入、重放
网络空间安全问题
基于数学困难问题的逻辑证明方法
基于博弈论的仿真设计方法
基于真实环境的实证分析方法
第三节 网络空间安全中的数学
零知识证明
用交互式零知识证明三色问题
- 承诺:A 先给图着好色,然后随机置换颜色。A将每个顶点的颜色放进一个”信封“(加密/哈希),并把所有信封放在桌子上交给B
- 挑战:B随机从图中选择一条边
- 响应:A打开连接该边的两个顶点的信封,展示里面的颜色
- 如果两个颜色不同且属于约定的三种颜色,则本次验证通过
控制理论

基本理论观点
机器与生物一般都是通过负反馈来达到控制的目的
博弈论

非合作博弈
两人零和博弈
参与者的利益完全对立:一方的收益就是零一方的损失
博弈的求解
有鞍点
寻找收益矩阵中的鞍点

无鞍点
需要概率学的知识。可以按照数学期望计算收益

混合策略
石头剪刀布,混合策略求解得到石头、剪刀、布的出招概率都为 1/3
极小极大定理
任何一个两人零和博弈都有一个混合策略的解
纳什均衡
每个两人博弈都存在至少一个纯策略或者混合策略均衡
纳什均衡:稳定 ≠ 集体最优
囚徒困境
两人都沉默是最优解。但是一个人供诉有更好的结果
这里更好的是合作博弈
最优化理论
概率论
第四节 网络空间安全需求和机制

沙箱
安全目标
沙箱的安全目标主要是方法恶意程序对系统环境的破坏
沙箱通常用于执行未经测试或不受信任的程序
具有什么本质特征
隔离。通过隔离程序的运行环境,限制程序执行不安全的操作,防止恶意程序对系统困难造成的破坏,限制可信性不能保证的程序。
沙箱的本质是面向程序的访问控制。①防止控制能够对权限进行管理,防止信息越权篡改和滥用。②基于访问控制,沙箱可以限制程序的资源访问能力,即满足其正常的访问需求,又保证整体系统那圈
沙箱也可以被视为虚拟化技术的一种特定实例。
- 虚拟机:能够模拟完整的主机,但在虚拟机内部软件的操作不会对外部系统造成负面影响,实现了沙箱”隔离“的效果
内部工作机理
沙箱内的程序可以访问沙箱内部资源,不可访问或有限制访问沙箱外部资源。
入侵容忍
安全目标
在攻击可能存在的前提下使系统的机密性、完整性和可用性能够得到一定程度的保证
入侵容忍技术允许系统存在安全漏洞并假设攻击能够成功
核心机制
错误容忍和处理:阻止产生灾难性失效,具体包括错误检测和错误恢复
错误检测:限制错误传播、除法错误恢复和故障处理机制。包括完整性检测和日志审计
错误恢复:使系统从入侵造成的错误状态中恢复,恢复关键数据和服务
可信计算
安全目标
总体目标是提升计算机系统安全性和可信性,包括系统数据的完整性、数据的安全存储和平台可信性的远程证明等
可信计算安全认为,解决外部入侵问题重点需要从芯片、硬件结构、操作系统等方面综合采取措施保证系统的安全和可信,从而在根本上提高安全性能,达成安全可信的目标
核心思想
本质上是信任问题
移动目标防御(MTD)
安全目标
增加攻击者的难度,使攻击难以达成,从而瓦解攻击
核心思想
动态 + 异构。通过增加系统的随机性和不可预测性来防范网络攻击。比如说:IP地址跳变、端口跳变、地址空间随机化、指令集合随机化。
本质在于:以不确定的方式进行”转移变换“,使攻击者难以摸清系统内部变换的规律,无法找到攻击的突破口
零信任网络
核心思想
从来不信任、始终在校验
所以需要用到认证技术,尽心持续的信任评估
实现方法
主要在控制平面中的核心逻辑组件实现
第五节 数据加密

第六节 隐私保护
隐私的基本方法、特征
是什么 泛化 匿名化
隐私的特征
个人相关的信息、个人权利、与个人相关、与秘密相关、与法律相关
是通过与主题关系量化的

面向数据发布的隐私保护技术
基于限制发布的隐私保护
有选择的发布原始数据、不发布或发布精度较低的敏感数据。集中于数据匿名化
基于数据失真的隐私保护
对原始数据进行扰动,隐藏真实数据。失真后的数据保持某些特性不变,但攻击者不能根据失真数据重构出真实的原始数据
基于数据加密的隐私保护
通过密码机制实现其他参与方对原始数据的不可见性以及数据的无损失性
面向数据挖掘的隐私保护技术
这里可以根据”搜广推“来联合理解
隐私保护的关联规则挖掘
规则挖掘:寻找在同一事件中出现的不同项目的相关性
两类方法影响规则挖掘:变换(修改支持敏感规则的数据),隐藏(不修改数据,而是隐藏生成敏感规则频繁项集)
这里两类方法我也没看懂,问问AI。
隐私保护的分类挖掘
在数据集上构造分类函数或者分类模型,将数据集中的数据项映射到给定的类别中,以用于类别的预测
隐私保护的聚类挖掘
将数据集中的数据根据相似性进行分类,最后的分类结果中同一个类别中的数据相似性越大越好,不同类别中的数据的相似性越小越好。
匿名化
传统的匿名化方法
隐藏用户身份和数据的对应关系
比如说,过滤掉姓名和家庭住址(这种主码信息,能确定一个人身份的信息),有点限制发布的意思
链接攻击
传统的匿名化方法无法抵抗链接攻击。也就是说,我们通过准标识符,联合医疗数据集和其他公共数据集可以推断出谁患了什么病
比如刚入学导员发了每个人的姓名和学号,后续发成绩排名的时候去掉了姓名,只保留了学号。但学号-姓名表和学号-成绩表一对照,我们就知道谁考了多少分了。
解决方法——K-anonymity
要求任意一条记录与其他至少 k-1 条记录相似而不可分
也就是说我们要进一步过滤准标识符
同质性攻击
在上述表中,如果一名选民的年龄和邮政编码符合第一个等价类要求,那么攻击者可推断该选民可能患有心脏病
背景知识攻击
符合等价类,并结合背景知识(语义,生活常识),进一步推断缩小范围。
解决方法——I-diversity
每一个等价类的敏感属性至少有一个不同的值
但我们注意到这里没有考虑语义信息。
解决方法——t-closeness
以上三种方法不能够完全保护隐私不被泄露。因为对所有敏感属性提供了相同程度的保护并且没有考虑语义关系,造成了不必要的信息损失。
数据匿名化方法
泛化
将准标识符的属性用跟一般的值或区间代替
底层的取值可以泛化为高层的取值,树中每层的取值构成一个泛化域
域泛化
值泛化
差分隐私
与匿名化相比,差分隐私是一种严格的可证明的隐私保护模型

差分顾名思义就是找前后差距。我们要求修改某条数据后查询结果几乎不变,使用数据失真来实现。
同态加密
对密文直接进行操作,且计算结果的解密值与对应明文的计算结果相同
安全多方计算(重点)
解决了一组互不信任的参与方之间保护隐私的协同问题
多家医院想要合作使用医疗数据进行科学研究、分析预测客人患病情况等,但为了保护患者隐私,不能直接共享数据
多个商家想要合作促销,统计共同的用户画像,但是又不想让对方知道自己掌握的信息
解决方法

脱敏包括上述的匿名化、泛化。但存在上述问题
安全多方计算协议(MPC)
在无可信第三方的情况下如何安全地计算一个约定函数,同时要求每个参与方除了计算结果外不能得到其他参与方地任何输入信息

三种安全模型
计算模型
安全多方计算地计算模型主要有基于“可信第三方”地计算模型、交互计算模型和外包计算模型
可信第三方
但第三方真的完全可信吗?
交互计算模型
这里牵扯到很多密码学的知识,比如说密码学必考榜上的秘密共享什么的。从百万富翁问题可以直观感受
百万富翁问题
一个安全双方计算问题

存在可信第三方
有一个人来提供天平,这个提供天平的人是知道一切的
双方的行为可信
双方的行为互不可信
输入:
- Alice和Bob的财富值 i,j
- Alice拥有公钥 \(E_a\), \(D_a\)是私钥
过程
第七节 硬件安全

测信道攻击
利用硬件系统的旁路信息实施攻击
基于从密码系统的物理实现种获取的信息,例如事件信息、功率消耗、缓存使用等
测信道攻击需要的设备成本低、攻击效果显著,严重威胁了密码设备的安全性
防护
第八节 软件系统安全
Slammer蠕虫:DDOS恶意程序
Morris蠕虫:栈溢出漏洞
一般威胁模型
攻击者位于受保护的软件系统外部,仅能通过正常IO方式与受害进程进行交互
- 攻击者可以构造任意输入并接受受害进程输入校验
- 攻击者无法直接读写系统下进程的内存,无法直接干预处理器上指令的执行(即攻击者的权限低于所能使用的软件的权限)
SQL slammers:
- 扫描UDP 1434端口定位SQL Server服务,发送携带恶意负载的UDP包
- 使sqlsort.dll发生栈溢出:覆盖栈种保存的返回地址,跳转执行恶意代码,劫持进程的控制流
- 劫持进程控制流后,借助kernel32.dll等动态链接库,恶意调用UDP发包函数,实现蠕虫复制
攻击目标
攻击者通过构造恶意输入,使进程产生异常行为
- 进程直接崩溃:HTTP服务器拒绝服务
- 恶意函数的调用:Slammers调用UDP发包函数实现蠕虫复制
- 权限提升:攻击者获得执行任意命令的权限,或者获得管理员账户的执行权限
使受害进程产生攻击者期望的异常行为的攻击效果被称为进程的控制流劫持
操作系统内存管理基础
-
进程虚拟地址空间的分布和管理:用户空间与内核空间的隔离
-
用户区内存包含的六个重要区域:文本段、数据段、BSS段、堆区、内存映射段和栈区
-
内存权限管理:包括不同区域的存储内容、权限、增长方向和分配时间
基础的栈区攻击方案
栈区内存的根本作用:保存主调函数的状态信息以在调用结束后恢复主调函数状态并创建被调函数的状态信息。
这个太熟了,略。ret2text,ret2shellcode,ret2syscall,ret2libc...
基础的堆区攻击方案
堆溢出攻击
攻击者越界访问并篡改管理数据结构,实现恶意内存读写的攻击。是最常见的攻击方式,可以实现恶意数据的覆盖写入,进而实现进程控制流劫持
- 覆盖malloc_chunk首部为无意义内容,在堆管理器处理管理元数据时将造成崩溃
- Heap Overlay(构造堆块重叠):是一种病态堆区内存分配状态,同一堆区逻辑地址被堆管理器多次分配。我们可以通过堆溢出修改size域来实现。
- Unlink攻击:用溢出数据覆盖前/后向链表指针(fd,bk),在unlink宏调用时可以将任意内存地址当作未分配的堆块使用。最终实现任意地址读写
- Use-After-Free:使用已被释放的堆区内存。被free函数释放的堆块内存仍然可以被继续使用,当再次调用malloc分配内存时,会同时两个指针指向同一堆块造成堆块重叠。
- Double-Free:多次释放同一堆块,被多次的堆块将被堆管理器分配多次,最终产生堆块重叠(多在Fast-Bin中)
- Heap Over-read:堆溢出攻击越界写入并覆盖堆区数据,而Heap Over-read则直接越界读出堆区数据,造成信息泄露
- OpenSSL的TLS实现中,在处理心跳包时未能对长度字段做合理校验,导致攻击者可以构造恶意数据包,越界读取心跳包数据之后的堆区内存;这些内存包含了私钥等重要信息。
- Heap Spray:申请大量的堆区空间,并将其中填入大量的滑板指令(NOP)和恶意攻击代码。堆喷使用户空间存在大量恶意代码,若EIP指向堆区时将命中滑板指令区,受害进程最终将“滑到”恶意代码
Heap Overlay需要满足的条件
- 存在错误的输入检查逻辑,使攻击者可以进行溢出(溢出一个字节即可)
- 对应的受害程序应能产生符合条件的堆区布局,也就是连续分配的三个堆
- 且攻击者可以操纵控制流实现CHunk B的释放和重新分配,并能在分配后进行读写
我们用A的溢出来修改B的size,让B包含C,然后Realloc B,接着我们就可以操纵C的内容了。
基础防御方案
W^X
写和执行不可兼得。即每一个内存页拥有写权限或者执行权限,不可兼具两者。
当W ^ X生效时,返回至溢出数据的栈溢出攻击失效,因为无法执行位于栈区的注入的恶意代码
在Linux下的别名为NX,通常我们就说栈区不可执行
ASLR
堆虚拟空间当中的基地址进行随机初始化。随机化的对象包含了:共享库的基地址(ret2libc失效),栈区的及地址(ret2shellcode失效),堆区的基地址
Stack Canary
在EBP后插入一段信息,函数返回时验证这段信息是否被修改过
SMAP,SMEP
是两种基础的内存隔离技术
- SMAP:禁止内核访问用户空间的数据
- SMEP:进制内核执行用户空间代码,预防权限提升的重要机制
高级控制流劫持方案
系统调用的过程
- 将EAX设置为对应的系统调用号
- 将EBX,ECX设置为系统调用参数
- EIP指向并执行中断触发指令,触发0x80中断
面向返回地址编程(ROP)
可绕过 NX 和 ASLR
全局偏执表劫持
可绕过NX和ASLR
延迟绑定...Ret2libc...
- 攻击者通过读PLT确定要被修改的受害GOT表项的地址
- 攻击者读取这一GOT表项,得到任意库函数的内存映射段地址
- 攻击者将得到的地址加一个偏置(libc_base),得到希望被恶意调用的函数的内存映射段地址
- 攻击者将这一地址写入定位好的受害GOT表项中
防御方法
RELRO:将GOT表项映射到只读区域上,一定程度上预防了对GOT表的攻击。
高级保护方案
控制流完整性保护
原论文
Control-flow integrity principles, implementations, and applications
论文解读
Control-Flow Integrity(控制流完整性) 的提出与发展历程
Control-Flow Integrity(控制流完整性) 的原理
基本概念
控制流完整性(CFI)依赖于程序的控制流图
控制流图(CFG)是一个程序的抽象表现;是用在编译器中的一个抽象数据结构,代表了一个程序执行过程中会遍历到的所有路径;它用图的形式表示执行过程内所有基本块执行的可能顺序
核心思想
限制程序运行中的控制流转移,使其始终处于原有的控制流图所限定的范围。主要分为两个阶段
- 通过二进制或源代码分析得到控制流图,获取转移指令目标地址的列表
- 运行时检验转移指令的目标地址是否与列表中的地址相对应;控制流劫持会违背原有的控制流图,CFI则可以检验并阻止这种行为
一系列改进
- 2005 Martin et al. :改进的CFI中CFG的构建过程只考虑将可能收到攻击的间接调用、间接跳转和RET指令,以约束开销
- Chao Zhang, et al. :提出CFI的低精准度版本CCFIR;及那
代码动态载入技术
信息流保护
IFC,保证受害进程无法具备正常执行之外的能力。解决的根本问题时 访问控制
I/O子系统保护
第九节 网络协议安全和网络安全协议
TLS既是密码协议也是网络协议
RSA签名是密码协议
网络协议安全

TCP/IP
横向安全
- DNS劫持
- ARP污染
- 嗅探监听
- 地址伪造、路由劫持
- TCP劫持,DoS攻击
链路层安全
ARP欺骗与污染
是正对以太网地址解析协议的一种攻击技术
可让攻击者称为中间人,获取局域网上的数据包,甚至可篡改数据包,同时迫使受害主机无法正常接收报文
- A主机在本地ARP缓存中,检查主机B的MAC地址
- 如果没有找到,询问192.168.1.2的硬件地址,将ARP请求帧广播到本地网络上的所有主机
- 主机B确定ARP请求的IP地址与子集的IP地址匹配,将主机A的IP地址和MAC地址映射,添加到本地ARP缓存中
- 主机B单播回应A
- 此时主机A并不会验证ARP回复包的真实性,由此映出一个局域网攻击方式ARP欺骗:恶意主机C,企图冒充B,欺骗A
- 回应的信息是B的IP和C的MAC地址
网络嗅探与网络监听
是一种网络流量数据分析的手段,常见于网络安全攻防技术使用,也有用于业务分析领域
具有两面性
底层技术支持——eBPF
数据包在内核中直接被BPF虚拟机过滤,只有匹配的包才被复制到用户空间
网络层安全
源地址假冒攻击
-
可以连续伪造IP数据包(不能收)
-
可以伪造有来连接协议的第一个数据包
-
如果找到缺陷,也可以伪造有连接协议的连续数据包(劫持)
IP地址伪造通常是攻击者需具备的基本能力和手段,也是进行后续恶意数据注入、连接劫持等攻击行为的基础条件,如TCP连接劫持攻击、DNS污染攻击能
IP分片攻击
IP分组先分片,再重组。分组的碎片化发生在源主机或中间路由器上,而重组往往都在目的接收端发生。
拒绝服务攻击
理论上一个IP分组的最大长度是65535字节,攻击者可以发送一个长度超过65535字节的IP分组,迫使接收端在对分片重组时,有概率造成异常错误(逻辑边界漏洞,现在已经修复了)
早期的一些TCP/IP协议栈实现,存在内存分配错误,会发生实现分配的65536字节缓冲区溢出,从而导致系统崩溃或挂起,造成拒绝服务攻击
其他的利用IP分片进行DoS攻击的技术:如伪造分片和原始合法分片错误重组,导致TCP或UDP报文的校验和出错,正常报文的丢失
污染攻击
在原始报文被分片、传输过程中,攻击者伪造一些分片,注入到正常分片流中,篡改原始报文内容,从而形成对合法流量的污染
攻击者需要具备的能力有
- 源地址欺骗
- IPID的猜测(Identification)
- 原始报文校验和的欺骗等
基于分片的污染攻击技术,已被广泛应用到DNS缓存污染、流量拦截等场景中
基于分片的DNS缓存污染
路由安全
AS(恶意攻击者)宣告一个其实际上并不控制的IP地址前缀,进行虚假路由宣告,如果虚假路由宣告未被有效过滤,就有可能发生路由劫持攻击
BGP劫持
OSPF攻击
攻击者通常假装成合法的域间路由器,伪造多个OFPS协议的LSA报文广播出去,迷惑其他路由器路由表的计算
传输层安全
拒绝服务攻击
是指对任何服务的干涉,使其可用性降低或者失去可用性。例如一个计算机系统崩溃,或其带宽耗尽,或其硬盘被填满,导致其不能提供正常的服务,就构成拒绝服务
最常见的DoS攻击有计算机网络带宽攻击和连通性攻击
计算机网络带宽攻击
以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽
连通性攻击
用大量的连通请求冲击计算机,使得所有可用的操作系统资源都被耗尽
SYN Flooding
是针对TCP协议主要的DoS攻击方式之一,通过发送大量伪造的TCP请求,使被攻击方资源耗尽,CPU满负荷或内存不足
- 攻击者向目标服务器发送大量伪造的SYN数据包,通常会使用欺骗性的IP地址
- 服务器响应每个连接请求,并分配存储和计算资源,维护半连接状态
- 攻击者继续发送更多的SYN数据包,每个新的SYN数据包的达到都会消耗服务器的资源,最终资源消耗殆尽,服务器就无法正常工作
防御方法:SYN Cookie
TCP劫持攻击
是指一个TCP连接外的非法攻击者,将自己伪造的TCP报文,注入到TCP连接双方的合法数据流中,进而对数据进行破坏包括有
- 伪造控制报文、如RST报文等,恶意阻断该连接
- 伪造数据报文,污染数据流
要实现TCP劫持攻击,攻击者必须要正确预测32位随机的序列号和确认好,以及16位随机的源端口号
网络安全协议
IPSec
主要防御IP分片攻击。通过对IP协议的分组进行加密和认证,来保护基于IP协议的网络传输。一般我们先对报文进行ESP封装(DES、3DES、AES),再对报文进行AH封装
认证机制
提供数据源认证、数据完整性校验和防报文重放功能,它能保护通信免受篡改,但不能防止窃听,适合用于传输非机密数据
常用的认证算法有:MD5,SHA-1等(这俩不太行吧)
加密机制
提供加密、数据源认证、数据完整校验和防报文重放功能。
两种工作模式
传输模式
只是传输层数据被用来计算AH或ESP头,AH或ESP头以及ESP加密的用户数据被放置在原IP包头后面
主要用于主机和主机之间,端到端通信的数据保护
隧道模式
用户的整个IP数据包被用来计算AH或ESP头,AH或ESP头以及ESP加密的用户数据被封装在一个新的IP数据包中
主要用于私网与私网之间,通过公网进行通信,建立安全VPN通道
也像是信封。我们在原来的信上再套一层信封
入侵检测系统(IDS)
TLS协议(重点)
前身是安全套接层协议(SSL),是一种广泛采用的安全性协议,旨在促进Internet上通信的隐私和数据安全性。
TLS时目前采用最广泛的一种安全性协议,应用于多个网络场景,如:对Web应用程序和服务器之间的通信进行加密保护,还可用于电子邮件、消息传递和IP语音加密等
组成部分
握手协议——四阶段消息交换

- 使用握手协议建立TLS会话
- 建立在TCP连接上
- 可以重用于多次连接
- 客户端-服务器之间的单向关联
- 规定了密码相关的参数
身份的安全
鉴别服务器的身份:请知名整数机构(CA)签发公钥
鉴别用户:证书(CA签发的,机构内部的,手工生成并部署的),IP地址或口令(不安全)
算法与协议的安全
更改密码规范协议
- 使用记录协议通信
- 仅包含1字节,payload=1
- 将挂起状态改变为当前状态(原子操作)
- 更新密码算法组
警告协议
字节1:1表示普通警告,2表示致命警告(立即停止)
字节2:警告代码
记录协议
MAC-then-Enc
心跳协议
定期发送,表明协议实体的可用性。即确认存活性,在连接空闲时产生消息活动。
心脏滴血攻击
攻击者发送一个心跳包,载荷其实只有一个单词 "bird"(4 字节),但在长度字段里却恶意填了 65535 (64KB)。(Heap Over-Read)
密码协议:认证
简单的鉴别协议(对称)
- P、Q存在长期有效的共享密钥K
- 存在重放攻击
改进后的鉴别协议(对称)
也就是说我先看看你真知道密钥吗,再进行通信,解决了重放攻击
- 必须有提前共享的密钥,可扩展性差,不能灵活增加主题
- 没有第三方,存在密钥爆炸问题
| 步骤 | 动作 | 技术细节与意图 |
|---|---|---|
| 1. 宣称身份 | \(P \to Q: \text{"I am P"}\) | \(P\) 发起连接请求,告知 \(Q\) 自己是谁。此时 \(Q\) 并不信任 \(P\)。 |
| 2. 发起挑战 | \(Q: \text{generate nonce } n\) | \(Q\) 生成一个随机数 \(n\) (Nonce)。Nonce 的核心在于“只使用一次”,用于确保后续响应的时效性。 |
| 3. 传送挑战 | \(Q \to P: n\) | \(Q\) 把明文 \(n\) 发给 \(P\)。这被称为“挑战(Challenge)”。 |
| 4. 计算响应 | \(P: \text{compute } m = \{P, Q, n\}_k\) | \(P\) 将自己的身份 \(P\)、对方身份 \(Q\) 和随机数 \(n\) 打包,并用共享密钥 \(k\) 进行对称加密。 |
| 5. 回送响应 | \(P \to Q: m\) | \(P\) 把加密后的密文 \(m\) 发给 \(Q\)。这被称为“响应(Response)”。 |
| 6. 验证响应 | \(Q: \text{verify } \{P, Q, n\}_k \stackrel{?}{=} m\) | \(Q\) 用同样的密钥 \(k\) 计算一遍 \(\{P, Q, n\}_k\),并与收到的 \(m\) 比对。 |
| 7. 判定 | \(\text{Accept / Reject}\) | 如果一致,说明 \(P\) 确实持有密钥 \(k\),验证通过;否则拒绝。 |
基本的鉴别协议-From woo-lam
基于口令的鉴别协议,直接提供口令给验证方
- f可以时Hash函数
- 参数可以加salt
- f的计算可以放在被验证方
存在并行会话攻击:攻击者E不需要能够真的给出密钥,只需要发给P,P当作挑战做了交给攻击者,攻击者再发给Q即可。
Woo-Lam协议-非对称
| 步骤 | 动作 (公式) | 谁在对谁说话 | 这一步到底在干什么? | 关键安全意义 |
|---|---|---|---|---|
| 1 | "I am P" |
\(P \to Q\) | \(P\) 说:“你好 \(Q\),我是 \(P\),我想登录。” | 启动会话,告知身份声明。 |
| 2 | generate nonce n |
\(Q\) 自己 | \(Q\) 生成一个随机数 \(n\)。 | Nonce 保证了这次对话是“新鲜”的,不是以前截获的旧包。 |
| 3 | \(n\) | \(Q \to P\) | \(Q\) 说:“既然你是 \(P\),那你证明给我看。这是题目:\(n\)。” | 这是一个挑战 (Challenge),要求对方用私钥处理。 |
| 4 | \(m = \{P, Q, n\}_{k_P^{-1}}\) | \(P\) 自己 | \(P\) 用自己的私钥 (\(k_P^{-1}\)) 对身份和题目进行加密(签名)。 | 核心动作:只有真 \(P\) 才有私钥,这步证明了“我确实有 P 的钥匙”。 |
| 5 | \(m\) | \(P \to Q\) | \(P\) 说:“这是我用私钥算出的结果 \(m\)。” | 提交响应 (Response)。 |
| 6 | "I need P's public key" |
\(Q \to A\) | \(Q\) 此时拿到了 \(m\),但他还没办法解开。他去问权威机构 \(A\):“给我 \(P\) 的公钥。” | \(Q\) 不信任任何非官方渠道给的公钥,只信权威机构 \(A\)。 |
| 7 | retrieve kp... |
\(A\) 自己 | \(A\) 从数据库里查到 \(P\) 的公钥 \(k_P\)。 | 确保公钥是从官方数据库提取的。 |
| 8 | \(c = \{P, k_P\}_{k_A^{-1}}\) | \(A\) 自己 | \(A\) 把 \(P\) 的公钥打包,用 \(A\)(权威机构)的私钥 签名,生成证书 \(c\)。 | 证书的本质:这就是一张盖了“公安局”红公章的身份证明。 |
| 9 | \(P, c\) | \(A \to Q\) | \(A\) 说:“给,这就是经过我认证的 \(P\) 的公钥证明。” | 交付数字证书。 |
| 10 | recover (P, kp)... |
\(Q\) 自己 | \(Q\) 用 \(A\) 的公钥(预装在系统里)解开证书 \(c\)。 | 信任链传递:解开了 \(A\) 的签名,说明里面拿到的 \(k_P\) 一定是真货。 |
| 11 | verify (P, Q, n) = {m}kp |
\(Q\) 自己 | \(Q\) 用刚拿到的真公钥 \(k_P\) 去解开第 5 步收到的 \(m\)。 | 终极验证:看解出来的数字是不是刚才发的 \(n\)。 |
| 12 | accept / reject |
\(Q\) 判定 | 一致则通过,不一致滚蛋。 | 完成整个闭环。 |
协议分析
测试/模糊测试
尽可能穷举交互序列,看有无安全问题
优点:便于实施,易于理解,误报少
缺点:穷举无法考虑所有情况,漏报多
技巧:通过划分等价类的方式,满足覆盖率,使无穷变有穷;通过自动分析协议的代码,为自动化测试生成有价值的输入序列
(有界)模型检测
穷举有限步骤的所有序列
建模:{通信者+攻击者} * 并发 * 异步
第十节 公钥基础设施
PKI概述
数字证书
是包含用户身份信息、公钥以及CA数字签名的数据文件
主体将其身份信息和公钥提交给CA认证中心,CA用自己的私钥对主体公钥和身份ID进行前面,生成由公钥、身份ID和CA签名三部分组成的证书
利用数字证书进行加密
- 甲方准备好要传送给乙方的信息(明文)
- 甲获取乙的数字证书,并验证该证书有效后,用乙方证书中的公钥加密信息(密文)
- 乙方收到加密的信息后,用自己证书对应的私钥解密密文,得到明文信息。
加密主要是保证机密性,不要让别人看到,所以用私钥解密保证除了自己没人能知道发给我的消息是什么。用公钥加密,任何人都可以发送消息给我。
利用数字证书进行签名
- 甲准备好要传送给乙的信息(明文)
- 甲计算该信息的信息摘要
- 甲用自己证书对应私钥消息摘要加密得到数字签名,并将其附在信息后
- 甲将附带有数字签名的信息传给乙方
- 乙方验证甲方数字证书后用证书中的公钥解密数字签名
签名要让别人知道(认证),所以用私钥加密能证明你的身份(持有这个独一无二的私钥),用公钥解密能确认你身份的正确性(或者消息没被篡改)。同时对消息hash保证了完整性。
利用数字证书同时进行签名和加密(重点)
- 甲准备好要传送给乙的信息(明文)
- 甲计算明文hash值(哈希)
- 甲用自己证书对应的私钥对消息摘要进行加密得到甲的数字签名,并附在信息后(签名)
- 甲用乙方证书中的公钥 加密 信息和签名的混合体(密文)
- 乙方收到加密数据,用自己证书对应私钥解密密文,得到信息和数字签名的混合体(解密)
- 乙方验证甲方证书有效后,用甲方证书公钥解密数字签名。得到信息摘要,验证签名(验证)
证书格式
PKI的作用
公钥基础设施:以公钥技术为基础,提供具有普适性安全服务的基础设施
旨在从技术上解决网上身份认证、信息的完整性和不可抵赖等安全问题
PKI:由CA,数字证书等组成的公钥与身份验证体系
CA
CA:可信赖的第三方权威机构,负责给网络实体颁发身份证明书,将用户所持有的公开密钥与其身份信息结合在一起。
CA的职能

PKI证书撤销
建立监督机制
- 证书透明机制
- 建立监督机制
- 建立证书状态日志
使用区块链技术
利用去中心化技术,实现资源的可信保障,避免中心化带来的安全隐患,保证基础设施的安全可信
应用场景
数据加密传输
发送方
- 发送方产生对称密钥
- 使用对称密钥加密敏感数据
- 发送方使用接收方的公钥加密对称密钥
接收方
- 使用私钥拆开“数字信封”
- 使用得到的堆成密钥解密敏感数据
- 使用发送方公钥验证数字签名
HTTPS
IPSec VPN
RPKI
第十一章 分布式系统安全
分布式系统概述
如今的分布式系统通常指在不同地理位置的系统组件所构成。这些系统组件通过网络传递消息完成动作协调,从而相互协作完成共同的任务
分布式系统的起源
- 并行计算:D825,一种四处理器计算机,可以访问多达16个共享的内存模块
- ARPANET;互联网的前身之一,于20世纪60年代末被推出,分布式系统开始拓展到主机这一粒度
- LAN:1970年,以太网等局域网技术的出现,便是这分布式系统开始广泛部署
分布式系统的组成
- 交互网络:实现协作的前提,系统组件基于交互网络实现消息交互
- 分布式算法:协调分布式组件之间的交互,确保系统稳定运行
- 信任机制:解决不同系统组件之间的信任问题,实现可信写作
分布式系统的三个属性(重点)
由于是分布式系统,所以一定存在P特点,其次我们要在C和A之间做权衡。比如说更新操作结束后,G1无法联系G2,这个时候要关闭G2,等到G2重连并完成修改后才能访问G2。这里我们优先考虑了一致性(不能查询到脏数据),但是牺牲了可用性(G2拒绝请求)。反之亦然
所以在网络信息丢失(P)的物理环境下,C和A具有天然的互斥性
一致性
分布式系统中各正确节点的所保存的同一变量状态信息都是一致的
可用性
分布式系统在收到客户端的请求后,必须给出回应,不能让客户端陷入无限等待中
分区容错性
分布式系统容忍其中节点出现分区,即一个区域中发往另一个区域中节点的数据包全部丢失,区域间无法进行通信
分布式系统安全
根源
主要体现在交互网络、分布式算法和信任三个方面
- 攻击者可以攻击交互网络,监听交互过程中的隐私信息会造成网络分区
- 协作过程中可能会出现冲突,故障等问题,从而影响一致性和可用性
- 系统内部可能存在恶意组件,系统和客户端交互时也存在信任问题
交互网络安全
P2P对等网络技术
建立
- 网络节点发现
- 新加入的节点获取系统中其他节点的ip地址,并存储在本地的网络信息表中
- 邻居节点维护
- 节点从本地的玩过信息表中选择ip地址,并请求建立邻居关系
P2P安全威胁:日蚀攻击
挤占入向连接
攻击者控制大量节点主动向受害者请求建立邻居关系
挤占出向连接
攻击者向受害者发送大量由自己所控制的节点地址信息,等待受害者主动请求建立连接
基于路由劫持的攻击
分布算法的安全
- 缺乏全局时钟
- 物理时钟:基于时钟同步机制完成物理时钟同步
- 逻辑时钟:基于共识对事件发生的顺序达成一致
- 并发:同一时刻,系统中的不同组件可能面临来自多个客户端的大量并发请求
- 故障:系统组件在协作过程中可能出现故障,从而导致信息的短暂丢失
时钟同步问题
三个客户端几乎同时发送请求,请求由时钟不同步的服务器处理。服务器生成日志,时钟不同步导致三个请求所标志的事件相差大。
时间同步算法:预测RTT
并发问题
数据库课里讲得很好了。加锁
故障容错技术
这个数据库讲得更好了,但是分布式系统中有自己的特色
Paxos
问题背景:分布式数据库系统中,各节点初始状态一致,部分节点可能出现故障。
主要目的:所有正确节点按相同顺序执行相同的操作下指令,所有正确节点得到一致的本地结果
主要思想
一个节点可以担任:提议者、接受者、学习者三种角色。多个节点存在,每个提议者单独提议各自的提案并广播给所有接收者效率低下,所以我们在提议者中选取一个领导者进行提议,其他提议者不参与提议。接收者选择需要接受的提案,然后对提议者(领导者)进行回应,当提议者收到超过半数接收者的回应后,则通知接收者最终接受提案
Raft
主要目标:在保证容错的基础上,设计一个更容易理解的故障容错技术
- 所有交易被发往Leader,由Leader为其发配序号发给所有Follower
- 当收到超过半数Follower的回应时,提交并执行交易,然后回复客户端
- Follower提交交易后,在后续的交互中通知Follower提交相同的交易
信任问题
零信任下访问的基本流程

访问控制
指系统按用户身份,以及该身份所在的策略组来限制用户对某些信息项的访问,或限制其对某些控制功能的使用的一种技术
- 基于角色的访问控制
- 基于属性的访问控制
- 基于信任管理的访问控制
信任评价模型
访问控制只能解决访问者的权限问题,但无法解决授权访问者作恶以及被访问者的信任问题
需要信任问题的场景:文件下载、资源共享、访问网站链接
由于信任导致的P2P文件共享问题
- 资源问题导致下载速度慢
- 下载到已经损毁的垃圾文件
- 下载到附带病毒得到恶意资源
解决方法
基于信任评价模型计算节点信誉值,并根据信誉值选择资源提供者
定义

例子

拜占庭容错
存在叛徒时,忠诚的将军们如何达到共识。
将军等价于计算机系统的部件
问题抽象
- 每个部队由一个将军领导
- 一共有n个将军,其中一些是叛徒
- 所有军队将敌方包围,观察敌军
- 将军间靠通信兵交流
目标
- 存在所有忠诚的将军采取同样的行动
- 少量叛徒无法使诚实的将军们接受一个坏的计划
不必识别出叛徒,只需要任务成果即可,


口头消息下三将军问题无解
第十二节 应用安全

Web安全
XSS:跨站脚本攻击
通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击
反射性XSS
攻击者发送带有恶意脚本参数的URL诱骗受害者点击
从HTTP请求读取信息并反射到HTTP应答中
比如说将有害内容作为参数附加在URL上,再将URL传播给受害者,这也是钓鱼攻击的常用的重要一环
存储型XSS
通过攻击者使用网络漏洞,将可执行的代码永久存在服务器中,从而任意访问被攻击网站的用户都会执行恶意代码的攻击
恶意内容被存储于服务器,之后被放入到网页中发给受害者。
防御方法
- 转义字符
- 建立字符白名单
CSRF:跨站请求伪造

防御方法
- 对Cokie设置SameSite属性
- 阻止第三方网站请求接口
- 请求时附带验证消息,比如验证码或者Token
SQL注入
点击劫持
URL跳转漏洞
OS命令注入攻击
内容分发网络

作用
- 加速了网站的访问
- 提供一定安全性:源服务器的IP被颖仓
RangeAmp攻击
燃尽了,后续略
重点
伪造与拒绝服务
安全协议与入侵检测
PKI
信任模型
安全协议:IPsec(少),TLS
协议安全:不安全的协议(密码),加密协议完整性协议(网上本地一回事,协议安全不研究这个),重放,认证协议!!!如何做安全分析
权衡问题。工程考要。批判性的思维,好的背后有代价。Internet不安全,为什么不安全
测验点PPT(只有第一节有)







浙公网安备 33010602011771号