Err*_*ric 15 java security debugging networking operating-system
我最近遇到了一个问题:在不使用调试参数启动JVM的情况下调试Java应用程序
在https://docs.oracle.com/javase/7/docs/technotes/guides/jpda/conninv.html上阅读有关JVM提供的各种连接器和传输的更多信息,我现在正尝试寻找以下问题的答案:
文件说,对于SADebugServerAttachingConnector和SAPIDAttachingConnector:
无需在调试模式下启动要调试的进程(即,使用-agentlib:jdwp或-Xrunjdwp)
所以:
1)为什么首先要提供类似的调试选项Xrunjdwp?
2)SADebugServerAttachingConnector如何工作而不在参数中输入端口号?
3)文档没有说明需要root特权。允许非特权用户对不在调试模式下启动的jvm实例进行任意调试,不是一个严重的特权升级漏洞吗?
我将重点关注案件SADebugServerAttachingConnector。
以下是您链接到的文档的Java 11 版本的更多引用:
SA 调试服务器连接器
调试器应用程序可以使用此连接器来调试除运行调试器的计算机之外的计算机上的进程或核心文件。
该连接器使用 RMI 与远程计算机上运行的“调试服务器”进行通信。在调用此连接器上的 Attach() 方法之前,必须在远程计算机上启动调试服务器并告知要调试哪个进程或核心文件。
要调试的进程不需要在调试模式下启动(即使用 -agentlib:jdwp 或 -Xrunjdwp)。
1)为什么像 Xrunjdwp 这样的调试选项首先存在?
SA 调试服务器方法允许您调试 Java 进程,您不想使用代理启动(例如出于安全原因),或者您没有远见这样做。
相反,代理方法适用于您不想设置 SA 调试服务器来调试 Java 应用程序的麻烦。
正如他们所说,这是“课程的马”。
2) SADebugServerAttachingConnector 如何在参数中不使用端口号的情况下工作?
您的调试器正在使用 RMI 默认端口与 SA 调试服务器通信。SA 调试服务器使用服务器和目标已知的机制连接到目标 JVM。它很可能是幕后操作系统特定的机制。例如,在 Linux 上它可以使用ptrace(2)API。不需要涉及网络套接字和端口。
3) 文档没有说明需要 root 权限。允许非特权用户任意调试未在调试模式下启动的 jvm 实例,这难道不是一个严重的提权漏洞吗?
文档指出您需要专门设置 SA 调试服务器和目标 VM 之间的链接。这是在启动 SA 调试服务器时完成的。
操作系统级访问控制不允许非根 SA 调试服务器使用(例如)ptrace系统调用来访问属于另一个用户/用户 ID 的 Java 进程。并且操作系统不会让您启动 root SA 调试服务器,除非您已经拥有 root 权限。因此,无论是 root 还是非 root 情况下,都不会出现特权升级。
(对任何未公开或未修补的操作系统级根升级错误进行模数......当然。)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |