云原生安全之RASP技术(应用运行时自我保护)

一、背景

当传统边界安全防护产品在云原生场景下逐渐失效时。我们似乎可以改变思路,我们可以将安全深入到应用层级,将其融合至应用程序运行环境和开发语言中,从而为应用程序提供全生命周期的动态安全保护,为云时代应用安全提供安全保障。

RASP被喻为网络安全的"免疫血清"。Gartner 在2014年将 RASP 定义为应用安全领域的关键趋势。在具体实现上,这种技术可以和应用程序绑定在一起,像“免疫血清”一样注入到应用程序里,使应用程序在运行时实现自我安全保护,能够帮助客户有效防护已知和未知攻击。

RASP采用插桩技术,对客户而言存在侵入性,接受度存疑。随着实战攻防演练的促进、插桩技术的广泛使用,以及去年年底 Log4J2 事件的爆发,RASP的能力正被更多人认可。

在初始阶段,RASP技术曾一度面临质疑,但随着实战攻防演练的促进、插桩技术的广泛使用,以及去年年底 Log4J2 事件的爆发,RASP的能力正被更多人认可。

1. WAF和RASP

参考http://blog.nsfocus.net/rasp-tech/

用什么来保护Web应用的安全?猜想大部分安全从业者都会回答:“WAF(Web Application Firewall, 应用程序防火墙)。”不过RASP(Runtime Application Self-Protection,应用运行时自我保护)横空出世,似乎有取而代之的意味。

WAF是一种专门用于分析HTTP/HTTPS流量的专用防火墙,可以深入到每一次 HTTP/HTTPS请求和详情中去检查是否包含敏感字段,然后放行正常行为,拦截恶意行为,就像自来水过滤器一样,把“杂质”从庞大的流量中剔除出去,这样应用程序就只会响应正常的请求,从而达到保护应用程序的目的。

原文的waf的分析比较全面,推荐阅读

就像WAF是防火墙的演进版本一样,大家喜欢把RASP称为下一代WAF。WAF主要解决了防火墙不能根据流量内容进行拦截的问题,而RASP虽然解决了WAF所不能解决的上下文关联的问题,但是它的出现其实并不是为了取代WAF。

从原理上来看,RASP是从应用内部对关键函数操作的数据进行分析,即使原始请求经过加密和混淆,但是它在应用内传播到最终的底层函数时将会以明文方式被RASP截获,因此相比WAF能减少大量的误报和漏报问题。基于此特性,RASP还能为安全人员和开发人员提供更为详尽的攻击链路,包括攻击原始 Payload、代码调用堆栈等信息,方便他们进行漏洞定位、复现以及修复。

虽然RASP较为友好地解决了WAF的不足之处,可以截获真正具有风险的操作,但是它由于构建在应用程序内部,并且只对风险操作进行拦截,这样相对 WAF缺失了从宏观上对流量的监控,对于例如CC攻击、爬虫、恶意扫描等攻击行为缺少有效的防御手段。另外,RASP由于和运行时环境耦合,在实际应用时,会更关注性能和兼容性影响:

随着Web应用攻击手段变得复杂,基于请求特征的防护手段,已经不能满足企业安全防护需求。Gartner在2014年提出了应用自我保护技术(RASP)的概念,即将防护引擎嵌入到应用内部,不再依赖外部防护设备。

想有效地阻止坏人,WAF 必须以非常高的频率升级特征库,但即使是这样,它仍然无法摆脱两个弊端:

  • 1、永远追在敌人后面跑。
  • 2、高居不下的误报率。

WAF 掌握的是软件的“入口流量”,而 OpenRASP 却掌握了内部所有动作的“上下文联系”。

相比于基于流量规则检测的web防火墙而言,RASP防御技术更多是根据请求上下文进行拦截,也就是根据应用的请求来判断其是否存在如数据库 SQL 注入、数据库慢查询、任意文件上传、敏感文件下载等请求,一旦发现类似的恶意请求,就可以迅速识别到恶意攻击行动,并进一步回溯发现攻击来源和漏洞。

