"二十一世纪最重要的啥?人才!"。葛大爷在《天下无贼》曾经这样呼喊。但是在时下虫虫要说最重要是数据安全。不管是自动化DevOps,大数据还是AI,安全都是第一要务和基础,甚至国家层面安全也都提到国家战略中。在开发即上线的DevOps一栈式模式下,对Devops做安全升级,在全栈每一阶段都进行安全检查和整改,建设成安全栈式DevSecOps势在必行。本文虫虫就就来给大家谈谈DevSecOps各阶段进行的安全实践活动和工具。
DevSecOps基本上基础也采用DevOps实践,并在相应阶段增加安全性检查,并集成到的CI/CD管道中,扩展现有的devops工具和实践。
给Pipeline增加安全罩
安全无易事!当给DevOps集成安全功能时候,最容易变得不堪重负并迷失!了解当前的工作流程和工具是给管道集成安全检查和安全控制的关键。一般来说DevOps持续集成(CI),持续交付和连续部署(CD)管道分为6阶段:
编码:开发阶段,在代码进入源代码存储库之前。
构建:构建并执行系统的基本自动化测试。
测试:成功构建后,工件将部署到临时和测试环境中。
主机运行:此阶段涉及需要应用于基础架构的配置和版本更新。
运行:如果主机运行通过,则表明应用程序已准备好部署到生产环境中,可以灰度发布和升级。
监控:持续测量和监控生产活动。
本文中,我们基于以上6个阶段进行安全集成实践和探索。
开发阶段
DevOps实践强调编写良好的代码。代码运行良好,易于更改和理解。 DevSecOps通过添加用于编写良好和安全代码的安全检查来扩展这些实践。
传统的单元测试,静态代码分析,代码审查,预提交Hooks(git 客户端钩子)等实践可以扩展到该阶段的安全性检查。为了不影响开发人员的工作效率,可以在将代码提交到源代码存储库之前查找并修复常见的安全问题。
代码审查
代码审查是提搞代码安全性的重要手段。它可以增加开发人员的责任感和透明度,降低来自内部威胁的风险(比如有人代码中投毒、隐藏后门以及逻辑炸弹等),同时代码审查也有助于提高代码质量。除了代码外一些关键配置文件比如Puppet清单,Ansible playbooks,Dockerfiles,.gitlab-ci.yml等也需要纳入代码审查的范畴。
静态分析工具
市面上有大量的静态分析,包括开源和商业工具,可以将其集成到喜欢的IDE中,帮助我们检查代码的一致性,可维护性,清晰度,错误模式等等,还可以通过添加基本的规则(工具针对该语言)来识别基本安全漏洞。
工具列表
可以在此阶段使用的非详尽工具列表包括:
Gerrit,Phabricator,SpotBugs,PMD,CheckStyle,Find Security Bugs等等
项目构建
将代码提交到源存储库后(比如gitlab),将执行应用程序的构建和基本自动化测试,以确保代码始终可编译可构建。
同样,需要在此阶段添加检查,以检测严重和高危安全性问题。如果发现严重问题,则需要进行安全控制,设定构建为失败并发送警报通知。
依赖组件安全性分析
根据Sonatype的2018年软件供应链报告,在该年度开发人员总共下载使用过逾3000亿的开源组件,其中八分之一都包含已知的漏洞。而且今年内由于基础库被注入木马的安全事件也频繁发生,这虫虫之前的文章曾专门介绍过,大家可以搜索历史文章。
使用依赖组件安全性分析可以发现,依赖的开源组件(类库)是否包含已知的安全漏洞。运行SCA工具有助于识别具有已知安全漏洞的过时库和框架。
SAST(静态分析安全测试)
在此阶段提高安全性并向团队提供快速反馈的另一种有效方法是运行静态分析软件测试。这些工具可以找到审核者遗漏的隐藏错误,这类错误往往很难通过其他类型的测试找到。
单元测试
在重构代码或进行其他更改时,单元测试对于扑捉回归漏洞非常重要。对每一功能块添加单元安全测试很有必要。
工具列表
可以在该阶段使用的工具包括:众所周知的Sonarqube,OWASP依赖性检查,sourceclear,Retire.js和snyk等。
测试阶段
成功构建后,通过选择生成的工件并将其部署到到容器或者测试环境来触发测试阶段。这些测试包括功能测试,集成测试,性能测试,高级SAST,安全性和DAST。
这个阶段通常需要更多的时间和资源来执行,并且遵循失败快速方法优先原则,即更费劲和耗时的测试要尽可能后延,只有在其他测试都通过时才执行。
有针对性的动态扫描
一旦部署,应用程序就会暴露到各类可能攻击中,例如跨站点脚本,SQL注入或身份验证越过等等。而这些正是动态应用程序安全测试(DAST)发挥作用的地方。可以根据OWASP Top 10中总结的常见关高危漏洞来分析当前测试的应用程序。
模糊测试(Fuzzy)
模糊测试是一种黑盒测试,暴力可靠性测试技术,主要包括以自动方式使用非预期的数据测试结果以发现漏洞的测试方法。
自动攻击
作为自动化测试周期的一部分,我们可以进一步尝试模拟对运行应用程序的攻击,对系统执行基本的针对性自动渗透测试。
工具列表
该阶段可用的工具(开源和商业)包括:Acunetix Web Vulnerability Scanner,BDD Security,JBroFuzz,Boofuzz,OWASP ZAP,Arachi,IBM AppScan,Mittn,GAUNTLT,SecApp套件等等
主机运行(单机)
在主机运行阶段主要立足于保护运行时环境和保护其上运行的应用程序。多年来,业界提出了很多最佳安全实践,模式,指南和工具,以帮助加强基础架构并使其更具弹性。
降权、最低权限
PoLP声明每个模块(例如进程,用户或程序,取决于主题)必须只能访问其合法用途所必需的信息和资源。
配置自动化
配置管理工具可以轻松地反复大规模部署和创建安全基础架构。通过标准化配置,CM工具可以减少与补丁管理相关的问题,最大限度地降低黑客可以利用未修补的服务器的风险,并有助于减少不同环境之间的差异。值得一提的是,使用CM工具可以在中央存储库和版本控制下跟踪配置信息。
不可变基础架构
使用不可变基础架构,一旦在系统中创建工件,它就不会通过用户修改而改变,则不会有增量更改:创建新服务器实例并替换旧服务器实例,而不是一系列增量更新和更改。一。
安全标准
许多社区提供了基础架构加强指导和建议。这些标准包括Internet安全中心(CIS)基准测试和NIST配置清单等。
工具列表
该阶段可使用工具包括:Ansible,Puppet,(R)?ex,HashiCorp Terraform,Chef,Docker等等
运行阶段
如果上述所有阶段成功运行,则需要准备投入生产环境运行。该阶段目标主要是验证在配置或部署时间内是否存在任何错误,这些错误是否会降低系统的可靠性和弹性,是否可以在故障情况通过这些进行攻击。
该阶段使用自动化运行时检查和测试中发挥重要作用的地方,特别是发现安全违规和漏洞的安全问题,并突出了风险,如访问控制策略或防火墙规则的变化。
工具列表
这方面我们要特别提及一个Netflix开源的工具chaosmonkey,利用混沌学原理,在分布式系统上进行实验, 目的是建立对系统抵御生产环境中失控条件的能力以及信心。
监控阶段
系统投入生产后,安全性不会终止,而是真正开始。在DevSecOps中,自动安全检查和监视反馈循环迭代是生产操作的基本部分。
持续监控可以深入了解应用程序正在接收的流量类型,并帮助识别恶意用户的攻击模式。
运行时应用程序安全保护
RASP技术可实时识别和阻止应用程序安全威胁。通过向应用程序运行时环境添加检测和保护功能,RASP使应用程序能够通过自动重新配置来"自我保护",无需人工干预,以响应某些条件。
安全监控
首先是自动收集和分析潜在安全威胁指标的过程,定义应触发警报的行为类型,并对警报采取严肃措施。比如IDS,主机进程监控,工作目录变更监控,流量监控等等。
漏洞悬赏
通过漏洞悬赏计划,借助第三方的力量,深入漏洞挖掘,充分了解现实的风险水平,系统弱点和漏洞。他们通常可以自由地采取行动,不会破坏系统或破坏或泄露敏感数据。
工具列表
市场上存在许多运行时防御工具:Prevoty,Alert Logic,HALO,EVIDENT等等。