静态分析在DevSecOps中的应用

1. DevSecOps

近年来,大型企业DevSecOps引入占比逐年递增,从2020年的41.3%增至2022年超63.5%, 其复合增长率超过20%。

DevSecOps一词最早由Gartner在2012年提出,并在最近几年逐步成为软件开发种的热点。DevSecOps在开发人员、测试人员、安全团队和运维团队之间架起了桥梁;它改善了团队之间的沟通和协作,其目标是更快、更高效地交付。DevSecOps,在DevOps的基础上增加了安全的活动,在保障快速开发、快速的部署的基础上,提高了安全性,内嵌安全到应用程序中,能够更迅速地应对安全威胁。

下图是美国国防部(Department of Defense(DOD)) 定义的DevSecOps软件生命周期的9个阶段:计划、开发、构建、测试、发布、交付、部署、操作和监控。安全嵌入到每个阶段。DevSecOps生命周期具有很强的适应性,并且有许多反馈循环来驱动持续改进。DevSecOps 在管理理念、管理方法、组织结构、开发流程、软件开发、开发平台、工具集成、以及企业文化等方方面面对传统的软件开发提出了新的挑战。

devsecops.png

在DevSecOps的应用过程中,静态分析工具在开发阶段承担着非常重要的代码质量和安全的看护任务。本文重点讲述软件静态分析工具在DevSecOps的开发域中的重要作用。

2. DOD DevSecOps

美国防部自2021年起发布一系列关于DevSecOps相关文件:《国防部企业DevSecOps战略指南》、《国防部企业DevSecOps基础》、《DevSecOps参考设计》《DevSecOps行动手册》等相关支撑文件。

今年五月又补充了《DevSecOps 基础指南:活动和工具》。在这个文档中更加清楚的定义了在DevSecOps的生命周期中,需要完成的安全活动和对应的工具。涉及的安全活动如下表:

image.png

从这个活动表我们可以看到在开发过程中,有三个关键的安全检测点, 即表格中我们标红的部分),以及文件中关于这三个检测点的信息合并成下表:

image.png

从这个表格我们可以看到,在代码的开发阶段在以下检测点需要完成相应的静态分析检测:

  • 在IDE,通过IDE安全插件,对需要提交的代码完成安全检测;
  • 在代码仓,通过安全插件,进行的代码提交扫描,也是我们常说的“门禁”;
  • 在构建,通过静态分析工具,完成静态应用程序安全测试和扫描(SAST)

《DevSecOps 基础指南:活动和工具》中,只提出了对流程检测点的需要有的活动要求和工具的粗略的要求,并没有给出具体的流程融合和该怎么在不同的检测点如何选择工具。

3. OWASP DevSecOps

开放全球应用程序安全项目(Open Worldwide Application Security Project (OWASP)) 是一个非营利性基金会,致力于提高软件的安全性。基金会致力于通过其社区主导的开源软件项目,全球数百个分会,数万名成员以及举办本地和全球会议来提高软件的安全性。

《OWASP DevSecOps 指导(OWASP DevSecOps Guideline》)z指导我们如何实现安全管道和使用最佳实践,并介绍了可以在这件事上使用的工具。

指导在DevSecOps的实践中,还特别用一个章节介绍了预提交(pre-commit)的流程。如下图:

owasp_pre-commit.png

这张图清楚的给出了预提交的检查流程,并给出了在预提交中需要完成的两种检查:

  • 确保代码中没有密码、密钥问题;
  • 代码遵循Linter 规则。

这里的Linter 我找不到一个合适的中文来翻译这个英文。Linter 本意指的是衣服上在洗衣机洗完后,由于滚动摩擦会使衣物的纤维聚集在一起形成绒毛或纤维等的小球。以前想把这些多出来的"小球"去掉, 后来人们发明了叫Linter的神器,一滚就能清除掉这种"小球"。

