RASP 介绍

Runtime Application Self-protection 运行时应用自我保护



[图源:绿盟科技]

概念

Gartner (著名信息技术研究和分析厂商) 在2014年提出了RASP的概念,即将防护引擎嵌入到应用内部,不再依赖外部防护设备。RASP 是一种新型应用安全防护技术。这种技术直接将防护引擎嵌入到应用内部,能够感知应用上下文,与应用程序融为一体,实时监测、阻断攻击,使程序自身拥有自保护的能力。并且应用程序无需在编码时进行任何的修改,只需进行简单的配置即可。

举个例子,当发生SQL注入攻击时,WAF只能看到HTTP请求。而RASP技术不但能看到完整的SQL语句,还可以和当前的HTTP请求进行关联,并结合语义引擎、用户输入识别等能力,实现对SQL注入的检测。

前景

  • 2017 - “RASP 市场规模预计将从 2017 年的 2.947 亿美元增长到 2022 年的 12.401 亿美元,复合年增长率 (CAGR) 为 33.3%。”[2]

优点与缺点

结合了相关资料和个人的一些想法

优点
  1. 低误报。边界设备基于请求特征检测攻击,通常无法得知攻击是否成功。

    对于扫描器的踩点⾏为、nday 扫描,⼀般会产⽣⼤量报警。RASP 运⾏在应⽤内部,失败的攻击不

    会触发检测逻辑,所以每条攻击都是成功的报警。
  2. 发现更多攻击与攻击溯源。以SQL注为例,边界设备只能看到请求信息。RASP 不但能够

    看到请求信息,还能看到完整的SQL语句,并进⾏关联。如果SQL注⼊让服务器产⽣了语法错误或

    者其他异常,RASP引擎也能够识别和处理。另外,黑客一旦绕过一次WAF,并在服务器上遗留了后门,WAF将没什么办法,但是RASP却可以继续防护。亦或者,服务器上发现了后门,传统情况下,我们不能知道黑客曾经做过什么,但是RASP可以检查后门执行过程,追溯黑客行为。对所有攻击ip以及攻击的文件进行聚合,用时间轴进行展示。这样就可以定位到黑客是从上面时候开始进行攻击的,攻击中访问了哪些文件,触发了哪些攻击拦截。然后对所有大致相同的ip进行归类,可以引出来一个专业用于攻击溯源的产品。
  3. 对抗未知漏洞与0day防御。发⽣攻击时,边界防护设备⽆法掌握应⽤下⼀步的动向。RASP

    技术可以识别出异常的程序逻辑,⽐如反序列化漏洞导致的命令执⾏,因此可以对抗未知漏洞。0day防御

    对已经hook的关键点进行告警通知并且要拦截攻击行为,然后在公网部署多种不同cms的web蜜罐。如若已经触发到了告警通知,那么已经证明攻击已经成功。且拦截到的漏洞可能为0day。
  4. 虚拟补丁。RASP 可以防止传入攻击,因此它为工程团队提供了时间来修复漏洞,而无需在危机期间工作压。
  5. 应用监控与代码审计。 可以更好的进行性能监控、日志采集等工作。对于rasp中运用到的技术,换一种思维方式,可以不进行拦截,而进行记录,对所有记录的日志结合上下文进行代码审计。
  6. 无需学习和预测。 与WAF类似,RASP通过阻止恶意行为来工作,但无需大量预设规则和调整。RASP 不是构建经过训练的模型或预测行为,而是在运行时监视应用程序以查看这些操作是否实际执行。例如,是否发生了对数据库的请求调用、是否执行了 shell 命令或打开了文件。
  7. 加强微服务安全。 微服务重塑了现代应用程序的开发方式,也越来越流行。由于微服务的分布式特性,传统的边界防御很难持续监控和保护微服务。RSAP通过允许安全、开发和运营团队协同工作来提高 HTTP 层以外的安全性,深入发现利用漏洞产生的攻击。
