读软件开发安全之道:概念、设计与实施10安全设计审查

news2024/9/25 13:24:36

1. 安全设计审查

1.1. Security Design Review,SDR

1.2. 将安全性融入软件设计的最佳方法之一是戴上“安全帽”进行单独的设计审查

1.3. 安全审查员是熟悉软件运行的系统和环境,以及知道如何使用它的人,但他们不参与设计工作,这能够给予他们距离感以保持客观性

1.4. 最好从一个中等大小的设计开始,这样你不会觉得太难上手,或者从一个大型系统中分出一个组件并只审查这一部分内容

2. SDR基本概念

2.1. SDR只会占用总设计时间的一小部分,却能够识别出重要的改进以增强安全性,或者为设计出适当的安全性解决方案提供有力的保证

2.2. 对于较大的设计,审查过程提供了一个有用的框架来识别和验证主要的热点

2.3. SDR可以带来有价值的新见解,从而促进与安全性无关的设计变更

2.4. 如果计划在设计(或设计迭代)完成且稳定时执行SDR,通常要选在功能审查之后但在设计最终确定之前,因为可能有需要更改的地方

  • 2.4.1. 不要将安全性作为功能审查的一部分,因为两者的思维方式和关注领域完全不同

  • 2.4.2. 关注安全性也很重要,但联合审查会倾向于更多地关注设计的运作,因此很难关注到安全性

2.5. 复杂的或安全性第一的设计,通常能够受益于额外的初步SDR,也就是在设计开始形成但仍未完全成形时执行SDR,以便能够获得有关重大威胁和整体策略的早期信息

  • 2.5.1. 设计师永远不应忽视安全性,也不能依靠SDR为他们解决相关问题

  • 2.5.2. 安全审查员扮演的是支持角色,其职责是帮助设计师并确保他们能够很好地完成工作

2.6. 文档是必不可少的

  • 2.6.1. 有效的SDR依赖于及时更新的文档,以便参与的各方对审查中的设计有准确和一致的理解

3. SDR流程

3.1. 软件设计可以以无数不同的方式开展,你可以将相同的策略和分析应用于不是很正式的组织机构

  • 3.1.1. 每个人都有不同的风格

3.2. 6个阶段

  • 3.2.1. 研究设计文档和支持文档,对项目建立基本的了解

    • 3.2.1.1. 阅读文档,从全局上理解设计

    • 3.2.1.2. 戴上你的“安全帽”​,以威胁意识的心态重新审视它

    • 3.2.1.3. 记笔记,记录你的想法和观察结果以供将来参考

    • 3.2.1.4. 为未来标记潜在问题,但在此阶段进行大量安全分析还为时过早

  • 3.2.2. 对设计进行询问,并就基本威胁提出澄清问题

    • 3.2.2.1. 确保设计文件清晰完整

    • 3.2.2.2. 如果有遗漏或需要更正之处,请在文档中修正它们

    • 3.2.2.3. 对设计的理解要通透,但不一定要达到专家级

    • 3.2.2.4. 询问团队成员他们最担心什么,如果他们没有安全性担忧,请追问其原因

    • 3.2.2.5. 安全审查员提出的问题不必严格局限于设计文档中的内容

  • 3.2.3. 识别出设计中最需要保障安全性的关键部分,以引起更密切的关注

    • 3.2.3.1. 将其作为目标并进行仔细分析

    • 3.2.3.2. 从CIA、黄金标准、资产、攻击面和信任边界的角度进行思考

    • 3.2.3.3. 检查接口、存储和通信

    • 3.2.3.4. 从外向内(从最易暴露的攻击面到最有价值的资产)审查,这也是态度坚决的攻击者会做出的尝试

    • 3.2.3.5. 评估设计中明确的安全问题的解决程度

    • 3.2.3.6. 如果需要,指出关键的保护措施,并在设计中将它们标注为重要特性

  • 3.2.4. 与设计师合作,识别风险并讨论缓解措施

    • 3.2.4.1. 审查员要针对风险及其缓解措施提供安全性见解

    • 3.2.4.2. 勾画出一个场景,以说明安全更改能够获得的最终回报,从而帮助说服设计师在设计中添加缓解措施

    • 3.2.4.3. 尽可能为问题提供多个解决方案,并帮助设计师了解这些替代方案的优势和劣势

    • 3.2.4.4. 要接受设计师的决定,因为他们要对设计负最终责任

    • 3.2.4.5. 记录交流的想法,包括设计中会涵盖或者不会涵盖的内容

  • 3.2.5. 撰写一份审查结果和建议的评估报告

    • 3.2.5.1. 审查结果是安全审查员对设计安全性的评估

      3.2.5.1.1. 要考虑的潜在设计更改,以及对设计安全性的分析

      3.2.5.1.2. 应该在显著位置对设计师已经同意的更改进行标识,并在以后进行验证

    • 3.2.5.2. 围绕着解决安全风险的特定设计变更来组织报告

    • 3.2.5.3. 将大部分精力和笔墨花费在优先级最高的问题上,而在较低优先级的问题上少着笔墨

      3.2.5.3.1. 必须(must)的排名最高,表示对于这一点来说,应该没有其他选择,并且通常还包含紧迫性

      3.2.5.3.2. 需要(ought)排名中间,我用它来表示倾向于“必须”​,但我们可以进行讨论的更改

      3.2.5.3.3. 应该(should)在可选的推荐更改中排名最低

    • 3.2.5.4. 提出替代方案和策略,而不要尝试做该由设计师做的工作

    • 3.2.5.5. 对审查的发现和建议进行优先级排序

    • 3.2.5.6. 关注安全性,但也可以提供单独的评论以供设计师参考

      3.2.5.6.1. 要对SDR范围之外的设计更为尊重,不要吹毛求疵,避免淡化安全性信息

    • 3.2.5.7. 将设计师和审查员的角色分离至关重要,但在实践中,实现这一点的做法会有很大的不同,这取决于每个人的职责和他们的协作能力

    • 3.2.5.8. 很有可能你或其他从事该软件工作的人员在日后会希望有详细记录的信息以供参考

    • 3.2.5.9. 作为审查员,当你与软件设计师密切合作时,你可能可以将所需的更改直接合并到设计文档中,而不是在报告中列举需要更改的问题

  • 3.2.6. 跟进后续的设计变更,在签署前确认解决方案

    • 3.2.6.1. 对安全审查做出的设计变更结果进行跟进,以确认这些问题已被正确地解决

    • 3.2.6.2. 对于重大的安全设计更改,你可能希望与设计师协作以确保正确地进行更改

    • 3.2.6.3. 如果意见不同,审查员应该书写一份声明,说明双方的立场和未遵循的具体建议,并将其标记为未解决的问题

    • 3.2.6.4. 在最好的情况下,设计师会将审查员视为安全辅助资源,并使其随着时间的推移继续参与到项目中

