软件安全与漏洞--软件安全设计

软件安全设计知识点

STRIDE威胁建模模型

STRIDE是微软提出的用于识别安全威胁的分类框架,它将威胁分为六大类,并为每一类提供了标准的分析视角:

  • 欺骗 (Spoofing):涉及身份伪造,如冒充合法用户。
  • 篡改 (Tampering):涉及数据的恶意修改,如修改文件或内存。
  • 抵赖 (Repudiation):涉及用户否认已执行的操作,缺乏审计追踪。
  • 信息泄露 (Information Disclosure):涉及敏感信息暴露给未授权者。
  • 拒绝服务 (Denial of Service):涉及耗尽资源导致服务不可用。
  • 权限提升 (Elevation of Privilege):涉及未授权获取更高权限。
软件设计阶段的核心工作

从技术与安全的双重维度来看,设计阶段主要包含以下关键任务:

  • 通用技术设计:包括体系结构设计(整体结构)、数据设计(数据结构转化)、接口设计(模块间通信)和构件级设计(内部逻辑与算法)。
  • 安全专项设计
    • 定义安全架构:确立安全原则(如最小权限)和关键组件。
    • 攻击面分析:识别并最小化可能被利用的入口点(API、端口等)。
    • 威胁建模:在设计阶段通过结构化方法(如STRIDE)识别潜在威胁。
软件架构设计及其安全性

架构设计是解决系统复杂度的关键,其安全性设计更是重中之重。

  • 架构设计的目的:作为沟通语言、体现早期关键决策、实现模型复用。
  • 安全性设计工作:在规划阶段定义安全需求,选择支持安全的技术(如云安全服务),并建立安全编码与测试标准。
  • 安全性分析 (如ATASM流程)
    • 目的:提前发现高风险漏洞,指导测试,满足合规(如等保)。
    • 过程:架构分析 → 威胁枚举 → 攻击面识别 → 数据敏感性评估 → 应用安全控制(纵深防御)。
安全模式

安全模式是针对特定场景下反复出现的安全问题的通用解决方案。

  • 价值:它封装了成熟的经验,使得开发人员无需"重复造轮子"。
  • 优势:利用安全模式可以降低安全设计的门槛,提高设计的准确性和效率,并促进团队间的安全沟通。
威胁建模全流程

威胁建模是一个系统性的识别、评估和缓解过程,通常包含五个步骤:

  • 定义安全要求:明确保护对象和合规目标。
  • 创建应用图:绘制数据流图,识别信任边界。
  • 识别威胁:利用STRIDE等工具找出潜在风险。
  • 缓解威胁:制定消除、防止或检测的对策。
  • 验证措施:通过测试确保缓解措施有效落地。

补充知识点

经典安全设计原则 (补充)

除了STRIDE和最小权限等,还有几个源自Saltzer和Schroeder的经典原则,常作为架构评审的检查清单:

  • 默认故障安全 (Fail-Safe Defaults):系统的默认配置应该是"拒绝访问"而非"允许访问"。除非显式授权,否则应禁止操作。
  • 完全仲裁 (Complete Mediation):每一次对对象的访问都必须经过权限检查,不能因为之前检查过就缓存权限(防止权限被撤销后仍被利用)。
  • 最少共享机制 (Least Common Mechanism):尽量减少多个用户或进程共享的机制(如全局变量、共享库),以防止通过共享通道无意中泄露信息。
  • 心理可接受性 (Psychological Acceptability):安全机制不应使资源访问过程比没有安全机制时更复杂,否则用户会绕过它。

安全左移与DevSecOps

这是一个关于"流程"和"文化"的重要概念:

  • 核心理念:将安全活动从软件开发生命周期(SDLC)的后期(测试、运维)向前移动到早期(需求、设计、编码)。
  • 成本效益:在设计阶段修复漏洞的成本远低于在发布后修复。
  • 实践
    • 需求阶段:定义安全需求(如加密标准、合规性)。
    • 设计阶段:威胁建模、架构审查。
    • 开发阶段:静态应用程序安全测试(SAST)、IDE安全插件。
    • 测试阶段:动态应用程序安全测试(DAST)、模糊测试。

