
前言
在落地DevSecOps过程中,核心的一个部分是安全工具链,通过工具化集成将安全活动内嵌到DevOps研发运营一体化中。下面,我们来谈一下,从计划阶段的威胁建模,创建阶段的IDE安全插件,验证阶段的应用安全测试到检测阶段的威胁监控,如何利用开源的技术打造端到端安全工具链。

安全需求与设计
计划阶段是DevSecOps的第一个阶段,包含SDL模型中的培训、需求、设计等,关注的是开发前的安全动作。安全培训及安全需求和设计,都需要安全知识库的支撑。在构建企业自身的安全知识库时,可以参考OWASP、NIST、MITRE CAPEC等资源,构建自身的安全威胁库、安全编码规范、安全需求库、安全设计库等。

一般安全需求的来源有国家法律法规,如网络安全法、行业监管要求、公司自有的安全策略、业界安全实践,如OWASP。
安全需求,可以参考OWAS ASVS,其定义了三级验证级别,每一级深度递增,涵盖了架构、认证、会话管理、加密、移动安全等领域,企业可以根据自身的情况作些合适的裁剪,作为安全需求的checklist。

威胁建模
系统在进行安全设计时,通用的做法是进行攻击面分析和威胁建模。
威胁建模是分析应用程序安全性的一种结构化方法,通过识别威胁理解信息系统存在的安全风险,发现系统设计中存在的安全问题,制定风险消减措施,将消减措施落入系统设计中。威胁建模属于微软SDL中核心部分,微软一直是这一过程的强有力倡导者。
那么如何做威胁建模? 主要步骤有:识别资产、绘制数据流图、威胁分析、风险评估、制定消减措施、对威胁进行优先级排序。
开源的威胁建模工具,有微软提供的威胁建模工具threat modeling tool,OWASP 的桌面和web版本的威胁建模工具Threat Dragon。

下面我们来看一下owasp threat dragon。 该工具的主要工作流程是:绘制数据流图、进行威胁分析,制定消减措施。
通过访谈架构师及开发人员可以了解应用架构,并快速分解应用程序,进而绘制出详尽的数据流图。
绘制数据流图,是分解应用程序的一种技术,以可视方式展示数据如何在应用程序或系统中移动,以及各个组件在何处更改或存储数据。其中信任边界特指数据流中的卡点,在该点上需要对数据进行验证。信任边界是用数据流图进行威胁建模的关键。
数据流图主要由外部实体、处理过程、数据存储、数据流及信任边界组成。

绘制完数据流图后,下一步是威胁分析。
Threat dragon采用STRIDE威胁分析方法。STRIDE从攻击者角度,把威胁分成仿冒、篡改、抵赖、信息泄漏、拒绝服务及权限提升。针对数据流图中的每个元素,分析其面临的威胁,并针对威胁制定消减措施。绘制完数据流图以后,就是对数据流中的每个元素可能面临的威胁逐个进行分析,但不是每个元素的STRIDE六类威胁都要去分析,图中表格列出每类元素可能面临的威胁,比如数据流只面临“篡改”、“信息泄露”、“拒绝服务”三种威胁。

如图中web应用程序,面临的一个威胁是垂直越权,即普通用户,通过访问管理者URL,或得管理员的操作权限。制定的消减措施是:进行权限控制,对于用户的每次访问请求都进行权限检查。
对所有元素进行威胁分析后,就会获得该系统的威胁清单及消减措施。接着就是对威胁进行评级,在threat dragon威胁分析时,已经给出了威胁的评级,有高中低三级。威胁评级简单的评价方法就是看发生概率及潜在的损失。结构化的有DREAD威胁评级模型,可惜threat dragon并没有支持。

从上面使用threat dragon的过程可以看出,威胁建模开展比较不易,需要很专业的安全人员,且会耗费较大的人力成本,往往只有大公司或者安全敏感度极高的公司会去做。
随着威胁建模工具的发展,现在也出现了一些自动化的威胁建模工具,比如ThreatModeler。

ThreatModeler具备较丰富的安全知识库,根据业务场景,给出相应的调查问卷,涵盖架构、认证、session管理、访问控制、日志等,然后根据用户调用的结果,自动化生成系统面临的威胁。

