6.9 KiB
| title | author | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2024-2025学年下学期期末 |
|
2024-2025学年下学期期末试卷(不全)
分析题
-
计算机安全 CIA 三元组指的是哪三个方面(3分) , 并简述对称加密和非对称加密如何实现这三个方面的(7分) ?
答案:
CIA 三元组是- 机密性 Confidentiality
- 完整性 Integrity
- 可用性 Availability
对称加密:
- 机密性: 使用单一密钥对数据进行加密和解密
- 完整性: 使用消息验证码来确保消息的完整性, 而消息验证码基于对称加密
- 可用性: 不提供
非对称加密:
- 机密性: 使用接收方的公钥加密, 只有私钥持有者可以解密
- 完整性: 使用数字签名确保完整性, 发送方用私钥对消息摘要签名, 接收方用其公钥验证
- 可用性: 不提供
-
基于口令的认证中, 使用 256位哈希值 和 16位盐值。用户的口令长度为8个字符, 每个字符可能是:
- 26个小写字母(a–z)
- 26个大写字母(A–Z)
- 10个数字(0–9)
-
给出哈希值的总数量以及盐值的总数量;(4分)
答案:
- 哈希值的总数量:
2^{256} - 盐值的总数量:
2^{16}
- 哈希值的总数量:
-
给出口令的总数量;(2分)
答案:
每一位有
26+26+10=62个选择,故总数量为62^{8}
-
攻击者需要进行多少次攻击? 请简述具体的攻击过程。(4分)
答案:
需要进行
62^{8}次攻击 考虑已知盐值的情况:- 获取目标用户的口令哈希H与盐值S
- 随机猜测一个口令P
- 计算 Hash(S + P),并与H比较,若匹配则攻击成功
-
为了实施 DNS 放大攻击, 攻击者必须触发中间服务器产生足够大的 DNS 响应数据包, 以超过目标组织网络链路的容量。目标系统的链路带宽是 8 Mbps
-
每个 DNS 响应数据包大小为 1000 字节(忽略封装开销) , 攻击者每秒必须触发多少个这样的数据包才能淹没该链路? (3分)
答案:
\frac{8 Mb/s}{1000 Byte/packet} = 1000 packet/s
-
攻击者发送的请求数据包为60字节, 请问占据了链路中多少带宽? (3分)
答案:
带宽为:
1000packet/s * 60Byte/packet = 480 kbps
-
给出检测DNS放大攻击的两种方法。(4分)
答案:
- 流量异常检测:监控网络流量,特别是DNS响应包的数量和大小
- DNS查询日志分析:检查DNS服务器的查询日志,如果发现大量重复的查询(如针对特定域名的ANY查询)来自相同源IP(攻击者伪造的受害者IP),则可能为攻击
-
-
回答下列问题
-
恶意软件的三种传播机制? (3分)
答案:
- 感染内容
- 漏洞利用
- 社会工程学
-
恶意软件的四种有效载荷? (2分)
答案:
- 系统损坏
- 攻击代理
- 信息窃取
- 隐蔽
-
为了防止恶意软件攻击, 如何加固操作系统? (5分)
答案:
- 及时更新补丁
- 设置访问控制
- 提高用户的安全意识
- 加强检测与扫描
- 等等
言之有理即可
-
-
以下是一段 PHP 登录验证代码
// 获得用户输入的ID和passwd $username = ...; $password = ...; // SQL查询 SELECT username, password FROM users WHERE username = '$username' AND password = '$password'; // 验证逻辑 if ($user && password_verify($password, $user['password'])) { // 登录成功 echo "登录成功!欢迎访问系统。"; } else { // 登录失败 echo "登录失败:无效的ID或密码。"; }注:SQL中, mysql_real_escape_string()函数可以转义特殊字符, 使其不能发挥作用
-
上述代码存在什么攻击漏洞? 攻击者如何绕过安全检查利用该漏洞? (5分)
答案:
代码存在SQL注入攻击漏洞,攻击者可以在用户名输入中注入SQL代码,例如输入:' OR 1=1 -- ,这会导致查询返回所有用户(忽略密码条件)
-
除了 SQL 注入攻击漏洞, 还可以利用哪些攻击方法? 并解释原因。(5分)
答案:
- 暴力破解:代码中没有登录尝试次数限制或账户锁定机制,攻击者可以自动化尝试大量用户名和密码组合,直到找到正确凭证
- 口令哈希泄露:通过SQL注入或其他方式获取数据库中的密码哈希值后,攻击者可以使用彩虹表或暴力破解工具离线破解密码
- 跨站脚本攻击(XSS):如果登录成功或失败消息中直接输出用户输入(如用户名),且没有过滤,攻击者可能注入恶意脚本,在用户浏览器执行
-
如何检测和过滤用户输入? 请修改代码以修复漏洞。(5分)
答案:
- 使用预处理语句(参数化查询)防止SQL注入。
- 对输入进行验证和过滤,如使用filter_var函数检查邮箱格式的用户名,或限制输入长度
- 转义输出以防止XSS
修改sql部分代码如下:
$stmt = $pdo->prepare("SELECT username, password FROM users WHERE username = ?"); $stmt->execute([$username]); $user = $stmt->fetch();
-
给出检测用户输入的一种方法。(5分)
答案:
一种检测用户输入的方法是使用白名单验证。例如,对于用户名,只允许字母、数字和特定字符,使用正则表达式进行匹配:
if (preg_match('/^[a-zA-Z0-9_]+$/', $username)) { // 输入有效 } else { // 输入无效,拒绝处理 }
-