零信任架构

这是现代网络安全架构的主流范式,是对传统"边界防御"(内网即信任)的颠覆:

  • 核心口号:"永不信任,始终验证"。
  • 关键要素
    • 身份验证:无论请求来自内网还是外网,都必须严格验证身份。
    • 微隔离:将网络划分为极小的区域,限制横向移动。
    • 最小权限:基于实时上下文(用户、设备、位置)动态授予最小权限。

软件安全成熟度模型

用于评估和提升组织软件安全能力的框架:

  • BSIMM (软件安全构建成熟度模型):基于观察现实世界项目的描述性模型,用于衡量组织在治理、智能、SDLC接触点等方面的成熟度。
  • SAMM (软件保证成熟度模型):由OWASP维护的规范性模型,帮助组织制定和评估软件安全战略。

安全测试技术分类

在设计之后,验证安全性的具体技术手段:

  • 静态应用程序安全测试 (SAST):白盒测试,在不运行代码的情况下分析源代码或二进制文件(如代码审计)。
  • 动态应用程序安全测试 (DAST):黑盒测试,在应用程序运行时从外部进行攻击模拟(如渗透测试)。
  • 交互式应用程序安全测试 (IAST):结合SAST和DAST,通过在应用内部插桩来实时分析代码执行。
  • 模糊测试 (Fuzzing):向系统输入大量随机、畸形数据,试图触发崩溃或异常,以发现未知漏洞。

供应链安全

随着开源组件的广泛使用,这已成为设计阶段必须考虑的重点:

  • 软件物料清单 (SBOM):列出软件中包含的所有组件、库及其依赖关系,以便在某个组件(如Log4j)出现漏洞时快速定位。
  • 第三方组件管理:确保引入的开源库来源可信且无已知漏洞。

单选题对应知识点

🛡️ 软件安全设计原则

这是本次考核的重点,涵盖了多个指导安全系统构建的核心思想。

  1. 不信任原则 (Principle of Non-Trust)

    • 核心思想:系统不应默认信任任何用户或外部输入,所有输入都必须经过严格的验证和清洗。
    • 题目体现:第1题中,对用户登录失败次数进行限制并返回模糊错误信息,就是为了防止攻击者利用系统反馈探测有效用户名,体现了对输入的不信任。
  2. 纵深防御原则 (Defense in Depth)

    • 核心思想:通过部署多层、多样化的安全控制措施来保护系统。即使某一层防御被攻破,其他层仍能提供保护。
    • 题目体现:第12题中,同时采用预处理语句、存储过程和输入验证来防止SQL注入,就是典型的多层防御策略。
  3. 权限分离原则 (Separation of Privilege)

    • 核心思想:将一个大的权限拆分为多个小的、独立的权限,并分配给不同的主体,以避免权力过度集中。
    • 题目体现:第6题将超级用户权限拆分给不同操作员,以及第7题不允许程序员审查自己的代码,都是权限分离的应用,旨在形成制衡,降低内部风险。
  4. 开放设计原则 (Open Design)

    • 核心思想:系统的安全性不应依赖于其设计或实现的保密性,而应依赖于密钥等少量秘密信息。公开的设计可以接受更广泛的审查,从而变得更健壮。
    • 题目体现:第8题明确指出"软件的安全性不应该依赖于设计的保密",这正是开放设计原则的直接描述。
  5. 安全控制原则 / 完全仲裁原则 (Security Control / Complete Mediation)

    • 核心思想:对受保护对象的每一次访问都必须经过权限检查,不能有例外。
    • 题目体现:第5题中"要求每一次访问受保护对象的行为都应当尽可能进行细粒度检查"就是对这一原则的描述。

🧩 威胁建模与STRIDE模型

