【网安攻防07】理论真题

347 阅读11分钟

题目来源: 香港大学Information Security: Attacks and Defense 课程 2024 May (Part A)

部分图片源自HKU讲义,题目源自香港大学图书馆,版权归香港大学所有,搬运侵删

免责声明

以下所有关于黑客技术、病毒攻击、拒绝服务或任何其他计算机系统攻击手段的讲义、资料和讨论内容,仅用于教育目的。这些内容不得用于对任何计算机系统发起攻击或造成损害,也不以任何方式鼓励任何人从事此类行为。

本文所涉及的所有技术讨论仅供学习和研究使用。作者不对任何人使用这些信息用于非法用途负责。阅读本文即表示您同意不会将文中讨论或披露的任何技术手段用于实施网络攻击等违法行为。

本文遵循学术研究和技术交流的目的,拒绝为任何恶意行为提供指导。如有违法使用,使用者需自行承担所有法律责任。

选择题

Q1 Trojan Program

image.png

(I) A Trojan program (horse) usually consists of two parts, an overt (open) program and a covert (hidden) program. [Backdoor and threat intelligence system, HKU COMP7904, Page 17] ❌

(II) Tripwire确实是通过保存系统文件的完整性校验值来检测文件是否被修改。Tripwire stores the cryptographic hash values of system files. By checking the stored hash values and the computed hash values of the existing system file, one can determine if the existing version is a legitimate version! [Backdoor and threat intelligence system, HKU COMP7904, Page 20] ✔

(III) 内核级rootkit通过直接修改内核运行时的行为来隐藏自己,而不是修改磁盘上的文件。Kernel-level rootkits are much harder to detect as they do NOT modify any key system files.[Backdoor and threat intelligence system, HKU COMP7904, Page 21] ✔

答案:D

Q2 Merkle Tree

image.png

这道题是关于使用Merkle树(哈希树/雜湊樹)来保护审计日志(审计记录)的安全性设计。

首先解释一下基本概念:

  • 审计日志:记录系统中发生的重要事件的记录,比如谁在什么时候做了什么操作
  • Merkle树:一种树形数据结构,每个非叶节点都是其子节点的哈希值,用于快速验证数据完整性

例如, 下图中L3数据块发生错误(比如数据被修改了),错误会传导到计算hash(L3),接着传导到计算hash(Hash1-0+Hash1-1),最后传导到根哈希,导致根哈希的不一致,可以说,任何底层数据块的变化,最终都会传导到根哈希。另外如果根哈希不一致,也可以通过Merkle树快速定位到导致不一致的数据。

image.png

题目提出的保护方案有两个步骤:

  • 把多条审计记录组合成一个块(block)
  • 用这些块作为叶子节点来构建Merkle树,每个块的哈希值是通过把块内所有记录连接在一起计算得到的

(I) Merkle树只能检测到数据被改动,但阻止不了整块数据被删除 ✔

(II) 如果要验证某条记录,必须公开同一块中的所有记录;这也是对的,因为哈希值是基于整个块计算的,单独一条记录无法验证 ✔

(III) 这样的Merkle树会比每条记录单独作为叶子节点的树更矮:对的,因为叶子节点少了,树自然就矮了 ✔

例:

方案1:每条记录作为一个叶子节点

Root
    H1-4      H5-8
  H1-2 H3-4  H5-6 H7-8
 H1 H2 H3 H4 H5 H6 H7 H8
 R1 R2 R3 R4 R5 R6 R7 R8

方案2:每2条记录组成一个块作为叶子节点

Root
    H1-2      H3-4
 H(R1+R2) H(R3+R4) H(R5+R6) H(R7+R8)

这样做的好处是:

  • 计算量减少
  • 存储空间减少
  • 验证路径更短

但缺点是验证单条记录时需要公开整个块的数据。

答案:D

Q3 VeraCrypt

image.png

(I) 这是正确的。VeraCrypt确实允许用户创建隐藏加密卷,这是其重要特性之一。 隐藏卷功能可以提供可否认性,是VeraCrypt的核心功能。✔

(II) 虽然VeraCrypt确实使用强大的加密算法,但密码强度仍然非常重要。密码是加密系统安全链中的关键环节,弱密码会降低整个系统的安全性。❌

(III) VeraCrypt在创建卷时总是预留两个头部的空间,这些空间在没有隐藏卷时填充随机数据。当有隐藏卷时,第二个头部存储隐藏卷信息。加密的头部数据和随机数据在统计学上是不可区分的;没有正确的密码,无法确定第二个头部是否包含真实的隐藏卷信息。✔

双层卷结构

A. 标准卷(外层卷):

  • 第一层加密卷,包含普通文件
  • 使用第一个密码可以访问
  • 通常存放一些不那么敏感的文件

B. 隐藏卷(内层卷):

  • 位于标准卷的未使用空间内
  • 使用第二个独立的密码访问
  • 用于存储高度敏感的数据
  • 从技术上无法证明其存在

工作原理

  • 整个加密卷看起来就像随机数据
  • 标准卷中的空闲空间与隐藏卷的加密数据在统计学上无法区分
  • 当被迫提供密码时,用户可以只提供标准卷的密码
image.png

VeraCrypt的可否认加密(Plausible Deniability)机制:

  • 加密文件或消息的存在是可以否认的
  • 验证者无法证明明文数据的存在

用户的两个选择(图中用户图标两侧):

  • 可以否认加密卷的存在,验证者无法证明
  • 可以承认加密卷存在并提供密码(标准卷的密码)
image.png

答案:B

Q4 Four File Attributes

image.png image.png

[Backdoor and threat intelligence system, HKU COMP7904, Page 21]

Access time; modify time; change time; creation time

(I) 正确的;例如:(III) ✔