4. 评估设计的安全性

4.1. 4个问题

  • 4.1.1. 我们的工作是什么?

    • 4.1.1.1. 审查员应该了解设计的整体目标,并将其作为审查的背景,即思考实现这个目标最安全的方法是什么

    • 4.1.1.2. 可以自信地建议割舍那些会带来风险且实际上并不必要的部分

  • 4.1.2. 哪里有可能出错?

    • 4.1.2.1. “安全帽”思想的用武之地,也是应用威胁建模的地方,即思考这个设计是否未能预见或低估了关键威胁

    • 4.1.2.2. 设计师仅仅意识到这些威胁是不够的,他们必须已经确实创造了一种能够承受这些威胁的设计

  • 4.1.3. 我们打算怎么办?

    • 4.1.3.1. 审查你在设计中发现的保护机制和缓解措施,即思考我们能否以更好的方式应对重要威胁

    • 4.1.3.2. 随着审查员的研究,设计中的安全保护机制和缓解措施应该变得清晰

    • 4.1.3.3. 如果在减小安全风险方面设计做得不够,那么你应该逐项列出设计中缺少的内容

    • 4.1.3.4. 当设计中确实为给定的威胁提供了缓解措施时,审查员需要评估缓解措施的有效性,并考虑是否有更好的替代方案

  • 4.1.4. 我们干得怎么样?

    • 4.1.4.1. 评估设计中的缓解措施是否足够,是否需要更多工作,或者是否缺少了一些缓解措施,即思考设计的安全性如何,如果缺乏安全性,我们如何才能使其达到安全标准

    • 4.1.4.2. SDR可以快速识别出问题和机会,或者至少能够为现在值得考虑的权衡决策提出建议

      4.1.4.2.1. 以后你将无法如此轻松地进行更改

    • 4.1.4.3. 总结

      4.1.4.3.1. 认为设计是安全的,没有需要更改的地方

      4.1.4.3.2. 设计是安全的,但建议进行一些更改,以增强其安全性

      4.1.4.3.3. 对当前的设计有疑虑,并提供了一些建议,以增强其安全性

4.2. 针对大型设计的每个角落都进行深入研究是不切实际的,因此审查员需要尽快关注那些对安全至关重要的领域

  • 4.2.1. 审查员要留意攻击面,并给予其应有的重视

  • 4.2.2. 攻击面越容易访问,就越有可能成为潜在的攻击源,典型的最坏情况就是匿名的互联网暴露

4.3. 根据你的技能和组织机构职责,你可能希望在SDR范围内处理信息隐私,或单独处理

