RASP原理
RASP(Runtime Application Self-Protection,运行时应用自我保护)是一种应用安全保护机制,它的目标是在应用程序运行时检测和防御各种安全攻击。与传统的防护机制(例如防火墙和安全软件)不同,RASP在应用程序内部嵌入了安全保护功能,可以实时监测和保护应用程序免受攻击。
随着 Web 应用攻击手段变得复杂,基于请求特征的防护手段,已经不能满足企业安全防护需求。早在2014 Gartner 引入了“Runtime application self-protection”一词,简称为RASP,属于一种新型应用安全保护技术,它将防护功能"注入"到应用程序中,与应用程序融为一体,通过Hook少量关键函数,来实时观测程序运行期间的内部情况。当应用出现可疑行为时,RASP根据当前上下文环境精准识别攻击事件,并给予实时阻断,使应用程序具备自我防护能力,而不需要进行人工干预。
RASP 通过实时采集 Web 应用的高风险行为,通过特征规则、上下文语义分析及第三方安全产品数据关联分析等多种安全模型来提升检测准确率,相较于传统 Web 应用安全产品,RASP从海量的攻击中排除掉了大量的无效攻击,聚焦发现真实的已知和未知安全威胁。并且在发出的报警信息上, RASP可以清晰的还原出代码行级别的攻击路径,对漏洞重现与修复具有极大的帮助。
RASP能够抵御未知攻击,通过深入代码上下文精准识别攻击并提供相关代码调用堆栈,协助安全团队快速定位问题。此外,RASP还可以打虚拟补丁修复官方未修复的漏洞,对第三方组件的安全风险进行评估等。
RASP能做什么
- RASP 的防护层深入代码上下文,可以基于行为来精准识别攻击,并提供受到攻击影响的相关代码调用堆栈, 协助安全团队迅速定位问题并快速制定解决方案。
- 利用 RASP 也能够对应用打虚拟补丁,修复官方未修复的漏洞。特别是对大型复杂系统,不允许重新启动的情况下,热修复机制能够及时对漏洞止血,大大降低漏洞逃逸时间,通过增加新的函数 Hook、规则等措施,在较短时间内完成整个企业、全部服务的安全加固。
- RASP赋能扫描器实现灰盒检测(IAST)。其在预发环境、测试环境等方面发挥作用,实现多层产品,层层检测的效果。
- 第三方组件安全风险梳理。以Java 为例子,RASP 运行在JVM内部,能够准确获取JVM加载的jar文件版本、路径等信息,理论上不存在误报和漏报。结合第三方CVE漏洞信息库,能够评估当前系统的风险等级。相对于扫描磁盘文件、POM文件解析、查看进程加载的文件的方式,准确性更高
RASP工作流程
目前 RASP 的主方向还是 Java RASP, 它的实现方式是通过Instrumentation编写一个agent,在 agent 中加入 hook 点,当程序运行流程到了 hook 点时,将检测流程插入到字节码文件中,统一进入JVM中执行。
Java RASP 的实现方式通常涉及使用 Instrumentation API 编写一个代理(agent),通过在应用程序的启动参数中指定该代理,使其能够与应用程序一起运行。
Java RASP 的代理(agent)会使用 Instrumentation API 来修改或转换应用程序的字节码,将安全检测逻辑插入到指定的 hook 点中。这些 hook 点可以是关键的函数调用、数据库操作、文件访问等敏感操作的入口点。当应用程序执行到这些 hook 点时,RASP 代理会介入并执行相应的安全检测逻辑。
通过在字节码级别进行插桩,Java RASP 能够实时地监控应用程序的执行过程,并根据运行时上下文来进行精准的攻击检测和防护。它可以检测到各种类型的攻击,例如代码注入、路径遍历、SQL 注入、远程命令执行等,从而提供有效的应用程序自我保护能力。
Java RASP 的实现方式确实能够在应用程序运行时获取更丰富的上下文信息,并能够直接对解码后的数据进行检测,这使得它相对于传统的基于网络流量的 WAF 具有更高的准确性和防御能力。
具体工作流程
- 插桩:RASP在应用程序运行时,通过代码注入或字节码转换的方式,将安全保护代码嵌入到应用程序中。这样可以使RASP能够实时监控应用程序的执行。
- 上下文感知:RASP能够感知应用程序的上下文环境,包括HTTP请求、数据库查询、文件操作等。它可以分析和理解应用程序的执行上下文,并检测异常行为。
- 安全检测:RASP使用内置的安全规则和算法,对应用程序的执行进行实时检测。它可以检测常见的安全漏洞、攻击行为和异常操作。例如,RASP可以检测SQL注入、跨站脚本攻击(XSS)、远程命令执行等。
- 防御措施:一旦RASP检测到可能的安全攻击,它会立即采取相应的防御措施。这些措施可以包括阻止恶意请求、中断攻击链、记录日志或触发警报等。RASP可以与应用程序紧密集成,直接在应用程序内部进行防御,从而提供更加精确和实时的保护。
RASP运行模式
关闭模式
既不提供监控功能也不提供阻止功能。此模式中,RASP 将暂时失去作用,所有请求都可以通过RASP。
监控模式
RASP程序监视应用程序中的攻击,记录日志并发出告警,但不阻止请求。
阻断模式
RASP阻止所有非法请求。
RASP三种运行模式切换
- Agent初始化后,RASP处于关闭模式,rasp-daemon收集系统负载情况后,决定是否激活监控功能;
- 服务处于监控状态,收集业务特征(文件访问、命令执行、类加载等);
- 根据业务特征建立白名单,然后更新RASP白名单,开启阻断策略,进入阻断模式;
- 阻断误操作,可以关闭阻断策略或者更新白名单;
- 服务负载变化RASP性能下降,阻断模式先软降级;服务负载持续升高,RASP性能持续下降,关闭RASP;