浅析静态应用安全测试

浅析,静态,应用,安全,测试 · 浏览次数 : 184

小编点评

**摘要** SAST,即静态应用安全测试,是一种在编译代码阶段进行的安全测试方法,可帮助开发人员发现代码中的安全漏洞。由于近三分之二的外部攻击通过 web 应用程序或利用软件漏洞进行,SAST在可预见的未来将继续受到重视。 SAST 是一种白盒测试,可用于分析应用程序源代码,发现安全漏洞。它可以在开发的编码和测试阶段进行,帮助开发团队遵守安全编码标准和最佳实践。 SAST 的优势包括: * 速度快 * 可扩展性强 * 易于使用 SAST 的不足包括: * 只能在代码未运行的情况下进行测试 * 误报率可能较高 SAST 在 SDLC 中的应用场景包括: * 确保编码安全 * 检测常见漏洞 * 提高软件安全

正文

摘要:根据Forrester的 The State Of Application Security, 2022一文的预测,应用安全性的缺失将仍然是最常见的外部攻击方式,因此SAST将会在可预见的未来一直被重视。

本文分享自华为云社区《SAST-静态应用安全测试》,作者: gentle_zhou 。

SAST,Static Application Security Testing,即静态应用安全测试,也叫静态分析,是一种测试方法,一直是应用程序安全性工作的核心部分。根据Forrester的 The State Of Application Security, 2022一文的预测,应用安全性的缺失将仍然是最常见的外部攻击方式,因此SAST将会在可预见的未来一直被重视。

什么是SAST

Static Application Security Testing,静态应用安全测试,是一种白盒测试,也是当前正在使用中的最成熟的应用程序安全测试方法之一。不用运行组件,在编译代码阶段之前,SAST可以通过分析源代码来发现一些容易让应用受到攻击的安全漏洞。

而Gartner对SAST的定义则是:“一组用来指示安全漏洞情况,设计用来分析应用程序在编码和设计阶段下源代码,字节码,二进制的技术”。

“a set of technologies designed to analyze application source code, byte code and binaries for coding and design conditions that are indicative of security vulnerabilities.”

为什么需要SAST

根据Forrester一项针对安全专业人士的调查报告显示,在2022年,近三分之二的外部攻击是通过web应用程序(32%)或利用软件漏洞(35%)进行的。

而SAST可以让开发人员检测到源代码中的安全漏洞或弱点,帮助研发团队遵守某要求或规定(比如PCI/DSS),更好地理解软件里存在的风险;可以说,SAST成为了降低软件风险第一步的工具,已经成为应用程序安全测试工具的代名词。也因为如此,如果我们真的想确保软件的安全,了解SAST是如何运作的就至关重要。

需要注意的是,为了更好的达到上述的效果,定期在应用上(比如每月/每天)、每次有新增代码或合入代码的时候运行我们的SAST工具就非常有必要。

SAST如何运作?

正如SAST 静态应用安全测试这名字明面上代表的意思一样,它可以在不运行代码(静止状态)的情况下,在软件开发生命周期 (SDLC) 的早期阶段进行静态代码的扫描;通常SAST是在开发的编码和测试阶段被使用,会被集成在CI阶段甚至IDE编辑器中。

SAST的扫描是基于一组预先确定的规则(这些规则定义了源码中需要评估和处理的编码错误)的,SAST扫描可以被设计用来识别一些常见的安全漏洞,比如SQL注入,输入验证,堆栈缓冲区溢出等。

SAST的优势与不足

SAST作为一种优秀的应用程序安全工具,如果操作得当,它对组织的应用安全策略就会至关重要。将SAST集成到SDLC中提供了以下好处:

