diff --git a/docs/courses/软件工程学院/计算机安全/2024-2025学年下学期期末.md b/docs/courses/软件工程学院/计算机安全/2024-2025学年下学期期末.md
index d60aaeb..235d5c2 100644
--- a/docs/courses/软件工程学院/计算机安全/2024-2025学年下学期期末.md
+++ b/docs/courses/软件工程学院/计算机安全/2024-2025学年下学期期末.md
@@ -1,6 +1,8 @@
---
title: 2024-2025学年下学期期末
author:
+ - name: タクヤマ
+ url: https://github.com/takuyamafuru
- name: KirisameVanilla
url: https://vanillaaaa.org/
- name: psycho Lee
@@ -25,12 +27,12 @@ author:
对称加密:
- 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
+ - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- 可用性: 不提供
非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
+ - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
+ - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- 可用性: 不提供
@@ -47,22 +49,9 @@ author:
答案:
- CIA 三元组是
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
-
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+ - 哈希值的总数量: $2^{256}$
+ - 盐值的总数量: $2^{16}$
@@ -72,22 +61,8 @@ author:
答案:
- CIA 三元组是
-
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
-
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+
+ 每一位有 $26+26+10=62$ 个选择,故总数量为 $62^{8}$
@@ -97,22 +72,12 @@ author:
答案:
- CIA 三元组是
-
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
-
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+
+ 需要进行 $62^{8}$ 次攻击
+ 考虑已知盐值的情况:
+ - 获取目标用户的口令哈希H与盐值S
+ - 随机猜测一个口令P
+ - 计算 Hash(S + P),并与H比较,若匹配则攻击成功
@@ -124,22 +89,8 @@ author:
答案:
- CIA 三元组是
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
-
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+ $\frac{8 Mb/s}{1000 Byte/packet} = 1000 packet/s$
@@ -149,24 +100,9 @@ author:
答案:
- CIA 三元组是
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
-
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
-
-
+ 带宽为:
+ $1000packet/s * 60Byte/packet = 480 kbps$
***
@@ -174,23 +110,9 @@ author:
答案:
- CIA 三元组是
-
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
-
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+ - 流量异常检测:监控网络流量,特别是DNS响应包的数量和大小
+ - DNS查询日志分析:检查DNS服务器的查询日志,如果发现大量重复的查询(如针对特定域名的ANY查询)来自相同源IP(攻击者伪造的受害者IP),则可能为攻击
***
@@ -201,22 +123,10 @@ author:
答案:
- CIA 三元组是
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
-
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+ - 感染内容
+ - 漏洞利用
+ - 社会工程学
@@ -226,22 +136,11 @@ author:
答案:
- CIA 三元组是
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
-
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+ - 系统损坏
+ - 攻击代理
+ - 信息窃取
+ - 隐蔽
@@ -251,23 +150,14 @@ author:
答案:
- CIA 三元组是
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
-
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+ - 及时更新补丁
+ - 设置访问控制
+ - 提高用户的安全意识
+ - 加强检测与扫描
+ - 等等
+ 言之有理即可
***
@@ -298,22 +188,8 @@ author:
答案:
- CIA 三元组是
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
-
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+ 代码存在SQL注入攻击漏洞,攻击者可以在用户名输入中注入SQL代码,例如输入:' OR 1=1 -- ,这会导致查询返回所有用户(忽略密码条件)
@@ -323,22 +199,10 @@ author:
答案:
- CIA 三元组是
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
-
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+ - 暴力破解:代码中没有登录尝试次数限制或账户锁定机制,攻击者可以自动化尝试大量用户名和密码组合,直到找到正确凭证
+ - 口令哈希泄露:通过SQL注入或其他方式获取数据库中的密码哈希值后,攻击者可以使用彩虹表或暴力破解工具离线破解密码
+ - 跨站脚本攻击(XSS):如果登录成功或失败消息中直接输出用户输入(如用户名),且没有过滤,攻击者可能注入恶意脚本,在用户浏览器执行
@@ -348,22 +212,19 @@ author:
答案:
- CIA 三元组是
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
+ - 使用预处理语句(参数化查询)防止SQL注入。
+ - 对输入进行验证和过滤,如使用filter_var函数检查邮箱格式的用户名,或限制输入长度
+ - 转义输出以防止XSS
- 对称加密:
+ 修改sql部分代码如下:
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+ ``` php
+ $stmt = $pdo->prepare("SELECT username, password FROM users WHERE username = ?");
+ $stmt->execute([$username]);
+ $user = $stmt->fetch();
+
+ ```
@@ -373,22 +234,16 @@ author:
答案:
- CIA 三元组是
- - 机密性 Confidentiality
- - 完整性 Integrity
- - 可用性 Availability
+ 一种检测用户输入的方法是使用白名单验证。例如,对于用户名,只允许字母、数字和特定字符,使用正则表达式进行匹配:
- 对称加密:
-
- - 机密性: 使用单一密钥对数据进行加密和解密
- - 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- - 可用性: 不提供
-
- 非对称加密:
- - 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- - 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- - 可用性: 不提供
+ ``` php
+ if (preg_match('/^[a-zA-Z0-9_]+$/', $username)) {
+ // 输入有效
+ } else {
+ // 输入无效,拒绝处理
+ }
+ ```
diff --git a/docs/courses/软件工程学院/计算机安全/计算机安全_软件工程学院_2024Spring_期末_回忆版.md b/docs/courses/软件工程学院/计算机安全/计算机安全_软件工程学院_2024Spring_期末_回忆版.md
index 5e915b6..8cd6e68 100644
--- a/docs/courses/软件工程学院/计算机安全/计算机安全_软件工程学院_2024Spring_期末_回忆版.md
+++ b/docs/courses/软件工程学院/计算机安全/计算机安全_软件工程学院_2024Spring_期末_回忆版.md
@@ -15,21 +15,56 @@ author:
### 1
-(1)简述数字签名的原理 **(2分)**
+(1) 简述数字签名的原理 **(2分)**
-(2)数字签名技术是如何保证数据的完整性、不可否认性和来源认证的? **(6分)**
+(2) 数字签名技术是如何保证数据的完整性、不可否认性和来源认证的? **(6分)**
-(3)数字签名与消息认证技术有什么联系与区别? **(2分)**
+(3) 数字签名与消息认证技术有什么联系与区别? **(2分)**
+
+解:
+
+(1) 简述定义即可,不赘述
+
+(2)
+
+考虑如下情况:Bob要向Alice发送一个带数字签名的消息,进行签名需要用到Bob的私钥:没有Bob的私钥无法修改消息,这保证了完整性;只有Bob的公钥能正确验签,这保证了来源认证与不可否认性。
+
+(按照这个思路分点阐述即可)
+
+(3)
+
+- 联系:两者都用于验证消息的真实性和完整性
+
+- 区别:
+ - 数字签名基于非对称加密,提供不可否认性
+ - 消息认证技术基于对称加密,无法提供不可否认性
+
+(言之有理即可)
### 2
现在考虑一个TCP SYN欺骗的情景。假设服务器端的TCP连接表有512个表项,对于每个未建立的连接,每隔30s重新发送一次连接请求,重复7次后将表项删除。
-(1)简述TCP SYN欺骗攻击的原理 **(2分)**
+(1) 简述TCP SYN欺骗攻击的原理 **(2分)**
-(2)假设初始时TCP连接表已被洪泛,为保证TCP连接表始终被填满,攻击者应以什么速率发送数据包?**(4分)**
+(2) 假设初始时TCP连接表已被洪泛,为保证TCP连接表始终被填满,攻击者应以什么速率发送数据包?**(4分)**
-(3)假设一个TCP数据包为40字节,忽略成帧消耗,求攻击消耗的带宽 **(4分)**
+(3) 假设一个TCP数据包为40字节,忽略成帧消耗,求攻击消耗的带宽 **(4分)**
+
+解:
+
+(1) 简述定义即可,不赘述
+
+(2)
+
+- 每个表项存活时间:30s × 7 = 210s
+- 需在210s内填满512个表项:
+ - 速率 = 512 / 210 ≈ 2.44 包/秒
+
+(3)
+
+- 每个TCP包40字节:
+ - 带宽 = 2.44 包/秒 × 40 字节/包 × 8 比特/字节 = 780.8 bps
### 3
@@ -43,29 +78,93 @@ void hello(char * tag){
}
```
-(1)假设输入长度为19字节时程序运行不会崩溃,那么输入“Computer Security”后,程序会输出什么?**(3分)**
+(1) 假设输入长度为19字节时程序运行不会崩溃,那么输入“Computer Security”后,程序会输出什么?**(3分)**
-(2)假设输入长度为19字节时程序不会崩溃,而输入长度为20字节时程序崩溃,如果想要修改tag的话,输入长度应至少为多少字节?为什么?**(4分)**
+(2) 假设输入长度为19字节时程序不会崩溃,而输入长度为20字节时程序崩溃,如果想要修改tag的话,输入长度应至少为多少字节?为什么?**(4分)**
-(3)修改上述代码以避免安全隐患。**(3分)**
+(3) 修改上述代码以避免安全隐患。**(3分)**
+
+解:
+
+(1) 对于栈溢出问题,我们首先要对函数调用机制有充分的了解,根据压栈机制,调用函数时被压栈的顺序为:
+
+参数 $\rightarrow$ 返回地址 $\rightarrow$ 旧栈指针 $\rightarrow$ 局部变量
+
+那么什么时候程序会崩溃呢?返回地址被篡改时肯定会崩溃,因为程序返回时会访问到非法的地址;旧的栈指针被篡改时也会崩溃,因为程序虽然能正常返回到原运行位置,但是指示旧栈帧的指针被篡改到非法地址,破坏了上下文,根据压栈顺序,肯定是旧栈帧的指针会先被覆盖。
+
+所以,根据(2)中的题设,输入19字节不崩溃而输入20字节崩溃(注意gets函数会在末尾添加一个'\0'空字符),即可推测栈内分配了20字节空间:当输入为20字节长度时,'\0'空字符添加在第21个字符处,应该正好开始覆盖在旧栈帧的帧指针处,导致崩溃。
+
+在经过实际的gdb测试后,我们得到具体栈帧结构如图所示(以4字节,即32位为一行):
+
+```c
++---------------------------+
+| ... (main函数的栈帧) |
++---------------------------+ <--- hello函数栈帧底部 (高地址)
+| 参数: char *tag 指针 |
++---------------------------+
+| 返回地址 (ret addr) |
++---------------------------+
+| 旧栈帧的帧指针 (Saved ebp) |
++---------------------------+ <--- 栈顶指针(ESP)在进入函数后移动
+| ebx (储存GOT表的位置) |
++---------------------------+
+| 内存padding (16字节对齐?) |
++---------------------------+
+| 局部变量: char data[8]-[11]|
++---------------------------+
+| 局部变量: char data[4]-[7] |
++---------------------------+
+| 局部变量: char data[0]-[3] |
++---------------------------+ <--- 栈顶 (低地址)
+```
+
+那么,我们就能解答此题如下:
+
+(1) 程序会输出 "your \ is Computer Sec" (data为输入的前12字节)
+
+(2) 要修改tag的话,至少要输入28字节,理由见上述分析与栈帧结构图
+
+(3)
+
+使用安全函数fgets即可,例如:
+
+```c
+void hello(char * tag){
+ char data[12];
+ fgets(data, sizeof(data), stdin);
+ printf("your %s is %s\n", tag, data);
+}
+```
+
+注:关于(1)中的tag,我们询问了陈志立教授,得到的回答如下:“(1)题中的本意主要是问data变量对应的打印输出,题目可能不够严谨。在具体回答时,也可以把tag的内容用某个符号表示,比如\”。我们感谢陈老师的澄清!
### 4
-(1)三种云服务部署模型分别是什么?**(3分)**
+(1) 三种云服务部署模型分别是什么?**(3分)**
-(2)若想在云上搭建自己的操作系统,应该采取哪种部署模型?为什么?**(3分)**
+(2) 若想在云上搭建自己的操作系统,应该采取哪种部署模型?为什么?**(3分)**
-(3)如何加固云上的操作系统?**(4分)**
+(3) 如何加固云上的操作系统?**(4分)**
+
+解:
+
+(1) SaaS, PaaS, IaaS
+
+(2)
+
+私有云,用户可自主定制硬件、网络及安全策略,满足操作系统底层架构的灵活部署需求,同时资源独享避免与其他租户冲突,适合对数据隐私和合规性要求高的场景
+
+(3) 参考书上相关章节,言之有理即可
### 5
-(1)用户认证方法有哪些?**(4分)**
+(1) 用户认证方法有哪些?**(4分)**
-(2)为防止明文口令泄露和离线字典攻击,应如何储存口令相关信息?**(4分)**
+(2) 为防止明文口令泄露和离线字典攻击,应如何储存口令相关信息?**(4分)**
-(3)假设一个用户有8个属性,每个属性有10个值,如果采用基于角色的访问控制,应设置多少个角色?**(4分)**
+(3) 假设一个用户有8个属性,每个属性有10个值,如果采用基于角色的访问控制,应设置多少个角色?**(4分)**
-(4)考虑sql语句:
+(4) 考虑sql语句:
```sql
SELECT * FROM userdata WHERE UID = $_GET["uname"] AND PASSWORD = $_GET["password"];
@@ -73,4 +172,18 @@ SELECT * FROM userdata WHERE UID = $_GET["uname"] AND PASSWORD = $_GET["password
该语句有无安全隐患?攻击者如何在不知道任何用户名和口令的情况下,如何攻击得到全部信息?**(4分)**
-(5)为防范(4)中的攻击,应采用何种防火墙?为什么?**(4分)**
+(5) 为防范(4) 中的攻击,应采用何种防火墙?为什么?**(4分)**
+
+解:
+
+(1) 个人知道的信息;个人持有的物品;静态生物特征;动态生物特征
+
+(2) 加盐,简述加盐原理
+
+(3) $10^8$ 个
+
+(4)
+
+有隐患,向uname字段输入: OR 1=1 -- 以绕过密码检测
+
+(5) 应采用应用级防火墙,因为要对sql语句进行检查,这是应用层上的机制