目前,我参与了基于Java (更准确地说是WebLogic服务器)的系统开发,我想知道如何保护一些私有数据不受管理员的影响。例如,系统的某些部分将遗留系统的凭据以纯文本形式存储在部署描述符中,这是不好的,因为部署人员可以读取应用程序配置文件(例如,ejb-jar.xml),并盗取用户名和密码用于powerfull。我想关闭这个安全洞,但不知道怎么做。
现在我对保护这类数据感兴趣:
在这里中,我发现我可以使用JCEKS密钥库来保护这类信息,但是我不知道如何使用它。我的应用程序仍然应该包含kestore密码和访问它的密钥密码。因此,取证者可以盗取密钥库和密钥的密码,找到我的安全存储库,并窃取密码。显然,我可以从部署者帐户取消read特权,但是他可以解压缩我的应用程序并开发他自己的类似应用程序(或编辑我的应用程序),该应用程序只需将安全数据打印到某个文件或通过电子邮件发送.现在我被困在..。
有人能给我一些链接来解释如何保护一个系统不受管理员的攻击吗?与Weblogic相关的链接将更好。我完全理解不可能保护所有管理员,应该有一些security administrator负责密钥存储管理等等,但我想保护所有其他人的敏感数据。
结果
吉塔伯恩和斯利姆的答案都是正确的,但斯利姆的答案更有趣。我认为,在我的情况下,只接受在服务器上安装的签名应用程序是合适的。这个决定可以解决管理员所做的应用程序修改问题。管理员将拥有来自密钥存储库和所有密钥的密码,但他们将根本无法访问密钥存储库文件。对keystore文件的访问将只有特殊的安全管理员('rw')和服务器('r')。所以,每个人都有密钥,但是没有人(除了安全管理员)可以访问这个盒子。
发布于 2012-08-30 16:18:07
我认为这个问题的实质是在“管理”的定义中。
您已经说过,您对一个“安全管理员”很满意,他确实可以访问关键商店。
传统上,UNIX类型将"admin“视为"root”用户--可以访问机器上的所有内容的用户。根可以做任何事情,直接到窥视和戳应用程序内存,或者读/写原始磁盘地址。如果服务器可以获得私钥,那么根目录也是如此。
如果您想要定义一个具有更有限访问权限的"admin“角色,那么是的,您可以在这样的用户存在的地方设置一些内容。他们需要拥有比服务器应用程序本身更少的特权,因为应用程序至少可以做一件事情(获取私钥),而"admin“却无法做到这一点。
这样的用户可能也无法安装应用程序(因为,如果可以,他们可以创建并安装一个公开私钥的应用程序版本)。因此,您的"admin“无法部署与私钥一起工作的组件。但是,它们可能会部署一个在该容器中运行的模块(只要容器不能向该模块提供私钥)。
然而,这不仅仅是你想要保护的钥匙。真正的“秘密”是使用密钥加密的数据。所以我们对上面的方法仍然有一个问题。如果模块可以读取加密的数据,那么具有与模块相同权限的"admin“也可以读取。这包括任何可以安装模块的人。
您可以研究如何对模块进行签名,这样"admin“就不能创建自己的版本。
然而,有一点是这样的:启用不值得信任的管理员所需的措施比单纯使用值得信任的管理员花费更多(时间和精力)。
所以,你需要列出你所谓的“管理”可以做的事情。根据这些事情是什么,很有可能允许非根用户执行这些事情。在UNIX上,您可以使用像sudo这样的工具来允许非根用户执行诸如启动/停止服务器、读取日志、清除日志等操作。
发布于 2012-08-30 16:02:20
除非您在应用程序启动时输入登录凭据(假设管理员无法访问应用程序内存,这可能不是一个安全的假设),否则无法解决此问题。任何涉及与应用程序相同位置的密钥的解决方案都将导致管理员(应用程序文件系统访问权限)能够访问应用程序访问的任何敏感数据。这类似于DRM问题(您不能给一个人一个锁定的盒子和钥匙,并期望他们不能打开这个盒子)。
发布于 2012-08-30 16:34:04
可以将身份验证与应用程序的其他部分分离开来。
例如,如果通过TLS安全套接字与遗留系统进行通信,则可以编写一个小的单独应用程序,该应用程序接受来自应用程序的未加密连接,然后与遗留系统建立安全、经过身份验证的连接,并在应用程序和遗留系统之间提供数据。本质上,它是一个身份验证代理。那么,应用程序就不需要这些密钥了。您可以将应用程序安装和操作为没有权限读取包含密钥的文件的用户,但应用程序仍然可以与遗留系统通信。
当然,现在您有了如何对应用程序进行代理身份验证的问题。您可能会觉得机器足够安全,您根本不需要这样做-只要代理只在环回接口上侦听。如果不是,如果可以使用unix域套接字,那么可以使用文件系统权限来控制访问:您可以以某个特定组中的某个用户的身份运行应用程序,然后将对套接字的访问限制为该组的成员。Java在标准库中不支持unix域套接字,但是可以使用junixsocket或JUDS添加它。
https://stackoverflow.com/questions/12200619
复制相似问题