4.4. 软件一旦发布,似乎就有了自己的生命,随着时间的推移,变化是不可避免的

  • 4.4.1. 设计文档应该是一个能够跟踪软件架构形式演变的动态文档

  • 4.4.2. 版本化的文档提供了设计成熟度的重要记录,或者在设计变得复杂时提供了重要记录

5. 处理分歧

5.1. 良好的人际沟通对于成功执行SDR至关重要

5.2. SDR在本质上具有对抗性,因为审查员通常会在人们投入了巨资的设计中指出其风险和潜在的缺陷

5.3. 一旦设计师理解了问题,他们通常会开始讨论那些审查员可能错过的其他领域

5.4. 有人指出自己设计中的漏洞,是了解安全性的最佳方式

5.5. 在SDR过程中,我们无法通过单方面的演讲来强调安全是所有事务中的重中之重

5.6. 准备SDR会议是一种平衡行为

  • 5.6.1. 事先准备的问题,以便会面时你能够深挖安全问题

  • 5.6.2. 你可以自己找到答案的问题

  • 5.6.3. 最好在会议中探讨的主题

  • 5.6.4. 你将在评估报告中包含的观察结果,但不需要对其进行讨论

5.7. 一个好的经验法则是,如果缺失的信息对许多人都有用,则值得记录这个信息,但如果它仅与你的特定需求相关,那么你应该不那么正式地提出这个问题

  • 5.7.1. 如有必要,你可以在评估报告中包含这些问题的详细信息

5.8. 在完成这次SDR后,产品团队对安全性有了更好的理解,进而对他们自己的产品也有了更深入的了解

5.9. 当设计师和审查员未能达成共识时,他们应该对分歧达成共识

  • 5.9.1. 强烈的分歧几乎总是源于基本假设的南辕北辙,一旦确定了基本假设,分歧通常会被解决

  • 5.9.2. 产生严重分歧的另一个主要原因是设计师没有意识到数据机密性或完整性的重要性,这通常是因为他们没有站在最终用户的视角,或者没有考虑所有可能的用例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringCloud】(一文通) 统一服务入口-Gateway

目 录 一. 网关介绍1.1 问题1.2 什么是 API 网关1.3 常见网关实现 二. Spring Cloud Gateway2.1 快速上手2.1.1 创建网关项目2.1.2 引入网关依赖2.1.3 编写启动类2.1.4 添加Gateway的路由配置2.1.5 测试 2.2 Route Predicate Factories2.2.1 Predicate2.2.2 Route Predicate Fa…

<数据集>脑肿瘤识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:5249张 标注数量(xml文件个数):5249 标注数量(txt文件个数):5249 标注类别数:4 标注类别名称:[Glioma, Meningioma, No Tumor, Pituitary] 序号类别名称图片数框数1…

【RabbitMQ】概述

目 录 一. RabbitMQ 概述什么是 MQMQ的作用为什么选择 RabbitMQRabbitMQ 介绍 一. RabbitMQ 概述 前言 Rabbit, 兔子的意思 互联网行业很多公司, 都喜欢用动物命名产品, 或者作为公司的logo, 吉祥物. 比如: 腾讯的企鹅, 京东的狗, 美团的袋鼠, 携程的海豚,阿里就更多了, 蚂蚁…

原生JS实现下滑到当前模块时左右滑动到位

效果图&#xff1a; ​​​​​​​ 源码&#xff1a; <div style"height: 1500px;"></div><div class"software-box"><div class"software-container" style"display: flex;"><div class"software-…

MapBox Android版开发 2 本地化

MapBox Android版开发 2 本地化 前言MapBox V9 本地化示例1示例2示例3运行效果图 MapBox V11 本地化示例运行效果图 前言 前文介绍了MapBox V9和 V11 两个版本配置和显示地图。默认MapBox地图语言为英文&#xff0c;本文重点介绍如何将地图语言设置为中文。 MapBox V9 本地化…

52 mysql 启动过程中常见的相关报错信息

前言 我们这里主要是看一下 service mysql start, service mysql stop 的过程中的一些常见的错误问题 这些 也是之前经常碰到, 但是 每次都是 去搜索, 尝试 1, 2, 3, 4 去解决问题 但是 从来未曾思考过 这个问题到底是 怎么造成的 The server quit without updating PID fil…

【Test 001】Qt 开发基础体系 QMap 类和 QHash 类以及 QVector 类

文章目录 1.QMap 详解1.1 QMap 的介绍1.2 QMap 的具体用法如下1.3 QmultiMap类 2.QHash 详解3. QMap 和 QHash 的对比4. QVector 详解 1.QMap 详解 1.1 QMap 的介绍 &#x1f427;① QMap<key,T>提供一个从类型为Key的键到类型为T的值的映射。通常&#xff0c;QMap存储的…

