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

news/2024/11/17 7:28:54/文章来源:https://www.cnblogs.com/lying7/p/18380128

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.hqwc.cn/news/787822.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】FastJson 利用JSONPath.eval快速获取目标json的属性值

一、需求场景: JSON串格式化之后,JSON树的属性深度太长了 二、代码实现: 语法等效MySQL的JSON读取方式 方法调用的返回类型为Object,强转至String进行处理/* 读取报告时间 */ Object reportDateEval = JSONPath.eval(jsonObject, "$.categories[0].children[0].data.…

10.网络安全技术

12-1 数据备份策略和盘阵列备备份方式12-2 加密技术12-3 入侵检测系统IDS12-4 入侵防护系统IPS脚本属于应用12-5 网络版防病毒软件的安装及配置12-6 防火墙PIX配置过程下面nameif常考内网100外网0下面管道第二常考www是默认的80端口C,监视模式TCPorUDPfixup nat global

30 分钟内了解 IEC 61850

30 分钟内了解 IEC 61850 索引术语——IEC 61850 配置、语义分层对象数据模型、客户端 - 服务器、发布 - 订阅。平时学习标准或调试IEC61850设备,需要IEC61850模拟器,推荐一款:客户端下载地址:IEC61850客户端模拟器 服务端下载地址:IEC61850服务端模拟器谣传 IEC 61850 过…

6.2K star!推荐一款开源混沌工程测试平台:Chaos Mesh

1、Chaos Mesh 介绍 Chaos Mesh是一个开源的混沌工程平台,旨在帮助用户在生产环境中测试、验证和优化其应用程序的可靠性和稳定性。通过引入故障注入和混沌工程原则,Chaos Mesh可以模拟各种故障场景,如网络延迟、节点故障、磁盘故障等,以帮助用户发现和解决系统中的潜在问题…

看图学 - Swift 并发

Swift 内置支持以结构化方式编写异步和并行代码。看着那些层层嵌套的闭包,你是不是很想把它们全都干掉? 本文首发于 Ficow Shens Blog,原文地址: 看图学 - Swift 并发。想第一时间获取对于自己有帮助的新内容? 欢迎关注 Ficow 的公众号: 看图学 - Swift 并发如需获取 PD…

《黑神话,悟空》研发公司的薪资水平

大家好,我是晓凡。 最近全网最火爆的要属《黑神话:悟空》了,即便是我这个平时不沾游戏、不追直播的人,也看直播看得津津有味。 一、销量与热度背后 首先,让我们来看看那些令人瞩目的数字。《黑神话:悟空》自发布以来,销量已经超过450万份,总销售额达到了惊人的15亿元人…

NetScaler Release 14.1 Build 29.63 (nCore, VPX, SDX, CPX, BLX) - 混合多云应用交付控制器

NetScaler Release 14.1 Build 29.63 (nCore, VPX, SDX, CPX, BLX) - 混合多云应用交付控制器NetScaler Release 14.1 Build 29.63 (nCore, VPX, SDX, CPX, BLX) - 混合多云应用交付控制器 NetScaler - 混合多云应用交付控制器 请访问原文链接:https://sysin.org/blog/netscal…

dotnet WinUI 3 修复非打包应用运行提示 Microsoft.ui.xaml.dll 找不到

本文记录一个 WinUI 3 的坑点,有时候开发者只是想拉下来代码跑一下,自己本机没有预先安装好 Windows App Runtime 导致缺失环境,进而在运行的时候提示 Unable to load DLL 找不到 Microsoft.ui.xaml.dll 启动失败详细的错误信息如下 System.DllNotFoundException:“Unable t…

读 dotnet 源代码 为何 Thread.Sleep 半毫秒和一毫秒等待时间差距如此之大

本文记录我读 dotnet 的源代码了解到为什么调用 Thread.Sleep 的时候,传入的是不足一毫秒,如半毫秒时或 0.99 毫秒,与传入是一毫秒时,两者的等待时间差距非常大大概如下的代码,分别进行两次传入给 Thread.Sleep 不同等待时间的循环测试。其中一次传入的是 0.99 毫秒,一次…

从零开始学会建网站,个人博客建设!一步步全程图文教程。

第一步,需要购买一个域名,当然,若是测试只用也可用ip暂时替代。 比如 .com .cn .net 等域名,比如以本站:70zhan.com 为例,70zhan是我选择的域名,而.com后缀是国际域名,目前推荐的国际域名后缀包括:.com .net .org,如果是国内则可以选择.cn! 目前国际域名都比较贵,…

如何用英语读出所有数字 All In One

如何用英语读出所有数字 All In One 大数/小数/序数/分数/日期/地址/电话如何用英语读出所有数字 All In One大数/小数/序数/分数/日期/地址/电话号码图解大数基数词序数词小数⚠️ 根据语境,区分 $4.99 与 $499分数日期地址电话号码demosHow to read ALL NUMBERS in English…

自我介绍+软工5问

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade2234/homework/13228这个作业的目标 提升自己的实践能力与表达能力,学习与使用github,学习使用Markdown排版进行随笔的编写,更好地展…