不同于 WAF,RASP 因为不依赖于分析网络流量的特性,通过判断应用的恶意请求,RASP 能非常精确地区分攻击和正常请求,只有发现危险的操作请求时,RASP才会报警,并对恶意攻击的请求进行拦截或阻断,极大地降低了误报的风险。

2. waf和rasp是非此即彼的吗?

RASP技术分析
参考URL: http://blog.nsfocus.net/rasp-tech/

RASP和WAF最大的区别是:WAF的目的是发现可疑的流量,RASP则是发现具有威胁的行为。由于近期几次大的0day漏洞事件,RASP因其特点,在防护未知攻击方面,发挥了重要的作用。但是RASP并不是要取代WAF,两者是完全不同的技术,各有各的优势,也各有各的不足。WAF作为恪尽职守的哨兵,监视来自外部的可疑入侵;RASP则作为应用的贴身保镖,防御来自内部和外部的致命攻击。

尽管长远来看RASP技术可能会与传统的WAF技术形成竞争关系,但接下来很长一段时间内,RASP仍然是对边界防护产品的一种良性补充。

二、RASP技术(应用运行时自我保护)

1. 应用安全测试SAST、IAST、DAST 和 RASP区别

应用安全和质量分析
参考URL: https://www.synopsys.com/zh-cn/software-integrity/security-testing.html

每个应用程序安全测试工具(例如,SAST、IAST、DAST、RASP)都有明显的优势,但是当您将它们一起使用时,您将获得最好的结果。

应用程序的安全领域最先出现的是应用程序安全检测。其中有三种检测技术还是不错的,即静态应用安全测试(SAST)、动态应用安全测试(DAST)、交互式应用安全测试(IAST)。这些测试可以在企业部署应用程序之前就分析其代码和查找安全漏洞,并模仿黑客的攻击行为,查找在WEB应用程序中有漏洞的控制。

SAST,DAST

代码安全审计中的,白盒,黑盒,交互安全测试,以及RASP即运行时应用程序安全保护。

SAST或静态应用程序安全性测试( 也称为“白盒测试”)已经存在了十多年。它使开发人员可以在软件开发生命周期的早期,在应用程序源代码中找到安全漏洞。它还可以确保符合编码准则和标准,而无需实际执行基础代码。

DAST或动态应用程序安全性测试( 也称为“黑匣子”测试)可以发现正在运行的应用程序(通常是Web应用程序)中的安全漏洞和弱点。它通过在应用程序上采用故障注入技术(例如将恶意数据馈送到软件中)来识别常见的安全漏洞(例如SQL注入和跨站点脚本)来做到这一点。DAST还可以聚焦于无法通过静态分析识别的运行时问题,例如身份验证和服务器配置问题,以及仅当已知用户登录时才可见的缺陷。

由于SAST和DAST都是较旧的技术,因此有人认为它们缺乏保护现代Web和移动应用程序所需的资源。例如,SAST很难处理现代应用程序中的库和框架。这是因为静态工具只能看到它们可以遵循的应用程序源代码。

IAST旨在通过结合两种方法的要素来解决SAST和DAST的缺点。IAST将代理放置在应用程序中,并在应用程序中,开发过程中的任何位置,IDE,连续集成环境,QA甚至生产环境中的任何位置实时进行所有分析

由于IAST代理在应用内部运行,因此它可以将其分析应用于所有应用的所有代码;其运行时控制和数据流信息;其配置信息;HTTP请求和响应;库,框架和其他组件;和后端连接信息。与SAST或DAST相比,对所有信息的访问使IAST引擎可以覆盖更多代码,产生更准确的结果并验证更广泛的安全规则。

什么是IAST(交互式应用安全测试)

什么是IAST(交互式应用安全测试)?这是我看过最深刻的解释
参考URL: https://baijiahao.baidu.com/s?id=1703602852029549291

交互式应用安全测试(Interactive application security testing IAST)是一个在应用和API中自动化识别和诊断软件漏洞的技术。

如果从名字的缩写来看,插桩(Instrumented)式应用安全测试或许是一个更好的说法。IAST不是一个扫描器,重要的事说两遍,它不是一个扫描器,IAST持续地从内部监控你应用中的漏洞,在整个开发生命周期中,IAST通过你在开发和测试中使用的工具,实时地提供报警。

