AST 安全测试原理及场景介绍:
为什么要进行应用安全测试?
洞态IAST原理及优势比较
利用洞态IAST交互式应用安全测试自动化的价值
洞态IAST应用安全检测在企业内落地实施建议
一 常见应用安全测试技术原理比较
1.1 常见应用安全测试(AST) / Application security testing 系统的分类和使用场景
分类(简称) | 主要作用 | 用途及使用场景描述 | 相关代表产品 | |
SAST | Static AST 静态应用安全测试 | 编码或测试阶段分析应用程序的源码,或二进制代码中是否存在安全漏洞 (重点针对Source Code) | Xcheck,Checkmarx,findbugs, | |
DAST | Dynamic AST 动态应用安全测试 | 应用程序处于运行状态,工具发起对应用程序的模拟攻击, (重点针对Running App) | Acunetix 360 , Appscan,Owaspzap | |
IAST | Interactive AST 交互应用安全测试 | 通常要在服务端部署Agent程序,收集、监控Web应用程序运行时函数执行、数据传输,并与扫描器端进行实时交互发现漏洞 (重点针对Running App)(灰盒安全测试) | VulHunter,腾讯iast,SFuzz,Synopsys Seeker, 悬镜灵脉IAST灰盒测试平台, 洞态IAST。 | |
SCA | Software composition analysis 软件组成分析 | 分析应用程序中使用的三方和开源组件的,发现已知的安全漏洞 (一般针对image,Running App) | Jfrogxray,SourceCheck,悬镜源鉴OSS | |
什么是IAST?
IAST是什么?交互式应用安全测试(Interactive application security testing IAST)是一个在应用和API中自动化识别和诊断软件漏洞的技术。
IAST全称为 “交互式应用程序安全测试” ,通过利用Agent来监控应用程序运行时的函数执行情况,采集相关数据,与服务端进行实时交互,从而高效、准确地识别出应用程序中的漏洞。同时可准确定位到漏洞所在的文件、行数、方法及参数,方便开发团队及时修复漏洞。
1.2 AST 技术优劣对比
SAST | DAST | IAST | ||
误报率 | 高 | 低 | 低 | |
检出率 | 高 | 中 | 高 | |
检测速度 | 依代码量 | 取决于url,payload数量 | 依赖应用访问流量进行实时检测 | |
第三方组件漏洞 | 部分支持 | 依赖payload,指纹,poc | 运行时支持检测,依赖cve库 | |
语言和框架支持 | 区分语言 | 不区分语言 | 区分语言 | |
漏洞验证 | 几乎无法验证漏洞 | 可验证漏洞 | 可验证漏洞 | |
使用影响及风险 | 无风险 | 主动扫描会产生脏数据 | 无风险 | |
使用成本 | 极高(误报率高,效率低) | 较高(误报较高,覆盖率低,脏数据) | 低,几乎无误报,但是要部署agent.Agent需部署到应用中间件中或附加到JVM进程中即可。 | |
漏洞详情 | 代码行数,执行流 | 参数,响应请求 | 请求响应参数,代码行数,数据流, | |
CI/CD支持 | 低 | 低 | 高 | |
漏洞覆盖率(种类) | 偏向于应用代码层面漏洞 | 可远程发现配置,运维,运行等层面漏洞 | 覆盖漏洞种类多,根据上下文分析应用本身漏洞 | |
资源消耗 | 会对系统带来压力,取决于代码量 | 会对系统带来压力,取决于url,payload数量 | 极低的损耗,无感知检测,不影响测试和运行。 不影响devops效率。 |
安全测试是应用开发的必要环节,IAST是安全测试的最优选择。
1.3 IAST是实现devsecops自动化安全测试阶段的最佳方案
1.4 利用IAST 交互式安全测试构建高效devsecops流程,从源头进行威胁治理
1.5 为什么要进行应用安全测试?
1. 法律法规及安全合规要求
《中华人民共和国网络安全法》 ,《中华人民共和国网络隐私保护法》
《中华人民共和国数据安全法 》 ,《中华人民共和国个人信息保护法》…
相关法律相继颁布并施行,企业安全运行能力要求不断提高。
2. 产品安全需求
安全测试是应用开发的必要环节,提升软件产品质量,防止非法入侵的能力。
被勒索软件勒索、数据泄露、服务器被入侵等都是应用本身安全性不足所导致的,必须在开发测试阶段进行安全测试。
二 Dontai IAST的重要功能介绍及参考
这是目前已知的唯一的一款开源的IAST软件系统,我体验了几个月,实际用于测试和生产,效果比较理想。 (另外国产的一些商业产品 比如悬镜灵脉IAST灰盒测试平台也表现不错,高检出率、低误报率及柔和嵌入现有DevOps体系等新特性,也都比较优秀。)文章篇幅有限,这里主要先讲开源的洞态IAST。
2.1 洞态IAST介绍
1. 开源,Apache-2.0 License许可, 不限制商业用途使用。对商业应用比较友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
2021年9月1日正式开源发布,是目前市场上已知的第一款开源IAST产品。
并且支持SaaS访问及全部服务服务本地化部署.
2.检测原理:洞态IAST完全基于“值匹配算法“和”污点跟踪算法”对漏洞进行检测。这种算法检测准确率高,无需采集和重放流量,可以适配各种场景下的漏洞检测(如:API网关、分布式、微服务等架构下的后端服务漏洞检测),不会产生脏数据,不会干扰正常的开发测试流程。赋能辅助研发及测试人员,提高漏洞修复的效率。
IAST 测试是在软件生命周期 (SDLC) 中的 QA/Testing 阶段进行的。IAST 通过把安全测试从生产阶段分离,使得团队可以提前捕获动态漏洞,进而降低漏洞修复成本、消除延迟、降低应用程序被破坏的风险。
3. 优势:
“洞态IAST”属于被动式IAST,具有近实时检测、高检出率、低误报率、低漏报率等优点;
“洞态IAST”不需要重放数据包,可覆盖加密、防重放、验证码等真实业务场景;
“洞态IAST”不产生脏数据,不对测试人员工作造成任何干扰
2.2 Dontai IAST的架构及内部服务交互依赖关系
洞态IAST包含前端项目和后端API,前端项目基于Vue、TypeScript开发,后端项目基于Django、Django Rest Framework开发。包括:策略搜索、项目列表、项目详情、新建项目、导出项目漏洞、应用漏洞管理、第三方组件管理、Agent管理、Hook规则管理、用户管理等。
dongtai-engine, dongtai-engine-task, dongtai-web, dongtai-redis, dongtai-openapi, dongtai-mysql, dongtai-webapi
应用运行时,无状态地安装于应用程序的探针集群便会采集对应的数据,并发送到OPENAPI。当探针集群数量过大时,基于探针集群数量,横向扩展OPENAPI服务数量。此时,OPENAPI足够cover探针集群的流量,后续的存储集群与分析引擎也将支持弹性扩容,并做安全风险检测。
2.4 【洞态IAST服务端的安装及不同场景的探针安装应用实践】
支持docker安装和k8s安装:
一个完整的Dongtai IAST服务 包括服务端dongtai backend 和 客户端探针Dongtai agent.
Dongtai backend: 收集,存储,分析,检测,管理,接收agent的数据交互,分析展示。
Dongtai agent:采集,传输污点数据流给服务端进行分析和检测。
手动部署比较繁琐,官方目前已经实现了自动部署,建议采用自动一键部署方式部署刚高效。
A. 服务端的私有化部署
1. Docker-compos部署IAST
# git clone git@github.com:HXSecurity/DongTai.git
#cd DongTai
#chmod u+x build_with_docker_compose.sh
#./build_with_docker_compose.sh
2. Kubernetes部署IAST
Kubnernetes集群里进行部署可以使用一键脚本进行安装或使用helm进行安装。
https://github.com/HXSecurity/DongTai/blob/main/deploy/kubernetes/README.ZH-CN.MD
安装完IAST服务端后,即可具备对Agent传回的数据分析检测能力.
2.5【洞态IAST功能优势以及支持的漏洞检测能力】
1. 支持多种漏洞检测,覆盖Owasp top10
2. 支持依赖组件的供应链风险检查
3. 支持分布式架构,微服务等支持各种业务场景的漏洞检测,类Swagger的API Sitemap.
2.6【洞态IAST Agent安装及应用】
B. IAST Agent的安装流程及思路:
安装流程及思路:
Kubnernetes集群中进行Agent的部署和安装,
思路:管理界面,点击 add agent,获取对应版本的agent,将agent拷贝到业务容器中,启动业务服务时将agent加入启动参数。
所以,让业务容器获得agent的常用三种方式:
1.将下载的agent包打包成一个单独的镜像,在业务pod启动时候使用initContainer拷贝到业务容器。
2.打包专用的业务镜像时候,将agent一同打包进去。
3.部署业务服务的时候,直接在initContainer中下载。 (推荐采用这种方式,比较灵活)
比如agent下载地址是:
curl -X GET "http://8.8.8.2:8680/api/v1/agent/download?url=http://8.8.8.2&language=java" -H 'Authorization: Token ba541ab016c109c293c1d83249fe84bd5561bedb' -o agent.jar -k
可以利用Kubnernetes的initContainer进行agent的挂载和安装,可以直接在initContainer下载agent.jar,将下载链接修改为对应的initContainer yaml .
注意URL和token的格式。
等待容器running后,查看日志,确认看到提示Dongtai engine successfully 及其它配置加载成功即可。
三【应用部分测试报告】
不多说了,直接上图看。
就是这么好用。
测试结果反馈:
对应用安全漏洞的测试能满足需求,能准确识别常见的绝大多数漏洞,凡是测试过程中触发的应用交互的流量都能覆盖到。
对第三方组件漏洞的识别,由于数据库里部分组件库比较老,存在漏报,需要进行定期更新才可以避免漏报。
1. 洞态IAST 能满足测试过程中的应用安全测试,无感知检测漏洞,填补上线前应用安全测试空白。
2. 服务端私有化部署,漏洞数据内部可视化。
3. 代码全部开源,可以按自己需求进行适当的定制和改进。
4. 规则可以自定义。
5. 不对现有的测试流程进行任何的干扰和改动,对测试效率毫无影响。
6. 版本升级容易,集成方便。官方更新及时,社区活跃度高。
采用洞态IAST进行应用安全测试的价值
1. 在devsecops流程中安全左移,及时发现缺陷并修复
IAST也可以用在QA、测试、CI/CD阶段近实时检测,保证开发阶段没有漏洞。IAST能够帮助开发在早期消除绝大多数漏洞,不需要安全团队的介入。
2. 使用IAST保证API安全性
传统的静态和动态工具不擅长测试API安全,这些工具无法处理复杂协议(JSON,XML,二进制,或其他payload),或者架构中用来构建API的复杂数据流和控制流。
3. 使用IAST来持续审计和合规
IAST工具支持很宽范围的安全标准,包括OWASP Top10,PCI DSS,应用安全检测的报告可证明应用被完全安全测试过,以及漏洞的详情。
使用能显著的加快审计和合规流程,并且确保产品的安全质量。
《中华人民共和国审计法》第三十六条,“审计机关进行审计时,有权检查被审计单位的财务、会计资料以及与财政收支、财务收支有关的业务、管理等资料和资产,有权检查被审计单位信息系统的安全性、可靠性、经济性,被审计单位不得拒绝。” …
4. 使用IAST测试开源软件组件中潜在的漏洞
大多数的开源漏洞很容易被忽视,因为IAST测试整个软件栈,甚至它能在所使用的库和框架中,发现这些攻击者已经掌握,甚至还没有被公开利用漏洞。
5. IAST可以和DevOps流程完美结合
安全检测透明化,覆盖各个场景,不对编码和测试过程造成影响;在完成应用程序功能测试的同时即可以实时完成安全测试.
分布式检测,可同时对上百个应用程序执行安全检测。
目前的现状是:在整个产品安全生命周期中,设计,开发,测试阶段的安全测试缺失,安全应该作为产品质量的重要属性,确保产品交付质量。
利用IAST推动应用安全测试自动化,IAST是Devsecops实现自动化安全测试的最佳工具之一。
DevSecOps 作为 DevOps 的延伸,在保证企业高效研发效能的前提下,将安全引入进来,作为整个企业所有成员的责任,贯穿到整个业务生命周期中。它改变了传统安全是安全团队职责的现状,践行“人人为安全负责”的理念来建立整个安全体系。