1978 年,工作于贝尔实验的Stephen C. Johnson 在 Debug 自己的 C 语言项目时,突然想到为什么不做一个工具来提示自己写的代码哪里有问题呢? 这个工具也被称为 Linter。Linter是一种静态分析工具,主要用于发现代码中语法错误、潜在 Bug、代码风格等。我们常见的以lint命名的各种工具就是这一类型的静态检查工具。几乎每种语言都有自己语言的Linter工具,例如我们熟悉的:Java:<u style="border-bottom: 1px solid rgb(68, 68, 68); text-decoration: none;">checkstyle</u>,Javascript:ESLint,Python:PyLint,C/C++:<u style="border-bottom: 1px solid rgb(68, 68, 68); text-decoration: none;">cpplint</u>、Go:<u style="border-bottom: 1px solid rgb(68, 68, 68); text-decoration: none;">golint</u>等等。

  • 《OWASP DevSecOps 指导》中,给出了Linter的作用:

  • 检测代码中的错误以及可能导致安全漏洞的错误;

  • 检测格式或样式问题,并使代码更具可读性,从而获得更安全的代码;

  • 检测建议的最佳实践;

  • 可以提高代码的整体质量;

  • 由于每个人都遵循相同的 linting 规则,因此代码的维护变得更加容易。

  • 《OWASP DevSecOps 指导》中,将静态检查工具的按检查问题的不同定义成Linter 和 高级静态检查工具:

  • Linter工具是静态分析的最基本形式。使用 lint 工具有助于识别常见错误,例如:

  • 数组索引越界;

  • 空指针解引用;

  • (潜在)危险的数据类型组合;

  • 无法访问的代码(死代码);

  • 不可移植的结构。

  • 高级静态分析工具。高级静态分析工具通常提供:

  • 基于模式的检查;

  • 质量和复杂性指标;

  • 面向开发人员的最佳实践建议;

  • 支持多种以安全和安保为重点的编码标准;

  • 用于开发安全关键型应用, 例如:开箱即用的认证。

《OWASP DevSecOps 指导》给出不同工具检查缺陷类型的不同,主要还是说明在不同的检测点,需要配置不同类型的检查工具。

4. 安全左移

Capers Jones在《应用软件测量:生产力和质量的全面分析》中阐述了从软件工程实践角度出发,说明了大部分的问题在编码阶段引入,同时随着缺陷在开发过程中发现的越晚,修复成本越高。

所以我们希望通过将开发完后的测试工作融入到开发过程中,这样可以有效的降低开发过程中引入缺陷的修复成本。

  • 测试向开发阶段左移
shift_left.gif
  • 测试左移,缺陷在开发阶段减少
shift_left_down.gif

在DevSecOps概念提出后,人们很自然的就提出了"安全左移"的概念。“安全左移”(引自《OWASP DevSecOps 指导》中的定义) 是一种将安全性嵌入到开发过程中的方法或解决方案,并从应用程序或系统设计的初始步骤开始考虑安全性。换句话说,安全性对从事软件开发和操作过程的每个人负责。当然,安全是一种职业,我们需要高技能的人来扮演与安全相关的角色;但在这种方法中,任何设计师、软件架构、开发人员、DevOps 工程师和…与安全人员一起对安全负有责任。

从这个描述中我们可以看到安全左移包括几个具体的活动:

  • 安全从设计开始,贯穿整个流程;
  • 全员参与安全活动;

根据前面我们对美国国防部《DevSecOps 基础指南:活动和工具》,以及OWADSP的《OWASP DevSecOps 指导》的了解,在开发过程的编码阶段有三个检查点:IDE、门禁、持续构建(CI)。按照"安全左移"的理念,我们是不是也可以"一路向左", 将静态检查工具放到IDE或门禁中,实现静态检查工具的左移,从而去掉持续构建(CI)中的检查环节?是不是可以一路向左?

keep_left1.png

