微软SDL(Security Development Lifecycle)是一种安全软件开发的方法论,它强调在整个产品开发过程中融入安全考虑因素。SDL
是一个动态的过程,包括多个阶段和活动,以确保产品的安全开发、测试、部署和运行。Microsoft 要求所有开发团队都必须遵守 SDL
流程和要求,从而获得更安全的软件,并降低开发成本,减少严重漏洞。当前多数大型企业都借鉴SDL构建了适应于企业内部的安全研发流程。
1. SDL概览
开发安全软件时,安全和隐私从来都不应是事后才考虑的,必须制定一个正式的过程,以确保在产品生命周期的所有时间点都考虑安全和隐私。 Microsoft
的安全开发生命周期 (SDL) 将全面的安全要求、特定于技术的工具和必需流程嵌入到所有软件产品的开发和运营中。
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/efd2886f55dc4cffa0e1dfba0cb71d20.png)
微软 SDL 由上图七个部分组成(可简称 5 + 2 ),包括五个核心阶段(蓝色圆圈标注的中间5个阶段)和两个支持安全活动(黑色圆圈标注的两个端点):
- 5个核心阶段 :分别是要求、设计、实现、验证和发布。 每个阶段都包含强制性的检查和审批,以确保所有安全和隐私要求以及最佳做法得到妥善解决。
- 2个支持活动 :即培训和响应。分别在核心阶段之前和之后进行,以确保它们得到正确实现,并且软件在部署后保持安全。
Microsoft 的所有开发团队都必须遵守 SDL 流程和要求,从而获得更安全的软件,并降低开发成本,减少严重漏洞。
2. SDL的安全目标
- 降低产品或服务的安全漏洞率
- 降低可能发生的安全漏洞的严重程度
- 在产品研发阶段就消除潜在的安全风险
- 建立企业整体安全开发规范和流程
- 将安全开发规范固化在开发工具中
- 建立安全能力中心,快速响应安全事件
3. SDL安全能力提升路线图
3.1. PPDR安全自适应过程
PPDR是Prepare、Protect、Detect及Response的简称,具体如下:
- Prepare(评估):现状调研
- Protect(保护):保护体系建设
- Detect(检测):检测和监控体系建设
- Response(响应):应用响应体系建设
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/e19ccb4dbc2e44a1b7f305b589d23f18.png)
3.2. SDL能力提升路线
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/20247091eade4922915232829757f2d5.png)
3.2.1. 第一阶段:研发安全现状调研及差距分析
SDL 评估旨在确定企业在开发过程中的安全和隐私需求, 分析任何差距, 并向企业提供建议。评估23项功能, 涵盖 SDL 中的17种实践。
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/d34e0f3228204259956e546043fb78d6.png)
3.2.2. 第二阶段:安全研发流程落地实施
微软的安全研发流程落地实施主要涉及如下五个关键点:
- 根据企业安全能力差距分析,进行安全培训体系建设、知识库建设、合规支撑工具建设,安全团队建设
- 应用安全架构评估、威胁建模:比如建立威胁消减知识库,帮忙安全SE做安全架构设计。
- 自动化的安全功能点检查工具、自动化的发布过程,和安全工具自适应:比如CodeQL静态代码检查工具,可以自动检测开发者提交的PR,及时发现安全问题。
- 自动化的Web漏洞设,检查工具引入和建Fuzz工具引入,内网渗透和KALI的引入
- 建立快速应急响应团队、明确响应人员角色职责
若要详细了解以上五个关键落地指导,可参阅附件《微软SDL安全研发生命周期介绍》(访问密码:6277)
4. SDL具体内容
4.1. 培训
所有 Microsoft 员工都必须完成一般安全意识培训和适合其角色的特定培训。 初始安全意识培训在员工时提供给新员工,在 Microsoft
的整个工作期间都需要进行年度刷新培训。
开发人员和工程师还必须参与特定于角色的培训,让他们了解安全基础知识以及安全开发的最新趋势。
还鼓励和提供所有全职员工、实习生、特遣队工作人员、分包商和第三方的机会,以寻求高级安全和隐私培训。
涉及的培训内容主要如下图所示:
![培训地图](https://img-
blog.csdnimg.cn/direct/d99b777a7c464495bf90f138920d8094.png)
4.2. 要求
Microsoft 开发的每个产品、服务和功能都从明确定义的安全和隐私要求开始;它们是安全应用程序的基础,并告知其设计。
开发团队根据产品将处理的数据类型、已知威胁、最佳做法、法规和行业要求,以及从以前的事件中吸取的经验教训等因素来定义这些要求。
定义后,将明确定义、记录和跟踪要求。
软件开发是一个持续的过程,这意味着关联的安全和隐私要求在整个产品的生命周期中发生变化,以反映功能和威胁环境的变化。
4.3. 设计
定义安全性、隐私和功能要求后,软件的设计就可以开始。 作为设计过程的一部分,将创建威胁模型,以帮助根据风险识别、分类和对潜在威胁进行评分。
对软件进行更改时,必须在每个产品的生命周期内维护和更新威胁模型。
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/48f6958ba2d5442a8f21a2cf86d6db8f.png)
威胁建模过程首先定义产品的不同组件,以及它们如何在关键功能方案(如身份验证)中相互交互。 数据流图 (DFD)
创建,以直观地表示所用的关键数据流交互、数据类型、端口和协议。 DFD 用于识别和确定添加到产品安全要求的缓解威胁的优先级。
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/ff4e13e169ea4907b7818cd8c5aa7f30.png)
开发人员需要对所有威胁模型使用 Microsoft 的Threat Modeling Tool,这使团队能够:
- 沟通其系统的安全设计
- 使用经过验证的方法分析安全设计的潜在安全问题
- 建议和管理安全问题的缓解措施
在发布任何产品之前,将检查所有威胁模型的准确性和完整性,包括缓解不可接受的风险。
4.4. 实现
实现从开发人员根据前两个阶段创建的计划编写代码开始。 Microsoft
为开发人员提供了一套安全开发工具,以有效实现他们设计的软件的所有安全性、隐私性和功能要求。 这些工具包括编译器、安全开发环境和内置安全检查。
4.5. 验证
在发布任何书面代码之前,需要进行多次检查和批准,以验证代码是否符合 SDL、符合设计要求且没有编码错误。 SDL
要求手动评审由独立于开发代码的人员的审阅者进行。 职责分离是此步骤中的重要控制措施,可确保同一人无法编写和发布任何代码,从而导致潜在的意外或恶意伤害。
还需要进行各种自动检查,并内置于提交管道中,以便在签入期间和编译生成时分析代码。 Microsoft 使用的安全检查分为以下类别:
- 静态代码分析 :分析源代码是否存在潜在的安全缺陷,包括代码中存在凭据。
- 二进制分析 :在二进制代码级别评估漏洞,确认代码已准备就绪。
- 凭据和机密扫描程序 :标识源代码和配置文件中可能的凭据和机密公开实例。
- 加密扫描 :验证源代码和代码执行中的加密最佳做法。
- Fuzz测试 :使用格式错误和意外数据来练习 API 和分析器,以检查漏洞并验证错误处理。
- 配置验证 :根据安全标准和最佳做法分析生产系统的配置。
- 开源治理 :开源软件检测和检查版本、漏洞和法律义务。
如果手动审阅者或自动化工具在代码中发现任何问题,则会通知提交者,并且在再次提交以供审阅之前,需要对其进行必要的更改。此外,内部和外部提供商定期对
Microsoft 联机服务进行渗透测试。
4.6. 发布
通过所有必需的安全测试和评审后,生成不会立即发布给所有客户。 在安全部署过程( Safe Deployment
Process,SDP)中,生成会系统地逐步发布到更大和更大的环。 SDP 环的定义如下:
- Ring 0:负责服务的开发团队
- Ring 1:所有 Microsoft 员工
- Ring 2:Microsoft 外部的用户已将其组织或特定用户配置为位于目标发布频道
- Ring 3:分阶段的全球标准版本
每个环中的内部版本保留在负载周期较高的适当天数内,但除Ring 3 外,因为已对早期环中的稳定性进行了适当的测试。
4.7. 响应
发布后会广泛记录和监视所有 Microsoft 服务,并使用集中专有近实时监视系统识别潜在的安全事件。
5. 参考
[1] [Microsoft Security Development Lifecycle
(SDL)](https://learn.microsoft.com/en-us/compliance/assurance/assurance-
microsoft-security-development-lifecycle)
[2] [Introduction to Microsoft Online Services security development and
operation](https://learn.microsoft.com/zh-cn/training/modules/audit-security-
development-operation/introduction?ns-enrollment-type=learningpath)
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/2ce6c56a43af4dc59cfbfc3636423cb2.png)
学习网络安全技术的方法无非三种:
第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。
第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
第三种就是去找培训。
接下来,我会教你零基础入门快速入门上手网络安全。
网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。
第一阶段:基础准备 4周~6周
这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
第二阶段:web渗透
学习基础 时间:1周 ~ 2周:
① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
配置渗透环境 时间:3周 ~ 4周:
① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。
渗透实战操作 时间:约6周:
① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
以上就是入门阶段
第三阶段:进阶
已经入门并且找到工作之后又该怎么进阶?详情看下图
给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
![](https://img-blog.csdnimg.cn/img_convert/29b98f58ef1f071311d1b5111a1f9aab.jpeg)