1.1 RASP 原理

想要利用 RASP 实现更完善的安全防护,首先我们要知道,什么是 RASP?以及如何实现 RASP?

RASP 的设计思路是通过监控应用的底层,来从根本上发现攻击行为的产生。

以 Java 为例,Java 应用运行在 JVM 之上。因此,JVM 就是一个底层,它能够看到所有的应用信息。我们可以通过JavaAgent的形式将 RASP 运行在 JVM 上,然后借助Instrumentation技术 Hook 关键的类和方法。关键类和方法具体有哪些,你可以参照 OpenRASP 的Hook 列表。这样一来,RASP 就能关注到应用安全相关的信息和调用了。

同样的原理,在 PHP 中,我们可以通过 PHP 扩展库来实现 RASP;在.Net 中,我们可以通过 HostingStartup 来实现 RASP。

如果你想要研究 RASP 产品,那我推荐你使用百度的OpenRASP。因为 OpenRASP 在开源市场中认可度比较高,也是目前各个公司用来研究 RASP 产品的一个主要对象。

1.2 RASP 的优势和劣势

我们经常会将 RASP 和 WAF 拿来作比较,因为它们主要关注的都是应用相关的 Web 安全问题。那么对比 WAF,RASP 有哪些优势和劣势呢?

首先我们来看优势。在开头我们就提到了,RASP 对比于 WAF 最大的优势在于 RASP 运行在应用的底层,从而能够知道应用运行时的上下文(比如:用户、代码逻辑、SQL 语句等)。在 Web 安全中,我们针对 Web 安全的攻击原理进行过总结:SQL 注入、反序列化等漏洞其实都是通过输入数据,篡改应用的正常逻辑实现的攻击。

对于 WAF 来说,它只能够判断出输入的数据“可能”会篡改应用的正常逻辑,因此 WAF 的拦截决策都来源于这个可能性。而对于 RASP 来说,它知道应用的正常逻辑是什么,也知道应用接收输入后实际的逻辑是什么,如果实际逻辑和正常逻辑不一致,就必然发生了攻击。基于这种检测方式,RASP 基本不会产生误报或者漏报。

我们以 OpenRASP 防止 SQL 注入的检测逻辑为例,来看一下 RASP 是如何进行检测的。算法描述如下:

第 1 步和第 2 步很好理解,都是 SQL 注入的基本特征。那第 3 步中的“导致 SQL 语句逻辑发生变化”,OpenRASP 要如何去识别呢?假设用户的输入是万能密码"or"“=”,那么,应用实际执行的 SQL 语句就是:SELECT * FROM Users WHERE Username = “” AND Password = ““or””=“”

在这个 SQL 语句中,最后的几个字符都是用户的输入。为了检测语句逻辑的变化,OpenRASP 将这个 SQL 语句进行了 Token 化。所谓“Token 化”,就是对 SQL 语句中的关键词进行拆解,拆解后分别是:SELECT、 *、FROM、Users、WHER、Username、=、“”、AND、Password、=、“”、or、“”、=、“”。我们能够清楚

的看到,用户的输入“““or “”=”””占据了 5 个 Token。而正常情况下,用户的输入应该只占据 1 个 Token。因此,只要用户的输入大于 1 个 Token,就说明 SQL 语句逻辑存在变化,我们就可以断定存在 SQL 注入了。

其次,RASP 能够防范未知的攻击。对于 SQL 注入来说,它的注入点可以是某个 GET 参数、某个 POST 的 Body、某个 Header 字段等,具体的攻击方式也多种多样:盲注、基于 Insert 的注入等。

WAF 的检测规则是一个一个去覆盖这些攻击点和攻击方式。如果黑客发现了某个新的攻击点或者使用了新的攻击方式,WAF 根本无法检测出来。

对于 RASP 来说,它实际上不关注具体的攻击点和攻击方式是什么,因为 SQL 注入攻击,最终都会使 SQL 语句 Token 化后的长度发生改变。因此,RASP 只需要判断执行的 SQL 语句 Token 化后的长度即可。所以我才说,RASP 能够有效地防御未知的攻击。

最后,我认为 RASP 还有一个比较特别的好处,就是基本不用维护规则。我前面讲过的各类安全产品:防火墙、WAF 和入侵检测,它们的本质都是检测攻击行为。而这些安全产品的检测方式不论是签名匹配、正则匹配还是行为分析,都包含了大量的规则和算法。这些规则和算法带来的最大问题,就是针对每一家公司我们都需要制定一套单独的规则和算法。因为每家公司的应用和网络环境都不一样,面临的攻击也不一样。

