目录

一、分解SDLC

二、计划&分析Planning&Analysis

培训、理解

滥用案例

三、设计Design

威胁模型

体系结构评审

四、开发实践Implementation

安全代码审查

SAST

SCA

机密检测(Secrets Detection)

五、测试&集成Testing&Integration

DAST

六、维护Maintenance

安全配置

事故处理程序和评估

依赖性维护

七、总结


在我们的应用程序中,构建安全性被普遍认为是成熟公司的一个重要优先事项。但即便如此,在开发的早期阶段,它仍然经常被忽视,使得安全成本在过程的后期成倍增加。在这篇文章中,我们将分解SDLC,探索如何在每个阶段用有限的资源增加安全性。

特别的,我想在开篇就进行说明,这篇文章是一个详细的指南。如果你想找一些有趣的流行语和一些俏皮的小帖子,那么这篇文章可能不适合你。但是,如果你是来学习如何保护应用程序的,那么就让我们马上开始吧!

一、分解SDLC

当然,对于SDLC的步骤和不同的项目方法(如瀑布、精益和敏捷)来改变我们对它们的看法存在争议。但是在所有这些方法中,我们在项目开始和每个新功能的开发上基本遵循相同的5个步骤。接下来,我们将分解这些阶段,并一一探索其中具体的安全需求

  • Stage1:Planning&Analysis——计划和分析定义应用程序的需求,包括功能性的和非功能性的。
  • Stage2:Design——设计将业务需求转化为技术执行计划。
  • Stage3:Implementation——实施将计划转化为应用程序或组件。
  • Stage4:Testing&Integration——测试和集成确保一切都在以功能性和非功能性的方式工作。
  • Stage5:Maintenance——维护应用程序完成后,我们需要投入生产,确保应用程序按预期运行。

二、计划&分析Planning&Analysis

当开始一个新项目时,在我们编写任何代码之前。通过准确定义这个项目、sprint或特性的需求来制定计划是至关重要的。更重要的是,计划就像所有的步骤一样,不是在项目开始的时候一次性完成的。二是在每一个步骤、每一个新特性或者sprint中重复完成的。每次我们做计划的时候,都必须包括安全措施。

在计划阶段所犯的安全错误可以内置到应用程序的逻辑和公司的文化中,这些都是非常昂贵的纠正措施。

  • 培训、理解

培训是创建注重安全的应用程序文化的第一步。这并不意味着我们必须让所有开发人员都成为安全专家,然后才允许他们编写第一行代码。但是,如果开发人员在一开始都不知道什么是不安全的代码,以及是什么从根本上使应用程序易受攻击,那么他们就无法编写安全代码。这方面最常用的工具之一是OWASP top10 。OWASP top10是一个针对开发人员和web应用程序安全的权威list。它代表了关于web应用程序最关键的安全风险的广泛共识。

在计划阶段,我们还必须就关键的安全要素达成一致(并对每个人进行培训)。例如,开发人员将如何处理、共享和存储机密(数字凭证)?谁可以访问生产环境?安全测试的过程是什么?我们要用什么工具?

与开发团队分享安全性的重要性是非常关键的。这将使得培训更加有效,并鼓励团队更深入的研究这些课题。最有效的方法是展示现实生活中web应用程序如何被利用的真实例子。一些工具使用BeEF等工具,来展示XSS如何被用来采取恶意行动。例如,打开网络摄像头、访问额外数据或绕过身份认证。

  • 滥用案例

滥用案例是一种展示方式,我们可以借此理解攻击者的一些想法,并开始了解他们的目标可能是什么。如果你想要熟悉这些案例,那么就必须了解我们的需求和目标。滥用案例是攻击事件的另外一面,他们都遵循一些相同的原则的路径。

在这里,我们需要考虑和讨论恶意用户将如何尝试和使用我们的应用程序。一个好的滥用案例应该包含三个要素:

  • 对案例的书面描述
  • 关于案例的对话使其细节更加具体化
  • 传达和记录细节的测试,可用于确定案例何时完成

你可能想知道为什么我们在这个过程中如此强调这一点,毕竟我们没有构建任何新东西来让每个人都意识到安全的重要性。如果我们可以让每个人以他们独特的逻辑来思考安全问题,那么就可以从代码的第一行开始将安全性构建进其中,并在整个过程中牢记于心。

三、设计Design

所以我们已经为我们的应用程序做了计划,团队在安全性上已经达到了同步,是时候开始编码了。是这样吗?别急,首先,我们需要一个计划。设计应用程序的架构可能是一项复杂的任务,这需要专业的技能。就像我们不能期望开发人员成为安全专家一样,我们也不能奢求每个架构师都是安全能手。软件架构师需要对多个主题有深入的理解,因此您不能依赖他们作为安全专家,多方讨论架构的安全性在此时显得非常重要。

  • 威胁模型

