gpt4 book ai didi

java - 运行 AccessController.doPrivileged 的​​恶意代码

转载 作者:行者123 更新时间:2023-11-30 10:42:50 25 4
gpt4 key购买 nike

我是 Java 安全方面的新手;有一个基本问题。

我目前的理解是:

  • 每当您需要限制不受信任的代码可以执行的操作时,实现此目的的方法之一是使用自定义安全策略,并在 Subject.doAsPrivileged 中运行不受信任的代码。阻止。
  • 如果不受信任的代码需要调用一段确实需要一些提升权限(例如文件访问等)的代码,您可以通过使用 AccessController.doPrivileged 来完成此操作.

我的问题是:是什么阻止了恶意代码插入 AccessController.doPrivileged调用自己?

以我为例:

  • 我在沙盒环境中运行用户定义的 Groovy 脚本;我有一个非常严格的政策,拒绝 Groovy 可以做的大部分事情。
  • 但是,我允许这些脚本执行某些需要提升权限的操作(通过向 groovy 脚本发送一个对象并说“嘿,只要你需要什么,就在这个对象上调用这个方法”)。
  • 需要提升权限的代码正在通过 AccessController.doPrivileged 运行声明。

那么是什么阻止了 Groovy 脚本运行一段显示 AccessController.doPrivileged ( some_malicious_code ) 的代码? ?

最佳答案

你没弄对,使用 AccessController.doPrivileged 不会向 JVM 指示:

hey don't check what I'm doing you can trust me, I'm a nice guy!

它只是向JVM表明他不需要检查调用堆栈的其余部分是否具有足够的权限。

让 met 举个例子,假设我有一个类 A,它调用第三方库 Foo,它执行一些需要一些权限的代码。

默认情况下,当我调用 Foo 时不使用 AccessController.doPrivileged,JVM 将检查完整的调用堆栈是否具有足够的权限,因此在我的策略文件中我需要为我的类 A 和我的第三方库 Foo 提供所需的权限。

如果在我的类 A 中,我将对第三方库 Foo 的调用包装在 AccessController.doPrivileged 中,我不需要为第三方库 Foo 提供权限,只有 A 仍然需要它们。

So what stops the Groovy script from running a piece of code that says AccessController.doPrivileged ( some_malicious_code ) ?

如果你的 groovy 代码没有执行恶意代码所需的权限,即使使用 AccessController.doPrivileged 调用它也无法执行该代码的原因前面已经描述过。

关于java - 运行 AccessController.doPrivileged 的​​恶意代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37962070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com