优势

  1. 做到安全左移。将安全测试集成到软件开发的早期阶段是一项重要的实践,SAST可以帮助安全性测试提前进行,在设计阶段发现代码中的漏洞,修复相关安全问题;这么做的好处的是,为企业组织大大减少在临近发布日期阶段或则更迟的阶段才去解决安全问题的代价。
  2. 确保编码安全。SAST可以轻松检测出一些简单的编码错误而导致的缺陷,从而帮助开发团队可以遵守安全编码标准和最佳实践。
  3. 检测常见漏洞。自动化的SAST工具可以轻松并高效地检测出常见的安全漏洞比如换粗去溢出,SQL注入,跨站点脚本编写等问题。
  4. 更加易于使用。现代应用程序开发环境下,SAST与DevOps环境和CI/CD管道集成在了一起,更加高效、方便、易于使用;这样开发团队不需要再单独配置或额外进行触发扫描,也就是说团队不用离开开发环境就可以扫描、查看、修复安全问题。
  5. CWE全面覆盖。业界SAST工具提供的检测覆盖了多种CWE缺陷,包括各种平台和框架上开发的桌面、web和移动应用程序,并支持多种不同的编程语言和编程框架。
  6. 扫描高效。研发团队在实际研发过程中,会更注重效率,一款高效的SAST工具可以让团队更快获得需要的结果。

不足

  1. 覆盖不了所有的漏洞。因为是在代码未运行的情况下去测试,无法覆盖运行时问题或则配置问题;对于访问控制,身份验证或则加密之类的场景也测不出。
  2. 误报率高。SAST的扫描结果会包含大量误报,需要研发团队手动去排查和屏蔽,会耗费团队大量时间。更严重的是,有时候团队会要求强制清零漏洞,误报得不到重视,就会一直存在。
  3. 耗时。对于一些大型的项目,因为代码仓过大一次扫描可能要花费好几个小时;而SAST的扫描结果因为只是指出潜在的漏洞,还需要研发团队验证是否确实是隐患

选取SAST工具的衡量因素

实际研发项目中,不同的项目、大型的项目会或多或少涉及到不同的开发语言,技术框架,承载平台。而市场上又充斥着大量的SAST产品,很多又会与额外的解决方案捆绑在一起,那么如何选取最有效的SAST工具来达到高效执行的目的呢,有如下几个因素可以考虑:

  1. 支持语言:确保选择的SAST工具覆盖了我们当前项目所使用的编程语言
  2. 漏洞覆盖:确保选择的SAST工具覆盖了全面的主流的应用程序安全漏洞
  3. 准确性:确保选择的SAST工具误报率低
  4. 兼容性:确保选择的SAST工具兼容当前项目所使用的技术框架,也支持集成到SDLC中
  5. IDE集成:确保选择的SAST工具可以集成到IDE中,支持实时检查
  6. 扩展性:确保选择的SAST工具易于扩展,支持自定义规则

如何实施、部署SAST到项目中呢

如何将选择的SAST解决方案部署、实施进来呢,需要以下这些步骤:

  1. 选择部署方式:我们需要根据项目实际性质决定将SAST部署在本地还是云端环境里;这一决定取决于我们希望对SAST工具有多大的控制权,工具运行和扩展的速度、容易程度。
  2. 配置并集成到SDLC中:我们需要根据项目何时以及如何扫描分析代码来决定;我们可以选择如下4种方式中的一种:编译代码时分析;将新增代码合并到代码库时扫描;在CI/CD管道中添加;在IDE中运行SAST可以实时进行检查。
  3. 决定扫描分析的范围。我们可以选择如下几种:
    完整:对应用程序及其全量代码的扫描是最全面也是最耗时的过程
    增量:仅扫描新增或更改的代码
    桌面:代码编写阶段进行扫描分析,实时解决问题
    不用构建:对于不熟悉构建过程或IDE的人员,在源码中进行分析
  4. 自定义来满足需求:团队肯定希望可以减少误报,自定义新规则,修改现有规则,以满足可以更全面地识别安全缺陷的需求。也许还希望可以自定义用于分析扫描的仪表盘或则构建自定义的报告。
  5. 优先应用和结果:根据团队考虑因素的重要级来对应用和结果进行优先级排序,考虑因素包括遵从性问题、威胁严重程度、CWE漏洞、漏洞状态、风险级别和责任。
  6. 分析结果,跟踪进展,评估紧迫性:评估检查扫描结果以排除误报;建立一个系统,可以自动将问题发送、分配给负责的开发人员,让他们去解决。
  7. 报告和治理:研发团队要利用好工具内置的报告工具,或则做到可以将数据推送到我们已有的报告工具里,做好数据的分析与治理。