IAST最显著的特性是它使用插桩来收集安全信息,直接从运行中的代码发现问题,不是源代码扫描(SAST),也不是HTTP 扫描(DAST)。但那并不意味着你要等到产品上线时才使用它,恰恰相反,你可在IDE中,当开始编写和测试第一行代码时,就使用IAST。

交互式应用安全测试使用软件插桩收集安全信息,并直接从运行中的代码发现问题,以实现自动化识别和诊断在应用和API中的软件漏洞。

IAST可以访问代码本身,能够在每行代码执行SAST,而且,IAST可以访问HTTP流量,也能够在每一次请求和响应时,执行类DAST的分析,因此,IAST的规则是SAST和DAST的一个功能合集。

IAST的两个主要能力如下:

  • 自有代码安全测试:IAST能够自动化地分析应用和API 中的自有代码,找出以前没有发现的(零 day)漏洞,能够识别很宽范围的漏洞,包括并不限于OWASP Top 10,还有其他更复杂的漏洞。

  • 开源软件安全测试:IAST也能用来测试开源库和框架的安全性,一般有两个维度。首先,IAST能识别困扰开源软件的已知漏洞(如CVE发布),其次,IAST能识别开源软件中以前未知的(潜在)漏洞。

2. 什么是RASP

RASP一词就是在早期有Gartner引入的“Runtime application self-protection”的简写。Gartner 在2014年应用安全报告里将RASP列为应用安全领域的关键趋势 ,并将其定义为:

“Applications should not be delegating most of their runtime protection to the external devices. Applications should be capable of self- protection (i.e., have protection features built into the application runtime environment).”

(应用程序不应该依赖外部组件进行运行时保护,而应该具备自我保护的能力,也即建立应用运行时环境保护机制)

RASP是什么呢?简单说,就是将安全技术嵌入到应用程序或是应用程序运行时的环境中,在应用层检查请求,实时检测和拦截攻击行为。

RASP在业界具体的应用是将RASP工具部署到中间件(Tomcat、weblogic等)中,在应用程序接收请求之前对请求进行过滤和分析,规避安全风险。应用程序无需进行任何的开发方面的修改,只需进行简单的配置即可。

由于这种技术和应用程序融为一体,而不同开发语言适配不同的防护逻辑及防护端,所以需要关心应用程序的开发语言。举例来说,如果一个应用程序使用的是Java开发语言,那么基于RASP的安全产品也需要使用Java开发语言进行防护端的开发。当前,边界无限已经开发了包括Java、Golang、PHP、Python等在内的多语言探针,以对应用进行更完整的匹配。第二,为了保障业务稳定性与时效性,可以将采集数据的模块和分析模块进行架构分离,把请求时间的影响控制在毫秒级,而且,在强攻防对抗场景下,能在不干扰业务的前提下,进行自行的攻击检测能力升级,确保攻击检测的准确性。

RASP 可以保护 Web 和非 Web 应用程序。该技术不会影响应用程序的设计,因为 RASP 的检测和保护功能可以在应用程序运行的服务上运行。

网络安全一直是信息安全世界的主旋律,确保应用系统安全又是重要一环。在应用安全的构建中,RASP技术弥补了传统防御工具、手段的缺失,可以更好的防御未知威胁,更好的为应用程序树立最后一公里的防线,确保企业应用系统的安全。

RASP和IAST区别

RASP或运行时应用程序安全保护 与IAST,RASP或运行时应用程序安全保护一样,它在应用程序内部运行,但它不是测试工具,而是安全性工具。

IAST:交互式应用程序安全测试。监控应用程序在运行时的安全漏洞——测试时间。
RASP:运行时应用程序自我保护。监控应用程序,以检测其运行时的攻击——生产时间。

IAST 和 RASP 是应用程序运行时寻找问题的安全工具。 对于 IAST,作为测试过程的一部分,其扫描漏洞。与此同时,RAST 检测生产环境中的攻击。

