Sast/Dast/Iast工具
为了发现软件的安全漏洞和缺陷,确保应用系统是安全可靠的,就需要针对Web系统做应用检测,识别Web应用程序中架构的薄弱环节,以免轻易的受到恶意攻击者的攻击。主要市场上主要的检测技术主要是DAST、SAST、RAST和IAST,每种技术都有一定的优缺点,本节将介绍相关工具特点。
sast/dast/iast介绍
SAST(Static Application Security Testing )
SAST是静态应用安全测试技术,SAST类工具的技术实践大致可分为以下几种:
(1) 正则匹配:代表工具Cobra,Raptor;
(2) 基于语法树:代表工具P3C,Fireline;
(3) java语言可基于class文件:代表工具Findsecbugs;
(4) 基于控制流、数据流、函数调用关系等(商业级SAST类产品)
当然,效果是逐渐递增的,难度也是逐渐增大的,要实现还原代码的数据流、控制流和函数调用关系,需要将编译中的前端模块完全实现一遍,基于中间代码去还原数据流和控制流等,大致流程主要是通过词法和语法分析后,进行语义分析,生成中间代码,再生成数据流、控制流、函数调用关系等,在这些分析的基础上,进行缺陷匹配检测。
词法分析和语法分析一般可以借鉴相应的开源工具可以完成,但是语义分析依赖于各种语言的语法,针对每种语言一般需要单独实现,不同的语言翻译成同一套规范的中间代码,根据翻译来的中间代码,符号表等来恢复数据流、控制流和函数调用关系等,然后根据这些流来确定污点传播过程,进而确认是否存在漏洞。
基于SAST技术的产品具有误报率高、耗时长、内存消耗高的特点,该原因也跟这个复杂流程相关,各个安全厂商自己基于编译原理相关内容实现的代码分析层,也需要针对不同的语言实现不同的语法树从而增加了复杂度和时间成本。另外
还原的数据流、控制流等难以做到100%准确,同时对超过100万行以上代码分析,暂用的资源高(主要是对内存的消耗),复杂度较高,数据流、控制流的构建过程自然就耗时长,导致了SAST类产品误报率高和耗时长这两个问题难以解决。导致即使能够集成到IDE中,开发人员也可能无法忍受较长时间的等待。
** DAST(Dynamic Application Security Testing )**
DAST(Dynamic Application Security Testing)是在应用程序处于生产阶段时发现安全漏洞的过程,它包括使用各种测试工具进行手动和自动化测试。这是一种黑盒测试的类型,测试者无需了解架构、网络或者代码,而是从一个恶意攻击者的角度来测试应用程序。应用程序依赖于输入和输出运行,这意味着如果用户的输入有疑点,在响应上会有反馈。DAST 测试可以在正式投入使用之前帮助你在软件中发现漏洞。它不是为特定软件而设计的,而是在易受攻击的应用层上工作。
根据 Internet Live Stats 的数据,全球有超过17亿个网站,因此安全漏洞的数量在不断增加也就不足为奇了。CNBC 的一项研究显示,超过75%的应用程序在某种程度上存在漏洞,而这些漏洞不会很快消失,这就是应用程序安全测试(AST)的用武之地。
南半球的蝴蝶扇动一下翅膀就能在北半球引发一场台风,开发人员轻微的安全错误(例如,用户输入验证不当、服务器版本泄露和使用易受攻击的软件库等)也有可能导致重大的安全问题。而采用 DAST,可以让开发人员在构建应用程序时不必完全依赖自己的知识和过往经验。通过在软件开发生命周期(SDLC)中执行 DAST,开发人员可以在软件公开部署之前捕获应用程序中的漏洞。如果不检查这些漏洞而直接部署应用程序,可能会导致数据泄露,进而造成重大的经济损失和损耗品牌声誉。在软件开发生命周期(SDLC)的某个阶段,人为错误将不可避免,而在 SDLC 中越早发现漏洞,修复的成本就越低。
** IAST(Interactive Application Security Testing )**
交互式应用程序安全测试工具标准在国内建立及进展如下:
- 2020年9月:由信通院牵头,联合华为、悬镜安全、腾讯云、开源网安、奇安信、安恒、默安科技、西安邮电大学、中兴、新华三等厂商启动《交互式应用程序安全测试工具能力要求》行业标准的预研及编写工作
- 2020年10月-2021年3月:通过线下线上的交流研讨持续完善标准内容
- 2021年4月:正式启动首批符合标准的安全测试工具评测
- 2021年5月:在中国通信标准化协会(CCSA)TC1 WG5工作组会议上成功立项
- 2021年7月:首批符合标准的安全测试工具评估结果发布
IAST(Interactive Application Security Testing, 交互式应用安全测试)是一种新一代交互式应用程序安全测试方案,通过服务端部署Agent探针、流量代理/VPN或主机系统软件等,收集、监控web应用程序运行时函数执行、数据传输,并与扫描器端进行实时交互,高效、准确的识别安全缺陷,漏洞覆盖主流OWASP Top 10以及 CWE Top 25等漏洞,同时,可准确确定漏洞所在的代码文件、行数、函数及参数。应用程序在进行自动化测试、人工测试等任何与应用程序进行“交互”的同时,能自动分析应用程序安全风险的技术。它可以实时返回结果,因此不会额外增加CI/CD的时间。相比于其他AST技术,IAST只会分析“交互”产生时所影响到相关代码的安全风险,而不是扫描所有代码、配置文件或遍历整个站点。IAST更适合在QA环节使用,让安全团队在相对不影响开发、测试现有流程的情况下,较早地发现应用程序中存在的安全风险。相较于发展较早的SAST技术,IAST技术具有如下优势:
- 相较于SAST工具,IAST工具基于请求及运行时上下文信息综合分析,安全漏洞误报率低
- IAST工具结果反馈及时,随着业务测试可及时反馈安全测试相关数据,提升研发效率
- 在被动插桩技术进行的IAST测试对于业务场景具有侵入性低,不产生脏数据的优点
需要注意的是,与其他AST技术相比,IAST还是一个比较新的概念,其基于请求、代码数据流/控制流来综合分析应用程序的安全风险。IAST运行时插桩技术可以发现更多应用程序本身的安全弱点,以及应用程序中第三方组件的公开漏洞。由于该技术针对不同语言需要研发不同的插桩探针,因此对于厂商而来,其IAST工具每增加对一种语言的支持,即相当于开发一款新产品,也就意味着IAST工具支持的编程语言越多,厂商所需投入的人力成本和经济成本也就越大。
自IAST标准发布起,中国信通院同步启动了首批IAST工具的测试工作。依托标准要求中的34个功能指标项,在统一并发场景下进行性能检测记录。通过对测试结果分析发现,各厂商IAST工具在以下三方面存在较大差异:
1、对主流编程语言支持的覆盖率;
2、对不同安全漏洞类型及结果的定义规范;
3、配置缺陷和弱密码等低危漏洞或信息漏洞的检测结果。
其中,首当其冲的是对主流编程语言的覆盖率问题。在IAST标准当中,“支持的编程语言”被标定为全标准的第一条测试要求,由此可见其重要性。IAST工具是否支持多种主流编程语言,直接决定了其是否能适配客户各种各样的实际开发场景,进而满足助力客户业务发展的需求。IAST技术通常有两种实现模式:插桩模式和基于代理、VPN模式。
IAST技术可基于插桩理论实现,基于插桩的测试场景适合自动化或资产清晰便于部署微探针的情况下,提前在测试应用中间件上进行插桩,插桩模式下支持主动插桩和被动插桩两种模式检测方式。主动插桩模式通过精心构造重放流量的Payload来主动触发潜藏在业务应用里的安全漏洞,并在应用执行的关键函数点进行敏感操作判断和深度的脏数据处理,在发现潜藏漏洞的同时精准定位其所在代码行。由于主动IAST的特殊技术优势,当开发者修复完漏洞后,还可对指定漏洞进行全面回归测试及漏洞修复验证,帮助用户快速提高漏洞收敛效率。
被动插桩依据动态污点追踪原理,该模式通过配合测试人员进行功能测试的同时,对运行时应用进行动态污点跟踪及分析,审计堆栈信息,从而发现业务应用里的安全漏洞。透明接入研发测试流程,检测无感知,并在发现潜藏漏洞的同时精准定位其所在代码行。被动IAST的特殊技术优势在于对于测试人员在不改变原有工作方式、不增加额外工作量的同时,赋予同步发现安全漏洞的能力。 插桩探针会追踪每一条污点数据流,并找出其中没有经过无害化操作的数据流(变量1 → 变量3)。根据污点追踪分析过程中是否需要运行应用程序,可以将污点追踪技术分为“静态分析”和“动态分析”两种。和静态污点追踪技术相比,动态污点追踪技术是在应用程序运行过程中进行分析,因此可以获得更多的应用程序上下文信息,并且这些数据流都由交互产生,所以可以在最大程度上保证检测结果的有效性,大大降低误报的产生,也就降低了人工审计结果的成本。由于动态污点追踪不会重放测试流量,因此在 IAST 技术中也被称为被动式插桩。
基于代理/VPN模式实现的iast,测试人员在客户端配置代理(操作系统、浏览器、移动设备等),将流量转发到 IAST 检测引擎。检测引擎接收到流量后,会直接将原始流量转发到目标应用服务器,然后在这个流量进行修改后重新发送到目标服务器,根据重构流量的响应来判断是否存在相关漏洞。 终端流量代理对于业务的入侵性极低,不依赖业务系统的语言环境,无需对现有业务系统进行修改即可实现高效的检出。适用场景如下:适合开发、测试人员对单个网站进行深度渗透测试,不依赖测试系统语言环境,无须介入测试环境即可进行安全测试。
指标对比
在安全测试中会遇到SAST(Static Application Security Testing )、DAST(Dynamic Application Security Testing )、IAST(Interactive Application Security Testing )的概念区别, 这三种工具各有优劣势,其区别对比列表如下:
比较项
SAST
DAST
IAST
扫描对象
源代码
运行时的应用程序
运行时的应用程序
扫描准备
简单
复杂
复杂
扫描速度
快
很慢
慢
误报率
高
低
低
覆盖率
高
低
中
对环境的影响
无
有
有
测试方法
白盒
黑盒
黑盒
与开发语言关系
有关
无关
有关
CI/CD集成
支持
不支持
不支持
支持测试阶段
研发、测试、上线
测试、上线
测试、上线
部署
简单
简单
复杂
由于每种工具都有自己的特点,可以根据企业的内部需求,选择合适的工具组合。总体来说,SAST工具效率比较高,但是,有误报的问题,需要人工筛选。DAST基本上没有误报,而且攻击的向量和环境都结合的很好,不需要人工确认,也没有误报,但是,执行速度太慢,在使用敏捷开发的团队,可能很难有效地利用。IAST由于部署比较麻烦,而且和语言的关联性比较大,有的语言不支持IAST的插桩技术,例如:C和C++等语言,就不能使用IAST了,因此,即使没有什么误报,目前应用的还不是很广泛。SAST,即静态应用程序安全测试,通过静态代码分析工具对源代码进行自动化检测,从而快速发现源代码中的安全缺陷。
实践工具选型
收集了一些免费开源和商业产品的项目及工具,可从检测效率、支持的编程语言、第三方工具集成等几因素来综合考虑如何选择工具,随着时间推移,在选择产品时请根据具体情况调研。
- 百度Open-Rasp
分为开源版本和商业版本,OpenRASP 抛弃了传统防火墙依赖请求特征检测攻击的模式,创造性的使用RASP技术(应用运行时自我保护),直接注入到被保护应用的服务中提供函数级别的实时防护,可以在不更新策略以及不升级被保护应用代码的情况下检测/防护未知漏洞,尤其适合大量使用开源组件的互联网应用以及使用第三方集成商开发的金融类应用。另外,OpenRASP 提供的IAST解决方案,相比于与传统的DAST方案有着革命性提升。漏洞检测无需动态爬虫或者旁路代理,扫描更全面;结合应用探针准确的识别漏洞类型,通过针对性扫描大幅度提升检测效率;商业版新增的动态污点追踪能力,还可以在不扫描的情况下,预判接口是否存在漏洞。
- SonarQube
一款企业级源代码静态分析工具,支持Java、PHP、C#、Python、Go等27种编程语言,而且能够集成在IDE、Jenkins、Git等服务。
- 悬镜灵脉IAST
21年6月,中国信息通信研究院(以下简称“中国信通院”)正式发布《交互式应用程序安全测试工具能力要求》行业标准(以下简称“IAST标准”),并于首届DevSecOps敏捷安全大会(DSO 2021)首次公开标准解读。目前,中国信通院已完成首批评估测试,悬镜灵脉IAST是全球首个通过该项专业测评认证的IAST工具。
4.洞态 IAST洞态
全球首个开源 IAST ,于2021年9月1日正式开源发布。洞态 IAST 专注于 DevSecOps,具备高检出率、低误报率、无脏数据的特点,帮助企业在应用上线前发现并解决安全风险。自开源发布以来,洞态 IAST 备受开源社区人员和企业的关注,包括工商银行、去哪儿、知乎、同程旅行、轻松筹等在内的上百家企业都已成为洞态用户。
- VCG(VisualCodeGrepper)
一种适用于 C++、C#、VB、PHP、Java、PL/SQL 和 COBOL 的自动化代码安全审查工具。
- FindBugs
一款静态分析工具,检查程序潜在bug,在bug报告中快速定位到问题的代码上。
- Cobra
一款源代码安全审计工具,支持检测多种开发语言源代码中的大部分显著的安全问题和漏洞。
- Hades
一个静态代码脆弱性检测系统,支持java源码的审计
- Bandit
一个专门用于查找Python代码中常见安全问题的工具。
- Brakeman
一个免费的漏洞扫描器,专门为 Ruby on Rails 应用程序设计。它静态分析 Rails 应用程序代码,以在开发的任何阶段查找安全问题。
- RIPS
一款不错的静态源代码分析工具,主要用来挖掘PHP程序的漏洞。
- CodeQL
一个免费开源的语义代码分析引擎和查询工具,以一种非常新颖的方式组织代码与元数据,可以通过像SQL查询一样检索代码,并发现其中的安全问题。
- Find Security Bugs
一个用于 Java Web 应用程序安全审计的 SpotBugs 插件。
版权归原作者 小金子的夏天 所有, 如有侵权,请联系我们删除。