4.1. 成语故事“因地制宜”

好久没在博客里讲故事了。中国历史悠久、先贤们将各种为人、处事的道理、哲学融汇在一个个故事里,通俗易懂,并炼成了让人津津乐道的成语故事,源远流长,让普通人都能牢记这些哲理精髓,一代代传承。最近刀郎红火起来的歌曲,除了歌曲本身,人们更喜欢挖掘的是歌曲中包含的各种凄美故事。

春秋末年,楚王听信谗言,杀了伍子胥一家,伍子胥逃到了吴国。伍子胥为了借助吴国给自己报仇,给吴王献计:要想使国家富强,人民安定,首先要高筑城墙,这样才能加强防御力量,使其他国家不敢进犯。还要加强军事力量,充实武器及物资的储备,这样就能够对别的国家形成威慑之势。同时还要发展农业,只有农业发展了,国家才能富强,百姓才能安居乐业,将士们才有充足的给养,而且要充实粮仓,以备战时之需。这样国家才能安定,才有可能发展。吴王非常赞同伍子胥的战略。于是巧妙利用吴国的地形,建立起一座依山傍水的城郭。城中有多个城门,且其中三个筑有城楼。大城中还有东西两座小城,西城为吴王的王宫所在地,东城则是驻扎军队、存放军备的地方。就这样在城中设置守备、积聚粮食、充实兵库,为称霸诸侯做准备。经过一段时间的准备,吴国逐渐强盛起来。最后吴军大举进攻楚国,五战五胜,最后攻陷了楚国的国都:郢都。伍子胥终于报了杀父兄之仇。这就是“因地制宜”成语的故事。

从这个成语我们也悟出一个道理,对于开发阶段中,对静态分析的工具使用并不能"一路向左", 需要考虑检测点的差异, 选取合适的检测工具,才能建立有效的防御体系。

4.2. 建立三层代码的防护体系

我们通过下表可以清楚的看到三个检测点的差异,以及根据差异选用不同的静态检查工具,从而达到“因地制宜”的效果。

image.png

DevSecOps 在实施过程中除了强调工具的配合实现各个检测点的自动化,更主要的是需要提供一套完整的工具整合平台,实现整体流程的自动化运行和监管。这也是为什么大部分的企业在实施DevSecOps的时候,都选择了通过云平台支撑DevSecOps的实施方式。

5. 华为云的三层检查体系

优秀的代码质量保障实践,往往将代码检查融入到开发作业流中,在用户代码编写、代码提交时进行自动化的审计检查,并对团队每日产出的代码进行持续编程规范和质量检查。

这一活动实践要求已是安全开发过程SDL、DevSecOps等众多优秀开发模式推荐进行的实践要求。
华为云代码检查服务(CodeArts Check)提供丰富的API接口、涵括任务新建、任务设置、任务扫描、任务报告解析等检查业务全流程,支持用户使用接口方式无缝集成到自建CI/CD或者CodeArts,作业数据灵活对接到客户看板,代码质量可视、可管理。
同时通过灵活的任务管理,支持排除目录设置避免无效扫描,并支持混合语言检查、简化部署、一次获取整个版本代码质量。

huawei_codearts_check.png

详见:<u style="border-bottom: 1px solid rgb(68, 68, 68); text-decoration: none;">“代码编写、代码合并、版本发布”三层缺陷防护,兼顾效率与质量</u>

6. 参考

  • DevSecOps Fundamentals Guidebook: Activities & Tools
  • DoD Enterprise DevSecOps Strategy Guide
  • DoD Enterprise DevSecOps Fundamentals
  • DevSecOps Fundamentals Playbook
  • DoD Enterprise DevSecOps-Pathway to Reference Design
  • OWASP devsecops guidelien
  • Capers Jones, Applied Software Measurement: Global Analysis of Productivity and Quality.
  • What Is Shift-Left Testing? - Parasoft
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容