随着公司的发展以及黑客的对抗升级,我们还需要不停地更新和维护这套规则和算法,这就带来了极大的运营成本。而对于 RASP 来说,它当然也需要规则和算法来支持,但是它的规则和算法相对统一。

比如,在 Java 中,不论你是使用的哪种开发框架,最终执行 SQL 语句的都是底层的 JDBC 插件,在这个层次上,攻击的特征都是一致的。因此,RASP 基本只需要维护一套统一的规则和策略,就能够适用于所有的公司和应用了。所以,百度在 OpenRASP覆盖面说明中敢说“若发现不能拦截的攻击或者误报的情况,请联系我们”,就是这个原因。开源的 WAF 只会提供一个维护规则的入口,而不会帮助你进行维护。

尽管 RASP 存在许多明显的优势,但是目前来看,国内对于 RASP 的实际落地,普遍还在试验阶段,我很少见到 RASP 在公司范围内大规模推广落地案例。这是为什么呢?要搞清楚这个问题,就不得不提到 RASP 的劣势了。RASP 的劣势主要有三方面,下面,我们一一来看。

我认为最大的劣势在于推广难度上。尽管我们一直在提安全,但是事实上,大部分的开发人员并不认可安全,他们也不接受任何可能对应用产生影响的安全产品。

这是因为,这些安全产品增加了检测的逻辑,就必然会影响应用的正常运行。而且,WAF 等拦截性安全产品产生的误报,会让正常的业务请求受到影响。

但是,防火墙、WAF 和入侵检测,实际上都已经在各个公司很好地落地了。我认为这都归功于安全人员或者运维人员的“强推

在部署一款 WAF 的过程中,实际上是不需要开发人员参与的,运维人员在网关上直接部署就可以了。而 RASP 不一样,RASP 和应用强耦合,它需要由开发人员去部署。比如,Java 中需要通过命令 java -javaagent:rasp.jar -jar app.jar 来启动 RASP,其中的参数 javaagent 只能由开发人员进行配置。因此,RASP 的推广实际

上是安全意识的推广,所以难度也比较高。

其次,RASP 的解决方案并不通用。从语言支持上来看,目前 RASP 只在 Java、PHP 和.Net 语言中具备成熟的产品。其他高级语言,如 Python 等,可能是因为没

有很好的 Hook 方案,所以目前仍然局限于研究阶段。这也是 RASP 强耦合所带来的弊端:每一种开发语言,甚至是语言下不同的开发框架,都可能会需要一套独立的 RASP 产品。而 WAF 等安全产品,因为网络和系统都比较统一,则不受此限制。

最后,RASP 在性能问题上也备受争议。尽管目前成熟的 RASP 产品宣称它的性能影响已经低于 5%,甚至更低了,但在实际落地的过程中,确实会出现因为系统和应用的差异,而导致性能恶化比较严重的情况。这也是 RASP 在兼容性不足上所表现出来的缺陷。

1.3 RASP 的其他功能

除了针对应用的攻击行为进行检测和拦截,和 WAF 一样,RASP 也能够提供很多额外的安全防护功能。

毫不夸张地说,WAF 能实现的功能,RASP 都能够实现。因此,WAF 中的数据保护、虚拟补丁等功能,RASP 也都能够提供,原理也是一致的:都是通过拦截并修改 HTTP 请求和响应,在 HTTP 内容中加入额外的安全特性,比如 Cookie 加密。

除此之外,因为 RASP 部署于应用的底层,知道应用的全部信息,所以它本身可以对应用的安全性进行评估。最简单的评估问题如下:

  • 是否使用 ROOT 权限运行了应用;

  • 在连接数据库的时候,是否使用了弱密码;

  • 使用了哪些插件,插件是否包含漏洞。

RASP 可以在应用运行的过程中对这些高危的进程操作进行检测,从而提醒你采取更安全的实现方式。