威胁建模是一个过程,通过这个过程,可以识别、列举和缓解潜在的威胁,例如结构性的弱点或是缺乏适当的保障措施。与使用者滥用案例不同,这里我们不考虑用户或攻击者的恶意路径,而是更多的识别他们可能感兴趣访问的所有高价值目标。

在威胁建模中,您需要做以下几件事。首先,列出潜在的威胁,以及为什么攻击者要利用您的业务或应用程序。也许你有一个非常机密的业务,而威胁是另一个组织试图窃取数据以获得竞争优势。又或许你正在处理金融资产,黑客有可能利用这项业务获取金融利益。

一旦列出了潜在的威胁,接下来是列出自己持有的资产,然后确定哪些是关键的。基本上,这些就是攻击者的主要目标。这可能包括:

  1. 数据库
  2. 云计算账户
  3. 网站
  4. 第三方服务
  5. 仓库

当您识别出威胁和资产后,需要开始考虑并建模攻击者如何访问这些威胁和资产。考虑尽可能多的不同情况是很重要的。例如,您的应用程序在互联网上是公开的吗?攻击者是否可以尝试利用它的公开协议?您的数据库是否存在内部威胁?攻击者如何在系统之间横向移动以获得对关键基础设施的访问?

工具:

  • OWASP Threat Dragon
  • Microsoft Threat Modeling Tool
  • 体系结构评审

软件体系结构是一个专业规程,因此它可以放在一个很少交互的团队的silo中。但与其他领域不同的是,例如代码审查、从安全角度进行的结构审查,它们往往涉及许多不同的团队成员。

体系结构评审是一个绝佳的机会,它不仅可以让我们更好的理解应用程序的内部工作原理,还可以把我们所做的一些滥用案例和威胁建模付诸实践,以检查体系结构是否包含足够的安全考虑。一个必须思考的重要问题是,如果攻击者确实访问了我们的基础架构,接下来会发生什么?

一个完备的结构评审应该包括:

  1. 网络安全体系结构
  2. 身份和访问管理
  3. 基础设施安全
  4. 云安全架构
  5. 网络设备配置

四、开发实践Implementation

当你下意识的想要投入到应用程序开发时,略显复杂的制定计划相关步骤可能会让你产生一些挫败感,但是请相信我,你未来的安全团队会为此感谢你的。当计划阶段完成后,现在是将代码放入文本编辑器并开始的时候了。那么,我们如何才能确保SDLC的开发阶段呢?

  • 安全代码审查

安全代码审查是对应用程序源代码的审查,目标是识别任何现有的漏洞。人工代码审查是指同事(通常是高级别的)查看开发人员的代码并提供反馈,这是一个很好的过程,可以通过共享安全知识和增进理解来提高早期的总体安全性。

重要的是理解人工代码审查应该关注什么,以及它与自动化代码审查有何不同。一个人工的审查者可以根据代码的上下文来理解bug或者漏洞的相关性,这也是为什么自动化工具不能完全取代人工的主要原因。

我们需要检查的一个关键功能是应用程序代码中的逻辑,而自动化工具很难发现逻辑缺陷。

  • SAST

静态应用程序系统测试也被称为“白盒测试”,是最常见和最早实现的自动应用程序安全工具。SAST扫描应用程序的源代码以发现任何已知的漏洞,因为它不需要编译应用程序或运行应用程序来开始检测漏洞(区别于DAST),所以可以再SDLC的早期阶段就实现它的作用。

SAST的缺点在于,这些工具不能总是正确的理解应用程序试图实现的目标,并可能导致许多误报。泛联新安的CodeSense采用值流图分析技术,实现上下文敏感分析、对象敏感分析、跨程序分析和跨文件分析,能够精准的检测软件安全缺陷与质量缺陷,结合独有的智慧减负、黑白名单技术,以最小的工作量为软件的安全与质量保驾护航。目前CodeSense的缺陷类分析漏报率<10%,代码规范类问题分析漏报率<5%。

工具:

  • Codesense
  • Checkmarx SAST
  • SCA

正如我们所知,大多数应用程序代码的90%都来自于开源组件。利用SCA工具将加快应用程序开发,并有助于以更快的速度满足客户所提出的需求。然而,就像所有事情一样,使用这种形式的技术也存在相应的挑战。例如,当您再项目敏捷性、质量、脆弱性、安全性等直接进行权衡时,如何平衡风险和回报是一个进退两难的问题。

