VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • 保护Java应用程序不被窃取数据和源代码1保护Java应用程序不被窃取数据和源代码

保护Java应用程序不被窃取数据和源代码1    

      在这篇文章中,我们回顾了如何在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语言来查询它。

visualvm_screenshot_20

例如,为了获取所有以 "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中找到潜在的敏感数据:

ezgifcom-gif-maker-2

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


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

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



来源:
https://www.cnblogs.com/wintersun/p/15455623.html

相关教程