威胁建模是在设计阶段系统化识别、量化和处理安全威胁的方法。

  • STRIDE模型 :是微软提出的一种威胁分类法,将威胁分为六类:
    1. 欺骗 (Spoofing):伪装成其他用户或实体。例如,第11题中攻击者盗用用户密码登录,就属于此类。
    2. 篡改 (Tampering):恶意修改数据。
    3. 抵赖 (Repudiation):用户否认自己执行过的操作。例如,第3题中用户下载数据后声称没有下载。消减措施包括数字签名、安全审计等。
    4. 信息泄露 (Information Disclosure):向未授权方暴露信息。
    5. 拒绝服务 (Denial of Service):使服务无法被合法用户使用。
    6. 权限提升 (Elevation of Privilege):获得比授权更高的权限。

🏗️ 软件架构与安全开发生命周期 (SDLC)

  • 软件架构类型:常见的架构视图包括逻辑架构、物理架构和系统架构。界面接口是系统的一部分,但不是架构类型。
  • 设计阶段的关键要素:在安全开发生命周期的设计阶段,核心任务包括定义安全架构、记录软件攻击面、进行威胁建模等。而制定编码准则属于编码阶段的任务。

🔐 数据安全与Web安全实践

  • 数据安全三要素 (CIA Triad)
    • 机密性 (Confidentiality):防止信息泄露给未授权个体。第10题中使用安全传输协议(如HTTPS)就是为了保证传输数据的机密性。
    • 完整性 (Integrity):防止数据被未授权篡改。
    • 可用性 (Availability):确保授权用户在需要时可以访问数据和资源。
  • Web参数安全
    • GET vs. POST:不应使用HTTP GET方法提交包含敏感信息的窗体,因为参数会暴露在URL中。应使用POST方法。
    • 输入验证:对所有用户输入(包括查询字符串、HTTP头信息)都应视为不可信并进行验证。

习题

1. (单选题, 2分)

某购物网站开发项目经过需求分析进入系统设计阶段,为了保证用户账户的安全,项目开发人员决定用户登录时如果用户名或口令输入错误,给用户返回"用户名或口令输入错误"信息,输入错误达到三次,将暂时禁止登录该账户,请问以上安全设计遵循的是哪项安全设计原则:( )

  • A. 最少共享机制原则
  • B. 经济机制原则
  • C. 不信任原则
  • D. 默认故障处理保护原则

正确答案:C

解析: 不信任原则强调在系统设计中不假设用户或外部实体是可信的,需对所有输入进行严格验证和限制。题干中"用户名或口令输入错误时返回模糊信息(不明确指出是用户名还是口令错误,避免信息泄露)"以及"错误三次后暂时禁止登录",均体现了对用户输入的不信任,通过限制和验证机制保障安全,符合该原则。

2. (单选题, 2分)

从安全性的角度来看,设计阶段的关键要素不包括的是( )。

  • A. 定义安全体系结构和设计指导原则
  • B. 记录软件攻击面的要素
  • C. 对威胁进行建模
  • D. 定义和推广一套最小的安全的编码准则

正确答案:D

解析: 定义和推广一套最小的安全的编码准则属于编码阶段的实践,而非设计阶段的关键要素。设计阶段更关注于架构、威胁分析和安全原则的制定。

3. (单选题, 2分)

微软提出了STRIDE模型,其中R是Repudiation(抵赖)的缩写,关于此项错误的是( )

  • A. 某用户在登录系统并下载数据后,却声称"我没有下载过数据",这个威胁属于R威胁
  • B. 某用户在网络通信中传输完数据后,却声称"这些数据不是我传输的",这个威胁属于R威胁
  • C. 对于R威胁,可以选择使用如强认证、数字签名、安全审计等技术消减
  • D. 对于R威胁,可以选择使用如隐私保护、过滤、流量控制等技术消减

正确答案:D

解析: 隐私保护、过滤、流量控制等技术主要用于应对信息泄露(Information Disclosure)或拒绝服务(Denial of Service)等威胁,而非直接用于解决抵赖(Repudiation)问题。抵赖的消减措施主要依赖于能够提供行为证据的技术,如数字签名和安全审计。

4. (单选题, 2分)

下面哪一项不是软件架构的类型( )

  • A. 逻辑架构
  • B. 物理架构
  • C. 系统架构
  • D. 界面接口