缺点
  1. 兼容性问题,可能编译语言和应用程序的版本不一致都导致RASP产品无法通用。技术栈复杂时,实现的技术难度大,在通用性上也是费时费力,未来可能成为该技术的掣肘。
  2. 性能问题,需要在应用中注入防护引擎,肯定会影响服务器的性能。百度曾经cpu占用率25%,跟换js引擎后降至5%,字节15%(自认为影响不大)
  3. 技术问题,如果RASP技术中对底层拦截点不熟悉,可能导致漏掉重要hook点,导致绕过。RASP代码本身如果有漏洞,也难以解决,甚至降低应用的安全性。
  4. 产品认可问题,客户是否愿意将防护引擎注入到他们自身的应用中。
  5. 受限上下文,纯粹从技术角度来看,由于 RASP 位于应用程序框架内,因此它可能看起来是比 WAF 等外围防御解决方案更智能的替代方案。然而,实际上,没有任何应用程序是独立的。它们与大量其他服务和组件交互。考虑到每个应用程序模块都可以部署在不同的端点,这进一步限制了 RASP 的可见性和功能。
  6. 缺少分布式保护,由于RASP仅具有当前应用程序上下文的可见性,因此RASP无法有效解决其他应用程序级分布式拒绝服务。边界防御解决方案可以完全隔离该流量,吸收它,甚至在攻击到达应用程序堆栈之前采取防御措施。

可能的实现方案和部署方式

  • RASP 可以集成为一个框架或模块,与程序的代码、库和系统调用一起运行。该技术也可以实现为虚拟化。 RASP 类似于交互式应用程序安全测试 (IAST),主要区别在于 IAST 专注于识别应用程序中的漏洞,而 RASP 则专注于防止可能利用这些漏洞或其他攻击媒介的网络安全攻击。

  • RASP 解决方案可以以两种不同的方式部署:监控模式或保护模式。在监控模式下,RASP 解决方案会报告应用程序攻击,但不会阻止任何攻击。在保护模式下,RASP 解决方案报告并阻止应用程序攻击

  • 一种可能的架构



    [图源:灵犀-应用自保护]

RASP在Java上的两大实现方式

  • Java Instrumentation
  • Virtualization

在 RASP 的 Java 实现中,有两大类:Instrumentation技术和虚拟化,即基于容器的实现。Instrumentation涉及任何需要更改应用程序内容(例如源代码、部署描述符或二进制文件)的过程。此类更改需要重新编译或重新部署,这都需要在引入或更新 RASP 配置时进行操作干预。而虚拟化或这种基于容器的 RASP 实施的优势在于允许更改 RASP 配置而不影响应用程序生命周期或其操作。

Among Java implementations of RASP, there are two broad categories: those that affect protection by instrumenting code and those that use virtualization, meaning container-based implementations. Instrumentation refers to any process that requires a change to application artifacts such as source code, deployment descriptors, or binaries. Such changes require recompilation or redeployment, both requiring operational intervention when the RASP configuration is introduced or updated. Virtualized or container-based RASP implementations have the advantage of allowing RASP configurations to be altered without affecting the application lifecycle or its operation.

成熟产品

可以从成熟的产品中了解RASP能力范围。

大体功能总结:

  • 检测,监控,上传,分析
  • 本地即时防御
  • 动态安全策略
  • 虚拟补丁,远程补丁
  • 威胁告警
  • 可拓展、插件化 (多语言适配)

除去上述功能,他们都有成熟的后台管理,态势分析引擎。

灵犀 - 安百科技

OpenRASP - 百度

思考

  1. 这感觉和传统的杀毒软件的HOOK有些相似,不过一个是对于机器的防护,一个是对于应用自身的防护。
  2. 如何定义高危行为种类,百度定义了25种行为
  3. java是通过instrumentation实现的,Nodejs在8之后可以通过Inspector API机制实现,更多的语言实现方案可以参考字节Elkeid开源项目
  4. 兼容性问题, 不同的语言,不同的语言版本可能都需要重新开发。个人认为作为单独的防护手段,既是优点,又是缺点。因为能精准根据行为进行防护,误报率低,但是要普及到各式各样的应用中,需要大量的人力物力,因此,RASP的大体设计上需要通用化,针对语言的部分要插件化,以提高开发效率。
  5. 介于上述的特性,作为一种未知漏洞检测程序,或者特定漏洞的热修复程序,应该具有相当的优势。应当与其他安全产品共同协作,作为一个应用安全的加固或者补充。

参考

  1. 百度安全OpenRASP
  2. 市场调查
  3. RASP-新型Java应用安全
  4. WIKI
  5. RASP在微服务中的实践
  6. 绿盟科技-RASP概述
  7. 字节Elkeid开源项目
  8. 灵犀-应用自保护平台
  9. Sqreen国外软件
  10. RASP攻防技术浅谈