AST 工具安装植入代码,称为“代理”,以在应用程序运行时监控应用程序并检查安全漏洞。代理收集程序内的数据,这些数据可以检测到被忽略的安全漏洞。

在应用程序中安装代理时,RASP 遵循与 IAST 相同的策略,区别在于如何使用代理。IAST 工具搜索漏洞错误,而 RASP 寻找攻击迹象,并在检测到攻击时保护应用程序免受攻击。

RASP的优势

RASP技术进阶系列(一):与WAF的“相爱相杀”
参考URL: https://www.freebuf.com/articles/network/334956.html

RASP的优势
(1)拦截混淆和加密的流量:如前文所述,RASP并不需要对流量进行解密,可以根据场景对恶意行为进行分析,有效拦截被精心设计的攻击流量。

(2)针对业务场景进行优化:基于RASP函数Hook的特性,不仅可以对通用类、框架类的函数进行插桩,也可以对自研代码部分进行插桩。例如对于应用在交付前来不及修补的漏洞,可以通过函数级别的虚拟补丁提供防护,保证应用按时交付。

(3)极低的维护成本:除了根据需要配置虚拟补丁外,由于RASP从底层函数进行保护,所以基本上不需要对RASP的规则做任何调整即可实现应用的安全内建。

(4)兼顾东西向流量安全:RASP工作在应用程序内部,不仅可以分析南北向流量的风险,也可以分析企业内部,应用之间东西向流量的风险。例如微服务架构中涉及多个模块间的调用,它们之间通常会使用rpc等非http协议来进行数据交换,传统的 WAF 通常对其无能为力。而 RASP 则可以很好的解决这样的问题。

