Java agent资料收集

本文最后更新于2018年1月4日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=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资料收集》上有21条评论

  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 文件中。

  4. 【基本功】Java动态追踪技术探究
    https://mp.weixin.qq.com/s/_hSaI5yMvPTWxvFgl-UItA

    【基本功】专栏又更新啦:想不重启JVM,偷天换日,替换掉已经加载的类?想不重启JVM,获知运行时对象的属性?本文将带你了解Java动态追踪技术的来龙去脉,还有依此衍生出的Java诊断神器……

    BTrace是基于Java语言的一个安全的、可提供动态追踪服务的工具。BTrace基于ASM、Java Attach API、Instrument开发,为用户提供了很多注解。依靠这些注解,我们可以编写BTrace脚本(简单的Java代码)达到我们想要的效果,而不必深陷于ASM对字节码的操作中不可自拔。

    Java的Instrument给运行时的动态追踪留下了希望,Attach API则给运行时动态追踪提供了“出入口”,ASM则大大方便了“人类”操作Java字节码的操作。

    基于Instrument和Attach API前辈们创造出了诸如JProfiler、Jvisualvm、BTrace这样的工具。以ASM为基础发展出了cglib、动态代理,继而是应用广泛的Spring AOP。

    Java是静态语言,运行时不允许改变数据结构。然而,Java 5引入Instrument,Java 6引入Attach API之后,事情开始变得不一样了。虽然存在诸多限制,然而,在前辈们的努力下,仅仅是利用预留的近似于“只读”的这一点点狭小的空间,仍然创造出了各种大放异彩的技术,极大地提高了软件开发人员定位问题的效率。

  5. 浅谈 RASP 技术攻防之基础篇
    https://www.03sec.com/3237.shtml

    引言
    一 、什么是 RASP?
    二、RASP vs WAF
    三、国外的 RASP
    四、国内 RASP 技术实现进度以及状态
    五、各种语言 RASP 技术实现方式
    1、JAVA
    2、PHP
    3、.NET
    4、other
    六、举个例子
    1. 如何在 Java 中实现 RASP 技术
    2. 如何在 PHP 中实现 RASP 技术
    七、RASP 技术的其他方面应用场景
    代码审计
    0day 防御
    攻击溯源
    DevOps
    其他方面
    八、RASP 技术有什么缺陷
    九、总结
    十、参考

  6. 一文洞悉DAST、SAST、IAST ——Web应用安全测试技术对比浅谈
    https://mp.weixin.qq.com/s/EWn9ktce3KB4P6zi4slnTA

    一、全球面临软件安全危机
    二、什么是Web应用安全测试技术?
    Web应用安全测试技术经过多年的发展,目前业界常用的技术主要分为3大类别。

    DAST:动态应用程序安全测试(Dynamic Application Security Testing)技术在测试或运行阶段分析应用程序的动态运行状态。它模拟黑客行为对应用程序进行动态攻击,分析应用程序的反应,从而确定该Web应用是否易受攻击。

    SAST:静态应用程序安全测试(Static Application Security Testing)技术通常在编码阶段分析应用程序的源代码或二进制文件的语法、结构、过程、接口等来发现程序代码存在的安全漏洞。

    IAST:交互式应用程序安全测试(Interactive Application Security Testing)是2012年Gartner公司提出的一种新的应用程序安全测试方案,通过代理、VPN或者在服务端部署Agent程序,收集、监控Web应用程序运行时函数执行、数据传输,并与扫描器端进行实时交互,高效、准确的识别安全缺陷及漏洞,同时可准确确定漏洞所在的代码文件、行数、函数及参数。IAST相当于是DAST和SAST结合的一种互相关联运行时安全检测技术。

    七、实际应用
    软件开发阶段,与程序员对话的源码安全审计主要基于SAST技术打造, SAST工具对用户的困扰主要来自于误报,通过数据流调用分析、变量关联分析、机器学习等多重手段极大地降低了误报率,减少工具对安全测试工作的困扰,改善用户体验,降低工具的使用成本。

    软件测试阶段,基于IAST技术打造,支持代理、VPN、流量信使、流量镜像、爬虫、导入日志、Passive插桩共7种流量收集模式,真正结合了DAST、SAST、IAST三种技术的优势;漏洞检测率极高,包括水平越权、垂直越权等标准IAST技术无法检测的逻辑漏洞,误报率几乎为0;漏洞详情直接定位请求、数据流、代码片段,修复漏洞更容易;采用Passive 插桩技术,无需重放请求,不会形成脏数据,可覆盖加密、防重放、签名等任意场景;近实时检测漏洞,漏洞检测随着应用程序运行实时进行。

    应用上线运营阶段,采用DAST技术打造资产风险监控系统,在大量企业客户中被用来对线上业务环境进行监控。从攻击者视角对企业进行资产探测,全面发现企业的资产暴露面和应用程序的漏洞,保障线上运营环境的安全;并且,部署模式紧跟业务的使用模式,支持在互联网环境、企业IDC、私有云、公有云、混合云等多种场景下部署使用。

发表评论

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