正确答案:D

解析: 软件架构通常从不同视角进行描述,常见的类型包括逻辑架构(关注功能模块)、物理架构(关注硬件部署)和系统架构(整体结构)。界面接口是系统的一个组成部分或关注点,但不是架构的一种类型。

5. (单选题, 2分)

在安全设计原则中,要求每一次访问受保护对象的行为都应当尽可能进行细粒度检查,这是( )

  • A. 最小权限原则
  • B. 权限分离原则
  • C. 安全控制原则
  • D. 纵深防御原则

正确答案:C

解析: 安全控制原则(或完全仲裁原则)要求对每一次访问受保护对象的行为都进行细粒度的检查和授权,确保没有未经授权的访问。

6. (单选题, 2分)

将超级用户的权限划分为一组细粒度的权限,分别授予不同的系统操作员,这符合( )

  • A. 减少软件攻击面原则
  • B. 最小授权原则
  • C. 权限分离原则
  • D. 纵深防御原则

正确答案:C

解析: 权限分离原则(Separation of Privilege)的核心思想是将一个大的权限(如超级用户权限)分解为多个更小的、独立的权限,并分配给不同的主体,以避免单一主体拥有过多权限,从而降低风险。

7. (单选题, 2分)

不允许程序员检查自己编写的代码,这是符合( )

  • A. 最小权限原则
  • B. 权限分离原则
  • C. 纵深防御原则
  • D. 完全控制原则

正确答案:B

解析: 这体现了权限分离原则。通过让不同的人负责编写代码和审查代码,可以形成相互制约和监督,减少因个人疏忽或恶意行为导致的安全漏洞。

8. (单选题, 2分)

软件的安全性不应该依赖于设计的保密,这是复符合( )

  • A. 开放设计
  • B. 保护最弱一环原则
  • C. 最少共用机制原则
  • D. 安全机制的经济性原则

正确答案:A

解析: 开放设计原则(Open Design)主张安全机制的设计不应是保密的,其安全性应依赖于密钥等秘密信息,而非设计本身的保密。这样设计可以接受更广泛的审查,从而发现并修复潜在漏洞。

9. (单选题, 2分)

在软件功能设计的参数操作中,下面做法不正确的是( )

  • A. 应避免使用包含敏感数据或者影响服务器安全逻辑的查询字符串参数
  • B. 应使用HTTP GET来代替POST提交窗体,避免使用隐藏窗体
  • C. 应加密查询字符串参数
  • D. 不要信任HTTP头信息

正确答案:B

解析: 使用HTTP GET提交窗体数据是不安全的做法,因为GET请求的参数会暴露在URL中,容易被记录在浏览器历史、服务器日志或代理服务器日志中,不适合传输敏感信息。POST方法更适合提交窗体数据。

10. (单选题, 2分)

在数据安全设计中,宜使用安全的传输协议来传输文件,这是( )

  • A. 机密性要求
  • B. 完整性要求
  • C. 可用性要求
  • D. 不可否认性要求

正确答案:A

解析: 使用安全的传输协议(如HTTPS、SFTP等)主要目的是对传输的数据进行加密,防止数据在传输过程中被窃听,从而保证数据的机密性。

11. (单选题, 2分)

某电子商务网站在开发设计时,使用了威胁建模方法来分析电子商务网站所面临的威胁。STRIDE 是微软SDL中提出的威胁建模方法,将威胁分为六类,为每一类威胁提供了标准的消减措施,Spoofing是STRIDE中欺骗类的威胁,以下威胁中哪个可以归入此类威胁?( )

  • A. 网站竞争对手可能雇佣攻击者实施DDos攻击,降低网站访问速度
  • B. 网站使用http协议进行浏览等操作,未对数据进行加密,可能导致用户传输信息泄漏,例如购买的商品金额等
  • C. 网站使用http协议进行浏览等操作,无法确认数据与用户发出的是否一致,可能数据被中途篡改
  • D. 网站使用用户名、密码进行登录验证,攻击者可能会利用弱口令或其他方式获得用户密码,以该用户身份登录修改用户订单等信息