这种基于业务场景的自动化威胁建模,算是轻量级威胁建模,可以在很大程度上提高威胁建模的效率。这个工具有线上community版本,大家可以试用下。
IDE安全插件
源代码安全扫描,通过分析应用程序的源代码来发现安全漏洞。优点是广泛支持多种语言和架构,对漏洞类型的覆盖率较高,但是存在缺点有误报率高、扫描速度慢等。源代码安全扫描的嵌入点有开发人员本地源代码安全检测、代码提交时检测、CI过程中检测等。

开发人员在编码过程中,可以采用IDE插件的方式进行本地源代码安全扫描,可以第一时间发现安全漏洞并修复,降低漏洞修复成本。对于java项目来说,可以采用安全扫描插件FindSecurityBugs,支持多种主流 IDE 环境,如Eclipse, IntelliJ, Android Studio,目前最新版本支持135种安全规则,基本也涵盖了SQL注入、XXE等OWASP TOP 10主流的安全漏洞类型。ppt中是IntelliJ的配置界面,配置较为简单,使用起来也比较方便。
SAST源代码安全扫描
源代码安全扫描,可以使用sonarqube + findsecuritybugs插件,SonarQube开发人员一般会用来进行代码质量检测,自身也会带有一些安全规则,但不是很多。可以使用find security bugs插件,将安全规则集和代码质量规则集进行合并,这样只需要进行一次sonar扫描,就可以检测出代码质量问题和安全漏洞。

Sonarqube也非常容易与CI进行集成,只需要配置好项目的pom文件及maven配置,即可以在编译过程中通过命令maven sonar:sonar进行自动化源代码安全扫描。

最终的扫描结果会在sonar qube服务器显示,其中的vulnerabilities就是安全漏洞,开发人员可以根据修复建议,自主进行漏洞修复。
DAST黑盒安全测试
黑盒安全测试,也就是动态应用程序安全测试,通过模拟黑客行为对应用程序进行动态攻击,分析应用程序的反应,从来确定该web应用是否存在安全漏洞。DAST优点是测试结果准确率较高,但是缺点是漏洞覆盖率低,无法有效支持API及微服务等。

OWASP ZAP是业界较受欢迎的免费安全工具之一,是一款非常容易使用的黑盒安全测试工具,主要功能是自动检测Web应用中的安全漏洞,提供漏洞风险等级及修复建议。ZAP除了自动化扫描功能,同时也支持手动安全测试,可以提供给具备丰富经验的渗透测试人员使用。
Sonarqube提供插件,支持将ZAP的扫描结果汇总到sonarqube上集中展示。ZAP提供丰富的restful API,可以集成到CI过程中。在CI过程中调用API进行安全扫描,获取扫描结果等。

SCA开源组件安全扫描
我们知道,在项目开发过程中会大量使用开源组件,而调查显示,开源组件存在大量的安全隐患,导致应用也存在安全风险,因此需要对开源组件进行安全扫描。

Dependency Check是OWASP出品的开源组件安全扫描工具,可以识别项目的依赖项并检测是否含有已知的漏洞,它的漏洞库来源是NVD国家漏洞数据库。

Dependency Check可集成性强,支持多种集成方式,如命令行、maven、Jenkins、Sonarqube等,落地简单,使用方便。
容器安全扫描
随着容器技术的兴起,越来越多的应用选择容器部署,与此同时,容器的安全性问题也受到了越来越广泛的关注。容器镜像通常是来自docker hub或阿里云等提供的第三方镜像仓库,然而相关报告显示,无论是社区镜像还是官方镜像,都存在很多高危漏洞,如果基础镜像有安全漏洞,那么容器运行存在较大的安全风险。

Clair是CoreOS发布的开源容器漏洞静态分析工具,首先对镜像layer进行特征的提取,匹配CVE漏洞库,检测是否含有安全漏洞,侧重于扫描容器中的OS和应用的CVE漏洞。
Clair如何集成到CI过程中呢? Clair部署后作为服务端运行,提供API接口, CI过程中镜像构建完成后,调用Clair客户端采用命令行方式对镜像进行安全扫描,获得扫描结果,可以在DevOps平台可视化展示。

