「JavaSnoop – Java程序安全审计工具」

  CREATED BY JENKINSBOT

javasnoop是一个java应用程序安全测试工具,它允许你以拦截的方法,篡改数据和 hack运行在你计算机上的java应用程序。通常在没有源代码的情况下,测试java客户端的安全性最好的结果是不可预知的,最坏的结果是不切实际的。 在有源代码的情况下,你可以运行一个简单的java程序和远程附加一个调试器调试它,单步运行、根据需要改变变量,但对于一个applet来说要想做到这 一点是有点困难的。有时,你可能需要修改客户端和服务器之间的通信,一般的做法是在客户端配置一个代理,在代理上修改数据。问题的关键是,通信的数据通常 不是明文的,它可能使用了自定义的协议、序列化的对象、加密的数据或者多种方式混合应用。这样要想修改通信过程中的数据是比较困难的。JavaSnoop 这个工具就试图来解决这些问题,它允许你直接附加到一个运行中的进程,类似于调试器,然后,立即篡改方法调用、运行自定义代码或者仅仅监视在系统中发生了什么。

针对胖客户端的审计

对于瘦客户端,Burpsutie,Paros,WebInspect等工具可以拦截基于Web的应用的流量,也可以自动化对Web应用进行安全检测。

然而胖客户端也有这种需求,但是我们没有自动化的工具可以用来对胖客户端应用程序进行自动化的安全检测。

目前针对.EXE应用程序流量的拦截和编辑软件已经有很多了,在本篇文章当中将讨论一个可以用于评估JAVA应用程序安全性的工具 – JavaSnoop

目前想要对「JAVA胖客户端」进行安全测试的各种方法以及各自的优缺点

方法1:拦截编辑流量
应用程序需要使用HTTP进行通讯。
应用程序有配置代理的功能。
应用程序不使用加密、自定义协议或序列化对象。
如果满足上述的所有条件,我们可以使用Burpsuite等代理工具,来捕获并且修改通讯的流量进行安全检测。

方法2:修改和攻击客户端
可以识别的JAR文件;
反编译
审计源代码
可以修改源代码并且重新编译客户端已用来发送自定义的攻击
在反编译class文件时通常会发现反编译后的源代码有多个编译错误,这些错误通常由反编译器本身的错误导致,这表明反编译与重新编译的过程在实践当中并不能100%确定成功。这种方法的缺点是流程复杂、繁琐、因为一些编译错误而浪费大量的时间来调试修改代码。

使用上面的两种方法对JAVA胖客户端应用程序进行安全测试时且少灵活性,并且有一定条件限制,很有可能出现两种方法都无法完成的情况。

Aspect Security开发了一款名为JavaSnoop的工具来解决这些问题。

JavaSnoop简介

JavaSnoop用于对「Java胖客户端」进行安全审计。

JavaSnoop附加到现有进程(如调试器)来进行调试,可以篡改方法调用,运行自定义代码,或者在系统上观察发生的情况。

JavaSnoop提供的功能

允许在JVM中轻松拦截任何方法;
允许编辑返回值和参数;
允许将自定义的Java代码插入到任何方法中;
能够处理任何类型的Java应用程序(J2SE,Applet或JavaWeb应用);
能够处理已经运行的Java进程;
不需要任何目标的源代码(原始的源代码或者反编译过后的);

JavaSnoop的这些功能使得我们可以对任何基于Java的应用程序进行安全测试。

JavaSnoop的工作原理

Java 6.0+包含了Attach API功能,可以对正在运行的或者要运行的JVM进行无缝的监控和修改,Attach API不是Java的标准API,而是Sun公司提供的一套扩展API,用来向目标JVM”附着”(Attach)代理工具程序的。

JavaSnoop可以使用Attach APIInstrumentation类(有助于在运行时修改JVM)跳转到机器上的另一个JVM,并在该系统上的类方法中安装各种“钩子”。这些钩子然后被代理用于与GUI通信,允许JavaSnoop用户“拦截”JVM内的调用。

JavaSnoop使用的钩子技术可以执行以下操作:
1.编辑方法参数
2.编辑方法返回值
3.暂停方法
4.在方法开始时执行用户提供的脚本
5.在方法结束时执行用户提供的脚本
6.将参数打印到控制台(或文件)

参考文献

Homepage: https://code.google.com/archive/p/javasnoop/
JavaSnoop: How to hack anything in Java: https://media.blackhat.com/bh-us-10/whitepapers/Dabirsiaghi/BlackHat-USA-2010-Dabirsiaghi-JavaSnoop-wp.pdf
Hacking Java Applications using JavaSnoop: http://resources.infosecinstitute.com/hacking-java-applications-using-javasnoop/#gref
使用JavaSnoop测试Java应用程序: http://baijiahao.baidu.com/s?id=1569587769445793&wfr=spider&for=pc

TODO 完善JavaSnoop文章内容