正确答案:D

解析: Spoofing(欺骗)是指攻击者伪装成合法用户或实体。选项D中,攻击者通过获取用户密码,冒充该用户身份登录系统,这正是典型的欺骗类威胁。

12. (单选题, 2分)

在使用预处理语句和存储过程的同时应用输入验证功能,不允许使用用户输入的动态查询结构,以防止注入攻击,这符合( )

  • A. 最小权限原则
  • B. 权限分离原则
  • C. 纵深防御原则
  • D. 完全控制原则

正确答案:C

解析: 纵深防御原则(Defense in Depth)强调采用多层、多种安全措施来保护系统。在防止注入攻击时,同时使用预处理语句、存储过程和输入验证等多种手段,正是纵深防御思想的体现,即使一层防御被突破,还有其他层提供保护。

填空题对应知识点

🔬 风险分析方法

在威胁建模过程中,识别出威胁后,需要对其进行评估和排序,以确定处理的优先级。常见的风险分析排序方法包括:

  1. Delphi排序:一种通过多轮匿名专家问卷来达成共识的预测和评估方法。
  2. 平均排序法:例如DREAD模型,通过对多个维度(如破坏潜力、可复现性等)进行打分并计算平均值来确定风险等级。
  3. 概率 × 影响因子排序 (P×I) :通过评估威胁发生的概率 和其可能造成的业务影响,将两者相乘得到一个风险值,从而进行优先级排序。这种方法被认为比简单的平均法更科学,因为它同时考虑了可能性和后果。

🛡️ 软件安全设计原则

软件安全设计原则是构建安全系统的指导思想。

  • 减少软件受攻击面原则 (Reducing Attack Surface)
    • 核心思想:攻击面是指系统中所有可能被攻击者利用的入口点、功能或代码的总和。攻击面越大,风险越高。
    • 实践应用:移除或禁用所有不必要的功能、服务、协议和模块。对于"重要性低的功能可取消"正是这一原则的直接体现,通过精简系统来减少潜在的漏洞。

🏗️ 软件设计与架构

软件设计和架构是软件开发生命周期中的关键环节。

  • 软件设计的两个子阶段

    从过程管理的角度,软件设计通常被划分为两个阶段:

    1. 概要设计 (High-Level Design):也称为总体设计,主要关注系统的宏观结构,包括模块划分、模块间的关系、数据结构和技术选型。
    2. 详细设计 (Low-Level Design):在概要设计的基础上,深入每个模块内部,设计具体的算法、数据结构、接口细节等。
  • 软件架构的视图

    软件架构可以从不同视角进行描述,其中:

    • 逻辑架构 (Logical Architecture) :主要描述软件系统中各个组件(如业务逻辑组件、数据访问组件、用户界面组件等)之间的逻辑关系和交互,关注系统的功能划分。

🧩 威胁建模与STRIDE模型

威胁建模是系统化识别和应对安全威胁的方法。

  • STRIDE威胁分类法
    STRIDE是微软提出的一个威胁模型,将威胁分为六类,其中:
    • 欺骗 (Spoofing) :指攻击者通过伪造身份凭证(如窃取用户名和密码)来伪装成另一个合法用户或实体,从而获得未授权的访问权限。这是身份验证环节需要重点防范的威胁。

习题

13. (填空题, 2分)

常见的3种风险分析是:Delphi排序、平均排序、概率*影响因子排序。

解析:根据威胁建模中的威胁评估方法,常见的排序计算包括Delphi法(专家评估)、平均排序法(如DREAD法)以及概率×影响因子(P×I)排序法。

14. (填空题, 2分)

重要性低的功能可取消,这是符合减少软件受攻击面 (或 减小受攻击面)原则。

解析:减少软件受攻击面原则指出,应去除或禁止一切不需要使用的模块、协议和服务。对于重要性低的功能,直接取消是减少攻击者可利用漏洞的有效手段。

15. (填空题, 2分)

从过程管理的角度,软件设计可以分为概要设计和详细设计两个子阶段。

