基于开源技术打造 DevSecOps 工具链



前言

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



安全需求与设计

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

NIST

MITRE CAPEC
等资源,构建自身的安全威胁库、安全编码规范、安全需求库、安全设计库等。


一般安全需求的来源有国家法律法规,如网络安全法、行业监管要求、公司自有的安全策略、业界安全实践,如
OWASP


安全需求,可以参考
OWASP ASVS ,其定义了三级验证级别,每一级深度递增,涵盖了架构、认证、会话管理、加密、移动安全等领域,企业可以根据自身的情况作些合适的裁剪,作为安全需求的
checklist

威胁建模


    系统在进行安全设计时,通用的做法是进行攻击面分析和威胁建模。

威胁建模是分析应用程序安全性的一种结构化方法,通过识别威胁理解信息系统存在的安全风险,发现系统设计中存在的安全问题,制定风险消减措施,将消减措施落入系统设计中。威胁建模属于微软
SDL
中核心部分,微软一直是这一过程的强有力倡导者。

那么如何做威胁建模?
主要步骤有:识别资产、绘制数据流图、威胁分析、风险评估、制定消减措施、对威胁进行优先级排序。


开源的威胁建模工具,有微软提供的威胁建模工具
threat modeling tool
OWASP 的桌面和
web 版本的威胁建模工具
Threat Dragon


下面我们来看一下
owasp threat dragon
该工具的主要工作流程是:绘制数据流图、进行威胁分析,制定消减措施。

通过访谈架构师及开发人员可以了解应用架构,并快速分解应用程序,进而绘制出详尽的数据流图。

绘制数据流图,是分解应用程序的一种技术,以可视方式展示数据如何在应用程序或系统中移动,以及各个组件在何处更改或存储数据。其中信任边界特指数据流中的卡点,在该点上需要对数据进行验证。信任边界是用数据流图进行威胁建模的关键。

数据流图主要由外部实体、处理过程、数据存储、数据流及信任边界组成。


绘制完数据流图后,下一步是威胁分析。

T
hreat 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
主流的安全漏洞类型。

上图


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
工具链。


后记

#include "stdio.h"
void main()
{
printf("Hello, World!\n");
printf("本文是DevSecOps联盟分享的第一篇文章,后继会带来更多的"\
"SDL建设、DevSecOps、安全研发、应用安全实践等分享!\n");
printf(" ^_^ ");
}