但不得不承认,一个开源漏洞扫描工具可以帮助你发现软件开发所使用的的开源代码中的安全漏洞。使用一个号的工具,可以发现已知的漏洞和堵塞任何可能存在的漏洞,以避免不必要的非安全访问。数据泄露通常是由于未打补丁的漏洞所造成的,消除这些漏洞将移除攻击载体,而攻击者通常是通过这些载体获取非法数据的。你可以监控许可协议的兼容性,遵守内部政策,以及是否满足归属要求。所有的这些对于维护一个健康的开源生态系统起着重要的作用。

工具:

  • BinSearch
  • Scantist
  • 机密检测(Secrets Detection)

API密钥、数据库凭证和安全证书等是一个组织的机密信息,拿到这些东西就能访问很多敏感系统,因此需要机密检测这样的技术加以保护。它可以扫描源代码日志等文件,发现其中隐藏的机密信息。这是一项技术要求较高的专业服务,因为大多数机密都是以随机字符串的形式存储,而且很多随机字符串都不是机密信息。因此需要通过分类算法,才能以较高的准确度检测到我们需要的机密信息

很多人可能会把它跟SAST搞混,因为二者都是扫描源代码的技术,但SAST只扫描目标应用程序的当前版本,而机密检测扫描的是该项目的所有开发版本。像Git这样的版本控制系统会对项目的所有变更信息进行跟踪和存储,如果源代码的上一个版本含有硬编码的机密信息,却在后面的阶段被删除了,那么代码审计和SAST工具就无法发现这个问题,但是它遗留在git存储库中很容易遭到恶意利用。因此机密检测成为了一个独立的分类类别。

在计划部分,我们应该在培训阶段说明如何存储类似于机密这样的敏感数据,以及谁可以访问这些数据。但现实是,机密数据被开发人员广泛使用,最终不可避免的出现在源代码中。就连Samsung、Nvidia和Twitch等专注于安全问题的公司也不能幸免于难。

尤其可怕的是,因为恶意攻击者以及经过了正确的认证进入了系统,所以不会有警报响起。一个拥有成熟安全程序的组织将在两个或三个地方放置机密检测工具。尤其要注意以下三点:

  • 检测开发人员本地机器中的机密信息;
  • 检测VCS服务器上的机密信息;
  • 在公司范围之外的检测。

工具:GitGuardian

五、测试&集成Testing&Integration

  • DAST

动态应用程序安全测试(被称为“黑盒测试”)在源代码中找不到像SAST这样的漏洞,但是它可以在运行的应用程序中找到漏洞。它通过在应用程序上使用故障注入技术来实现这一点。DAST可以识别常见的安全漏洞,如SQL注入和跨网站脚本,还可以聚焦于静态分析技术无法识别的运行时问题,例如身份验证和服务器配置问题。这些缺陷只有在已知用户登录时才能被检测到。

工具:Synopsys Managed DAST

六、维护Maintenance

恭喜你刚刚构建并发布了一个安全的应用程序!安全工作到此为止了吗?不,我们现在必须继续保持高度警惕。

  • 安全配置

“你可以拥有世界上最安全的应用程序,但如果将其发布到不安全的环境中,那么一切都是徒劳。”

基础设施配置可能是应用程序维护中的一个具有挑战性和持续性的步骤。随着应用程序的扩展,基础设施配置也会随之扩展。我们经常看到错误配置导致多个泄露,在应用程序的整个维护过程中,我们必须确保所有配置遵循严格的安全标准。这往往包括:

  1. 尽可能的使用自动化基础结构;
  2. 使用IaC安全工具;
  3. 详细和明确的政策和文件。
  • 事故处理程序和评估

我们已经建立了一个安全的应用程序,并且一个顶级团队正在进行维护。然后,某一天不知从哪里,一个未知的IP地址在你的数据库中注册——你被入侵了。

非常遗憾的告诉大家,安全性从来不是100%确定的事情,即使是最警惕的安全团队和公司也总是存在持续的威胁。因此,有一个健全的事件审查计划和程序文件是至关重要的。在安全方面,我们不能放松警惕,如果没有事故处理程序,情况会变得更糟糕。

  • 依赖性维护

还记得我们前面谈到的开源代码依赖性扫描吗?这个任务也是我们在维护阶段必须不断完成的。新的漏洞不断被发现,只要想想最近的log4j例子就能明白这一点。但是更新或是修补我们的依赖关系可能是一个略有争议的话题,因为我们必须在定期修补和智能修补之间取得平衡。依赖关系经常更新,更新的主要原因之一是修复安全问题或性能问题。而且我们可以看到,通过评估以前的缺陷需要大约3个月的时间才能发现更新中的漏洞。因此,当我们更新依赖关系时,需要引进一个修补计划并遵循以下两点原则:

  • 当有已知的安全漏洞时,应该立即进行修补;
  • 当测试和发布允许一些缓冲时间时,应该按计划进行修补。

七、总结