sheng的学习笔记-AI-半监督SVM

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 svm: sheng的学习笔记-AI-支持向量机&#xff08;SVM&#xff09;-CSDN博客 半监督学习&#xff1a; sheng的学习笔记-AI-半监督学习-CSDN博客 什么是半监督svm 半监督支持向量机&#xff08;Semi-Supervised Support Ve…

重邮计算机网络803-(3)数据链路层

目录 一.数据链路两种类型 二.使用点对点信道的数据链路层 1. 数据链路和帧 2.数据链路层传送的是帧 三.三个基本问题 1.封装成帧 2.透明传输 ①字节填充法 ②其他方法&#xff1a;字符计数法&#xff0c;比特填充法&#xff0c;违规编码 3. 差错检测 &#xff08;1…

容器存储接口--CSI

文章目录 一、背景二、CSI 是什么三、CSI 系统架构1、CSI 如何与 k8s 组件相互通信2、CSI 由哪些组件组成3、CSI 的工作原理4、k8s 存储中涉及的组件及其作用4.1、Sidecar Containers4.1.1、[external-attacher](https://kubernetes-csi.github.io/docs/external-attacher.html…

3.1ER图

ER 最后总结以下E-R图的设计原则。 1&#xff09;尽量减少实体集数量&#xff0c;能作为属性时不要作为实体集。 2&#xff09;“属性”不能再具有需要描述的性质。必须时不可分割的数据项。不能时其他属性的聚集。3&#xff09;“属性”不能与其他实体具有联系 4)综合局部E-…

XDMA原理

目录 1. PCIe to AXI Lite Master1.1. BAR Address to AXI Address 2. PCIe to AXI Memory Mapped Master3. PCIe to DMA Interface3.1. Descriptor3.2. Transfer for H2C 4. MSI-X Vector Table and PBA5. AXI Lite Slave 介绍XDMA IP核的功能及原理。 根据pg195&#xff0c;…

AI生3D:从草图到交互式3D游戏场景

随着人工智能技术的进步,3D内容生成变得越来越容易。AI生3D是一种创新的技术框架,它允许用户仅使用简单的草图和文本描述就能创建出复杂的3D游戏场景。这项技术不仅降低了3D内容创作的门槛,还极大地扩展了创意表达的可能性。 技术框架概述 AI生3D利用先进的机器学习模型来…

p2p、分布式,区块链笔记:基于IPFS实现的数据库orbitdb笔记

orbitdb orbitdb &#xff1a;Peer-to-Peer Databases for the Decentralized Web 特性说明特点无服务器、分布式、p2p编程语言JavaScript对其他语言的支持A python client for the Orbitdb HTTP API&#xff0c;go-orbit-db&#xff0c; 让我们了解一下谁在使用 js-ipfs&…

【国产游戏的机遇与挑战】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

在多云生态下,如何实现跨云的自动化身份管理?

在多云环境下实现跨云的自动化身份管理是一个重要的课题&#xff0c;因为这可以帮助企业确保用户和应用程序能够在不同云服务提供商之间无缝地访问资源&#xff0c;同时保持高度的安全性和合规性。以下是一些关键技术和实践方法&#xff0c;用于实现跨云环境下的自动化身份管理…

jenkins 开启控制台详细日志

1、开启控制台详细日志&#xff0c;查看真正报错原因 开启后生成流水线语句&#xff1a; 2、根本问题 使用jenkins再次构建&#xff0c;查看控制台日志 报错&#xff1a; 意思是在执行ssh命令的时候&#xff0c; /root/apps/jenkins/portal/portal-server/Dockerfile 路径下没…

树链剖分——从入门到入坟

树链剖分的思想及能解决的问题 树链剖分用于将树分割成若干条链的形式&#xff0c;以维护树上路径的信息。 具体来说&#xff0c;将整棵树剖分为若干条链&#xff0c;使它组合成线性结构&#xff0c;然后用其他的数据结构维护信息。 树链剖分&#xff08;树剖/链剖&#xff…

优化|计算合作博弈的成本分摊

原文&#xff1a; Caprara, A., & Letchford, A. N. (2010). New techniques for cost sharing in combinatorial optimization games. Mathematical programming, 124, 93-118. https://doi.org/10.1007/s10107-010-0357-7. 原文作者&#xff1a; Alberto Caprara, Adam N…

【js原型和原型链】

js原型和原型链 一、构造函数和原型对象中的this二、原型对象的constructor属性三、原型链四、关系图五、普通函数和函数对象 参考文章链接: link 一、构造函数和原型对象中的this 指向实例对象 // 定义构造函数function Star(name,age){this.name name;this.age age;conso…