Java agent资料收集

=Start=

缘由:

最近在网上看到很多关于RASP相关的文章,想了解一下其背后的原理,所以收集整理一下看到的资料,方便以后参考。

正文:

参考解答:

JVM源码分析之javaagent原理完全解读
http://www.infoq.com/cn/articles/javaagent-illustrated
http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html
http://lovestblog.cn/blog/2014/06/18/jvm-attach/

Instrumentation 新功能
https://www.ibm.com/developerworks/cn/java/j-lo-jse61/index.html

java.lang.Instrument 代理Agent使用
http://www.importnew.com/22466.html
https://my.oschina.net/xianggao/blog/362495

javaagent
https://liuzhengyang.github.io/2017/03/15/javaagent/
https://github.com/liuzhengyang/javaagent-example

java.lang.instrument笔记
http://jiangbo.me/blog/2012/02/21/java-lang-instrument/

Java类动态加载(二)——动态加载class文件
http://zheng12tian.iteye.com/blog/1495037
http://zheng12tian.iteye.com/category/263312

https://stackoverflow.com/questions/27851588/what-is-premain-and-how-does-it-get-called
https://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html
https://docs.oracle.com/javase/7/docs/api/java/lang/instrument/package-summary.html
https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html

premain和agentmain的优劣比较
https://stackoverflow.com/questions/19786078/what-is-the-use-of-agentmain-method-in-java-instrumentation
https://stackoverflow.com/questions/1277219/starting-a-java-agent-after-program-start
https://github.com/zakgrant/ASM-Examples/blob/master/src/main/java/name/zak/javaagent/JavaAgent.java

JavaSe:-javaagent,-agentlib,-agentpath
http://www.cnblogs.com/f1194361820/p/5059367.html

Java – Instrumentation
http://www.cnblogs.com/kavlez/p/4074660.html

AgentMain与VirtualMachine
http://blog.sina.com.cn/s/blog_605f5b4f01010i3b.html

JVM Attach API Introducation And Practice
https://afoo.me/posts/2010-11-25-jvm_attach_api_introduction_and_practice.html

http://itmyhome.com/java-api/java/lang/instrument/package-summary.html

Java agent笔记
http://www.yangguo.info/2015/07/18/JavaAgent%E7%9A%84%E4%B8%80%E7%82%B9%E6%80%9D%E8%B7%AF/

Java Attach API
http://arganzheng.life/java-attach-api.html

云智慧透视宝Java代码性能监控实现原理
http://server.51cto.com/sManage-493660.htm

参考链接:

如上

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3737.html