(5)防御0day漏洞:RASP可以保护应用运行时环境中的所有代码,包括自研代码、第三方组件、Web应用容器(Tomcat、Django、Flask等)。例如最近几个波及范围较广的0day漏洞:Log4j2 RCE(CVE-2021-44228)、Spring4Shell(CVE-2022-22965)、Fastjson反序列化漏洞(https://github.com/alibaba/fastjson/wiki/security_update_20220523),虽然攻击方式有变化,但是最终实施攻击总是需要调用一些底层的方法/函数。无论攻击入口如何变化、攻击手段如何隐蔽,都无法绕开最终关键函数的执行过程,因此RASP一定能对其进行有效拦截。

RASP应用场景

RASP在运行时阻止漏洞被利用,而不是像Web 应用防火墙(WAF)那样通过检查网络流量来阻止攻击。RASP并不仅在精确度和扩展性上优于传统的Web防护方法,还能提供在几分钟内将多个业务系统部署新的防护手段的所需架构。(注:RASP也使用插桩的方法,和IAST技术基本一样,有时会把这两个技术等同。)

RASP可以防御OWASP漏洞与第三方框架漏洞及应用性能监控,理论上,使用 RASP 的应用可以识别 SQL 注入、跨站点脚本攻击,并防止威胁直达其攻击目标。

WAF 掌握的是软件的“入口流量”,而 OpenRASP 却掌握了内部所有动作的“上下文联系”。

缺点: 应用较多,适配成本高,而
且部分应用无法使用RASP
优点: 可以直接在代码层进行拦截

注重WAF和Firewall,WAF全称是Web Application Firewall,还有我们物理的Firewall。应用防火墙是在过滤每一个访问的请求数据包里面有没有安全的风险,里面有没有SQL注入、XSS攻击、远程的攻击命令或者木马等,物理的防火墙是保证了只允许信任的主机或者信任的客户端去连接某一个端口。这两个一个是软件层面的防火墙,一个是硬件层面的防火墙。

RASP技术的方法

RASP技术是应用程序安全的“保护伞”
参考URL: https://view.inews.qq.com/a/20220610A06C3900

  1. Servlet过滤器和插件
    这种技术利用服务器插件或Java服务,通常实现到ApacheTomcat或.NET来处理入站的HTTP请求。插件在请求到达应用程序代码之前检查它们,并对每个请求应用检测方法。匹配已知模式的请求,称为攻击签名,然后被阻止。
  2. 二进制工具
    二进制工具将监控和控制元素引入到应用程序中。当一个被检测的应用程序运行时,监控元素会识别安全事件,包括攻击,以及控制元素会记录事件、生成警报和阻止攻击。根据编程语言和框架的不同,这些元素可以进行集成,而不需要更改应用程序的源代码或容器。
  3. JVM替换
    一些RASP解决方案是通过替换标准的应用程序库、JAR文件或JVM来安装的。这允许RASP解决方案被动地监视对支持功能的应用程序调用,提供数据和控制流的全面视图,使使用细粒度检测规则,可以在请求被拦截时应用。
  4. 虚拟化
    虚拟化也被称为容器化的运行时保护。这种类型的运行时保护实现了一个虚拟容器,并使用规则来管理如何保护应用程序。此外,这种方法不需要更改应用程序工件,如源代码、部署描述符或二进制文件。
各种语言RASP技术实现方式

TODO

1.JAVA
Java是通过Java Agent方式进行实现(Agent本质是java中的一个动态库,利用JVMTI暴露的一些接口实现的),具体是使用ASM(或者其他字节码修改框架)技术实现RASP技术。Java Agent有三种机制,分别是Agent_OnLoad、Agent_OnAttach、Agent_OnUnload,大部分时候使用的都是Agent_OnLoad技术和Agent_OnAttach技术,Agent_OnUnload技术很少使用。

2.PHP
PHP是通过开发第php扩展库来进行实现。

3…NET
.NET是通过IHostingStartup(承载启动)实现,具体的大家可以下面这篇文章:

4.other
RASP技术其实主要就是对编程语言的危险底层函数进行hook,毕竟在怎么编码转换以及调用,最后肯定会去执行最底层的某个方法然后对系统进行调用。由此可以反推出其hook点,然后使用不同的编程语言中不同的技术对其进行实现。

3. RASP开源项目

OpenRASP

官网: https://rasp.baidu.com/
百度安全的OpenRASP项目,究竟是什么?
参考URL: https://www.freebuf.com/articles/web/164413.html

OpenRASP 是百度安全推出的一款 免费、开源 的应用运行时自我保护产品。它隶属于百度 OAESE 智能终端安全生态联盟,是其中五大开放技术之一。

近两年,百度的OpenRasp在安全业内大火,各大厂的安全团队都在纷纷跟进研究,捣鼓自己的IAST/RASP产品。

国外的RASP

公司名称 产品官网
Micro Focus https://www.microfocus.com/en-us/products/application-defender/features
Prevoty https://www.prevoty.com/
waratek https://www.waratek.com/application-security-platform/
OWASP AppSensor http://appsensor.org/
Shadowd https://shadowd.zecure.org/overview/introduction/
immun https://www.immun.io/features
Contrast Security https://www.contrastsecurity.com/runtime-application-self-protection-rasp
Signal Sciences https://www.signalsciences.com/rasp-runtime-application-self-protection/
BrixBits http://www.brixbits.com/security-analyzer.html

国内RASP技术实现进度以及状态

RASP技术攻防之基础篇
参考URL: https://blog.csdn.net/tony_vip/article/details/106006030

  • 百度openrasp
  • 云锁

三、参考

RASP技术进阶系列(一):与WAF的“相爱相杀”
参考URL: https://www.freebuf.com/articles/network/334956.html
企业快速实践部署IAST/RASP的一种新思路
参考URL: https://www.freebuf.com/articles/es/235441.html
应用安全测试之SAST,DAST,IAST和RASP
参考URL: https://blog.csdn.net/realmardrid/article/details/109160324
IAST/RASP
参考URL: https://www.thoughtworks.com/zh-cn/insights/decoder/i/iast-rasp
The AppSec alphabet soup: A guide to SAST, IAST, DAST, and RASP
参考URL: https://www.synopsys.com/blogs/software-security/sast-iast-dast-rasp-differences/
RASP技术是应用程序安全的“保护伞”
参考URL: https://view.inews.qq.com/a/20220610A06C3900
RASP技术分析
参考URL: http://blog.nsfocus.net/rasp-tech/

猜你喜欢

转载自blog.csdn.net/inthat/article/details/125309828