(II) 这个不完全严谨,在现代linux系统中,access就是访问(读取或者写入)的时间。 比如more、less、vim等操作,不管改变内容与否,只要是读取或者写入,访问时间就会更新。✔

(III) 这个说法也是正确的。传统的Unix系统实际上只记录三个时间(访问、修改、变更),而不记录创建时间。之前没有这样做的一个原因可能是没有就文件创建时间达成共识,即文件对象(inode)的创建时间还是文件内容(数据)的创建时间,以及从备份恢复文件时该做什么。✔

修改时间(modify time)和变更时间(change time)有什么区别?

  • 修改时间指文件内容被改变的时间; 变更时间指文件元数据被改变的时间(例如权限变更)
  • 像Linux中的"touch"这样的简单工具就可以用来修改文件的时间戳。

答案:D

Q5 SQL Injection

image.png

[Techniques of Application attacks, HKU COMP7904, Page 81]

(I) 这是一种用于访问后端数据库的攻击, 正确 ✔

(II) 如果没有输入检查,攻击者可以使用 SQL 注入发送特制的用户名和密码字段,从而毒害原始 SQL 查询。SQL注入攻击主要是由于开发者没有正确验证和过滤用户输入造成的。当应用程序直接将用户输入拼接到SQL查询语句中而不进行适当的验证和转义时,就会产生安全漏洞。正确 ✔

(III) 注入攻击成功后,可能进行的操作有:

  • 向数据库添加新数据
  • 修改数据库中的现有数据
  • 获取他人密码
  • 实际执行操作系统命令、ping 服务器、列出目录,甚至创建文件

正确 ✔

答案:E

Q6 Network

image.png

[Information gathering, HKU COMP7904, Page 52]

(I) 私有IP地址是一段保留的IP地址。只是使用在局域网中,在Internet上是不使用的。 私有IP地址的范围有:

  • 10.0.0.0 - 10.255.255.255
  • 172.16.0.0 - 172.31.255.255
  • 192.168.0.0 - 192.168.255.255

私有IP地址范围是全球统一的。❌

(II) whois 命令是一个用于查询域名所有者信息的工具,而不是用于DNS查询。DNS查询通常使用nslookup或dig命令。❌

(III) 即使ping命令没有响应,目标主机也可能是活着的。✔

答案:A

Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址一起交给IP层协议。

可能的原因包括:

  • 防火墙封锁了ICMP包
  • 目标主机配置为不响应ping
  • 网络路径问题

Q7 Salt

image.png

盐(Salt),在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。

彩虹表(英语:Rainbow table)是预先计算好的,用于逆运算加密散列函数的表,常用于破解加密过的密码散列。彩虹表常常用于破解长度固定且包含的字符范围固定的密码(如信用卡、数字等)。这是以空间换时间的典型实践,比暴力破解(Brute-force attack)用的时间少,空间更多;但与储存密码空间中的每一个密码及其对应的哈希值(Hash)实现的查找表相比,其花费的时间更多,空间更少。使用加盐的密钥派生函数可以防止彩虹表破解。

(I) 错误: 盐值通常是完整使用的,而不是只使用"随机部分"。❌

(II) 正确:如果所有密码使用相同的盐值,那么彩虹表攻击仍然有效,因为盐值本质上就变成了密码的一个固定扩展部分。✔

使用单一salt值的情况:如果数据库和salt一起泄露,攻击者需要重新生成一个针对这个特定salt的彩虹表。这比完全没有salt的情况要好,因为攻击者不能直接使用预计算好的彩虹表;但一旦生成了新的彩虹表,就可以用来破解数据库中所有用户的密码。这是一次性的计算成本。

为每个用户使用独立salt值的情况:每个用户的密码都使用不同的salt;攻击者必须为每个用户分别生成彩虹表;计算成本呈线性增长(与用户数量成正比):这使得批量破解变得极其困难和昂贵。

(III) 错误。暴力破解时,盐值通常是已知的(存储在数据库中)。攻击者只需尝试所有可能的密码(2^256种组合)。盐值不会增加暴力破解的复杂度,它只防止预计算攻击。 ❌

答案:D

Q8 PBKDF2

image.png

[password cracking, HKU COMP7904, Page 60]

PBKDF2(Password-Based Key Derivation Function)是一个用来导出密钥的函数,常用于生成加密的密码。 它的基本原理是通过一个伪随机函数(例如HMAC函数),把明文和一个盐值作为输入参数,然后重复进行运算,并最终产生密钥。如果重复的次数足够大,破解的成本就会变得很高。而盐值的添加也会增加“彩虹表”攻击的难度。

image.png image.png

(I) 错误。派生密钥的长度并不直接关系到密码的安全性;PBKDF2的安全性主要取决于迭代次数(iterations)和所使用的哈希函数的强度。❌

(II) 错误。PBKDF2必须使用带密钥的伪随机函数(PRF)。PBKDF2将用户的密码作为PRF的输入;通过多次迭代运算来增加计算开销。这个过程本身就实现了key stretching的目的。❌

(III) 错误。每次运行PBKDF2时,盐值(salt)本身就可以是随机生成的,这引入了非确定性。❌

答案:D

PBKDF2本身的计算过程是确定性的:

  • 给定相同的输入(密码、盐值、迭代次数等参数)
  • 必须产生相同的输出(派生密钥)
  • 这种确定性对于密码验证是必需的

但是整个密码生成过程可以包含非确定性元素:

  • 盐值可以是随机生成的
  • 每次生成新密码时可以使用不同的盐值
  • 这样即使相同的密码输入,由于盐值不同,最终产生的哈希值也会不同

所以:PBKDF2的函数本身必须是确定性的(相同输入得到相同输出);但整个密码生成系统可以包含非确定性元素(通过随机盐值)

参考