参考链接

  1. https://www.mend.io/resources/blog/sast-static-application-security-testing/
  2. https://www.synopsys.com/zh-cn/glossary/what-is-sast.html

 

点击关注,第一时间了解华为云新鲜技术~

与浅析静态应用安全测试相似的内容:

浅析静态应用安全测试

摘要:根据Forrester的 The State Of Application Security, 2022一文的预测,应用安全性的缺失将仍然是最常见的外部攻击方式,因此SAST将会在可预见的未来一直被重视。 本文分享自华为云社区《SAST-静态应用安全测试》,作者: gentle_zhou 。

Swift函数调用方式浅析

函数的调用机制 函数的调用机制是在函数调用时通过那种路径走到最终调用函数地址的机制。 在编程语言中,函数的调用机制有三种 1.静态调用:编译期就确定了函数内存地址,执行效率最高,还可以使用编译器优化如:inline函数内联提升执行效率。缺点:因为函数调用的内存地址在编译期已经确定,则无法支持继承等动

浅析Vite本地构建原理

前言 随着Vue3的逐渐普及以及Vite的逐渐成熟,我们有必要来了解一下关于vite的本地构建原理。 对于webpack打包的核心流程是通过分析JS文件中引用关系,通过递归得到整个项目的依赖关系,并且对于非JS类型的资源,通过调用对应的loader将其打包编译生成JS 代码,最后再启动开发服务器。

浅析MySQL 8.0直方图原理

本文将对直方图概念进行介绍,借助举例描述直方图的使用方式,对创建/删除直方图的原理进行浅析,并通过例子说明其应用场景。

[转帖]浅析Nginx配置获取客户端真实IP的proxy_set_header、X-Real-IP、$remote_addr、X-Forwarded-For、$proxy_add_x_forwarded_for分别是什么意思

https://www.cnblogs.com/goloving/p/15588668.html 一、问题背景 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用 request.getRemoteAddr() 就可以获取到客户端ip,但是

[转帖]浅析IP地址及localhost、127.0.0.1和0.0.0.0的区别

https://www.cnblogs.com/goloving/p/7202151.html 127.0.0.1和0.0.0.0这两个IP地址再熟悉不过了,看起来好像就那么回事,但真正较起真来,这两个IP地址到底有什么作用以及到底有什么不同?貌似谁可以轻松回答,但张嘴却又不知从何说起(这要是面试,

[转帖]浅析nginx的server及server_name的意义详解

https://www.cnblogs.com/goloving/p/7010713.html 一、server_name 详解 当Nginx接到请求后,会匹配其配置中的server模块。匹配方法就是靠请求携带的host和port正好对应其配置中的server_name 和listen。如果做过ip

[转帖]浅析./configure、make、make install之间的关系

https://www.cnblogs.com/zcj-0928/articles/16261389.html 写在前面: 可能我们都知道linux中安装软件方式的一种是:将源码sourcecode.tar.gz进行解压,然后输入./configure,接着make,最后make install,一

【转帖】浅析经典JVM垃圾收集器-Serial/ParNew/Parallel Scavenge/Serial Old/Parallel Old/CMS/G1

https://zhuanlan.zhihu.com/p/481256418 在讲述垃圾收集器之前,我们得先知道JVM中常见的垃圾收集算法有什么,具体请参考我的这篇博文。如果说收集算法是内存回收的方法论, 那垃圾收集器就是内存回收的实践者。下面就来详细概述下Serial、ParNew、Paralle

[转帖]浅析TiDB二阶段提交

https://cloud.tencent.com/developer/article/1608073 关键内容说明: TiDB 对于每个事务,会涉及改动的所有key中,选择出一个作为当前事务的Primary Key,其他的则为Secondary keys。 当Primary Key提交成功,标识整