《Java agent资料收集》上有12条评论

  1. Java agent笔记
    https://www.yangguo.info/2015/07/18/JavaAgent%E7%9A%84%E4%B8%80%E7%82%B9%E6%80%9D%E8%B7%AF/

    1、The Serviceability Agent(SA). Sun私有的一个组件,它可以帮助开发者调试Hotspot。
    2、jvmstat performance counters. HotSpot通过Sun私有的共享内存机制实现的性能计数器,它是公开给外部给外部进程的。它们也称为perfdata。
    3、The Java Virtual Machine Tool Interface (JVM TI). 它是一套标准的C接口,是 JSR 163 - JavaTM Platform Profiling Architecture 参考实现。JVMTI提供了可用于 debug和profiler的接口;同时,在Java 5/6 中,虚拟机接口也增加了监听(Monitoring),线程分析(Thread analysis)以及覆盖率分析(Coverage Analysis)等功能。JVMTI并不一定在所有的Java虚拟机上都有实现,不同的虚拟机的实现也不尽相同。不过在一些主流的虚拟机中,比如 Sun 和 IBM,以及一些开源的如 Apache Harmony DRLVM 中,都提供了标准 JVMTI 实现。
    4、The Monitoring and Management interface. Sun的私有实现,它能够实现对HotSpot的监控和管理。
    5、Dynamic Attach. Sun的私有机制,它允许外部进程在HotSpot中启动一个agent线程,该agent可以将该HotSPot的信息发送给外部进程。
    6、DTrace. 全称Dynamic Tracing,也称为动态跟踪,是由Sun™开发的一个用来在生产和试验性生产系统上找出系统瓶颈的工具,可以对内核(kernel)和用户应用程序(user application)进行动态跟踪并且对系统运行不构成任何危险的技术。在任何情况下它都不是一个调试工具,而是一个实时系统分析寻找出性能及其他问题的工具。DTrace是个特别好的分析工具,带有大量的帮助诊断系统问题的特性。还可以使用预先写好的脚本利用它的功能。用户也可以通过使用 DTrace D语言创建他们自己定制的分析工具,以满足特定的需求。除Solaris系列以外,Dtrace已先后被移植到FreeBSD、NetBSD及Max OS X等操作系统上。
    7、pstack support. pstack是从Solaris发源的实用程序,可以查看core dump文件,调试进程,查看线程运行情况等等。现在,pstack工具也移植到了Linux系统中,比如Red Hat Linux系统、Ubuntu Linux系统等等。HotSpot允许pstack显示Java堆栈帧。

  2. 利用Java反射和类加载机制绕过JSP后门检测
    https://xz.aliyun.com/t/2342

    0x00:前言
    0x01:Java执行系统命令的方法和原理
    0x02:JSP标签
    0x03:用ProcessBuilder绕过检测
    0x04:使用Java反射机制绕过检测
    一. 反射Runtime
    二. 反射ProcessBuilder
    三. 关于反射ProcessImpl

    0x05:使用Java类加载机制绕过检测
    Class对象
    Java自带的三个类加载器

    0x06:获得Class对象的四种方法
    0x07:后记
    参考链接

  3. 入门科普,围绕JVM的各种外挂技术
    https://mp.weixin.qq.com/s/cwU2rLOuwock048rKBz3ew
    http://calvin1978.blogcn.com/articles/vjtools-tools4.html

    jstat, jmap, btrace, jprofiler, vjtools都基于什么实现? 对围绕JVM的各种工具的外挂技术,运用大整理术,让大家从茫然,到轻摇纸扇,知道分子。

    归拢一下,就是C 和 Java两种Agent,SA 和 VirtualMachine 两种 Attach,JMX和PerfData两种Data。

    1. 两种Agent
    1.1 Native Agent
    以 C/C++代码编写的Agent,用强大的JVMTI(JVM Tool Interface)接口与JVM进行通讯,订阅感兴趣的JVM事件(比如方法出入、线程始末等等),当这些事件发生时,会回调Agent的代码。 JVMTI 同时提供了众多的功能函数,查询和控制 Java 应用的运行状态,包括内存控制和对象获取,线程与锁等等,简直无所不能。

    1.2 Java Agent
    Java Agent的底层也是JVMTI ,但后门能力就只剩一个AOP 代码植入了:在加载class文件之前做拦截并对字节码做修改。比如AspectJ,单元测试覆盖率的Jacoco,动态重载Class的Spring-Loaded。

    2.两种Attach
    两种截然不同方式实现的Attach,本质上都是在跟踪程序与目标JVM之间建立一个沟通的管道,然后在跟踪程序使用特定的API去操作目标JVM。

    2.1 Vitural Machine.attach()
    跟踪程序通过Unix Domain Socket 与目标JVM的Attach Listener线程进行交互。 Socket 文件为/tmp/.java_pid$PID。

    2.2 SA.attach()
    著名的SA(Serviceability Agent),用于分析JVM运行时进程的Snapshot数据。Snapshot的意思,就是当SA 开始分析时,整个目标JVM是停顿下来不工作的,让SA可以从容读取进程内存中的数据,直到断开后才会恢复。所以在生产上使用这类工具时,必须先摘除流量。
    这个神奇的操作,主要是通过系统调用ptrace实现。ptrace会使内核暂停目标进程并将控制权交给跟踪进程,使跟踪进程得以察看目标进程的内存,详见ptrace的man,所以在容器环境下,需要打开ptrace的安全权限。

    3. 两种Data
    3.1 JMX
    文章已太多,不再啰嗦。其中vjtools的vjtop,如何不停顿JVM的获得线程的CPU、内存信息,获得某条繁忙进程的StackTrace看看它在忙些什么,值得一看。

    3.2 PerfData
    很多人不知道的一个机制,JVM其实每秒都会将自己的大量统计数据,写入到 /tmp/hsperfdata_$username/$pid 文件中。

发表评论

电子邮件地址不会被公开。 必填项已用*标注