写点什么

围绕 SAST 工具,我们可以做些什么?

作者:maijun
  • 2023-08-28
    新加坡
  • 本文字数:2274 字

    阅读完需:约 7 分钟

SAST(Static Application Security Testing,静态应用程序安全测试)工具,就是在不运行程序源代码的情况下,直接对程序进行分析,从而分析程序是否存在缺陷或者是否符合规范。那么,围绕 SAST 工具,可以衍生出来哪些工作或者事项,就是说,如果是做从事 SAST 工具相关工作,可以有哪些方向,是本文要给大家介绍的。

作为一个从事当前领域 8 年之久的老油条,也时常担心被干掉,时常需要担忧自己的出路。你是不是也有类似的担忧呢?本文为你排忧,至少给你一个当前领域的工作方向。

1. SAST 工具到底做什么事情?

从 SAST 工具本身使用上,大概有如下的一些流程:

图 1 SAST 使用流程

SAST 工具,分析的输入是源代码或者二进制文件,检查特定的规则,从而得到相关的报告。从使用场景上面,主要涉及到的工作事项如下:

图 2 SAST 涉及到的工作项

2. 围绕 SAST 主要的工作内容

在上面的一部分,我们已经画了一个简单的图示,表述了一下 SAST 的主要的工作方向,下面进行一下进一步介绍。

2.1 SAST 工具开发

这一部分正是我个人正在做的事情,涉及到 SAST 工具开发,SAST 工具我们讲,是编译原理技术的延伸。

面向源码的检查工具,典型的工具有 Coverity、Fortify、Checkmarx、Klocwork、SonarQube、PMD、CppCheck 等,面向二进制的检查工具,应用最火的,应该有 Angr 等。SAST 工具开发还是有一些技术门槛,有兴趣可以看一些开源代码(面向 C/C++的,可以看 Clang Static Analyzer,面向 Java 的,可以看 Soot 或者 Wala)。

图 3 SAST 主要涉及的内容

2.2 SAST 工具运营

大家可以考虑一件事情:如果你们公司采购了一款商用工具,但是用起来非常不方便,你首先骂的或者投诉的是谁?如果这款工具集成到公司内部研发系统里面使用,你应该投诉谁?

SAST 工具,是面向大部分企业开发的,提供的规则也是通用能力。如果企业内部要使用好,就需要对工具进行打磨。即使是业界标杆 Coverity,也很难在企业内部直接使用起来。这就需要工具运营团队,对 SAST 工具进行良好的集成,减少使用工作量,提供更加良好的用户体验。

那么,工具运营都需要做哪些事情呢?

图 4 SAST 工具运营

为了能够更好地进行工具的运营,需要综合使用各种技术,包括当前的深度学习等,在误报消减、用户体验上,也有非常不错的效果。

举例:华为代码检查的三层三级运营体系[1]

首先,三级检查分为 IDE 级、门禁级、版本级:

图 5 华为代码检查的三级检查

对于不同的检查级别,检查的效率和要求不同,会采用不同的检查工具来进行检查。上图中展示了不同级别的检查的要求。

图 6 华为代码检查的三级运营体系

主要是在检查工具、规范、能力要求等,通过公司级、产品线级、产品级三个层级进行约定。

2.3 规范及漏洞

SAST 工具,最主要的检查目标有两个:① 规范遵从,② 漏洞检测。因此,对规范的制定、理解和对漏洞利用的深入认识,也是 SAST 工具应用的一个非常重要的工作。

规范,也包括非常多的内容:比如 MISRA、CERT 等行业规范,国军标 等相关国家推荐标准,ISO/IEC 5055 等国际通用的标准;还有一些企业自己指定的适用于本企业的编程规范。

漏洞或者缺陷,一般是指软件中,可能导致运行时问题或者安全问题的漏洞,比如资源泄漏、空指针等问题。

一般编码规范和漏洞存在一定的关系,例如特定的漏洞的消减措施,可以通过编码规范进行约束。比如变量未初始化引用的漏洞,在制定规范时,可以要求在变量声明时,必须同时进行初始化。

图 7 规范、漏洞、规则及 SAST 工具的关系

2.4 研发效能、DevSecOps、SDL 等

上面的三个概念,大家应该经常听到。但是不管是哪一个,都会非常强调 SAST 工具在其中的作用。比如“安全左移”,安全从出包测试,前移到了开发阶段。事实上,很多企业也确实很卷,安全都在不断左移、左移,当然,最多也就是前移到 IDE 级。再向前就是威胁建模等工具的事情,和 SAST 工具没有关系了。

图 8 SAST 工具在 DevSecOps 中的应用[2]

所以,企业中从事 DevSecOps、SDL、研发效能实施和落地的工作,一般需要对 SAST 工具比较熟悉。熟悉 SAST 工具的使用的痛点和优点,也可以更好地支持相关的工作开展。

2.5 漏洞挖掘

当然,SAST 工具相当重要的一部分工作,就是漏洞挖掘。比如相当一部分代码审计工作,都是通过 SAST 工具完成。当然,做漏洞挖掘工作,不仅仅需要会使用 SAST 工具,还需要会其他的一些工具或者技能,比如渗透测试工具,熟悉二进制相关分析技术等。

3. 围绕 SAST 的技术进击方向

我们从事 SAST 相关工作的时候,比如进入一家企业,很难在一开始就能够对当前领域有一个非常全面的认识,但是我们也不应该将视野局限在一个小的点上面。我觉得,SAST 相关工作,至少需要至少在下面的三个技术领域进行扩展:

(1) SAST 工具研发领域,不要局限在单个工具、单个语言上,而是系统的程序分析领域,比如各类程序分析技术之外,也要跟踪前沿的技术,例如当前的基于大模型的缺陷检查等;

(2) 安全领域,不要只局限在规则开发,而是有更宽阔的视野,在漏洞的监测、漏洞的利用、漏洞的检查原理等各方面有更深入的研究(前面提到的规范相关的工作,安全相关的可以放到该类下面);

(3) 研发效能领域(或者 SDL 和 DevSecOps 等),从研发效能、研发流程、或者整个软件工程的视角,拓宽自己的视野(前面提到的工具运营等可归类到该子类下面,风格相关的规范可属于该领域)。

图 9 SAST 相关技术方向

所以,从事 SAST 相关工作的你,知道以后要做什么了吗?

参考资料

[1] 基于软件分析的智能化开发新型服务与技术(https://bbs.huaweicloud.com/blogs/308618

[2] The Role of Static Application Security Tools (SAST) in DevSecOps(https://www.grammatech.com/learn/the-role-of-static-application-security-tools-sast-in-devsecops/)


发布于: 刚刚阅读数: 6
用户头像

maijun

关注

还未添加个人签名 2019-09-20 加入

关注基于源码的静态代码分析,缺陷模式识别,Java白盒审计等

评论

发布
暂无评论
围绕SAST工具,我们可以做些什么?_SAST工具_maijun_InfoQ写作社区