保护Java应用程序-如何嗅探JVM的变量

文摘   2024-08-03 07:30   云南  

      在这篇文章中,我们回顾如何嗅探JVM的变量可能的方法。这篇文章的主要目的是解释如何保护你的应用程序。计划是进行下一步的攻击。

从Dump中读取敏感数据。
通过在外部依赖中注入恶意软件来窃取源代码。

从Java Dump中窃取数据,  如果有人获得了对Java进程的访问权,他可能会读取敏感信息,如密码或数据库地址。让我们来看看下一个数据源的配置:

@Beanpublic DataSource dataSource(){   MysqlDataSource mysqlDataSource = new MysqlDataSource();   mysqlDataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");   mysqlDataSource.setUser("xxmySqlUser");   mysqlDataSource.setPassword("xxsecretPassword");   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)")


如何防止从Dump中读取数据?


为了防止这个攻击需要这么做:

在JVM启动时添加参数-XX:+DisableAttachMechanism。
在Linux中通过禁用trace syscall来禁用jcmd调用(如果你使用ubuntu)
对于非root用户,通过设置hidepid=1来禁止对进程的访问
在Java端对数据进行加密


Megadotnet
为您介绍各体系平台的新闻,系统研发相关框架,组件,方法,过程,运维,设计。企业IT与互联网信息系统或产品解决方案。开源项目,项目管理。
 最新文章