在这篇文章中,我们回顾了如何在JVM中注入恶意软件代码/嗅探JVM的流量/等可能的方法。这篇文章的主要目的是解释如何保护你的应用程序。计划是进行下一步的攻击。
从Dump中读取敏感数据。
通过在外部依赖中注入恶意软件来窃取源代码。
从Java Dump中窃取数据, 如果有人获得了对Java进程的访问权,他可能会读取敏感信息,如密码或数据库地址。让我们来看看下一个数据源的配置:
@Bean
public DataSource dataSource(){
MysqlDataSource mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
mysqlDataSource.setUser("mySqlUser");
mysqlDataSource.setPassword("secretPassword");
return mysqlDataSource;
}
现在,如果黑客攻击我们的服务器并获得了对JVM进程的访问权,那么他可以通过使用jcmd程序来Dump JVM的内存。比如:
jcmd 20932 GC.heap_dump d:\dump\JVM_DUMP.bin
当他得到JVM的Dump时,他可以用VisualVM剖析器用QOL语言来查询它。
例如,为了获取所有以 "JDBC "开头的字符串,他可以进行下一步查询:
select s from java.lang.String s where s.toString().startsWith("jdbc")
或者作为一种选择,他可以获取MysqlDataSource对象
select filter(heap.classes(), "/com.mysql.cj.jdbc.MysqlDataSource/.test(it.name)")
在下一个图片中,我将展示我们如何进行转储并从DataSource中找到潜在的敏感数据:
为了防止这个攻击需要这么做:
在JVM启动时添加参数-XX:+DisableAttachMechanism。
在Linux中通过禁用trace syscall来禁用jcmd调用(如果你使用ubuntu)
对于非root用户,通过设置hidepid=1来禁止对进程的访问
在Java端对数据进行加密
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。