解析:软件设计阶段通常从工程管理角度划分为概要设计(High-level Design,关注总体结构和模块划分)和详细设计(Low-level Design,关注算法和数据结构细节)。

16. (填空题, 2分)

在软件架构设计中,描述软件系统中组件之间的关系是:逻辑架构

解析:软件架构通常分为逻辑架构、物理架构和系统架构。其中,逻辑架构主要描述软件系统中组件(如用户界面、数据库、接口等)之间的逻辑关系和交互。

17. (填空题, 2分)

在STRIDE威胁分类中,攻击者能够伪装成另一个用户身份,属于欺骗 (或 Spoofing)。

解析:STRIDE模型中,Spoofing(欺骗)是指攻击者通过伪造身份(如盗用用户名/密码)来冒充合法用户或实体。

判断题对应知识点

💻 操作系统安全基础

  • 实模式 vs. 保护模式
    • DOS操作系统 :运行于实模式 (Real Mode)。这种模式是为了兼容早期的8086处理器,不支持内存保护和多任务,程序可以直接访问所有硬件和内存,安全性较低。
    • Windows操作系统 :作为现代多任务操作系统,运行于保护模式 (Protected Mode)。该模式提供了内存保护、特权级别和多任务支持,能有效隔离进程,防止一个程序崩溃或恶意行为影响整个系统,是操作系统安全的基础。

🧩 威胁建模

威胁建模是主动识别、评估和缓解安全威胁的结构化过程。

  • 威胁建模的持续性与重要性

    • 作用巨大:组织自身的威胁建模能力是提升整体安全保障能力的关键。它能帮助团队在设计早期发现并修复漏洞,优化安全投资,并为安全测试和事件响应提供指导。
    • 贯穿全生命周期 :威胁建模并非仅在安全设计阶段执行一次。它应该是一项持续性的任务,集成到软件开发生命周期(SDLC)的各个阶段。当需求变更、架构调整或代码更新时,都需要重新审视和更新威胁模型。
  • 威胁排序方法

    在识别出威胁后,需要对其进行优先级排序。相比于简单的"概率 × 影响"等方法,更科学的排序方法会综合考虑多个维度,例如:

    • 严酷度 (Severity):威胁发生后造成的破坏程度。
    • 发生度 (Occurrence):威胁发生的可能性。
    • 探测度 (Detection) :威胁发生后被发现的难易程度。
      通过综合评估这些维度(如DREAD模型或其演进版本),可以更全面、更准确地反映风险的真实优先级。

🛠️ 软件安全设计方法与原则

  • 基于安全模式的设计方法

    这是一种复用已验证安全解决方案的系统化方法。其过程通常包括四个阶段:

    1. 浏览模式库:了解现有的安全模式。
    2. 选择安全模式:根据具体需求挑选合适的模式。
    3. 评估安全模式:分析所选模式的适用性、优点和代价。
    4. 建立系统高层架构:将选定的模式应用到系统的整体设计中。
  • 心理可接受原则 (Psychological Acceptability)

    • 核心思想:安全机制的设计不应给用户带来过多的麻烦或复杂性。如果安全措施过于繁琐、不直观,用户会倾向于寻找捷径或干脆绕过它,从而导致安全机制失效。
    • 实践应用:配置和执行安全程序应尽可能简单直观,错误信息应清晰有用。这能确保用户愿意并能够正确地使用安全功能,使安全策略得以有效落地。

习题

18. (判断题, 2分)

DOS操作系统和Windows操作系统都运行于保护模式下。( )

  • A 对
  • B 错

正确答案:B
解析 :根据参考资料,DOS操作系统运行于实模式 下,而Windows操作系统(作为多任务系统)运行于保护模式下。实模式是为了兼容早期的8086处理器,不支持内存保护和多任务。

19. (判断题, 2分)

组织自身的威胁建模能力水平对提升组织的整体安全保障能力作用不大。( )

  • A 对
  • B 错

正确答案:B
解析:威胁建模是主动识别和缓解安全风险的关键方法。资料显示,威胁建模能帮助组织在设计早期发现漏洞、减少攻击面、优化安全投资并改善事件响应准备,是有效网络安全策略的基石。因此,提升威胁建模能力对整体安全保障作用巨大。

