详解安全测试工具:SAST、DAST、IAST、SCA的异同
目录
安全测试的重要性
安全测试方法
AST工具
SCA工具
到底用哪种工具?
随着DevOps的发展,企业应用迭代的速度得到了大幅提升。但同时,安全如果不能跟上步伐,不仅会抵消DevOps变革带来的提升,拖慢企业数字化转型进程,还会导致漏洞与风险不约而至。2012年,Gartner提出了DevSecOps的理念,将安全防护流程有机地融入传统的 DevOps 流程中,为研发安全提供强有力保证,安全工具是支撑研发阶段安全要求落地的重要保障。
安全测试的重要性
在Forrester 2020年发布的调查报告统计《The State Of Application Security, 2020》中显示,在 480家全球企业已经确认的外部攻击中,针对Web应用程序是位于首位,占比39%,攻击 Web 应用程序主要指基于程序的 SQL 注入、跨站脚本或者远程文件包含攻击。针对软件漏洞攻击占比30%,主要指对于安全漏洞的利用攻击。
安全测试方法
安全测试是 DevSecOps 实践的关键部分,软件程序经过各种方法的测试以保证质量。安全测试是一个专业领域,拥有自己的一套工具和实践,旨在暴露这些漏洞。
安全测试工具分为两类:自动化安全测试工具和手工安全测试。而自动化安全测试工具现在市场细分已经非常完善,有诸如SAST、SCA等等工具。手工安全测试一般则指的是渗透测试。
AST工具
1.SAST简介
超过50%的安全漏洞是由错误的编码产生的,开发人员一般安全开发意识和安全开发技能不足,更加关注业务功能的实现。想从源头上治理漏洞就需要制定代码检测机制。
SAST是一种白盒测试技术,通常在编码阶段分析应用程序的源代码或二进制文件的语法、结构、过程、接口等来发现程序代码存在的安全漏洞。是在开发阶段对源代码进行安全测试发现安全漏洞的测试方案。
SAST一般优势:
①代码具有高度可视性,检测问题类型更丰富
②测试对象包括WEB应用程序、APP
③不需要用户界面(UI),漏洞发现更及时
SAST一般劣势:
①代码理解局限性、区分开发语言
②不能确定漏洞可利用性,漏洞分类不明确
③不能整合测试问题,集成系统的漏洞发现不了
2.DAST简介
DAST是一种黑盒测试技术,是目前应用最广泛、使用最简单的一种Web应用安全测试方法。在测试或运行阶段分析应用程序的动态运行状态。它模拟黑客行为对应用程序进行动态攻击,分析应用程序的反应,从而确定该Web应用是否易受攻击。
安全工程师常用的工具如AWVS、AppScan等就是基于DAST原理的产品。
通用实现流程:
DAST一般优势:
①攻击者视角,可发现大多数高风险问题
②无需源代码,测试对象范围较广
③支持当前的各类主流编程语言开发的应用、第三方组件、第三方框架
DAST一般劣势:
①覆盖范围有限,覆盖率依赖于Explore的结果,对于AJAX页面、CSRF token页面、验证码页面等无法扫描
②测试对象为HTTP/HTTPS的web应用程序,无法测试APP
③无法定位漏洞的具体位置,不适合DevOps环节集成使用
3.IAST简介
IAST是2012年Gartner公司提出的一种新的应用程序安全测试方案,通过代理、VPN或者在服务端部署Agent程序,收集、监控Web应用程序运行时函数执行、数据传输,并与扫描器端进行实时交互,高效、准确的识别安全缺陷及漏洞,同时可准确确定漏洞所在的代码文件、行数、函数及参数。IAST相当于是DAST和SAST结合的一种互相关联运行时安全检测技术,属于灰盒测试技术。
IAST的实现模式较多,常见的有代理模式、VPN、流量镜像、插桩模式,本文介绍最具代表性的2种模式,代理模式和插桩模式。
A.代理模式:在PC端浏览器或者移动端APP设置代理,通过代理拿到功能测试的流量,利用功能测试流量模拟多种漏洞检测方式对被测服务器进行安全测试。
通用实现流程:
B.插桩模式:在保证目标程序原有逻辑完整的情况下,在特定的位置插入探针,在应用程序运行时,通过探针获取请求、代码数据流、代码控制流等,基于请求、代码、数据流、控制流综合分析判断漏洞。插桩模式具体实现有2种模式,Active 插桩和Passive 插桩。
a.Active插桩通用实现流程:
b.Passive 插桩通用实现流程:
IAST一般优势:
①漏洞准确率高,误报率极低,漏洞信息详细度高
②支持测试AJAX页面、CSRF token页面、验证码页面、API孤链、POST表单请求等环境
③测试过程无感知、漏洞发现快
IAST一般劣势:
①只能在具有虚拟运行时环境的语言上执行,例如JAVA、C#、Python、NodeJs,不支持C、C++、Golang等语言
②每次更新Agent需要重启webserver,部署成本较高
③无法测试业务逻辑漏洞
4.SAST/DAST/IAST应用场景分析
5.SAST/DAST/IAST产品技术分析
SCA工具
1.SCA简介
SCA工具用于检测并跟踪代码库中的所有开源组件,以帮助开发人员进行管理。高级的SCA工具可以使管理开源代码和开源组件的整个过程自动化,从选择、发出警报甚至到自动阻止。SCA还提供了关于所发现的开源漏洞的具体信息,以便开发人员可以轻松的修复这些漏洞。
2.SCA主要工作项
①开源漏洞管理
②开源许可证管理
③SBOM
3.SCA实践层级
一般来说,SCA工具可以划分为4个等级。
①成熟的包管理器
我们使用的许多语言都会有比较成熟的包管理器,我们可以基于它的依赖配置文件去识别组件。比如说Java我们最常用的maven,它的依赖管理文件一般都是pom.xml,go一般则是go.mod。
②没有包管理器
但像C/C++这样的语言,它没有像maven这样统一的包管理器,SCA识别起来就会有些困难。目前业界一般的做法是进行哈希指纹匹配,但这就需要提供SCA的公司必须有一个庞大的组件库以及版本的特征库,这样才能实现软件成分分析。
③开源代码片段(源代码SCA)
前两种情况都是建立在开发者比较懒的前提下的,也就是说他们直接、完整的引入了一个开源组件。但在很多时候,开发者可能看到某一个代码片段写的不错,就copy过来。这个代码片段可能来自github甚至CSDN,行数不等,变量定义不明。这个时候传统SCA的依赖分析(dependency check)就无法完成对这些代码片段的识别了,需要更进一步的源代码同源或二进制同源分析才行。目前一般的SCA工具只做到了依赖分析,但泛联新安的CodeAnt已经支持精准的源代码同源和二进制同源分析。
二进制分析SCA
相比于之前的白盒测试,我们在实际应用中还有很多黑盒的场景,比如说一些可执行文件以及安装包这些怎么去识别。这就是二进制分析要做到的事情了。
比较项 |
源代码SCA |
二进制SCA |
备注 |
检测对象 |
源代码 |
二进制 |
|
检测效率 |
高 |
高 |
|
检测准确率 |
较高 |
高 |
与目标程序引用开源软件功能多少直接相关 |
嵌套组件检测能力 |
弱 |
强 |
二进制SCA不会遗漏所有引入的开源软件功能特征信息 |
检测语言种类 |
多 |
少 |
二进制SCA只支持能够编译出指令流或字节流二进制文件的语言 |
文件格式 |
简单 |
复杂 |
源代码都可看作文本格式,二进制文件存在pe、elf、coff、jar、apk等等 |
文件特点 |
一个开源软件包含N个源代码文件 |
一个二进制文件包含N个开源软件 |
|
检测阶段 |
开发 |
测试 |
|
检测绕过 |
存在 |
不存在 |
源码在构建环境中引入的或链接静态库引入的开源软件可以绕过源代码SCA检测 |
样本特征构建难度 |
低 |
高 |
|
人工确认分析难度 |
低 |
高 |
④SBOM
高级SCA工具可以自动化生成SBOM,但SBOM在本质上只是一张列表,它提供充足的可见性,却不传达任何风险信息。成熟的SCA工具在生成SBOM的基础上,通过完整的依赖关系图厘清问题组件的影响范围,通过漏洞风险等级优先级排序给出有效的专家处置建议,这样才能真正将SBOM与相关风险关联起来,最大程度的帮助用户解决开源与软件供应链安全问题。
SBOM基本元素:
1.Author name作者名
2.Supplier name供应商名
3.Component name组件名
4.Version string版本号
5.Component hash组件哈希值
6.Unique identifier特殊标识符
7.Relationship依赖关系
SBOM示意图(SPDX格式):
到底用哪种工具?
应用安全不是一个简单的二元选择——要么有安全、要么没有。应用安全更像是一个滑动的尺度,提供额外的安全层有助于降低事件的风险,希望能达到组织可接受的风险水平。因此,应用安全测试减少了应用的风险,但不能完全消除它。然而,可以采取一些措施来消除那些最容易消除的风险,并加强使用中的软件。以下简要介绍几种常用的应用场景与工具选择标准:
1.我是开发人员。毫无疑问,SAST可以解决开发人员90%的困扰,它能在code阶段进行静态检测,并有效检出漏洞与缺陷,帮助开发者更好的编写代码并实现代码的可见性与安全性。
2.我是运维/测试人员。在代码已经封装完毕后,DAST和IAST才能最大限度的发挥它们的价值。代码封装宣告着开发阶段告一段落,接下来最重要的问题是实际使用时是否存在新的问题,动态检测工具DAST和IAST是最好的助力。
3.我介入的DevOps流程太多。IAST是近几年的新兴技术,它结合了SAST和DAST的很多优点,兼容了静态与动态检测的多重优势,可以在开发、测试、生产阶段都起到不俗的效果。但要注意一点:IAST的核心技术是插桩,但并不是每种语言都有成熟的插桩技术,目前Java、Python、PHP、Go对插桩技术都有不错的支持。但其他语言则弱了很多,这会直接导致检出成功率的大幅下降。
4.我可以访问应用程序的源代码。不要犹豫,SAST是最好的起点。虽然DAST和IAST也可以在运行时检测漏洞,但既然你有权限访问源代码,何不采用最直接的办法呢?
5.我无法访问应用程序的源代码。此时DAST变成了最好的选择。
6.我不关心源代码,但我的软件中有大量第三方依赖与开源组件。此时SCA是最好的选择,SCA工具致力于管理开源组件和依赖,检测开源漏洞,提高合规性水平。
7.我想维护企业的软件供应链安全。来试试UniSCA软件供应链管理平台吧!
参考资料:让代码安全变轻松,简单好用的开发安全平台-CodeAnt
详解安全测试工具:SAST、DAST、IAST、SCA的异同相关推荐
- 图文详解压力测试工具JMeter的安装与使用
压力测试是目前大型网站系统的设计和开发中不可或缺的环节,通常会和容量预估等工作结合在一起,穿插在系统开发的不同方案.压力测试可以帮助我们及时发现系统的性能短板和瓶颈问题,在这个基础在上再进行针对性的性 ...
- httpd二之主配置文件详解、测试工具、压力测试ab
本文主要讲述httpd的主配置文件中可以配置的选项以及参数,以2.2系列的为主,在http2.4以后会添加一些新的功能和模块,配置文件可能也会有一些差别,关于2.4的配置文件将在后续推出,敬请期待! ...
- Git详解之六 Git工具
Git详解之六 Git工具 Git工具 现在,你已经学习了管理或者维护 Git仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支 ...
- EEG伪影详解和过滤工具的汇总(二)
点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 在<EEG伪影类型详解和过滤工具的汇总(一)>,我们详细介绍了EEG伪影类型和产生原因,这篇文章,我们主要介 ...
- SSL证书详解和CFSSL工具使用
SSL证书详解和CFSSL工具使用 1.公钥基础设施PKI基础概念 CA(Certification Authority)证书,指的是权威机构给我们颁发的证书. 密钥就是用来加解密用的文件或者字符串. ...
- Android Studio 插件开发详解二:工具类
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自[赵彦军的博客] 在插件开发过程中,我们按照开发一个正式的项 ...
- Visual Studio集成Qt环境搭建_详解与测试
1.利器≠戾气 接了两个项目,而这两个项目说起来也很有意思. 一个是监护仪软件开发,要求利用MFC进行开发,因为在此之前接近两年时间一直进行MFC开发:来到清华后,碰到了好多的计算机编程大牛,就GUI ...
- Halcon例程详解(基于卡尺工具的匹配测量方法) —— measure_stamping_part.hdev
前言 1卡尺工具介绍 Halcon中的Metrology方法即为卡尺工具,可用来拟合线,圆,这种方法对于目标比背景很明显的图像尺寸测量是很方便的,不需要用blob进行边缘提取等,但缺点也很明显,需要目 ...
- linux syslog详解-------未测试
原文:http://www.cnblogs.com/skyofbitbit/p/3674664.html linux syslog详解 分三部分 一.syslog协议介绍 二.syslog函数 三.l ...
- 史上最全图详解Jvm—诊断工具和JVM监控
3.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系.各方法的调用次数和调用时间等(这对 ...
最新文章
- 关于addr=u32(r.recvuntil(‘\xf7‘)[-4:])的解释
- nginx 读取文件_Nginx的提升php上传下载
- golang常用库:字段参数验证库-validator使用
- SAP CRM right dimension attribute后台存储
- php查询数据方法,php查询数据库的方法
- lamda 对比两个list_正式支持多线程!Redis 6.0与老版性能对比评测
- svn 切换账号信息
- 【直播间】移动互联网产品中如何用好HTML5?
- EasyUI的组件加载两次的问题
- webRTC之智能指针std::unique_ptr::reset()使用(十四)
- 文件压缩 ZipOutputStream类
- [CLR via C#]18. Attribute
- 江湖救急、就从今天开始吧
- 使用Java根据约定格式生成Oracle建表语句
- vue单向数据绑定和双向数据绑定
- Linux管道通信多次读写,linux进程通信之(二):管道的读与写
- 【QA】数学符号 word输入问题 在word里面怎么输入字母头顶上的那个小尖儿
- 【C#上位机】chart动态更新数据
- 7-75 正方体表面积计算
- rsyslog日志级别 配置日志输出级别
热门文章
- 数控技术 - 直线插补 - 逐点比较法
- android加载dex方法,[原创]分享一个快速加载dex文件的方法
- 计算机排版系统程序,《计算机排版系统.doc
- 火山伪原创视频软件 短视频md5修改过检测工具
- 【转载】蜗牛星际矿渣黑群晖安装折腾路以及指引
- Overland Conveyor Belt Analyst 15.0.19.zip
- 数电基础知识——原码、反码、补码
- 大一c语言程序考试常考程序题,大一c语言考试试题[1]
- 打印1000张大概多少钱,打印费多少钱一张
- (BMVC-2021)GaitMask:基于掩码的步态识别模型