RASP Runtime Application Self-protection 运行时应用自我保护 介绍及优缺点的更多相关文章

  1. 运行时应用自我保护(RASP):应用安全的自我修养

    应用程序已经成为网络黑客想要渗透到企业内部的绝佳目标. 因为他们知道如果能发现并利用应用程序的漏洞,他们就有超过三分之一的机会成功入侵. 更重要的是,发现应用程序漏洞的可能性也很大. Contrast ...

  2. Runtime运行时机制

    Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的 我们需要了解的是 Objective-C 是一门动态语言, ...

  3. Java-JVM 运行时内存结构(Run-Time Data Areas)

    Java 虚拟机定义了在程序执行期间使用的各种运行时数据区域. 其中一些数据区域所有线程共享,在 Java 虚拟机(JVM)启动时创建,仅在 Java 虚拟机退出时销毁. 还有一些数据区域是每个线程的 ...

  4. 在Amazon FreeRTOS V10中使用运行时统计信息

    在MCU on Eclipse网站上看到Erich Styger在8月2日发的博文,一篇关于在Amazon FreeRTOS V10中使用运行时统计信息的文章,本人觉得很有启发,特将其翻译过来以备参考 ...

  5. Jvm基础(1)-Java运行时数据区

    最近在看<深入理解Java虚拟机>,里面讲到了Java运行时数据区,这是Jvm基本知识,把读书笔记记录在此.这些知识属于常识,都能查到的,如果我有理解不对的地方,还请指出. 首先把图贴上来 ...

  6. JVM 运行时数据区详解

    一.运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同数据区域. 1.有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,所有的线程共享这些数据区. 2.第二种则 ...

  7. C++之运行时类型识别RTTI

     C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...

  8. vs2015部署---下一代VC运行时库系统:the Universal CRT

    前言 其实the Universal CRT(通用C运行时库)已经不能算是“下一代”,因为它已经在前两年伴随着Visual Studio 2015和Windows10发布.但是由于之前使用VS2015 ...

  9. JVM内存区域(运行时数据区)划分

    前言: 我们每天都在编写Java代码,编译,执行.很多人已经知道Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文 ...

随机推荐

  1. 字符scanf 的输入注意

    1.注意scanf 不能有空格,如果有空格会将空格给输入进去 scanf("d "):---有空格 和scanf("d");--没有空格 有很大的区别

  2. kubernetes部署 etcd 集群

    本文档介绍部署一个三节点高可用 etcd 集群的步骤: etcd 集群各节点的名称和 IP 如下: kube-node0:192.168.111.10kube-node1:192.168.111.11 ...

  3. Docker镜像相关操作

    批量导入镜像 ll *.tgz|awk '{print $NF}'|sed -r 's#(.*)#docker load -i \1#' |bash 批量打tag docker images | se ...

  4. Yarn 容量调度器多队列提交案例

    目录 Yarn 容量调度器多队列提交案例 需求 配置多队列的容量调度器 1 修改如下配置 SecureCRT的上传和下载 2 上传到集群并分发 3 重启Yarn或yarn rmadmin -refre ...

  5. absorb

    absorb 物理的absorb比较直观.被书本/知识absorb也好理解.涉及到money/time时有点抽象,但汉语也有"吸金"的说法,consume, use up.可以吸收 ...

  6. 【STM8】SPI通讯

    这篇内容有点长,如果有人想透过我的博客学习STM8的SPI,那是我的荣幸 首先我要先说大纲,这样大家心里比较有底,可以把精力都用在SPI理解上 [SPI初步介绍]:介绍SPI如何接线.名称解释.通讯注 ...

  7. 【Netty】最透彻的Netty原理架构解析

    这可能是目前最透彻的Netty原理架构解析 本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件.整体架构,知其然且知其所以然,希望给大家在实际开发实践.学习开源项目方面提供参考. ...

  8. GO并发相关

    锁的使用 注意要成对,重点是代码中有分支或者异常返回的情况,这种情况要在异常返回前先释放锁 mysqlInstanceLock.Lock() slaveHostSql := "show sl ...

  9. vue引入d3

    单页面使用 cnpm install d3 --save-dev 指定版本安装 cnpm install d3@6.3.1 -S <script> import * as d3 from ...

  10. my38_MySQL事务知识点零记

    从innodb中查看事务信息 show engine innodb status\G; ------------ TRANSACTIONS------------Trx id counter 3153 ...