自己 做网站,沈阳做网站最好的公司,泰兴市城乡建设管理局网站,济南seo网站优化【SDL】微软SDL建设指南 1.建立安全标准、指标和治理2.要求使用经过验证的安全功能、语言和框架3.执行安全设计审查和威胁建模4.定义并使用密码学标准5.确保软件供应链安全6.确保工程环境安全7.执行安全测试8.确保运营平台安全9.实施安全监控和响应#xff08;态势管理或漏洞管… 【SDL】微软SDL建设指南 1.建立安全标准、指标和治理2.要求使用经过验证的安全功能、语言和框架3.执行安全设计审查和威胁建模4.定义并使用密码学标准5.确保软件供应链安全6.确保工程环境安全7.执行安全测试8.确保运营平台安全9.实施安全监控和响应态势管理或漏洞管理10.提供安全培训 1.建立安全标准、指标和治理
1、确定所需标准和定义安全要求
SDL建设需要为产品线领导、产品所有者、开发人员、运营等角色提供明确的指导帮助他们理解安全职责
组织必须明确一个最低的安全质量标准。早期定义这些安全标准有助于团队了解项目可能存在的安全风险可以帮助团队在开发过程中更快、更有效地识别和修复安全缺陷。
可以参考以下信息
NIST 安全软件 开发框架行业特定法规例如在存储、处理或传输支付账户数据时应满足 PCI 数据安全标准 (PCI DSS)
2、定义硬性指标
SDL团队应该对安全漏洞严重性级别有明确的定义。它规定了哪些漏洞必须在指定的时间范围内修复。比如“严重”或“重要”的漏洞应该在规定时间内被修复。该标准一旦确定就不能放松必须持续保持高标准不能懈怠
3、创建暂时放行机制
在实际工作中由于业务优先级或资源限制可能无法立即解决所有安全问题。因此必须有一套正式的机制来暂时接受某些安全风险的情形。该机制可以是提交一个安全备案工单一定要包含以下的内容
分类首先需要对风险进行分类明确这个风险的性质以及可能的影响。证明需要提供合理的理由来解释为什么这个例外情况是不可避免的比如业务需求或资源不足。审批漏洞备案情况必须经过发起者管理层的审批确保高层管理者对接受的安全风险有充分的了解。 2.要求使用经过验证的安全功能、语言和框架
1、身份 - 确保用户使用强身份验证并且仅具有适合其需求的权限级别最小权限
1️⃣ 安全凭证存储 (KeyVault/HSM) - 实施一种机制来清点、监控、维护和更新所有存储的机密。加密和存储应用程序机密无需在代码或代码的配置文件中包含机密和其他敏感配置信息。切勿将密码或其他敏感数据存储在源代码或配置文件中或存储在不受保护位置的纯文本文件文档、电子表格中。生产机密不应用于开发或测试。
2️⃣ 使用令牌相关标准标识库例如使用 Microsoft 身份验证库 (MSAL) 使开发人员能够从 Microsoft 标识平台获取安全令牌 对用户进行身份验证并访问受保护的 Web API。
3️⃣ 强制执行最小权限系统的每个帐户类型和组件应仅具有执行所需操作所需的最低必要权限。
2、新兴事物人工智能安全和保障AI安全
3、数据保护保护应用程序中使用的内容——安全地实施和连接数据库、存储账户、非结构化文档等
4、日志记录完整 - 必须启用并保留安全日志记录以协助任何事后调查
5、使用已批准的工具 - 定义并发布已批准工具及其相关安全检查的列表。工程师应努力使用最新版本的已批准工具例如编译器版本 3.执行安全设计审查和威胁建模
威胁建模和威胁模型的安全设计审查可以识别潜在的安全威胁以便设计人员可以在开发过程的早期缓解这些威胁从而实现设计安全的系统。在设计过程中添加安全需求内容比事后添加要便宜得多风险也小得多。威胁建模是一种结构化方法用于分析系统的安全设计同时“像攻击者一样思考”。在新产品或新功能发布之前可以缓解已识别的威胁。 对于威胁建模的学习可以参考如下专栏威胁建模专栏 - 免费 4.定义并使用密码学标准
使用正确的加密解决方案来保护数据在存储静态或传输传输中时免遭意外泄露或更改至关重要。要实现这一点必须知道需要通过加密保护哪些数据、应使用哪些机制来加密这些数据以及如何管理加密密钥和证书。
1️⃣ 加密传输中和存储的数据确保数据在存储和传输中均已加密。对于传输中的加密尽量对所有互联网流量最好是私有网络内的流量使用强版本的 TLS。对于存储加密虽然存在许多易于部署的加密解决方案来保护设备或磁盘上的数据免遭盗窃离线攻击但它们无法防止通过应用程序逻辑进行在线攻击在这些情况下需要额外的解决方案来在将数据写入存储之前对其进行加密传输中加密。
2️⃣ 后量子密码学PQC建议在适用的情况下优先考虑对称加密采用 后量子密码学PQC 进行非对称加密。
3️⃣ 加密敏捷性在需要时更改新的加密机制、算法和库例如在库中发现危及可靠算法的漏洞或者加密算法可能随时被视为被破解的情况下。
4️⃣ 加密密钥和证书的管理和轮换定义如何管理、保护和轮换加密密钥和证书也至关重要。密钥和证书的使用寿命有限因此有必要定义机制来管理密钥和证书的生命周期包括在之前的密钥和证书即将到期时创建新密钥和证书的机制以及在发生安全事件例如意外访问时快速轮换的机制。任何可以访问加密密钥或私钥的人都可以访问加密数据因此有必要控制谁无论是个人还是服务有访问权限并提供该访问的清晰审计日志。 5.确保软件供应链安全
如今绝大多数软件项目都是使用第三方组件商业和开源构建的。在选择要使用的第三方组件时重要的是要了解其中的安全漏洞可能对集成它们的大型系统的安全性造成的影响并在使用前考虑进行彻底的分析。
如今开发人员使用 OSS 的方式多种多样git clone、wget、复制和粘贴源代码、将二进制文件签入存储库、直接从公共包管理器、将 OSS 重新打包为 .zip、curl、apt-get、git submodule 等。如果开发人员团队不遵循统一的 OSS 使用流程那么在任何组织中保护 OSS 供应链几乎是不可能的。实施有效的安全 OSS 供应链策略需要在整个组织的各个开发人员团队中标准化 OSS 使用流程。
1️⃣ 建立安全的开源软件摄取流程安全供应链消费框架S2C2F是一个安全保证和降低风险的流程专注于确保开发人员如何使用开源软件。
2️⃣ 了解环境中的依赖关系许多软件项目依赖于开源软件项目其中许多项目依赖于其他开源项目。盘点依赖关系至关重要以便在发现漏洞时能够更新这些依赖关系。
3️⃣ 制作软件物料清单 (SBOM) - SBOM 有助于提高软件透明度和完整性。SBOM 是一种机器可读的文档其中列出了所有组件包括用于创建产品的开源组件有助于更好地盘点软件从而帮助组织了解许可证和漏洞风险。SBOM 还包含包和文件校验和以帮助验证哈希值当其他方式无法提供签名时这很有用。
4️⃣ 签署和证明工件——软件完整性的核心方面是签署和验证其组件。 6.确保工程环境安全
现在攻击者已将攻击重点扩大到用户帐户、开发环境和构建流程因此除了确保源代码和配置文件不包含安全错误或未被篡改之外还必须防御这些系统。应通过零信任和最小特权访问策略来管理、操作和保护对源代码和工程系统的访问。源代码应存储在版本控制系统如 Git中并通过条件访问策略和多因素身份验证来控制访问权限。工程系统应进行分段由个人其特权访问权限会定期接受审查使用单独的授权身份从特定的平台或堡垒机进行管理。所有特权访问都应遵循即时和足够访问 (JIT/JEA) 原则提供并应启用安全日志记录并将其提供给安全监控团队。
1️⃣ 采用零信任方法零信任模型的核心要求对每个访问请求用户、服务或设备进行验证就好像它来自不受信任的网络一样无论请求来自何处或访问什么资源。
2️⃣ 禁止直接提交到生产分支配置源代码控制存储库防止开发者帐户直接提交到生产分支并要求对所有拉取请求进行代码审查和批准。这可确保单个受感染/恶意开发者帐户无法对生产系统的代码进行任意更改。
3️⃣ 实施特权访问系统或堡垒机使用特权访问系统或堡垒机有助于保护特权用户免受互联网攻击和威胁载体的侵害方法是为敏感任务提供专用机器。
4️⃣ 提供安全的虚拟工作站Microsoft Dev Box 让开发人员可以自助访问随时可编写代码的云工作站称为开发箱。开发箱可以配置特定于项目的工具、源代码和预构建二进制文件因此开发人员可以立即开始工作 - 安全无虞。
5️⃣ 实施 GitHub Codespaces - Codespaces过其内置功能和与 GitHub 平台的原生集成提供安全的开发环境。开发人员只需使用 IDE 或浏览器和 GitHub 帐户即可快速启动 Codespace并在共享且安全的开发环境中工作。
6️⃣ 安全部署环境例如 Azure 部署环境使开发团队能够使用基于项目的模板快速轻松地启动应用程序基础结构这些模板可以建立一致性和最佳实践同时最大限度地提高安全性。 7.执行安全测试
安全测试对于软件安全至关重要通常是开发生命周期中集成的首批活动之一旨在对安全性产生直接影响。安全测试包括自动例如静态和动态安全测试和手动渗透测试方法每种方法都可以进一步分类通常会使用多种方法。
1、SAST
静态分析安全测试 (SAST) 可以在编译之前分析源代码提供了一种高度可扩展的安全代码审查方法并有助于确保遵循安全编码策略。它根据应用程序的逻辑和对编码标准的遵守情况来查找已知问题而不是在应用程序运行时查找。SAST 通常集成到开发人员工作流程中在提交代码之前识别易于检测的问题并集成到构建自动化中以便在每次构建或打包软件时识别漏洞。没有一刀切的解决方案开发团队应该决定执行 SAST 的最佳频率并且通常会部署多种策略——以平衡生产力和足够的安全覆盖范围。
资料
1️⃣ CodeQL GitHub 业界领先的语义代码分析引擎。CodeQL 让您可以像查询数据一样查询代码并编写查询来查找漏洞的所有变体从而彻底消除漏洞。
2️⃣ 静态代码分析工具列表
优势
提供了最大的代码覆盖率能够使整个代码库被扫描。不需要可执行的代码它可以在软件开发生命周期SDLC的任何阶段使用。
劣势
SAST最大的优势白盒方法也是它最大的劣势因为它需要访问源代码。由于SAST不执行代码所以它无法发现运行时的问题。SAST会产生大量的假阳性/阴性。大型和复杂的项目将很容易产生成千上万的警告需要手动审查并持续优化规则。
2、SCA
SCA与SAST类似但是它的主要目标是识别代码库中的所有开源组件、库和依赖关系并将该清单映射到当前已知的漏洞列表中
3、DAST
实施动态分析安全测试 (DAST) 源代码被编译、执行然后在运行时进行扫描以寻找安全漏洞。随机和预定的输入被传递给被测试的应用程序如果应用程序的行为与预定的正确响应不同或者程序崩溃就会记录一个警告这意味着应用程序中的一个错误已经被发现。
优势
由于应用程序的行为是被分析的所以几乎没有误报。DAST用于发现运行时问题当需要用户交互时是比较好的选择。DAST不需要被测应用程序的源代码纯黑盒方法测试。
劣势
DAST需要一个运行中的应用程序来测试需要部署的人力可以由QA负责搭建环境。由于没有任何东西可以指导随机输入的生成DAST不能提供良好的代码覆盖率而且效率很低。很难将发现的错误映射回源码中去修复问题需要人力追溯代码问题点。
4、IAST
IAST是两者的混合版本结合了SAST和DAST的优点。
动态方法DAST常用于测试和过滤掉SAST产生的警告以提高应用安全测试的准确性。测试指令可以像DAST一样确认利用成功提高其性能并像SAST一样对应用源码进行代码覆盖。
5、FAST
纯DAST解决方案和黑盒测试一般来说代码覆盖率较低因为它们依靠随机的、基于模式的或蛮力的方法来生成输入和测试案例。
边缘模糊采用基于反馈的覆盖指导模糊技术对被测试的软件进行仪器化测试以识别漏洞和错误它可以通过反向工程如果应用程序是闭源的来补充。在模糊过程中随机输入 “发送到 “被测软件同时监控其行为直到触发崩溃。然后记录和分析导致崩溃的输入以获得可用于利用或修复应用程序中的错误的信息。
当执行每个输入时模糊器会得到关于所覆盖代码的反馈使突变引擎能够测量输入质量。突变引擎的核心是用于优化代码覆盖率的遗传算法作为一个健康函数。生成的输入导致新的代码路径或基本块或边缘取决于使用的模糊覆盖度量最大限度地提高代码覆盖率从而增加触发bug的概率这些输入被优先考虑并在下一批突变过程中使用。
优势
FAST几乎不会产生误报如果模糊器发现了什么通常是确认的问题。FAST会自动将代码覆盖率最大化并且是高度自动化的。一旦模糊器启动并运行它就可以搜索错误而不需要进一步的人工交互。根据模糊器的类型可能不需要源代码。
劣势
FAST需要一个运行中的应用程序来测试需要部署的人力可以由QA负责搭建环境。FAST需要特殊的专业知识(如编写线束)和测试基础设施。
6、红/蓝队演习
一支由安全专家组成的专门“红队”模拟现实世界中对网络、平台和应用层的攻击挑战云服务“蓝队”一支专门的安全响应团队检测、防范和恢复安全漏洞的能力。每次演习后红队和蓝队都会进行全面披露以确定漏洞、解决问题并显著改善漏洞响应。
7、应用程序渗透测试
渗透测试是由熟练的安全专业人员模拟黑客的行为对软件系统进行的安全分析。渗透测试的目的是发现由编码错误、系统配置故障或其他操作部署弱点导致的潜在漏洞因此测试通常会发现最广泛的漏洞。渗透测试通常与自动和手动代码审查一起执行
8、执行持续安全测试
持续安全测试 (CST) 持续检查第三方库中的安全问题和不安全实现。CST 包括软件组成分析 (SCA) 检查和静态应用程序安全测试 (SAST)
9、运行漏洞赏金计划
开办SRC 8.确保运营平台安全
1️⃣ 强制实施多因素身份验证 - 人们常说攻击者不会入侵他们只会登录因此有必要实施额外的控制措施来保护所有用户尤其是管理员。多因素身份验证为登录添加了关键的第二层安全保护以帮助保护对数据和应用程序的访问同时仍提供简单高效的登录体验。
2️⃣ 保护管理帐户- 在 Microsoft使用多层防御组合来保护对生产系统的管理访问包括安全管理工作站 (SAW)、用于管理的 MFA 备用凭据以及基于角色的访问控制 (RBAC) 的即时特权提升 (JIT)。
3️⃣ 实施安全基线 - 所有运营环境都需要定义和执行安全基线。
4️⃣ 创建隔离层 - 隔离层是指应用安全控制的各个级别以确保系统在流程、计算和网络方面保持分离和安全。
5️⃣ 使用机密计算 - 在云中处理敏感数据时将其隔离。
6️⃣ 减少攻击面 - 攻击面是您的组织容易受到网络威胁和攻击的所有地方。减少攻击面包括下线不需要使用的域名、ip、端口、服务等。
7️⃣ 执行平台渗透测试 - 对生产运行平台进行渗透测试从物理数据中心到云平台。
8️⃣ 实施操作终端设备安全
9️⃣ 定期维护和自动修补周期 - 所有系统必须持续监控并更新最新的安全更新。
1️⃣0️⃣ 防范 DDoS 攻击 - 提供针对常见网络级攻击的实时缓解措施。分布式拒绝服务 (DDoS) 攻击是云应用程序面临的最大可用性和安全性问题之一因为任何可通过互联网公开访问的端点都可能成为攻击目标。为了解决这个问题至少必须持续监控流量并为常见的网络级攻击提供实时缓解措施。然而随着 DDoS 攻击变得越来越复杂和有针对性可能还需要提供针对协议和应用程序层攻击的 DDoS 缓解措施。 9.实施安全监控和响应态势管理或漏洞管理
1️⃣ 主动检测和应对威胁 - 使用安全分析和威胁情报平台来实现攻击检测、威胁可见性、主动搜寻和威胁响应。
2️⃣ 建立标准的事件响应流程 - 制定事件响应计划对于帮助应对可能随时间出现的新威胁至关重要。 10.提供安全培训
安全是一场无限的游戏其中威胁、技术和需要保护的业务资产总是在变化而攻击者永远不会放弃因此安全培训方法也应该是持续的和不断发展的。有效的培训可以补充和强化安全政策、SDL 实践、标准和软件安全要求
由于构建系统的工程师通常不是安全专家因此他们必须接受威胁建模的技术和概念方面的培训才能有效地构建设计安全的系统。这对于威胁建模过程在开发人员数量远远超过安全专业人员的组织中大规模发挥作用也至关重要。威胁建模必须被视为一项基本的工程技能所有开发人员和工程师都必须至少具备基本技能。因此开发和工程团队必须在入职培训和定期复习中接受培训以胜任威胁建模。