20. (判断题, 2分)

在威胁排序的集中计算方法中,概率*影响因子排序方法是更科学的。( )

  • A 对
  • B 错

正确答案:B
解析 :参考资料指出,相比于旧标准的简单乘积(即概率×影响),新的优先级排序法(如综合考虑严酷度S、发生度O、探测度D,且S权重最高)被认为更科学,能更好反映实际风险。简单的乘积法往往过于简化,无法全面反映风险的复杂性。

21. (判断题, 2分)

威胁建模是安全设计阶段才使用的方法。( )

  • A 对
  • B 错

正确答案:B
解析 :虽然威胁建模起源于设计阶段,但它不应仅限于此。资料强调,威胁建模应该是一项持续性的任务,需要集成到软件开发生命周期(SDLC)的各个阶段,包括规划、开发、测试以及部署运维阶段,特别是在架构变更或代码更新时都需要重新审视。

22. (判断题, 2分)

基于安全模式的软件安全设计方法过程可以分为浏览模式库、选择相应的安全模式、评估安全模式和建立系统高层架构4个阶段。( )

  • A 对
  • B 错

正确答案:A
解析:基于模式的安全设计通常遵循这样的逻辑流程:首先了解现有的安全模式库(浏览),根据需求挑选合适的模式(选择),分析其适用性和代价(评估),最后将其应用到系统的架构设计中(建立架构)。

23. (判断题, 2分)

配置和执行一个程序应该尽肯能简单和直观,输出应该直接而且有用。这是符合安全机制心理可接受原则。( )

  • A 对
  • B 错

正确答案:A
解析:心理可接受原则(Psychological Acceptability)指出,安全机制不应使资源访问过程比没有安全机制时更复杂。如果安全措施过于繁琐或难以理解,用户会倾向于绕过它。因此,简单、直观、反馈直接的设计符合该原则。

简答题

24. (简答题, 9分) 什么是STRIDE模型?

STRIDE模型是由微软提出的经典威胁建模框架,用于系统性地识别信息系统中的安全威胁。它将威胁分为六大类,首字母缩写为STRIDE:

  • 欺骗 (Spoofing):伪造合法身份(如用户名、Token),冒充他人访问系统。
  • 篡改 (Tampering):未授权修改数据、报文、配置或文件内容。
  • 抵赖 (Repudiation):用户执行操作后否认行为,且系统缺乏有效追溯证据。
  • 信息泄露 (Information Disclosure):敏感数据被未授权人员查看或窃取。
  • 拒绝服务 (Denial of Service):耗尽系统资源(如CPU、带宽),导致服务不可用。
  • 权限提升 (Elevation of Privilege):低权限用户获取高权限,进行越权操作。

该模型为每一类威胁提供了标准的消减措施,是安全测试、架构设计和代码审计的基础理论工具。

25. (简答题, 6分) 从技术的角度看软件设计阶段的主要工作是什么?

从技术角度来看,软件设计阶段通常划分为以下四个主要部分:

  1. 体系结构设计 (Architecture Design):定义软件系统的整体结构,确定主要组件及其相互关系。
  2. 数据设计 (Data Design):将分析阶段创建的数据模型转化为软件实现所需的具体数据结构(如数据库表结构)。
  3. 接口设计 (Interface Design):描述软件内部各模块之间、软件与外部系统或用户之间的通信方式(如API定义、用户界面)。
  4. 构件级设计 (Component-level Design):也称为过程设计,对软件组件的内部逻辑、算法和处理流程进行详细描述。

26. (简答题, 5分) 软件安全设计阶段的主要工作是什么?

在软件安全设计阶段,主要工作包括:

  1. 定义安全体系结构和设计原则:从安全角度定义软件的总体结构,确定关键的安全组件(如可信计算基),并确立设计指导原则(如最小权限、纵深防御)。
  2. 记录软件攻击面要素:识别并记录软件中可能被攻击者利用的入口点(如API、端口、功能),并致力于在默认配置下最小化攻击面。
  3. 对威胁进行建模:使用结构化方法(如STRIDE)对系统组件进行威胁分析,识别潜在威胁并评估风险,从而确定安全需求和缓解对策。

