当前位置: 首页 > news >正文

agentmain对业务的影响

前面一篇已经说了java agent技术主要有premain和agentmain两种形式,如果大部分业务已经在线上运行的话,不方便用premain的方式来实现,所以agentmain的方式是更加通用、灵活的

由于RASP是与用户业务运行在同一个jvm中的 ,所以RASP会严重影响用户业务的执行情况,如果RASP崩溃的话那么业务程序也会收到严重毁灭性的影响。对业务上的影响主要包含cpu占用和耗时方面的影响

这种影响可以分为两个阶段:

RASP 启动时的问题:

字节码修改:当 RASP 启动时,它需要加载并初始化各种检测逻辑,这些逻辑将被应用到所有进入系统的请求上。

预热问题:当 RASP 刚刚启动时,由于检测逻辑尚未完全“预热”(即 JVM 的即时编译器(JIT)还未对新插入的代码进行优化),因此这些检测逻辑仍然以解释模式运行。解释模式下的性能远低于经过 JIT 编译后的本地机器指令执行效率,这就导致了启动初期的响应时间较长,TP 线变高。

RASP 运行过程中的问题:

检测引擎执行耗时长:如果检测引擎本身的设计不合理或者存在性能瓶颈(例如复杂的规则匹配、大量的数据处理等),也可能导致每次请求都需要花费较长时间来进行安全检查。

具体的运行过程:

以这个图为例,可以看到这个过程涉及到的组件大概有:

  1. 宿主机:这是运行整个系统的物理或虚拟环境。
  2. JVM:Java 虚拟机,负责执行 Java 应用程序。
  3. RASP Agent:RASP 代理,是一个 Java Agent,用于在运行时插入安全检测逻辑。
  4. RASP Daemon:RASP 守护进程,一个独立于 JVM 的进程,负责管理和控制 RASP Agent。

过程如下:

1. RASP Daemon 发起 Attach 请求
  • 守护进程启动:RASP Daemon 是一个独立的进程,它会主动发起与目标 JVM 的连接请求。
  • Attach 操作:通过调用 attach 方法,RASP Daemon 可以将自己附着到目标 JVM 上。这一步是通过 Java 提供的工具接口(attach API)实现的,允许外部进程与正在运行的 JVM 进行交互。
2. 加载 RASP Agent
  • Agent Jar 包加载:一旦 RASP Daemon 成功 attach 到目标 JVM,它会将 RASP Agent 的 jar 包传递给 JVM。
  • 类加载器加载:JVM 使用类加载器AppClassLoader来加载这个 RASP Agent 的 jar 包。这意味着 RASP Agent 将作为应用程序的一部分被加载和执行。(这是因为 Agent jar 包需要访问一些底层的功能和接口,而这些功能和接口是普通应用程序类无法访问的)
3. 初始化并运行 RASP Agent
  • 初始化:当 RASP Agent 被加载后,它会开始初始化过程。这包括设置内部状态、注册监听器、配置安全规则等。
  • 运行:初始化完成后,RASP Agent 开始监控和保护应用程序。它会在关键位置插入安全检测逻辑,如检查 SQL 注入、XSS 攻击等,并实时响应潜在的安全威胁。
4. 日志/命令通信
  • Socket 通信:RASP Agent 和 RASP Daemon 之间通过 socket 进行通信。这种通信机制允许它们交换日志信息、命令和其他数据。
  • 日志记录:RASP Agent 会将检测到的安全事件、异常情况等记录下来,并通过 socket 发送给 RASP Daemon。
  • 命令处理:RASP Daemon 可以发送命令给 RASP Agent,例如更新安全规则、调整监控策略等。

升级变更难:

由于agent的入口类是jvm中的AppClassLoader加载的,所以即使attach了新的agent,由于类的加载机制也不能加载新的类,所以无法进行agent的变更和升级

学习资料:美团RASP大规模研发部署实践总结 - 美团技术团队

相关文章:

  • 解构认知边界:论万能方法的本体论批判与方法论重构——基于跨学科视阈的哲学-科学辩证
  • 小白成长之路-vim编辑
  • 解锁Python TDD:从理论到实战的高效编程之道(9/10)
  • curl发送数据不为null,但是后端接收到为null
  • 界面组件DevExpress WPF中文教程:Grid - 如何自定义Band Header外观?
  • 里氏替换原则:Java 面向对象设计的基石法则
  • 鸿蒙 Core File Kit(文件基础服务)之简单使用文件
  • 【Bug】多文件上传只有最后一个loading会关闭
  • Ubuntu 上安装 FTP 服务、开放指定端口并创建用户
  • vue3学习——组合式 API:生命周期钩子
  • 电机控制储备知识学习(一) 电机驱动的本质分析以及与磁相关的使用场景
  • FFmpeg在Android开发中的核心价值是什么?
  • 串口模块详细讲解
  • Python-简单网络编程 I
  • 论文精读:YOLO-UniOW: Efficient Universal Open-World Object Detection
  • MES管理系统构建智能制造时代下的全面质量管理体系
  • Spring事务失效的全面剖析
  • windows c++ (9) 程序内注册服务并修改登录账户
  • web 自动化之 yaml 数据/日志/截图
  • 关于github使用总结
  • 检疫期缩减至30天!香港优化内地进口猫狗检疫安排
  • 英国收紧移民政策,技术工作签证、大学招生面临更严要求
  • 习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式并发表重要讲话
  • 济南市委副秘书长吕英伟已任历下区领导
  • 韩国大选连发“五月惊奇”:在野党刚“摆脱”官司,执政党又生“内讧”
  • 德国将不再公布对乌克兰军事支持的细节