众所周知,log4j 2.x安全事件引起了轩然大波,对于信息安全从业者来讲可以称之为“家喻户晓”。与之同时引起大家关注的是RASP(Runtime application self-protection)技术,该技术在2014年Gartner的应用安全报告里被列为应用安全领域的关键趋势。虽然并不新颖,而受到如此多的关注还是头一次。之所以如此,是因为RASP可以增强WAF防护工具的安全能力,形成纵深防御的安全防护体系。
RASP是一种内置或链接到应用程序环境中的安全技术,与应用程序融为一体,实时监测、阻断攻击,使程序自身拥有自我保护的能力。那么,RASP技术是如何应用、优势好处又有哪些呢?本篇文章为大家简析RASP的相关内容,让大家对RASP技术有更多的了解。
RASP的工作原理
RASP技术是一种基于服务器的技术,一旦应用程序运行开始时就会激活。而且,所有RASP产品都包含一个运行时监视器,该监视器接收带有关联数据的连续事件流。每个RASP系统都有自己的一组安全规则列表,用于交叉检查事件和相关数据,以确保只有允许的事件才能执行。其中,每种RASP技术提供的保护级别取决于安全规则的深度以及实现类型。
例如,RASP系统可能会出现以下事件:
使用参数val = 42 和 key = 0xffe01234 调用“加密” 。
那么,RASP系统如何确定是否允许此调用需要根据情况而定。如有一些RASP产品允许基本的“数据清理”规则。这些规则检查字符串参数中的可执行代码。但是,仅仅孤立地检查函数调用序列和发送给这些调用的数据,有许多安全方面是无法充分监控的。
为了实现更高级的RASP安全级别,在RASP解决方案中需要两个元素:动态上下文和元数据。
第一个元素,动态上下文,涉及到事件的调用逻辑。例如,RASP规则可以设计为仅允许在“check_credentials”的后方可调用“open_file”,但不能在“factorial”后调用。再例如,另一个规则可以设定为“free_memory”只能在“allocate_memory”之后,并且“free_memory”的参数需要与“allocate_memory”返回的值相匹配。通常,动态上下文指的是时间条件,如“执行事件A 需要先满足事件B”,“在调用D之前,需要先调用C”等等。
第二个元素,元数据,指的是“关于数据的数据”。例如,在对“encrypt”的调用中,RASP工具可以检查“key”的值是否由受信任的密钥存储库发出的,并且在发出后直到“encrypt”函数使用它之前没有被修改过。当通过指针从内存中读取一个值时,RASP可以检查这个指针是否允许引用该内存。此外,当通过网卡向外部发送数据时,RASP可以检查该数据是否包含敏感信息,从而可以防止在网络上暴露敏感数据。
RASP安全方法
RASP工作在应用层,因此每个产品都需要以某种方式与应用程序集成。监控应用程序使用(调用)或执行(运行时)的方法有多种,每种方法的部署略有不同,收集的应用程序运行方式略有不同。
Servlet 过滤器和插件:一些RASP平台作为Web服务器插件或Java Servlet实现,通常安装到Apache Tomcat或 Microsoft .NET中以处理入站HTTP请求。插件在到达应用程序代码之前过滤请求,将检测规则应用于收到的每个入站请求。匹配已知攻击特征的请求被阻止。这是一种相对简单的将保护改造到应用程序环境中的方法,可以有效地阻止恶意请求,但它没有提供其他类型集成可能的深入应用程序映射。
库/JVM替换:通过替换标准应用程序库、JAR文件甚至Java虚拟机来安装某些RASP产品。这种方法基本上劫持了对底层平台的调用,无论是库调用还是操作系统。RASP平台被动地“看到”对支持功能的应用程序调用,在请求被拦截时应用规则。在此模型下,RASP工具可以全面了解应用程序代码路径和系统调用,甚至可以学习状态机或序列行为。更深入的分析提供上下文,允许更细粒度的检测规则。
虚拟化或复制:这种集成有效地创建了应用程序的副本,通常作为虚拟化容器或云实例,并在运行时检测应用程序行为。通过监控应用程序代码路径,请求结构、参数和 I/O 行为,将规则应用于应用程序请求,并阻止恶意或格式错误的请求。
RASP常见用例
通常情况下,使用RASP可以帮助DevOps团队和开发人员实现如下四点:
1.业务程序运行时情境安全
应用程序安全测试(AST)工具有助于在开发测试阶段发现漏洞,但是当应用程序在运营的生产环境中时,缺少漏洞的检测防护能力;而RASP技术将保护引擎植入应用程序内部,基于行为进行上下文威胁的实时检测和防御,不依赖外部防护设备就可以保证业务运行时安全。
2.保护安全软件开发生命周期(S-SDLC)的正常完成
企业在使用DAST和IAST等应用程序测试技术的同时,应该在软件开发过程中使用RASP保护应用程序来完成安全软件开发生命周期(S-SDLC)。例如,在安全编码阶段当出现安全漏洞,并不确定需要修复哪些漏洞?应该使用白名单还是黑名单的方法?哪些字符应该在输入数据中被删除或允许?等等诸多问题时,修复已经被利用的漏洞并将RASP插件放入应用程序的部署包中,可以降低安全漏洞发生的风险,确保代码的构建过程安全完成。
3.保护开源/第三方代码应用程序安全
由于开源软件使用比较便利,众多软件开发人员在应用程序的开发中使用了此类软件,但是由于开源软件中的安全漏洞比较严重,缺失系统的安全审查机制,使得软件供应链攻击呈现上升趋势。而RASP技术在不需要修改代码的情况下,可以实时保护开源软件和第三方代码中的漏洞。
4.与WAF构建积极防御的安全防线
当下,应用程序主要依赖外部保护,如WAF或IPS(入侵防御系统 Intrusion Prevention Systems),因此需要在应用程序中构建安全特性,以便在运行时保护自己。RASP 可以在应用程序运行时检测内存中写的数据或检测未经授权的数据库访问。而且,RASP具有实时能力,可以采取诸如终止会话、发出警报甚至退出进程等操作。这些功能使RASP可以和企业内现有的WAF进行互补。
RASP的好处
由于RASP在服务器上运行,因此只要应用程序开始运行,它就会启动。一旦应用程序开始运行,RASP 就会监视网络的攻击面以检测新出现的威胁并保护它免受任何负面的内部或外部行为的影响。
1、RASP可以提供有关攻击者准确、可见的信息,及时溯源,为保护应用程序提供了可见性。
2、只要Web应用程序开始运行,RASP会自动启动运行,保护系统的安全性。以防止任何威胁行为,包括网络嗅探、篡改代码、逆向工程和未经身份验证的数据泄漏。
3、与Web应用程序防火墙 (WAF) 不同,RASP具有更高的准确性,因为它可以洞察应用程序逻辑和配置、事件和数据流、执行的指令和数据处理。而且在预生产中很容易部署,能成功阻止攻击。
4、RASP可随应用程序在本地、云、虚拟环境或容器中进行部署,为DevOps提供安全特性。RASP 在大规模分布式环境中的优势在于,它可以轻松地跨环境部署,并将其保护调整到安装它的每个应用程序或微服务。无需更改代码或配置,因为嵌入应用程序的微代理会自动适应服务堆栈。
5、RASP提供篡改检测功能,并将保护功能添加到应用程序的运行时环境中,从而提高了针对恶意攻击的保护级别。且拥有查看基于边界的解决方案无法查看的横向或“东西向”流量的能力。
6、RASP 可以通过适当的可见信息在测试工作中帮助和补充开发团队。通过使用仪表板,应用程序威胁情报可以与提供的有关已测试部分、最不安全部分、存在安全威胁的代码行、交易信息等的信息相结合。
应用场景
根据前面讲到的RASP安全特性我们可以看出来,RASP为应用程序增加了威胁可见性和安全控制,帮助企事业单位持续发现应用威胁并实时阻止。那么,此技术又比较适合应用于什么场景中呢?
1、持续攻防演练
网络攻防演练活动兴起以来,不断衍生出攻、防技术,尤其是云原生、AI等新技术的不断应用,更多复杂、难预见的攻击手段应运而生。对于防守方而言,不能单纯依赖于无法看到应用程序内部威胁的流量嗅探边界(IPD/IDS、WAF)的解决方案,需要一种更有效的方法以更高的可见性监控安全事件。而RASP工具将防护引擎嵌入到应用内部,可以在不依赖请求特征的情况下,准确的识别代码注入、反序列化等应用异常,弥补了传统防护工具的缺失;同时,又可以对威胁事件进行实时监控和响应,利于在攻防对抗中及时进行策略调整,及时应对。
2、紧急漏洞防御
0day漏洞是比较常见且难以防御的一类威胁,一旦被发现将对系统造成不可估量的损失。RASP代理位于应用程序内部,在运行时根据应用程序代码的上下文检查请求负载,以确定请求是正常请求还是恶意应用程序来保护自己,可以更好的应对此类安全威胁。此外,也包括一些应急的漏洞,都有较好的防御效果。
3、高级威胁防御
“道高一尺魔高一丈”,安全防护措施的不断加强,势必引起攻击者执行新的攻击策略。诸如无文件攻击、WebShell攻击、内存马攻击等攻击手段不断被应用,而传统的安全防护工具容易被绕过。RASP基于行为分析技术,通过规则匹配、污点追踪的检测方法,可以对此类攻击事件进行实时监测,发现威胁数据源,做好安全防御。
由于RASP的内容比较多,本篇文章简单为大家讲述了部分内容,后面将会慢慢更细致的将RASP技术分享给大家,希望大家对该技术有更深刻的了解和认知。
参考链接:
https://securosis.com/blog/understanding-and-selecting-rasp-technology-overview
https://info.dovermicrosystems.com/blog/what-is-rasp
云鲨RASP
更多详情尽在:https://rasp.xmirror.cn/