27. (简答题, 10分) 为什么要进行软件架构设计?软件架构设计的主要工作是什么?软件架构安全性设计的主要工作是什么?

  • 为什么要进行软件架构设计

    软件架构设计的本质是解决软件系统的复杂度问题。它是风险承担者之间交流的通用语言,体现了早期难以更改的关键设计决策,并且是可传递和可重用的模型,有助于提高设计效率和可靠性。

  • 软件架构设计的主要工作

    主要工作包括:理解业务目标和约束条件(需求分析);定义架构愿景和原则;创建抽象的架构蓝图(如逻辑视图、物理视图);进行关键技术选型;细化子系统设计(如接口规范、数据模型);以及通过原型验证和评审确保设计可行性。

  • 软件架构安全性设计的主要工作

    主要工作包括:在规划阶段定义功能性和非功能性安全需求;选择支持安全性的技术选项(如利用云平台的安全服务);进行威胁建模以识别漏洞并定义缓解措施;以及建立安全编码标准和测试策略。

28. (简答题, 8分) 为什么要进行软件安全性分析?软件架构安全性分析的基本过程是什么?

  • 为什么要进行软件安全性分析

    软件安全性分析旨在提前发现未授权访问、数据篡改、信息泄露等高风险漏洞;为安全测试提供明确方向,避免盲目测试;辅助开发设计安全防护方案,实现"安全左移";并满足等保、ISO27001等合规性要求。

  • 软件架构安全性分析的基本过程

    一个典型的流程(如ATASM)包括:

    1. 架构分析:理解系统的逻辑和组件架构,以及通信流和数据存储。
    2. 威胁枚举:列出可能的威胁主体、攻击方法及其系统级目标。
    3. 攻击面识别:找出架构中的攻击面并确定优先级。
    4. 数据敏感性评估:评估数据的敏感级别以确定保护重点。
    5. 安全控制应用:针对攻击面应用适当的安全控制措施,构建纵深防御。

29. (简答题, 6分) 什么是安全模式?为什么说能够利用安全模式来快速、准确地进行软件安全设计?

  • 什么是安全模式

    安全模式是指在给定的场景中,为控制、阻止或解决一组特定的安全威胁而采取的通用解决方案。它封装了反复出现的安全问题的成熟解决办法。

  • 为什么能利用安全模式快速、准确设计

    1. 复用经验:安全模式封装了经过验证的解决方案,避免了重复造轮子。
    2. 易于沟通:采用模式描述架构,使设计和分析更易于理解和交流。
    3. 降低门槛:使得不具备深厚专业安全知识的应用开发人员也能利用成熟的安全措施,提高设计的准确性和效率。

30. (简答题, 10分) 什么是威胁建模?试简述威胁建模的过程。

  • 什么是威胁建模

    威胁建模是通过抽象的概念模型,对影响软件系统的威胁进行系统性地识别、评估和缓解的结构化过程。

  • 威胁建模的过程

    通常包含以下五个主要步骤:

    1. 定义安全要求:明确系统需要保护的资产、安全目标及合规性需求。
    2. 创建应用程序图:绘制数据流图(DFD),可视化系统架构,明确组件、数据流和信任边界。
    3. 识别威胁:应用STRIDE等模型,对每个组件和数据流进行威胁分析。
    4. 缓解威胁:针对识别出的威胁,制定消除、防止、检测或响应的缓解策略。
    5. 验证缓解措施:通过安全测试、代码评审等方式,验证所采取的缓解措施是否有效。
相关推荐
XIAOHEZIcode16 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
Aphasia3113 天前
VPN 与内网穿透
安全
Mr_愚人派4 天前
当"Claude"不再是 Claude:一次第三方 API 代理引发的 AI 身份伪造排查实录
人工智能·安全
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
DaLi Yao4 天前
【无标题】
人工智能·安全
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker