权限目标名称 |
允许的权限 |
允许此权限所带来的风险 |
createAccessControlContext |
创建 AccessControlContext |
这允许攻击者使用 DomainCombiner 实例化 AccessControlContext。由于为 DomainCombiner 提供了到当前堆栈上的 ProtectionDomains 的引用,所以如果 DomainCombiner 是恶意的,则这样可能会导致隐私泄漏。 |
getDomainCombiner |
检索 AccessControlContext 的 DomainCombiner |
这样将允许检索 AccessControlContext 的 DomainCombiner 。由于 DomainCombiners 可以包含敏感信息,所以这可能会潜在地导致隐私泄漏。 |
getPolicy |
检索系统级安全策略(具体来说,就是检索当前安装的 Policy 对象) |
这将允许通过 getPermissions 调用来查询策略,这样将泄漏授予指定 CodeSource 的权限。虽然暴露策略并不足以危及系统安全,但它确实为恶意代码提供了更多信息,恶意代码可能会使用这些信息更好地锁定攻击目标。明智之举就是不泄漏不必要的信息。 |
setPolicy |
设置系统级安全策略(具体来说,就是设置 Policy 对象) |
授予此权限相当危险,因为恶意代码会授予自身成功攻击系统所需的所有必要权限。 |
getProperty.{key} |
使用指定的密钥检索安全属性 |
根据已经授予其访问权的特定密钥,代码可以访问安全提供程序的列表,以及系统级位置和用户安全策略。虽然泄漏此信息并不足以危及系统安全性,但它确实为恶意代码提供了更多信息,恶意代码可能会使用这些信息更好地锁定攻击目标。 |
setProperty.{key} |
使用指定的密钥设置安全属性 |
这包括设置安全提供程序或定义系统级安全策略的位置。有权设置新的安全提供程序的恶意代码会设置一个恶意提供程序,以盗取诸如加密的私钥之类的保密信息。此外,有权设置系统级安全策略的恶意代码还会将此恶意提供程序指向安全策略,授予攻击者成功攻击系统所需的全部必要权限。 |
insertProvider.{provider name} |
使用指定的名称添加一个新的提供程序 |
这会使用户把可能的恶意提供程序(例如,泄漏传递给它的私钥的提供程序)当作最高优先级的提供程序引入。之所以出现这种情况,是因为 Security 对象(它管理已安装的提供程序)目前在接触该提供程序之前不检查其完整性和真实性。 |
removeProvider.{provider name} |
移除指定的提供程序 |
这可能会更改程序的行为或禁止执行程序的其他部分。如果程序以后请求提供程序时该提供程序已被移除,则可能导致执行失败。另外,如果程序的其他部分未明确请求已移除的提供程序,但是当请求加密服务时通常会选择这一提供程序(原因在于其在提供程序列表中的位置靠前),这时将另外选择提供程序,或者找不到合适的提供程序,因而会导致程序失败。 |
setSystemScope |
设置系统标识范围 |
这会允许攻击者使用不受信任的证书来配置系统标识范围,并因此授权使用这些证书签名的 applet 或应用程序代码享有被系统的原始标识范围所拒绝的特权 |
setIdentityPublicKey |
设置标识的公钥 |
如果标识被标记为 "trusted"(受信任),这将允许攻击者引入其他不受系统标识范围信任的公钥(例如,它自己的公钥),因此,将授权使用该公钥签名的 applet 或应用程序代码享有在其他情况下将遭受拒绝的特权。 |
setIdentityInfo |
设置标识的常规信息字符串 |
这将允许攻击者设置对标识的常规信息描述。这会欺骗应用程序使用其他标识而不是本打算使用的标识,或者会阻止应用程序查找特定的标识。 |
addIdentityCertificate |
添加标识证书 |
这允许攻击者为标识的公钥设置证书。这样将非常危险,因为这会影响整个系统的信任关系。与先前相比,此公钥的受信任范围突然变大。 |
removeIdentityCertificate |
移除标识证书 |
这允许攻击者移除标识的公钥证书。这样将非常危险,因为这会影响整个系统的信任关系。与先前相比,此公钥的受信任范围突然变得不如以前。 |
printIdentity |
查看主体名称和可选的使用范围,以及在该范围内是否认为它是“受信任”的 |
输出范围可以是文件名称,在这种情况下它可以传达本机系统信息。例如,此处是一个输出名为 "carol" 标识的示例,在用户的标识数据库中,它被标记为不受信任: carol[/home/luehe/identitydb.obj][not trusted] |
clearProviderProperties.{provider name} |
“清除”一个提供程序,以使其不再包含用来搜索由提供程序实现的服务的属性 |
这将禁用由该提供程序实现的服务搜索。因此,正如 "removeProvider.{provider name}" 权限中所描述的那样,这可能会更改正常利用该提供程序的程序的行为或禁止程序的其他部分的执行。 |
putProviderProperty.{provider name} |
设置指定提供程序的属性 |
每种提供程序属性都要指定由该提供程序实现的特定服务的名称和位置。通过授予此权限,可以让代码将服务规范替换为另外一种,并据此指定另外一种实现。 |
removeProviderProperty.{provider name} |
从指定的提供程序移除属性 |
这将禁用由该提供程序实现的服务搜索。由于移除了指定提供程序名称和位置的属性,所以无法再访问这些提供程序。正如 "removeProvider.{provider name}" 权限中所描述的那样,这可能会更改正常利用该提供程序的程序行为或禁止程序其他部分的执行。 |
getSignerPrivateKey |
检索 Signer 的私钥 |
允许访问私钥是非常危险的;一般认为密钥是用来保守秘密的。否则,代码会使用私钥签署各种文件并声称签名来自 Signer。 |
setSignerKeyPair |
设置 Signer 的密钥对(公钥和私钥) |
这将允许攻击者把其他人的(“目标的”)密钥对替换为可能更弱的密钥对(例如,更小密钥大小的密钥对)。这还会允许攻击者侦听目标与其同位体之间加密的通信。目标的同位体可以用目标的“新”公钥包装加密的会话密钥,这将允许攻击者(拥有对应私钥)打开该会话密钥并解密使用该会话密钥加密的通信数据。 |