RASP-监控应用的底层,来从根本上发现攻击行为的产生相关推荐

  1. 5 zabbix 添加host_运维监控实战篇,zabbix自动发现和自动注册图文详解

    一.介绍 自动发现 Zabbix自动发现就是为了解决批量监控而设计的功能之一,什么是自动发现呢,简单来说就是Zabbix Server端可以基于设定的规则,自动批量的去发现局域网若干服务器,并自动把服 ...

  2. 分布式监控系统Zabbix3.2添加自动发现磁盘IO并注册监控

     zabbix并没有给我们提供这么一个模板来完成在Linux中磁盘IO的监控,所以我们需要自己来创建一个,在此还是在Linux OS中添加. 由于一台服务器中磁盘众多,如果只一两台可以手动添加,但服务 ...

  3. zabbix 自动发现规则 触发器_运维监控实战篇,zabbix自动发现和自动注册图文详解...

    一.介绍 自动发现 Zabbix自动发现就是为了解决批量监控而设计的功能之一,什么是自动发现呢,简单来说就是Zabbix Server端可以基于设定的规则,自动批量的去发现局域网若干服务器,并自动把服 ...

  4. 苹果电脑 MacOS 遭恶意软件针对,监控通信流量又很难发现

    我身边绝大部分的苹果 Mac 电脑使用者都没安装安全软件,因为他们觉得没必要.然而,Mac 电脑完全不需要担心恶意软件?显然不是. 最近 ,国外一个恶意软件研究团队又发现了一种新型的,常规方法难以检测 ...

  5. 我挖掘Kafka底层原理!发现了它火爆宇宙的3个真相!

    作者:陌北有棵树,一线互联网资深高级JAVA工程师,热爱研究开源技术,架构师社区合伙人! 目前市面上各种中间件层出不穷,我们在做具体的选型时难免会纠结,在这里阐述点粗浅的看法,其实每个中间件在其设计上 ...

  6. 通过Kubernetes监控探索应用架构,发现预期外的流量

    大家好,我是阿里云云原生应用平台的炎寻,很高兴能和大家一起在 Kubernetes 监控系列公开课上进行交流.本次公开课期望能够给大家在 Kubernetes 容器化环境中快速发现和定位问题带来新的解 ...

  7. zabbix自动发现oracle表空间并监控其使用率

    监控需求 Oracle表空间使用率实时监控,当表空间使用率达到95%时触发告警机制.Oracle表空间分为系统默认表空间和用户创建的表空间,而表空间又有自动扩展和非自动扩展两种类型,用户(DBA)在创 ...

  8. zabbix自动发现监控磁盘(iops和读写量)

    2019独角兽企业重金招聘Python工程师标准>>> 对于磁盘有个iops的概念比较奇怪,想监控起来看下,利用zabbix的自动发现把每个磁盘的iops监控起来,思路:自动发现所有 ...

  9. zabbix详解之监控项自动发现(LLD)

    概述 自动发现(LLD)提供了一种为受监控节点的不同监控指标自动创建监控项,触发器和图形的分发.例如,Zabbix可以在你的机器上自动开始监控服务端口,而无需为每个服务端口手动创建监控项. 此外,可以 ...

最新文章

  1. mysql底层用什么写的_天天写order by,你知道Mysql底层如何执行吗?
  2. XHR(XMLHttpRequest)与Linux下的CGI交互
  3. 创建工程并测试RedisTemplate
  4. java radix sort_用于Radix Sort的Java程序
  5. Eclipse启动jboss局域网无法访问的问题
  6. java layoutinflater_使用LayoutInflater动态加载布局和操作控件
  7. svg写入/识别html元素和css样式
  8. 关于分布式系统的数据一致性问题(二)
  9. python标准库之random模块
  10. x4提示你的产品已经被禁用_win10系统注册表已被管理员禁用的解决方法
  11. 计算机网络技术表白,网络表白的经典句子
  12. python当中的列表函数和列表推导式
  13. 传输预编码matlab,基于MATLAB的MIMO系统预编码性能仿真.doc
  14. oracle apex global,Oracle Apex 实用笔记系列 1 - Oracle Apex 调试技巧
  15. micropython 常量_MicroPython添加Module(二)
  16. 四、TCP中的流量控制和拥塞控制
  17. 数字电子钟的设计与制作
  18. 浅谈IT企业挑选技术人员招聘几个要点
  19. Agrisera丨CRD1 | 植物 CHL27 环化酶的蓝藻同源物
  20. 群晖(Synology)NAS 后台安装 Docker 后配置 Mariadb / MySQL

热门文章

  1. 计算机系统遗传学,中国象棋计算机博弈系统评估函数自适应遗传算法[转]
  2. 最新2018.1.1深度学习平台搭建 Win10+GPU+Tensorflow+keras+CUDA --2018.1.1
  3. WebGL 是什么?
  4. 【Java毕设】基于SpringBoot实现新冠疫情统计系统(Idea+Navicat)
  5. 什么?Sigfox还没入华就要收摊了?
  6. Springboot项目整合xxl -job
  7. 分布式文件系统设计,该从哪些方面考虑?
  8. Jay Kreps: 为什么write有时候在Linux里面耗时很久
  9. LeetCode知识点总结 - 884
  10. 【转】《仙剑奇侠传6》将更换全新引擎