当涉及到安全问题时,有很多事情需要考虑,而且这可能会让人无法承受。构建安全性需要一些时间,尤其是对于新项目和新团队而言。但它并不需要耗费所有的精力,有很多工具和资源来帮助公司和团队进行安全检查。重要的是,将安全建立在你的公司文化中,它需要成为每个阶段的必备因素。

部分资料来源:

1. OWASP Top Ten Web Application Security Risks | OWASP

2. https://baijiahao.baidu.com/s?id=1719090224831098610&wfr=spider&for=pc

3.Securing your SDLC (Software Development Life Cycle)

确保软件开发生命周期(SDLC)的安全相关推荐

  1. 软件开发生命周期(SDLC)完全指南

    译者:陈峻 软件开发生命周期(Software Development Life Cycle,SDLC)包含了软件从开始到发布的不同阶段.它定义了一种用于提高待开发软件质量和效率的过程.因此,SDLC ...

  2. 软件开发生命周期(SDLC) 【详解】(含公司产品研发流程图、大厂研发架构图、大厂研发流程图)

    目标 通过最少的资源,交付出高质量的软件. 六大阶段 1.分析 >> 2.设计 >> 3.开发 >> 4.测试 >> 5.部署 >> 6.维 ...

  3. 云原生安全系列 1:零信任安全和软件开发生命周期

    引言: 自动化已经以各种形式出现了几十年,直到现在我们才开始看到它的全部潜力. 自动化软件开发生命周期 (SDLC) 可以显著提高质量保证.开发人员的生产力并减少花在特定任务上的时间.公司已开始在其整 ...

  4. sdlc 瀑布式 生命周期_SDLC指南–软件开发生命周期的阶段和方法

    sdlc 瀑布式 生命周期 When I decided to teach myself how to code almost four years ago I had never heard of, ...

  5. SDLC 软件开发生命周期及模型

    SDLC 软件开发生命周期及模型 SDLC Waterfall Model 瀑布模式 V-Shaped Model V型模式 Prototype Model 原型模式 Spiral Model Ite ...

  6. 移动开发的软件开发生命周期介绍(二)

    Stabilization--稳定期 Stabilization is the process of working out the bugs in your app. Not just from a ...

  7. 软件开发生命周期有几个阶段?

    关注+星标公众号,不错过精彩内容 作者 | 情报小哥 ID | 嵌入式情报局 很多初学软件编程的小伙伴,只顾着"编程",其他开发相关的一些"技能"很少关注.如果 ...

  8. 软件开发生命周期及开发模型

    软件开发生命周期 软件开发生命周期又叫做SDLC(Software Development Life Cycle),它是集合了计划.开发.测试和部署过程的集合.如下图所示 : 需求分析 这是生命周期的 ...

  9. 软件的生命周期SDLC

    软件的生命周期SDLC: 一.计划     项目经理完成    比如说完成一个计算器,实现加法功能 二.需求分析     加法功能,十进制加法     界面             比如 加法功能实现 ...

最新文章

  1. 初创企业购买企业邮箱_支持#NetNeutrality =支持设计师及其创建的初创企业
  2. 计算机jsp外文文献,计算机 JSP web 外文翻译 外文文献 英文文献.doc
  3. Activity详细解释(生命周期、以各种方式启动Activity、状态保存,等完全退出)...
  4. ASP防止SQL注入-代码片段
  5. mvc4中的 webapi 的使用方式
  6. 附录:更多字符串操作命令
  7. 采用这套全方位监控方案,立刻规避90%采购风险(附体验demo)
  8. python读取hadoop库数据_使用Python访问HDFS
  9. 火狐对ajax的onreadystatechange与IE的不同。
  10. RAW-socket
  11. Linux 串口驱动 问题
  12. php初级入门教程_PHP初学者教程
  13. 读书有益——》十字令(一)
  14. Android 指纹验证标准API学习
  15. 微信小程序内嵌网页链接
  16. PHP写的二维码签到,大家支持一下吧!
  17. UEFI是什么意思?UEFI和BIOS的区别是什么?
  18. Latex 加下角标
  19. Android 蓝牙系统打开蓝牙源码分析(一)--- 全网最详细
  20. Unknown column 'xxxx' in 'field list'

热门文章

  1. JS逆向 2021-8-16 网易云音乐 params、encSecKey参数
  2. 开源社与 Dev.Together 2022
  3. 单线复用有线Mesh组网案例
  4. struct的构造函数
  5. WebUploader上传图片插件
  6. osgEarth编译——以VS2012为例
  7. 第四次面试----华数电力科技有限公司
  8. Linux面试必备基础知识(十一)——系统管理命令
  9. Jira 史诗指南 (2022)
  10. 用计算机打出来自天堂的魔鬼抖音,抖音来自天堂的魔鬼卡点视频教程