Clair也支持和docker registry进行集成,比如vmware的Harbor。镜像构建完成后,推送到Harbor镜像仓库,触发Clair镜像扫描,扫描完成后,可以直接在Harbor上面查看漏洞详细信息。
MAST 移动应用安全测试
随着业务的发展,企业或多或少都会有移动APP,移动APP同样会存在安全漏洞,因此需要进行移动应用安全检测。

MobSF是一款自动化移动APP安全测试工具,适用于iOS和Android,支持静态和动态分析。通过docker可以很方便的部署,使用起来也非常简单,可以直接手动上传APP进行测试。


这是上传的一个APK静态扫描结果,有权限滥用风险、组件风险等,动态分析需要挂载模拟器进行分析。

MobSF也提供了REST API接口,可以很方便集成到CI过程。APP构建完成后,调用API上传APP并扫描,然后获取扫描结果,实现CI过程自动化移动应用安全测试。

安全加固
系统部署时,需要进行安全加固。安全配置基线可以参考CIS Benchmark。

CIS互联网安全中心是一个非盈利组织。CIS benchmark覆盖了主流操作系统、数据库和中间件等,如apache、tomcat、docker、k8s等。

上图示例是Centos 7安全配置基线要求,内容很多,需要根据自身需要进行适当裁剪。加固过程可以使用脚本实现自动化,形成黄金镜像。
漏洞管理
漏洞跟踪管理,是企业都会面临的问题。前面讲的测试工具,发现的漏洞分散在不同地方,漏洞管理起来非常麻烦。因此,需要一个集中的漏洞管理平台,对各种类型的漏洞进行汇总和跟踪。

OWSAP DefectDojo是一款漏洞管理的开源工具,支持导入多种开源或商业安全工具的扫描结果,如Clair、Dependency Check、Harobr、MobSF、Sonarqbue、Zap等,实现在一个平台上对项目所有漏洞的集中化管理。

DefectDojo也支持通过API接口自动化上传安全扫描报告,无缝集成到CI中。

RASP
在2014年的时候,Gartner引入了RASP,运行时应用自我保护。它是一种新型应用安全保护技术,将自身注入到应用程序中,与应用程序融为一体,能实时检测和阻断安全攻击,使应用程序具备自我保护能力。

OpenRASP是百度安全推出的一款开源的应用运行时自我保护产品。可以在不依赖请求特征的情况下,准确的识别代码注入、反序列化等应用异常,很好的弥补了传统设备防护滞后的问题。
应用资产安全风险感知
任何人都无法保护『未知』东西的安全性,因此资产管理的重要性不言而喻。可以采用开源技术实现应用资产安全风险感知,通过主动、被动等手段识别IT资产,对资产变化进行动态监控,通过漏洞扫描及漏洞情报等手段,及时发现资产的安全风险,并进行告警和处置联动,实现资产安全风险的有效管理。

图中是实现资产安全风险感知的一个架构图,可以用kibana实现资产的可视化展示,如高危服务、高危组件等,直观的展示应用资产面向的安全风险。

威胁监控
在企业安全运营过程中,需要面对的安全数据越来越多,如流量数据、安全防护设备与网络基础设施数据、终端数据、情报数据等,各种告警数据分散且没有打通,有限的安全人员和海量日志告警是突出矛盾,如何从海量告警数据中高效发现真实告警,也是对安全团队的极大考验。

可以基于ELK等开源技术,实现初级的SOC平台。网络流量监控采用suricata和zeek,规则采用ET开源规则库。各种日志、告警数据通过logstash采集入ES库,再通过kibana进行可视化展示。

可以使用flink实现规则引擎,实现关联分析等。通过该平台安全日志的快速检索、网络流量监控、告警监控等功能,提高安全运营的效率。
安全武器库
前面介绍的只是少部分开源安全工具,还存在很多优秀的开源安全工具,分布在DevSecOps工具链的不同部分,如源代码安全扫描工具有PMD、VCG、Cobra等,黑盒安全工具有Nikto,容器扫描工具有Trivy等。大家可以采用这些开源的安全工具,打造自身的DevSecOps工具链。
